Index: usb_pc_ai_voice/a.bat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/a.bat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/a.bat	(working copy)
@@ -0,0 +1,11 @@
+set baud=a0
+e pu
+e 8043 00
+
+::e hu output/romcode.rom 2000
+::e ku
+e pu
+e hu output/ramcode.rom 0
+ping -n 2 127.1 >nul
+e su output/sched.rom
+e cu
\ No newline at end of file
Index: usb_pc_ai_voice/do.bat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/do.bat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/do.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
+@set device_option=dongle
+@rem set device_option=module
+@rem set device_option=keyboard
+@rem set device_option=car
+@rem set device_option=remote_car
+@rem set device_option=mesh
+@rem set device_option=otp
+@rem set device_option=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 "dongle" (
+cd ..\output
+copy eeprom.dat ..\util\eeprom.dat
+cd ..\util
+eeprom2fulleeprom.exe eeprom.dat 64>compare2.dat
+crc16.exe compare2.dat 2 >..\output\eeprom.dat
+del eeprom.dat
+del compare2.dat
+cd ..\output
+copy eeprom.dat ..\output\flash.dat 
+)
+
+cd ..
+call set_chip_type_flag.bat 
+
+:end
+
+
+
Index: usb_pc_ai_voice/eotp.bat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/eotp.bat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/eotp.bat	(working copy)
@@ -0,0 +1,7 @@
+call do.bat eep
+set baud=a0
+e pu
+e 8043 00
+e otp output/otp.dat 0
+e otr 0 20
+e ku
\ No newline at end of file
Index: usb_pc_ai_voice/ep.bat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/ep.bat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/ep.bat	(working copy)
@@ -0,0 +1,11 @@
+call do.bat eep
+e pu
+e pu
+e 8043 00
+e 8071 6c6d3e
+e er 0 10
+e ew 0 0000
+e er 0 10
+e ep
+e ku
+e au
Index: usb_pc_ai_voice/format/app.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app.format	(working copy)
@@ -0,0 +1,371 @@
+
+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
+6 mem_bistfix_val
+
+/*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_3v_adc_io_data
+2 mem_2v_adc_hvin_data
+2 mem_1v_adc_io_data
+2 mem_3v_adc_hvin_data
+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
+
+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
+0 mem_adc_cal_c7
+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
+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
+	8 mem_otp_temp0
+	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
+
+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*/
+(
+4 DVC_OP_DONGLE
+5 DVC_OP_TEST
+6 DVC_OP_SHUTTER_DY   
+8 DVC_OP_MOUSE
+9 DVC_OP_SHUTTER
+0X0A DVC_OP_MODULE
+0X0B DVC_OP_MESH
+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
+0x9272 USB_KBDATA_VENDOR_DEFINE_ADDR
+0x928d USB_KBDATA_ADDR
+0x92cd USB_MSDATA_ADDR
+0x9371 USB_DEVICEDATA_ADDR
+0x9384 USB_CONFDATA_ADDR
+0x93c0 BLE_SHUTTER_GATT_LIST_ADDR
+0x94f9 BLE_SHUTTER_KEY_VALUE_LIST_ADDR
+0x9521 BLE_CAR_ATT_LIST_ADDR
+0x95ed BLE_MESH_SHA256_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
+)
+
+(
+0 ADC_CH_VBAT
+1 ADC_CH_VDCDC5V
+6 ADC_CH_GPIO_4
+7 ADC_CH_GPIO_2
+8 ADC_CH_GPIO_1
+9 ADC_CH_GPIO_3
+10 ADC_CH_GPIO_0
+11 ADC_CH_GPIO_5
+12 ADC_CH_GPIO_6
+13 ADC_CH_GPIO_7
+)
+
+//adc channel fixed
+(
+0x06 ADC_CH_GPIO18
+0x07 ADC_CH_GPIO10
+0x08 ADC_CH_GPIO9
+0x09 ADC_CH_GPIO12
+0x0a ADC_CH_GPIO6
+0x0b ADC_CH_GPIO20
+0x0c ADC_CH_GPIO21
+0x0d ADC_CH_GPIO22
+0x0e ADC_CH_GPIO13
+)
+
Index: usb_pc_ai_voice/format/app_adpcm.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_adpcm.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_adpcm.format	(working copy)
@@ -0,0 +1,22 @@
+
+xmemalloc g24_rx_car_adpcm(
+	16 mem_ad_indexTable
+	356 mem_ad_stepsizeTable
+
+	4 mem_ad_state_valpred
+	4 mem_ad_state_index
+	1 mem_ad_in_numSamples
+	2 mem_ad_in_ptr
+	2 mem_ad_out_ptr
+	1 mem_ad_sign
+	1 mem_ad_delta
+	4 mem_ad_step
+	4 mem_ad_valpred
+	4 mem_ad_index
+	4 mem_ad_vpdiff
+	4 mem_ad_inputbuffer
+	1 mem_ad_bufferstep
+)
+
+
+
Index: usb_pc_ai_voice/format/app_car.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_car.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_car.format	(working copy)
@@ -0,0 +1,335 @@
+
+
+xmemalloc g24_rx_car(
+1 mem_car_hard_soft_switch
+1 mem_car_queue_each_size
+1 mem_car__queue_length
+
+1 mem_car_queue_curr_num
+1 mem_car_queue_read_ptr
+1 mem_car_queue_write_ptr
+120 mem_car_queue_ele
+
+20 mem_car_pop_queue_buff
+
+1 mem_car_led_num
+10 mem_car_led_map
+
+1 mem_car_style1_led_type
+1 mem_car_style1_blink_count
+1 mem_car_style1_struct_led_gpio
+2 mem_car_style1_on_time
+2 mem_car_style1_off_time
+2 mem_car_style1_cb_ledon
+2 mem_car_style1_cb_ledoff
+
+1 mem_car_style2_led_type
+1 mem_car_style2_blink_count
+1 mem_car_style2_struct_led_gpio
+2 mem_car_style2_on_time
+2 mem_car_style2_off_time
+2 mem_car_style2_cb_ledon
+2 mem_car_style2_cb_ledoff
+
+//////motor
+0 mem_le_receive_data
+2 mem_le_receive_packet_head
+1 mem_le_receive_cmd
+2 mem_le_receive_length
+10 mem_le_receive_payload
+1 mem_le_receive_checksum
+1 mem_motor1_status
+1 mem_motor1_speed
+1 mem_motor2_status
+1 mem_motor2_speed
+1 mem_motor3_status
+1 mem_motor3_speed
+
+0 mem_motor1_pwm_set
+1 mem_motor1_pwm_pin1_set
+1 mem_motor1_pwm_pin2_set
+1 mem_motor1_pwm_pin_set
+1 mem_motor1_pwm_channel_set
+3 mem_motor1_pwm_freq_set
+1 mem_motor1_pwm_dute_set
+0 mem_motor2_pwm_set
+1 mem_motor2_pwm_pin1_set
+1 mem_motor2_pwm_pin2_set
+1 mem_motor2_pwm_pin_set
+1 mem_motor2_pwm_channel_set
+3 mem_motor2_pwm_freq_set
+1 mem_motor2_pwm_dute_set
+0 mem_motor3_pwm_set
+1 mem_motor3_pwm_pin1_set
+1 mem_motor3_pwm_pin2_set
+1 mem_motor3_pwm_pin_set
+1 mem_motor3_pwm_channel_set
+3 mem_motor3_pwm_freq_set
+1 mem_motor3_pwm_dute_set
+
+1 mem_motor_select_p_n
+1 mem_car_motor_status
+1 mem_car_motor_speed
+0 mem_motor_pwm_set
+1 mem_motor_pwm_pin1_set
+1 mem_motor_pwm_pin2_set
+1 mem_motor_pwm_pin_set
+1 mem_motor_pwm_channel_set
+3 mem_motor_pwm_freq_set
+1 mem_motor_pwm_dute_set
+
+1 mem_ir_rx_gpio
+2 mem_ir_data
+2 mem_ir_rx_buf
+4 mem_ir_receive_clkn
+
+3 mem_ir_notify_data
+5 mem_ir_notify_data_head
+2 mem_ir_notify_data_payload
+1 mem_ir_notify_data_check_sum
+1 mem_car_ir_breakdown_check_timer
+1 mem_car_ir_breakdown_flag
+
+0 mem_car_led_control
+1 mem_car_led1_status
+1 mem_car_led2_status
+1 mem_car_led3_status
+1 mem_car_led4_status
+1 mem_car_led5_status
+1 mem_car_led6_status
+1 mem_car_led7_status
+1 mem_car_led8_status
+1 mem_car_led_control_timer
+1 mem_car_led_blink_status
+1 mem_car_led_no
+
+3 mem_car_info_request
+5 mem_car_info_request_head
+8 mem_car_info_request_payload
+1 mem_car_info_request_checksum
+
+0 mem_car_config_param
+1 mem_car_config_setting_flag
+1 mem_car_config_device_select
+1 mem_car_config_motor_layout
+1 mem_car_config_ir_enable
+1 mem_car_config_ir_rx_gpio
+1 mem_car_config_pairing_led_conn_status
+1 mem_car_config_pairing_led_gpio
+1 mem_car_config_led_num
+0 mem_car_config_blood_led_gpio
+1 mem_car_config_blood_led1_gpio
+1 mem_car_config_blood_led2_gpio
+1 mem_car_config_blood_led3_gpio
+1 mem_car_config_blood_led4_gpio
+1 mem_car_config_blood_led5_gpio
+1 mem_car_config_blood_led6_gpio
+1 mem_car_config_blood_led7_gpio
+1 mem_car_config_blood_led8_gpio
+1 mem_car_config_bat_notify_enable
+1 mem_car_config_low_voltage_led_gpio
+1 mem_car_config_low_voltage_percent
+1 mem_car_config_soft_switch_enable
+1 mem_car_config_soft_switch_gpio
+
+1 mem_car_notify_vdd_count
+1 mem_car_notify_vdd_timer
+1 mem_car_notify_vdd_value_last
+1 mem_car_notify_vdd_percent
+1 mem_car_working_flag
+1 mem_low_bat_flag
+
+3 mem_notify_bat_packet
+5 mem_notify_bat_head
+1 mem_notify_bat_payload
+1 mem_notify_bat_check_sum
+
+1 mem_vdd_notify_flag
+2 mem_car_current_vdd_value_temp
+2 mem_car_last_vdd_value
+
+0 mem_vdd_calculate_set
+2 mem_vdd_full_vol
+2 mem_vdd_empty_vol
+2 mem_vdd_low_vol
+2 mem_vdd_now_vol
+
+
+1 mem_car_24g_status
+2 mem_car_24g_no_data_timeout_count
+2 mem_car_24g_no_data_timeout_timer
+
+1 mem_car_24g_ir_receive_attack_count
+1 mem_car_24g_go_die_flag
+1 mem_car_attack_shake_timer
+1 mem_car_attack_shake_flag
+
+0 mem_car_soft_power
+1 mem_car_power_state
+1 mem_car_power_timer
+1 mem_car_power_off_timeout
+1 mem_car_power_starting_timeout
+2 mem_car_power_off_cb
+2 mem_car_power_starting_cb
+2 mem_car_power_standby_cb
+2 mem_car_ui_button_up_cb
+
+
+500 mem_car_le_att_list
+
+1 mem_car_moto1_blank_timer
+1 mem_car_moto2_blank_timer
+1 mem_car_moto3_blank_timer
+
+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_gpio
+1 mem_car_app_send_speed
+
+2 mem_rssi_sum
+2 mem_check_rssi_high_count
+8 mem_rssi_data
+
+1 mem_car_24g_received_pac
+1 mem_car_24g_bind_enable_delay_count
+
+0 mem_car_keyscan
+1 mem_car_key_num
+2 mem_cb_car_keyscan
+
+2 mem_car_enter_lpm_timer_count
+2 mem_car_enter_lpm_timer
+1 mem_car_enter_lpm_flag
+
+1 mem_car_24g_ch_polling
+
+8 mem_car_rssi_noise_buffer
+8 mem_car_rssi_noise_car_buffer
+8 mem_car_rssi_noise_remote_buffer
+
+
+4 mem_car_24g_commom_addr
+4 mem_car_24g_commom_addr_temp
+4 mem_car_24g_commom_addr_read
+1 mem_car_save_addr_flag
+400 mem_ble_att_list
+)
+
+(
+//20ms
+0x0020	FAST_ADV_INTERVAL_VALUE_CAR
+)
+
+(
+0x19 ATT_CAR_CONTROL_HANDLE
+0x19 ATT_SPEED_SET_HANDLE
+)
+
+
+(
+0 TURN_FRONT
+1 TURN_LEFT
+2 TURN_RIGHT
+0 MOTOR_STOP
+1 GO_FRONT
+2 GO_BACK
+0x6b5a LE_RECEIVE_PACKET_HEAD
+)
+
+(
+0 FLAG_IR_DISABLE
+1 FLAG_IR_ENABLE
+)
+
+(
+0 DEVICE_CAR
+1 DEVICE_TANK
+2 DEVICE_BATTLE_CAR
+3 DEVICE_BATTLE_TANK
+4 DEVICE_REMOTE
+)
+
+(
+0 F_B_MOTOR
+1 L_R_MOTOR
+2 F_B_BATTERY
+3 L_R_BATTERY
+)
+
+(
+0 CAR_WORK	   		//connect mode normal
+1 CAR_BIND			//code pair mode
+2 CAR_TEST			//test mode
+3 CAR_CODE			//PC_application
+4 CAR_PCBA			//PCBA_TEST
+5 CAR_DEBUG
+6 CAR_MODE_MAX
+7 CAR_SEARCH
+)
+
+(
+1 SPEED_LEVEL_1
+2 SPEED_LEVEL_2
+3 SPEED_LEVEL_3
+4 SPEED_LEVEL_4
+5 SPEED_LEVEL_5
+6 SPEED_LEVEL_6
+7 SPEED_LEVEL_7
+8 SPEED_LEVEL_8
+9 SPEED_LEVEL_9
+10 SPEED_LEVEL_10
+)
+
+(
+0 PWM0_DUTY_SETTING
+1 PWM1_DUTY_SETTING
+2 PWM2_DUTY_SETTING
+)
+
+(
+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
+)
+
+(
+0 CAR_REMOTE_CHECK_BUTTON
+1 CAR_REMOTE_CHECK_ROCKER
+)
+
+(
+0x11 CAR_NOTIFY_HANDLE
+)
+
+(
+0 LED_OFF
+1 LED_ON
+2 LED_BLINK
+0xFF LED_INVALID
+)
+
+(
+0xFF INVALID_PIN_NUM
+)
+
+
+(
+0 POWER_ON
+1 WORK_PAIRED
+2 WORK_SEARCH
+)
+
+(
+0x700 OTP_OFFSET_CAR_COMMOM_START_ADDR 
+0x7cc OTP_OFFSET_CAR_COMMOM_END_ADDR 
+)
+
Index: usb_pc_ai_voice/format/app_dongle.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_dongle.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_dongle.format	(working copy)
@@ -0,0 +1,169 @@
+
+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
+30 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_24g_pair_tx_power_init
+1 mem_setreport_count
+
+//usb config
+70 mem_hidreportdesc_Interface0_kb
+//200 mem_hidreportdesc_Interface1_ms
+120 mem_hidreportdesc_Interface2_pc
+100 mem_confdesc_all
+156 mem_usb_rxbuf_new		//at least 78B * 2
+1 mem_usb_rxbuf_new_end		//must be even address
+
+0 mem_usb_clear_mem0_start
+64 mem_usb_txbuf3
+64 mem_usb_rxbuf_temp
+1 mem_usb_ep3_out_data_len
+1 mem_usb_ep3_in_data_len
+1 mem_usb_ep3_out_data_flag
+64 mem_usb_ep3_in_data
+64 mem_usb_ep3_out_data
+1 mem_usb_rxptr_add
+0 mem_usb_clear_mem0_end
+
+//g24 buff
+80 mem_24g_rxbuf_new
+80 mem_24g_txbuf_new
+80 mem_24g_txpayload_new
+//80 mem_24g_rxpayload_new 	//dongle not recv ms ackpayload
+80 mem_24g_rxdata_temp_new
+1 mem_24g_rxdata_ack_flag
+
+//24g addr
+4 mem_24g_pair_addr_new
+)
+
+
+//otp address offset
+(
+0x5A DONGLE_KB_BIND_SUCCESS
+0x1fdf DONGLE_KB_BIND_EFUSE_OFFECT
+0x1f00 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
+)
+
+
+(
+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
+0 DG_ENABLE_NEW_REVISION
+)
+
Index: usb_pc_ai_voice/format/app_kb.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_kb.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_kb.format	(working copy)
@@ -0,0 +1,359 @@
+xmemalloc g24_tx_hid_keyboard(
+1 mem_power_on_flag
+6 mem_mouse_factory_addr
+8 mem_keyboard_flag
+
+10 mem_keyboard_tx_data
+1 mem_keyboard_data_send_flag
+
+//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
+
+1 mem_mcu_stb_gpio
+1 mem_mcu_clk_gpio
+1 mem_mcu_rstb_gpio
+1 mem_keyboard_caps_led_gpio
+1 mem_keyboard_num_led_gpio
+1 mem_keyboard_power_led_gpio
+2 mem_keyboard_caps_led_on_timer
+
+
+1 mem_keyboard_led_r_gpio
+1 mem_keyboard_led_g_gpio
+1 mem_keyboard_led_b_gpio
+
+8 mem_key_row_gpio
+20 mem_key_col_gpio
+12 mem_key_excol_gpio
+2 mem_kb_row_ptr
+2 mem_kb_col_ptr
+2 mem_kb_excol_ptr
+
+20 mem_keyscan_value_current
+20 mem_keyscan_value_check
+20 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
+9 mem_keyboard_keyvalue_buffer
+160 mem_keyboard_keyvalue_map
+
+1 mem_keyboard_fn_flag
+1 mem_keyboard_control_key_flag
+1 mem_keyboard_bt_button_flag
+1 mem_keyboard_pairing_type
+2 mem_keyboard_commbination_key_bt
+2 mem_keyboard_commbination_key_24g
+1 mem_24g_repeat_send_flag
+1 mem_keyboard_led_status
+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_arrow_enable_flag
+1 mem_keyboard_fn_left_ctrl_enable_flag
+1 mem_keyboard_fn_space_enable_flag
+1 mem_keyboard_fn_system_switch_enable_flag
+
+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
+24 mem_otp_read_retention_memory
+2 mem_otp_read_retention_offset
+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
+2 mem_keyboard_commbination_fast_conn_bt
+
+
+)
+(
+0x00 DONGLE_KB_BIND_EEPROM_OFFECT
+)
+(
+0x01 DEVICE_DATA_TPYE_MOUSE
+0x02 DEVICE_DATA_TPYE_STANDARD_KEYBOARD
+0x03 DEVICE_DATA_TPYE_NONSTARNDARD_KEYBOARD
+0x04 DEVICE_DATA_TPYE_CONSUMER
+0x05 DEVICE_DATA_TPYE_SYSTEM_CONCTOL
+)
+
+(
+0x00 HID_REPORTID_KEY_STANDARD
+0x01 HID_REPORTID_MOUSE
+0x02 HID_REPORTID_SYSTEM_CTRL
+0x03 HID_REPORTID_CONSUMER_KEY
+)
+
+(
+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_PALY
+0xea 	HID_KEY_MULTIKEY_STOP
+0xeb 	HID_KEY_MULTIKEY_PRE_TRACK
+0xec 	HID_KEY_MULTIKEY_NEXT_TRACK
+0xed 	HID_KEY_MULTIKEY_VOL_DOWN
+0xee 	HID_KEY_MULTIKEY_VOL_UP
+0xef 	HID_KEY_MULTIKEY_MUTE
+0xf0 	HID_KEY_MY_COMPUTER
+0xf1 	HID_KEY_MAIL
+0xf2 	HID_KEY_CALCULATOR
+0xf3 	HID_KEY_LIGHT_DOWN
+0xf4 	HID_KEY_LIGHT_UP
+0xf5 	HID_KEY_AC_FAVORITES
+0xf6 	HID_KEY_AC_FORWARD
+0xf7 	HID_KEY_AC_BACK
+0xf8 	HID_KEY_AC_STOP
+0xf9 	HID_KEY_AC_REFRESH
+0xfa 	HID_KEY_AC_SEARCH
+0xfb 	HID_KEY_AC_HOME
+0xfc 	HID_KEY_IOS_ANDROID_OS_LOCK
+0xfd 	HID_KEY_OS_SOFT_KB
+0xfe 	HID_KEY_OS_LANGUAGE
+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
+	 // 0xa5~0xaf reserved
+0x7f     	HID_KEY_FN 					 
+0xde     	HID_KEY_PB
+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_ANDRIOD
+2 SYSTEM_OS_IOS
+3 SYSTEM_OS_MAC
+
+)
+
+(
+0 KEYBOARD_CONSUMER_KEY_STANDBY
+1 KEYBOARD_CONSUMER_KEY_PRESS
+2 KEYBOARD_CONSUMER_KEY_RELEASE
+)
+
+
Index: usb_pc_ai_voice/format/app_module.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_module.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_module.format	(working copy)
@@ -0,0 +1,248 @@
+
+memalloc module(
+	//ble
+	2 mem_module_le_rx_data_len
+	2 mem_module_le_rx_data_address
+	2 mem_module_le_rx_data_handle
+
+ifdef COMPILE_WECHAT
+	0 mem_wechat_tx_buffer
+	1 mem_wechat_tx_bMagicNumber
+	1 mem_wechat_tx_bVer
+	2 mem_wechat_tx_nLength
+	2 mem_wechat_tx_nCmdId
+	2 mem_wechat_tx_nSeq1
+	255 mem_wechat_tx_payload
+
+	0 mem_wechat_rx_buffer
+	1 mem_wechat_rx_bMagicNumber
+	1 mem_wechat_rx_bVer
+	2 mem_wechat_rx_nLength
+	2 mem_wechat_rx_nCmdId
+	2 mem_wechat_rx_nSeq
+	255 mem_wechat_rx_payload
+
+	255 mem_module_wechat_local_data_buffer
+
+endif
+)
+
+xmemalloc module(	
+	2 mem_soft_version_num
+	1 mem_module_wake_up_gpio
+	1 mem_module_state_gpio
+	1 mem_module_connect_state_gpio
+
+	2 mem_current_packet_length
+	1 mem_module_state
+	
+	1 mem_module_mcu_wake_pin
+	4 mem_module_mcu_wake_delay_us
+
+	1 mem_module_le_lpm_mult	
+	1 mem_module_bluetooth_stauts_by_command
+
+	//uart
+	2 mem_module_uart_rx_buffer
+	2 mem_module_uart_rx_buffer_end
+	2 mem_module_uart_tx_buffer
+	2 mem_module_uart_tx_buffer_end
+	2 mem_module_uarta_baud_rate
+
+	//ADC
+	1 mem_module_read_vdd_flag
+	1 mem_module_read_vdd_count
+	1 mem_module_vdd_quotient
+	1 mem_module_vdd_remainder
+
+	//ble
+	1 mem_module_ble_data_uart_max_length
+
+	//flag
+	2 mem_module_flag
+
+	1 mem_module_hci_notify_len
+	2 mem_module_hci_notify_handle
+	2 mem_module_hci_nofiy_addr
+	1 mem_module_hci_notify_type
+
+	1 mem_le_conn_flag
+
+ifdef COMPILE_WECHAT
+	1 mem_module_wechat_indication_handle
+	1 mem_module_wechat_write_handle
+	2 mem_module_wechat_tx_buffer_ptr
+	2 mem_module_wechat_rx_buffer_ptr
+	2 mem_module_wechat_rx_push_data_cb
+	2 mem_module_wechat_tx_nSeq
+	2 mem_module_wechat_tx_len
+	2 mem_module_wechat_tx_address
+	2 mem_module_wechat_rx_len
+	2 mem_module_wechat_rx_address
+	1 mem_module_wechat_receive_push_data
+endif
+	
+	600 mem_module_le_att_list
+	0 mem_module_le_att_list_end
+	0 mem_module_nv_data
+	34 mem_module_nv_data0
+	34 mem_module_nv_data1
+	34 mem_module_nv_data2
+	34 mem_module_nv_data3
+	34 mem_module_nv_data4
+	0 mem_module_nv_data_end
+)
+
+
+(//mem_module_flag
+//bit0~bit7 config module function
+0 MODULE_FLAG_UART_FLOW_CONTROL
+1 MODULE_FLAG_BLE_SEND_MTU23
+2 MODULE_FLAG_BLE_DATA_ENCRYPT
+
+//bit8~bit15 module states change
+8 MODULE_FLAG_BLE_DATA_FINISH
+
+)
+
+(
+34 NV_DATA_LEN
+-1 DECREASED_ONE
+)
+
+
+
+(
+	5 FLAG_MODULE_READ_VDD_COUNT
+)
+
+(
+0x01 HCI_DISCARD_PACKET
+0x00 HCI_NOT_DISCARD_PACKET
+)
+
+
+
+(//Command
+0x01 HCI_CMD_SET_LE_ADDR_REQ
+0x02 HCI_CMD_SET_VISIBILITY_REQ
+0x04 HCI_CMD_SET_LE_NAME_REQ
+0x09 HCI_CMD_LE_DATA_REQ
+0x0b HCI_CMD_STATUS_IRQ
+0x0e HCI_CMD_SET_UARTCONTROL_REQ
+0x0f HCI_CMD_SET_UART_BAUD_REQ
+0x10 HCI_CMD_VERSION_REQ
+0x12 HCI_CMD_BLE_DISCONNECT
+0x13 HCI_CMD_DELETE_DEVICE
+0x14 HCI_CMD_CREATE_CONNECT
+0x26 HCI_CMD_SET_NVRAM_REQ
+0x27 HCI_CMD_SLEEP
+0x28 HCI_CMD_CONFIRM_GKEY
+0x2a HCI_CMD_AUTO_ADV_SCAN
+0x2b HCI_CMD_POWER_REQ
+0x2c HCI_CMD_POWER_SET
+0x30 HCI_CMD_PASSKEY_ENTRY
+0x31 HCI_CMD_SET_GPIO
+0x32 HCI_CMD_READ_GPIO
+0x33 HCI_CMD_LE_SET_PAIRING
+0x34 HCI_CMD_LE_SET_ADV_DATA
+0x35 HCI_CMD_LE_SET_SCAN_DATA
+0x36 HCI_CMD_LE_SEND_CONN_UPDATE_REQ
+0x37 HCI_CMD_LE_SET_ADV_PARM
+0x38 HCI_CMD_LE_START_PAIRING
+0x40 HCI_CMD_SET_WAKE_GPIO
+0x42 HCI_CMD_SET_TX_POWER
+0x43 HCI_CMD_BOOT_VERSION_REQ
+0x48 HCI_CMD_LE_CONFIRM_GKEY
+0x49 HCI_CMD_REJECT_JUSTWORK
+0x51 HCI_CMD_RESET_CHIP_REQ
+
+0x61 HCI_CMD_LE_SET_FIXED_PASSKEY
+
+0x76 HCI_CMD_DELETE_CUSTOMIZE_SERVICE
+0x77 HCI_CMD_ADD_SERVICE_UUID
+0x78 HCI_CMD_ADD_CHARACTERISTIC_UUID
+0x7a HCI_CMD_PASSKEY_ENTRY_INPUT
+0x7b HCI_CMD_LE_CREAT_CONN
+
+0x90 HCI_CMD_BLE_SET_PHY
+0x91 HCI_CMD_BLE_READ_CURRENT_PHY
+0x92 HCI_CMD_BLE_SET_DLE
+0x93 HCI_CMD_READ_CHIP_DATA
+0x94 HCI_CMD_WRITE_CHIP_DATA
+ifdef COMPILE_WECHAT
+0x95 HCI_CMD_WECHAT_SEND_DATA
+endif
+0xff HCI_CMD_CLOSE_LPM
+)
+
+(//event
+0x00 HCI_EVENT_SPP_CONN_REP
+0x01 HCI_EVENT_HID_CONN_REP
+0x02 HCI_EVENT_LE_CONN_REP
+0x03 HCI_EVENT_SPP_DIS_REP
+0x04 HCI_EVENT_HID_DIS_REP
+0x05 HCI_EVENT_LE_DIS_REP
+0x06 HCI_EVENT_CMD_RES
+0x07 HCI_EVENT_SPP_DATA_REP
+0x08 HCI_EVENT_LE_DATA_REP
+0x09 HCI_EVENT_STANDBY_REP
+
+0x0a HCI_EVENT_STATUS_RES
+
+0x0D HCI_EVENT_NVRAM_REP
+0x0e HCI_EVENT_GKEY
+0x0F HCI_EVENT_INVALID_PACKET
+0x10 HCI_EVENT_GET_PASSKEY
+0x11 HCI_EVENT_LE_TK
+0x12 HCI_EVENT_REMOTE_MTU
+0x14 HCI_EVENT_LE_PAIRING_STATE
+0X15 HCI_EVENT_LE_ENCRYPTION_STATE
+0x17 HCI_EVENT_LE_CONNECTION_UPDATE
+0x1d HCI_EVENT_LE_GKEY
+0x29 HCI_EVENT_UUID_HANDLE
+0x2b HCI_EVENT_LE_INPUT_GKEY
+
+0x40 HCI_BLE_UPDATE_PHY_EVENT
+ifdef COMPILE_WECHAT
+0x41 HCI_BLE_WECHAT_RECEIVE_PUSH_DATA
+endif
+)
+
+
+(//command HCI_CMD_SET_GPIO
+//byte 0
+0x00 HCI_CMD_CONFIG_GPIO_INPUT
+0x01 HCI_CMD_CONFIG_GPIO_OUTPUT
+//byte 1 input state
+0x00 GPIO_INPUT_PULLUP
+0x01 GPIO_INPUT_PULLDOWN
+0x02 GPIO_INPUT_HIGH_IMPEDANCE
+)
+
+
+
+
+
+(
+0x0080	FLAG_BLE_PAIRING_SUCCESS
+0x0180	FLAG_BLE_PAIRING_FAIL
+)
+
+
+(
+1	FLAG_EVENT_START_ENC
+0	FLAG_EVENT_PAUSE_ENC
+)
+
+(
+0 MOUDLE_STATE_BT_BIT
+1 MOUDLE_STATE_BLE_BIT
+)
+
+(
+5 BIT_OF_NOTIFY_AUTHENTICATED
+6 BIT_OF_READ_AUTHENTICATED
+7 BIT_OF_WRITE_AUTHENTICATED
+)
+
Index: usb_pc_ai_voice/format/app_mouse.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_mouse.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_mouse.format	(working copy)
@@ -0,0 +1,827 @@
+
+memalloc mouse(
+2 mem_init_cnt
+2 mem_data_pre
+2 mem_data_current
+3 mem_data_sum
+2 mem_data_value
+
+
+)
+//dpi eeprom addr
+xmemalloc g24_tx_hid(
+
+// adc
+//adc struct
+0 mem_mouse_vdd_calculate_set
+2 mem_mouse_vdd_full_vol
+2 mem_mouse_vdd_empty_vol
+2 mem_mouse_vdd_low_vol
+2 mem_mouse_vdd_now_vol
+1 mem_adc_channel_gpio
+1 mem_adc_mux_status
+1 mem_mouse_adc_last_low_voltage_flag
+2 mem_mouse_discovery_timeout
+2 mem_mouse_24g_pair_timeout_init
+1 mem_mouse_direct_timeout
+1 mem_mouse_24g_reconn_timeout_init
+1 mem_mouse_24g_pair_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
+
+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_whee_a_data_gpio
+1 mem_whee_b_data_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_switch
+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_sensor_motion_gpio
+1 mem_device_switch_gpio
+1 mem_mouse_reuse_2ice_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
+
+// usb
+1 mem_wire_usb_interval
+1 mem_usb_addr
+1 mem_mouse_usb_vdd_status
+1 mem_mouse_usb_keyboard_flag
+
+//three devices param
+//eeprom/flash
+0 mem_mouse_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_mouse_24g_addr
+2 mem_random_addr_increase_count
+79 mem_mouse_retention
+0 mem_mouse_information_end
+
+6 mem_mouse_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_mouse_search_dongle_interval
+1 mem_mouse_search_dongle_ch
+1 mem_mouse_search_dongle_count
+1 mem_mouse_search_dongle_action
+1 mem_24g_enter_lpm_timer
+1 mem_mouse_24g_enter_lpm_enable
+
+//	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
+1 mem_adc_low_volatage_led_timer_count
+//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
+
+// mouse configured param
+8 mem_mouse_flag 
+1 mem_device_number
+2 mem_mouse_page_to
+1 mem_mouse_fast_direct_timeout
+2 mem_mouse_fast_page_to
+2 mem_mouse_24g_power_on_fast_conn_timer
+2 mem_mouse_24g_search_dongle_time_init
+2 mem_mouse_no_data_timeout
+
+1 mem_mouse_commbination_key_bt
+1 mem_mouse_commbination_key_24g
+
+1 mem_mouse_customer_function
+9 mem_customer_key_press
+9 mem_customer_key_release
+3 mem_mouse_set_high_impedance_bit_set
+
+1 mem_sensor_shutdown_flag
+1 mem_24g_long_sleep_set_level
+
+2 mem_tx_power_factory_param
+
+//lost-packet compensation
+3 mem_mouse_24g_short_sleep_set_4ms
+3 mem_mouse_24g_long_sleep_set_4ms
+1 mem_mouse_24g_fast_hop_count_4ms
+3 mem_mouse_24g_short_sleep_set_8ms
+3 mem_mouse_24g_long_sleep_set_8ms
+1 mem_mouse_24g_fast_hop_count_8ms
+
+4 mem_mouse_24g_tsniff
+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
+
+1 mem_mouse_24g_long_sleep_flag
+
+//no motion pin
+1 mem_mouse_long_mult_flag
+1 mem_mouse_current_mult_timer
+
+1 mem_reconn_times
+1 mem_reconn_times_init
+2 mem_mouse_no_data_timer
+8 mem_mouse_rssi_signal_buf				
+4 mem_btclk_sensor
+1 mem_mouse_bluetooth_fast_conn_flag
+2 mem_mouse_discovery_timer
+1 mem_mouse_bluetooth_reconnect_timeout
+1 mem_mouse_need_soft_reset
+
+// le
+1 mem_mouse_le_bb_connected_flag
+1 mem_mouse_le_reconnect_flag
+1 mem_mouse_send_secutiry_request_timer
+
+3 mem_mouse_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_mouse_le_conn_param_reject
+32 mem_le_tx_buffer0_omemalloc
+32 mem_le_tx_buffer1_omemalloc
+32 mem_le_tx_buffer2_omemalloc
+32 mem_le_tx_buffer3_omemalloc
+1 mem_le_connect_status_flag
+1 mem_le_start_encrypt_timer
+1 mem_mouse_direct_timer
+
+)
+
+xmemalloc g24_tx_hid_mouse(
+// Mouse Work Area
+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
+
+//mouse wheel
+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
+
+//sensor param
+1 mem_sensor_id1
+1 mem_sensor_id2
+
+1 mem_sensor_shutter_hi
+1 mem_sensor_shutter_lo
+1 mem_sensor_smart_flag
+1 mem_sensor_squal_reg
+1 mem_sensor_iqc
+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
+38 mem_sensor_8650_init
+30 mem_sensor_ka8ul_init
+16 mem_sensor_8009_init
+16 mem_sensor_ka8g2_init
+12 mem_sensor_p6520_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
+
+//bt
+7 mem_device_addr_temp
+1 mem_mouse_bt_boot_mode
+5 mem_mouse_bt_boot_data
+1 mem_bt_send_max_slot_req_accept_after_switch
+1 mem_mouse_bt_send_first_package_timer
+1 mem_mouse_bt_send_first_package_flag
+1 mem_lmi_opcode_temp 
+1 mem_lpm_mult_init
+
+// mouse key
+1 mem_customer_key
+1 mem_customer_data_trigger
+1 mem_customer_data_trigger_last
+
+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
+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
+
+//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_temp
+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_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_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_le_addr_increase_count
+2 mem_otp_offset_le_addr_increase_count_end
+
+2 mem_otp_offset_app_initflag
+
+)
+
+
+xmemalloc g24_tx_hid_mouse_flippen(
+16 mem_24g_txpayload_buf
+1 mem_release_data_from_receiver_enable
+1 mem_release_data_from_transmiter_enable
+
+1 mem_flippen_key0_gpio
+1 mem_flippen_key1_gpio
+1 mem_flippen_key2_gpio
+1 mem_flippen_key3_gpio
+1 mem_flippen_key4_gpio
+1 mem_flippen_key5_gpio
+1 mem_flippen_key6_gpio
+1 mem_flippen_key7_gpio
+
+1 mem_flippen_key0_press_status
+1 mem_flippen_key1_press_status
+1 mem_flippen_key2_press_status
+1 mem_flippen_key3_press_status
+1 mem_flippen_key4_press_status
+1 mem_flippen_key5_press_status
+1 mem_flippen_key6_press_status
+1 mem_flippen_key7_press_status
+
+0 mem_key_press_data
+9 mem_key_pageup_data
+9 mem_key_pagedown_data
+9 mem_key_shift_f5_data
+9 mem_key_esc_data
+9 mem_key_b_data
+9 mem_key_tab
+9 mem_key_enter
+9 mem_key_alt_tab
+9 mem_key_alt_f4
+9 mem_key_play_pause
+9 mem_key_vol_up
+9 mem_key_vol_down
+9 mem_standard_key_release
+9 mem_system_ctrl_key_release
+9 mem_media_key_release
+
+1 mem_key0_long_press_flag
+1 mem_key1_long_press_flag
+1 mem_key2_long_press_flag
+1 mem_key3_long_press_flag
+1 mem_key4_long_press_flag
+
+1 mem_key0_long_press_event
+1 mem_key1_long_press_event
+1 mem_key2_long_press_event
+1 mem_key3_long_press_event
+1 mem_key4_long_press_event
+
+1 mem_key0_short_press_flag
+1 mem_key1_short_press_flag
+1 mem_key2_short_press_flag
+1 mem_key3_short_press_flag
+1 mem_key4_short_press_flag
+
+1 mem_key0_press_timer_count
+1 mem_key1_press_timer_count
+1 mem_key2_press_timer_count
+1 mem_key3_press_timer_count
+1 mem_key4_press_timer_count
+
+1 mem_combination_key_down_flag
+1 mem_combination_key_longpress_flag
+1 mem_key_disable_timer
+1 mem_24g_calculate_package_id_disable
+1 mem_24g_package_id_abandon_flag
+1 mem_24g_package_id
+
+1 mem_key_state
+1 mem_key_press_state
+1 mem_poweron_first_blank_data_enable
+
+2 mem_flippen_no_data_timeout
+2 mem_flippen_start_pair_no_data_timeout
+2 mem_key_longpress_timer_init
+2 mem_key_longpress_timer
+
+1 mem_low_voltage_led_blink_flag
+1 mem_low_voltage_led_blink_start_timer
+1 mem_poweron_led_blink_flag
+
+1 mem_24g_pair_enable_flag
+1 mem_24g_ch_work
+1 mem_24g_pair_key_down_flag
+1 mem_24g_pairing_stop_flag
+1 mem_longpress_24g_enter_hibernate_flag
+1 mem_g24_connected_state
+1 mem_g24_pairing_stop_flag
+1 mem_send_package_before_check
+)
+
+(
+(
+0x00 PEN_KEY0
+0x01 PEN_KEY1
+0x02 PEN_KEY2
+0x03 PEN_KEY3
+0x04 PEN_KEY4
+0x05 PEN_KEY5
+0x06 PEN_KEY6
+0x07 PEN_KEY7
+)
+
+(
+0x07 KEY_PRESS_COUNT
+0x00 KEY_PRESS_NONE
+)
+
+)
+
+
+(
+//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
+//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
+
+//byte 2
+0x08 MOUSE_ENABLE_BLE_RANDOM_ADDRE
+0x09 MOUSE_ENABLE_2K_EEPROM
+0x0a MOUSE_ENABLE_INIT_DELAY
+0x0b MOUSE_ENABLE_WAKEUP_FROM_POWER
+0x0c MOUSE_ENABLE_16M
+0x0d MOUSE_ENABLE_USB
+0x0e MOUSE_ENABLE_24G_SEARCH_DONGLE
+0x0f MOUSE_ENABLE_LOAD_AND_STORE_DPI
+
+//byte 3
+0x10 MOUSE_ENABLE_SPI2
+0x11 MOUSE_ENABLE_24G
+0x12 MOUSE_ENABLE_FLASH
+0x13 MOUSE_ENABLE_EEPROM
+0x14 MOUSE_ENABLE_OTP
+0x15 MOUSE_ENABLE_ADC
+0x16 MOUSE_ENABLE_KEYBOARD
+0x17 MOUSE_ENABLE_DOUBLE_DPI_KEY
+
+//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
+0x26 MOUSE_ENABLE_DPI_LOW_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_OR_MATRIX
+
+//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
+
+
+
+0xFF GPIO_DISABLE
+
+//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
+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
+
+
+//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
+)
+//device option low 2
+(
+1 MODE_4_MOUSE
+)
+
+
+(
+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
+)
+
+(
+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 G24_DISCONN_STATE
+1 G24_CONN_STATE
+
+8 G24_CH_NUMBER
+16 G24_CH_POLL_COUNT
+)
+
+(
+0 MOUSE_ADC_CHECK_BATTERY_ONLY
+1 MOUSE_ADC_CHECK_MULTIPLE
+2 MOUSE_ADC_CHECK_GPIO_MULTIPLE
+3 MOUSE_ADC_CHECK_HVIN_MULTIPLE
+)
+
+
+(
+0x5a MOUSE_USB_INTERFACE_INSERT
+0xa5 MOUSE_USB_INTERFACE_REMOVE
+)
+
+(
+0x10 MOUSE_BLE_L2CAP_TXBUFF_SIZE
+)
+
+(
+0 MOUSE_ADC_ENABLE
+1 MOUSE_SEARCH_DONGLE_ENABLE
+2 MOUSE_24G_250HZ_ENABLE
+3 MOUSE_CLK_16M_ENABLE
+4 MOUSE_DPI_4_LEVEL_ENABLE
+5 MOUSE_KEYBOARD_ENABLE
+
+7 MOUSE_DEVICE_NUMBER_FLAG
+)
+
+(
+0 MULTI_LED_ON
+1 MULTI_LED_BLINK
+)
+
Index: usb_pc_ai_voice/format/app_remote_car.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_remote_car.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_remote_car.format	(working copy)
@@ -0,0 +1,167 @@
+
+xmemalloc g24_tx_remote(
+1 mem_remote_car_hard_soft_switch
+
+1 mem_remote_car_queue_each_size
+1 mem_remote_car_queue_length
+
+1 mem_remote_car_queue_curr_num
+1 mem_remote_car_queue_read_ptr
+1 mem_remote_car_queue_write_ptr
+90 mem_remote_car_queue_ele
+
+1 mem_remote_style_led_type
+1 mem_remote_style_blink_count
+1 mem_remote_style_struct_led_gpio
+2 mem_remote_style_on_time
+2 mem_remote_style_off_time
+2 mem_remote_style_cb_ledon
+2 mem_remote_style_cb_ledoff
+
+
+1 mem_remote_car_led_num
+8 mem_remote_car_led_map
+
+0 mem_remote_car_keyscan
+1 mem_remote_car_key_num
+2 mem_cb_remote_car_keyscan
+
+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
+
+
+//rocker
+1 mem_rocker_negative_flag
+1 mem_rocker_work_status
+2 mem_current_vdd_value_default_mid_x
+2 mem_current_vdd_value_default_mid_y
+2 mem_current_vdd_value_default_mid_temp
+2 mem_current_vdd_default_range
+2 mem_rocker_last_status
+0 mem_rocker_status
+1 mem_rocker_x_status
+1 mem_rocker_y_status
+
+0 mem_remote_car_config_param
+1 mem_remote_car_config_setting_flag
+1 mem_remote_car_config_key_map
+1 mem_remote_car_config_layout
+1 mem_remote_car_config_connect_led_gpio
+1 mem_remote_car_config_check_way
+1 mem_remote_car_config_soft_switch_enable
+1 mem_remote_car_config_soft_switch_gpio
+1 mem_remote_car_config_timeout_shutdown_enable
+
+0 mem_remote_car_24g_motor_packet
+1 mem_remote_car_24g_motor_packet_lenght
+2 mem_remote_car_24g_motor_send_packet_head
+1 mem_remote_car_24g_motor_send_cmd
+2 mem_remote_car_24g_motor_send_length
+0 mem_remote_car_24g_motor_send_payload
+2 mem_remote_car_24g_motor1_payload
+2 mem_remote_car_24g_motor2_payload
+2 mem_remote_car_24g_motor3_payload
+1 mem_remote_car_24g_motor_send_checksum
+
+0 mem_remote_car_24g_fire_packet
+1 mem_remote_car_24g_fire_packet_lenght
+2 mem_remote_car_24g_fire_send_packet_head
+1 mem_remote_car_24g_fire_send_cmd
+2 mem_remote_car_24g_fire_send_length
+2 mem_remote_car_24g_fire_send_payload
+1 mem_remote_car_24g_fire_send_checksum
+
+15 mem_remote_car_24g_tx_temp
+
+2 mem_remote_car_no_data_timeout
+2 mem_remote_car_no_data_timer
+
+0 mem_remote_car_soft_power
+1 mem_remote_car_power_state
+1 mem_remote_car_power_timer
+1 mem_remote_car_power_off_timeout
+1 mem_remote_car_power_starting_timeout
+2 mem_remote_car_power_off_cb
+2 mem_remote_car_power_starting_cb
+2 mem_remote_car_power_standby_cb
+
+1 mem_remote_key_status
+1 mem_remote_car_24g_status
+
+1 mem_remote_car_24g_auto_work_step
+1 mem_remote_car_24g_pair_success_flag
+1 mem_remote_car_empty_packet
+
+1 mem_remote_car_motor1_key0_press_state
+1 mem_remote_car_motor1_key1_press_state
+1 mem_remote_car_motor2_key2_press_state
+1 mem_remote_car_motor2_key3_press_state
+1 mem_remote_car_motor1_rel_state
+1 mem_remote_car_motor2_rel_state
+
+1 mem_remote_car_no_data_check
+
+4 mem_remote_24g_commom_addr
+4 mem_remote_24g_commom_addr_temp
+4 mem_remote_24g_commom_addr_read
+1 mem_remote_save_addr_flag
+)
+
+
+(
+// eeprom config
+0xb0 REMOTE_PARAM_EEPROM_CONFIG_ADDR
+//eeprom address offect
+0X00 REMOTE_INFO_EEPROM_OFFECT
+
+)
+
+
+(
+0x00 CONTROL_F_B_MOTOR
+0x02 CONTROL_L_R_MOTOR
+)
+
+(
+0x00 KEY_MAP_TEN
+0x01 KEY_MAP_LR
+)
+
+(
+0x00 CONTROL_F_B_TEN
+0x02 CONTROL_L_R_TEN
+0x03 CONTROL_L_R_LR
+)
+
+(
+0 KEY_CHECK
+1 ROCKER_CHECK
+)
+
+(
+1 MOTOR_POSITIVE
+2 MOTOR_NEGATIVE
+)
+
+(
+0 ROCKER_MIDDLE_KEY
+1 ROCKER_POSITIVE_KEY
+2 ROCKER_NEGATIVE_KEY
+)
+(
+0x700 OTP_OFFSET_REMOTE_COMMOM_START_ADDR 
+0x7cc OTP_OFFSET_REMOTE_COMMOM_END_ADDR 
+)
+
Index: usb_pc_ai_voice/format/app_shutter.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_shutter.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_shutter.format	(working copy)
@@ -0,0 +1,216 @@
+
+
+xmemalloc shutter(
+
+////////////////////////////////////
+//ble shutter config
+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
+1 mem_shutter_key_conf2
+1 mem_shutter_key_conf3
+1 mem_shutter_key_conf4
+1 mem_shutter_key_conf5
+1 mem_shutter_key_conf6
+1 mem_shutter_key_conf7
+
+
+5 mem_key0_press
+5 mem_key1_press
+5 mem_key2_press
+5 mem_key3_press
+5 mem_key4_press
+5 mem_key5_press
+5 mem_key6_press
+5 mem_key7_press
+
+5 mem_key0_release	
+5 mem_key1_release
+5 mem_key2_release
+5 mem_key3_release
+5 mem_key4_release
+5 mem_key5_release
+5 mem_key6_release
+5 mem_key7_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
+420 mem_shutter_le_uuid_sup
+40 mem_shutter_key_value_list
+8 mem_shutter_discovery_time_conf
+8 mem_shutter_reconn_or_discovery_blink_time_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: usb_pc_ai_voice/format/app_shutter_dy.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_shutter_dy.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/app_shutter_dy.format	(working copy)
@@ -0,0 +1,266 @@
+
+
+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
+290 mem_shutter_le_hid_map
+//420 mem_shutter_dy_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
+
+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
+
+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_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
+
+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
+
+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
+
+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_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
+
+
+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
+680 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
+7 mem_shutter_dy_key_conf
+11 mem_le_dy_adv_data
+12 mem_le_dy_scan_data
+8 mem_ble_shutter_dy_interval_min_new
+8 mem_shutter_ble_discovery_time_conf
+2 mem_queue_dy_each_size
+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
+7 mem_shutter_led_on_light_dark_led_conf
+7 mem_shutter_led_off_light_dark_led_conf
+4 mem_shutter_reconn_blink_on_time_conf
+4 mem_shutter_discovery_blink_on_time_conf
+2 mem_shutter_efuse_start_offset
+2 mem_shutter_efuse_end_offset
+
+0 mem_initial_move_conf
+2 mem_android_initial_move_x
+2 mem_android_initial_move_y
+2 mem_iphone_initial_move_x
+2 mem_iphone_initial_move_y
+//淇敼澧炲姞淇濆瓨鍙傛暟
+0 mem_otp_move_config
+2 mem_otp_shutter_move_data_x
+2 mem_otp_shutter_move_data_y
+1 mem_otp_last_shutter_le_iphone_flag
+0 mem_otp_move_config_end
+2 mem_otp_write_offset_addr
+2 mem_otp_read_offset_addr
+2 mem_otp_read_ios_android_addr
+2 mem_shutter_le_pairing_handle
+2 mem_shutter_temp_count
+1 mem_shutter_first_read_flag
+1 mem_shutter_valid_data_flag
+1 mem_shutter_volume_timer
+1 mem_shutter_link_timer
+8 mem_shutter_link_data
+8 mem_shutter_link_data_i
+1 mem_shutter_link_loop_flag
+0 mem_shutter_end
+)
+
+
+(
+10 MAX_QUEUE_NUM_COMBINEKEY
+15 MAX_QUEUE_NUM_RELEASE
+3 MAX_QUEUE_NUM_LONG
+3 MAX_QUEUE_NUM_LONG_RELEASE
+10 MAX_QUEUE_NEW_PRESS
+
+10 EVERY_PAYLOAD_LEN
+)
+
+
+(
+0x24	GATT_KEYBOARD_WRITE_HANDLE_NEW
+)
+
+
+///////////////////////////////////////////////////////////////////////////////////////
+
+(//Data Rom Buffer Addr
+640		BT_DY_KEY_VALUE_LIST_SIZE
+)
+
+//otp address offset
+(
+0x05   SHUTTER_PARA_TOTAL_NUM
+//0x7b0  SHUTTER_EFUSE_START_OFFECT	//璧峰鍦板潃
+//0x680  SHUTTER_EFUSE_END_OFFECT	       //缁撴潫鍦板潃
+)
+
+
+(
+//uart config
+115200 UART_BAUD
+)
+
+(
+10 SHUTTER_KEY_CONF_SATE_BYTES
+0 KEY_STATE_PRESS_CLK_OFFSET
+4 KEY_STATE_PRESS_COUNT_OFFSET
+5 KEY_STATE_RELEASE_CLK_OFFSET
+9 KEY_STATE_LONGPRESS_OFFSET
+4 KEY_STATE_PRESS_CLK_LENGTH
+1 KEY_STATE_PRESS_COUNT_LENGTH
+4 KEY_STATE_RELEASE_CLK_LENGTH
+1 KEY_STATE_LONGPRESS_LENGTH
+)
+
+(
+0  SHUTTER_RIGHT_KEY_NUM
+1  SHUTTER_LIKE_KEY_NUM
+2  SHUTTER_DOWN_KEY_NUM
+3  SHUTTER_PHOTO_KEY_NUM
+4  SHUTTER_UP_KEY_NUM
+5  SHUTTER_LEFT_KEY_NUM
+6  SHUTTER_MOVE_KEY_NUM
+7  SHUTTER_FUN_KEY_NUM
+)
+
+(
+//0xaa ANDROID_INITIAL_MOVE_X //170
+//0x78 ANDROID_INITIAL_MOVE_Y //120
+//0x69 IPHONE_INITIAL_MOVE_X
+//0x38 IPHONE_INITIAL_MOVE_Y
+0X0a ANDROID_EVERY_MOVE_SIZE
+0x07 IPHONE_EVERY_MOVE_SIZE
+0x62 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: usb_pc_ai_voice/format/ble_protocol_stack/le.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le.format	(working copy)
@@ -0,0 +1,441 @@
+
+memalloc(
+260 mem_le_rxbuf
+
+/* security temp */
+4 mem_le_mic
+4 mem_le_peer_mic
+//8 mem_le_skdm
+//8 mem_le_skds
+16 mem_le_mrand
+
+
+/* ========= le context =========== */
+1 mem_le_state
+1 mem_le_mode
+2 mem_le_tsniff
+4 mem_le_anchor
+6 mem_le_clk_offset
+2 mem_le_receive_window
+6 mem_le_plap
+1 mem_le_conn_handle
+1 mem_le_arq
+1 mem_le_ch
+1 mem_le_hop
+2 mem_le_event_count
+4 mem_le_supervision_timer
+2 mem_le_instant
+1 mem_le_channels
+1 mem_le_op
+
+	/* these 3 should NOT be seperated */
+4 mem_le_access
+3 mem_le_crcinit
+1 mem_le_window_size
+
+	/* these 3 should NOT be seperated */
+2 mem_le_slave_latency
+2 mem_le_superto
+5 mem_le_channel_map
+
+
+1 mem_le_rx_phy
+1 mem_le_tx_phy
+
+9 mem_le_update_new_param
+
+16 mem_le_sk
+
+1 mem_le_peer_sca
+1 mem_le_err_code
+1 mem_le_ll_pairing_fail_reason
+
+/* ========= le context ending =========== */
+
+/* test */
+1 mem_le_testtype
+1 mem_cmd_le_create_conn
+
+)
+
+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
+
+
+//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: usb_pc_ai_voice/format/ble_protocol_stack/le_advertising.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le_advertising.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le_advertising.format	(working copy)
@@ -0,0 +1,104 @@
+
+xmemalloc(
+// parameters
+1 mem_le_scan_enable
+2 mem_le_scan_interval
+2 mem_le_scan_window
+
+
+1 mem_le_adv_data_len
+31 mem_le_adv_data
+1 mem_le_scan_data_len
+31 mem_le_scan_data
+
+//START of LE adv parameter structure
+1 mem_le_adv_enable
+0 mem_le_adv_param
+2 mem_le_adv_interval
+1 mem_le_adv_type
+1 mem_le_adv_own_addr_type
+6 mem_le_adv_direct_addr
+1 mem_le_adv_channel_map
+//END of LE adv parameter structure
+
+//START of LE scan parameter structure
+0 mem_le_scan_params
+1 mem_le_scan_type
+1 mem_le_scan_own_addr_type
+//END of LE scan parameter structure
+)
+
+amemalloc mem_le_rxbuf(
+//advertising channel PDU
+	1 mem_le_rxbuf_adv_header
+	1 mem_le_rxbuf_adv_length
+	255 mem_le_rxbuf_adv_payload
+)
+
+amemalloc mem_le_rxbuf(
+//advertising channel PDU
+//Scan Req
+	1 mem_le_rxbuf_adv_scan_req_header
+	1 mem_le_rxbuf_adv_scan_req_length
+	6 mem_le_rxbuf_adv_scan_req_scan_address
+	6 mem_le_rxbuf_adv_scan_req_adv_address
+)
+
+amemalloc mem_le_rxbuf(
+//advertising channel PDU
+//Connect IND
+	1 mem_le_rxbuf_adv_connect_ind_header
+	1 mem_le_rxbuf_adv_connect_ind_length
+	6 mem_le_rxbuf_adv_connect_ind_init_address
+	6 mem_le_rxbuf_adv_connect_ind_adv_address
+	4 mem_le_rxbuf_adv_connect_ind_access_address
+	3 mem_le_rxbuf_adv_connect_ind_crc_init
+	1 mem_le_rxbuf_adv_connect_ind_win_size
+	2 mem_le_rxbuf_adv_connect_ind_win_offset
+	2 mem_le_rxbuf_adv_connect_ind_interval
+	2 mem_le_rxbuf_adv_connect_ind_latency
+	2 mem_le_rxbuf_adv_connect_ind_timeout
+	5 mem_le_rxbuf_adv_connect_ind_channel_map
+	1 mem_le_rxbuf_adv_connect_ind_hop_and_sca
+)
+
+(
+0x01	GAP_ADTYPE_FLAGS
+0x02	GAP_ADTYPE_16BIT_MORE
+0x03	GAP_ADTYPE_16BIT_COMPLETE
+0x04	GAP_ADTYPE_32BIT_MORE
+0x05	GAP_ADTYPE_32BIT_COMPLETE
+0x06	GAP_ADTYPE_128BIT_MORE
+0x07	GAP_ADTYPE_128BIT_COMPLETE
+0x08	GAP_ADTYPE_LOCAL_NAME_SHORT
+0x09	GAP_ADTYPE_LOCAL_NAME_COMPLETE
+0x0a	GAP_ADTYPE_POWER_LEVEL
+0x16	GAP_ADTYPE_SERVICE_DATA
+0x2a	GAP_ADTYPE_MESH_MESSAGE
+0x2b 	GAP_ADTYPE_MESH_BEACON
+0xff	GAP_ADTYPE_MANUFACTURER_SPECIFIC
+)
+
+/* advertising channel PDU type */
+(
+0 ADV_IND
+1 ADV_DIRECT_IND
+2 ADV_NONCONN_IND
+3 SCAN_REQ
+3 AUX_SCAN_REQ
+4 SCAN_RSP
+5 CONNECT_REQ
+5 AUX_CONNECT_REQ
+6 ADV_SCAN_IND
+)
+
+(
+0 BIT_ADV_CHANNEL_MAP_37
+1 BIT_ADV_CHANNEL_MAP_38
+2 BIT_ADV_CHANNEL_MAP_39
+)
+
+(
+0xa0 param_le_sca
+)
+
Index: usb_pc_ai_voice/format/ble_protocol_stack/le_l2cap_att.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le_l2cap_att.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le_l2cap_att.format	(working copy)
@@ -0,0 +1,204 @@
+
+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
+)
+
+
+(
+23 ATT_DEFAULT_MTU 
+)
+
+
+
Index: usb_pc_ai_voice/format/ble_protocol_stack/le_l2cap_att_wechat.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le_l2cap_att_wechat.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le_l2cap_att_wechat.format	(working copy)
@@ -0,0 +1,85 @@
+ifdef COMPILE_WECHAT
+
+amemalloc mem_temp_block2(
+	0 mem_wechat_initreq_base_request
+	2 mem_wechat_authreq_base_request
+	4 mem_wechat_authreq_protocol_version
+	2 mem_wechat_authreq_auth_protocol
+	2 mem_wechat_authreq_eam_mac_no_encrypt
+	2 mem_wechat_authreq_mac_address
+	6 mem_wechat_authreq_device_address
+
+	1 mem_wechat_indication_handle
+	1 mem_wechat_write_handle
+	2 mem_wechat_tx_buffer_ptr
+	2 mem_wechat_rx_buffer_ptr
+	2 mem_wechat_rx_push_data_cb
+	2 mem_wechat_tx_nSeq
+	2 mem_wechat_tx_len
+	2 mem_wechat_tx_address
+	2 mem_wechat_rx_len
+	2 mem_wechat_rx_address
+	1 mem_wechat_receive_push_data
+
+)
+
+xmemalloc(
+
+/*
+wechat Air sync protocol parse
+uint8_t indication handle
+uint8_t write handle
+
+*/
+2 mem_le_wechat_air_sync_ptr
+
+)
+
+(
+17 WECHAT_AIR_SYNC_STRUCT_SIZE
+)
+
+(
+0x0000 ECI_NONE
+0x1127 ECI_REQ_AUTH
+0x1227 ECI_REQ_SEND_DATA
+0x1327 ECI_REQ_INIT
+0x214E ECI_RESPONSE_AUTH
+0x224E ECI_RESPONSE_SEND_DATA
+0x234E ECI_RESPONSE_INIT
+0x3175 ECI_PUSH_RECEIVE_DATA
+0x3275 ECI_PUSH_SWITCH_VIEW
+0x3375 ECI_PUSH_SWITCH_BACKGROUD
+0x2F75 ECI_ERR_DECODE
+)
+
+(
+2 ECI_REQ_INIT_MESSAGE_LENGTH
+18 ECI_REQ_AUTH_MESSAGE_LENGTH
+)
+
+(
+0xFE WECHAT_HEAD_MAGIC_NUMBER
+0x01 WECAHT_HEAD_VERSION
+0x01FE WECHAT_RX_HEAD
+)
+
+(
+//push data
+0x0a 	TAG_RecvDataPush_BasePush
+0x12	TAG_RecvDataPush_Data
+0x18	TAG_RecvDataPush_Type
+)
+
+
+(
+0 WECHAT_PROTOCOL_MESSAGE_B_MAGIC_NUMBER
+1 WECHAT_PROTOCOL_MESSAGE_B_VER
+2 WECHAT_PROTOCOL_MESSAGE_N_LENGTH
+4 WECHAT_PROTOCOL_MESSAGE_N_CMD_ID
+6 WECHAT_PROTOCOL_MESSAGE_N_SEQ
+8 WECHAT_PROTOCOL_MESSAGE_PAYLOAD
+)
+
+endif
+
Index: usb_pc_ai_voice/format/ble_protocol_stack/le_l2cap_signalling.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le_l2cap_signalling.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le_l2cap_signalling.format	(working copy)
@@ -0,0 +1,14 @@
+
+/* L2CAP Signaling OPCODE */
+(
+0x12 L2CAP_CONNECTION_PARAMETER_UPDATE_REQUEST
+0x13 L2CAP_CONNECTION_PARAMETER_UPDATE_RESPONSE
+)
+
+(
+0x0000 BLE_SIGNALING_CONNECT_PARAMETER_UPDATE_ACCEPTED
+0x0001 BLE_SIGNALING_CONNECT_PARAMETER_UPDATE_REJECTED
+)
+
+
+
Index: usb_pc_ai_voice/format/ble_protocol_stack/le_l2cap_smp.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le_l2cap_smp.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le_l2cap_smp.format	(working copy)
@@ -0,0 +1,113 @@
+
+
+(
+0x00 LE_PAIRING_MODE_NONE
+0x01 LE_PAIRING_MODE_LAGACY_JUSTWORK
+0x02 LE_PAIRING_MODE_LAGACY_PASSKEY
+0x04 LE_PAIRING_MODE_LAGACY_PASSKEY_RES_INPUT
+0x81 LE_PAIRING_MODE_SECURE_CONNECT_JUSTWORK
+0x82 LE_PAIRING_MODE_SECURE_CONNECT_NUMERIC
+0x83 LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY
+0x84 LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY_RES_INPUT
+
+7 LE_PAIRING_MODE_SECURE_CONNECT_BIT
+)
+
+
+(
+0 FLAG_IOCAP_DISPLAYONLY
+1 FLAG_IOCAP_DISPLAYYESNO
+2 FLAG_IOCAP_KEYBOARDONLY
+3 FLAG_IOCAP_NOINPUTNOOUTPUT
+4 FLAG_IOCAP_KEYBOARDDISPLAY
+
+0x00 FLAG_OOB_DATA_FLAG_NO
+)
+
+(
+0x00 FLAG_LE_NO_BONDING_NO_MITM
+0x01 FLAG_LE_BONDING_NO_MITM
+0x04 FLAG_LE_NO_BONDING_MITM
+0x05 FLAG_LE_BONDING_MITM
+0x09 FLAG_LE_BONDING_NO_MITM_SECURE
+0x0D FLAG_LE_BONDING_MITM_SECURE
+
+2 LE_AUTH_MITM_BIT
+3 LE_AUTH_SECURE_CONNECTION_PAIRING_BIT
+)
+
+//mem_le_pairing_state
+(
+0 FLAG_LE_PAIRING_NULL
+1 FLAG_LE_PAIRING_START
+2 FLAG_LE_PAIRING_SEND_RECURITY_REQ
+3 FLAG_LE_PAIRING_RCV_PAIRING_REQ
+4 FLAG_LE_PAIRING_WAIT_STK_GENERATION
+5 FLAG_LE_PAIRING_RECEIVE_PAIRING_CONFIRM
+6 FLAG_LE_PAIRING_SEND_PAIRING_CONFIRM
+7 FLAG_LE_PAIRING_RECEIVE_PAIRING_RANDOM
+8 FLAG_LE_PAIRING_SEND_PAIRING_RANDOM
+9 FLAG_LE_PAIRING_AFTER_AUTH
+10 FLAG_LE_PAIRING_SEND_START_ENC_RSP
+11 FLAG_LE_PARING_SEND_ENC_INFORMATION
+12 FLAG_LE_PARING_SEND_MASTER_IDENTIFICATION 
+13 FLAG_LE_PARING_SEND_INDENTITY_INFORMATION
+0xff FLAG_LE_PAIRING_END
+)
+
+/* Security Manager Protocol Code */
+(
+0x01 SMP_PAIRING_REQUEST
+0x02 SMP_PAIRING_RESPONSE
+0x03 SMP_PAIRING_CONFIRM
+0x04 SMP_PAIRING_RANDOM
+0x05 SMP_PAIRING_FAILED
+0x06 SMP_ENCRYPTION_INFORMATION
+0x07 SMP_MASTER_IDENTIFICATION
+0x08 SMP_IDENTITY_INFORMATION
+0x09 SMP_IDENTITY_ADDRESS_INFORMATION
+0x0A SMP_SIGNING_INFORMATION
+0x0B SMP_SECURITY_REQUEST
+0x0c SMP_PAIRING_PUBLIC_KEY
+0x0d SMP_PAIRING_DHKEY_CHECK
+)
+
+(// pairing failed reason
+0x00 PAIRING_FAILED_RESERVED
+0X01 PAIRING_FAILED_PASSKEY_ENTRY_FAILED
+0X02 PAIRING_FAILED_OOB_NOT_AVAILABLE
+0X03 PAIRING_FAILED_AUTHENTICATION_REQUIRE
+0X04 PAIRING_FAILED_CONFIRM_VALUE_FAILED
+0X05 PAIRING_FAILED_PAIRING_NOT_SUPPORTED
+0X06 PAIRING_FAILED_ENCRYPTION_KEY_SIZE
+0X07 PAIRING_FAILED_COMMAND_NOT_SUPPORTED
+0X08 PAIRING_FAILED_UNSPECIFIED_REASON
+0X09 PAIRING_FAILED_REPEATED_ATTEMPTS
+0X0A PAIRING_FAILED_INVALID_PARAMETERS
+0X0B PAIRING_FAILED_DHKEY_CHECK_FAILED
+0X0C PAIRING_FAILED_NUMERIC_COMPARISON_FAILED
+0X0D PAIRING_FAILED_BR_EDR_PAIRING_IN_PROGRESS
+0X0E PAIRING_FAILED_KEY_DERIVATION_GENERATION_NOT_ALLOWED
+)
+
+/*LE secure connect state */
+(
+0x00 LE_SC_STAT_NULL
+0x01 LE_SC_STAT_RECEIVE_PUBLIC_KEY
+0x02 LE_SC_STAT_WAIT_SEND_PUBLIC_KEY
+0x03 LE_SC_STAT_SEND_PUBLIC_KEY
+0x04 LE_SC_STAT_RECEIVE_RANDOM
+0x05 LE_SC_STAT_SEND_RANDOM
+0x06 LE_SC_STAT_RECEIVE_DHKEY
+0x07 LE_SC_STAT_WAIT_CONFIRM_GKEY
+0x08 LE_SC_STAT_PASSKEY_WAIT_CONFIRM
+)
+
+
+(
+0 FLAG_LE_SC_CONFRIM_NULL
+1 FLAG_LE_SC_CONFRIM_GKEY_OK
+)
+
+
+
Index: usb_pc_ai_voice/format/ble_protocol_stack/le_ll.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le_ll.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ble_protocol_stack/le_ll.format	(working copy)
@@ -0,0 +1,120 @@
+xmemalloc(
+8 mem_le_local_feature
+1 mem_le_tx_phys
+1 mem_le_rx_phys
+
+2 mem_remote_rx_max_octets
+2 mem_remote_rx_max_time
+2 mem_remote_tx_max_octets
+2 mem_remote_tx_max_time
+2 mem_local_rx_max_octets
+2 mem_local_rx_max_time
+2 mem_local_tx_max_octets
+2 mem_local_tx_max_time
+
+)
+
+/* LE control packet type */
+(
+0x00 LL_CONNECTION_UPDATE_IND
+0x01 LL_CHANNEL_MAP_IND
+0x02 LL_TERMINATE_IND
+0x03 LL_ENC_REQ
+0x04 LL_ENC_RSP
+0x05 LL_START_ENC_REQ
+0x06 LL_START_ENC_RSP
+0x07 LL_UNKNOWN_RSP
+0x08 LL_FEATURE_REQ
+0x09 LL_FEATURE_RSP
+0x0A LL_PAUSE_ENC_REQ
+0x0B LL_PAUSE_ENC_RSP
+0x0C LL_VERSION_IND
+0x0D LL_REJECT_IND
+0x0E LL_SLAVE_FEATURE_REQ
+0x0F LL_CONNECTION_PARAM_REQ
+0x10 LL_CONNECTION_PARAM_RSP
+0x11 LL_REJECT_IND_EXT
+0x12 LL_PING_REQ
+0x13 LL_PING_RSP
+0x14 LL_LENGTH_REQ
+0x15 LL_LENGTH_RSP
+0x16 LL_PHY_REQ
+0x17 LL_PHY_RSP
+0x18 LL_PHY_UPDATE_IND
+0x19 LL_MIN_USED_CHANNELS_IND
+0x1A LL_CTE_REQ
+0x1B LL_CTE_RSP
+0x1C LL_PERIODIC_SYNC_IND
+0x1D LL_CLOCK_ACCURACY_REQ
+0x1E LL_CLOCK_ACCURACY_RSP
+0x1F LL_CIS_REQ
+0x20 LL_CIS_RSP
+0x21 LL_CIS_IND
+0x22 LL_CIS_TERMINATE_IND
+0x23 LL_POWER_CONTROL_REQ
+0x24 LL_POWER_CONTROL_RSP
+0x25 LL_POWER_CHANGE_IND
+)
+
+
+
+(//bit map of mem_le_ll_feature
+//LL_FEATURE_REQ
+0 BIT_LL_FEATURE_LE_ENCRYPTION
+1 BIT_LL_FEATURE_CONNECTION_PARAMETERS_REQUEST_PROCEDURE
+2 BIT_LL_FEATURE_EXTENDED_REJECT_INDICATION
+3 BIT_LL_FEATURE_SLAVE_INITIATED_FEATURES_EXCHANGE
+4 BIT_LL_FEATURE_LE_PING
+5 BIT_LL_FEATURE_LE_DATA_PACKET_LENGTH_EXTENSION
+6 BIT_LL_FEATURE_LL_PRIVACY
+7 BIT_LL_FEATURE_EXTENDED_SCANNER_FILTER_POLICIES
+8 BIT_LL_FEATURE_LE_2M_PHY
+9 BIT_LL_FEATURE_STABLE_MODULATION_INDEX_TRANSMITTER
+10 BIT_LL_FEATURE_STABLE_MODULATION_INDEX_RECEIVER
+11 BIT_LL_FEATURE_LE_CODED_PHY
+12 BIT_LL_FEATURE_LE_EXTENDED_ADVERTISING
+13 BIT_LL_FEATURE_LE_PERIODIC_ADVERTISING
+14 BIT_LL_FEATURE_CHANNEL_SELECTION_ALGORITHM
+15 BIT_LL_FEATURE_LE_POWER_CLASS_1
+16 BIT_LL_FEATURE_MINIMUM_NUMBER_OF_USED_CHANNELS_PROCEDURE
+)
+(//function map of mem_le_ll_feature
+//LL_FEATURE_REQ
+0x1 FUN_LL_FEATURE_LE_ENCRYPTION
+0x2 FUN_LL_FEATURE_CONNECTION_PARAMETERS_REQUEST_PROCEDURE
+0x4 FUN_LL_FEATURE_EXTENDED_REJECT_INDICATION
+0x8 FUN_LL_FEATURE_SLAVE_INITIATED_FEATURES_EXCHANGE
+0x10 FUN_LL_FEATURE_LE_PING
+0x20 FUN_LL_FEATURE_LE_DATA_PACKET_LENGTH_EXTENSION
+0x40 FUN_LL_FEATURE_LL_PRIVACY
+0x80 FUN_LL_FEATURE_EXTENDED_SCANNER_FILTER_POLICIES
+0x100 FUN_LL_FEATURE_LE_2M_PHY
+0x200 FUN_LL_FEATURE_STABLE_MODULATION_INDEX_TRANSMITTER
+0x400 FUN_LL_FEATURE_STABLE_MODULATION_INDEX_RECEIVER
+0x800 FUN_LL_FEATURE_LE_CODED_PHY
+0x1000 FUN_LL_FEATURE_LE_EXTENDED_ADVERTISING
+0x2000 FUN_LL_FEATURE_LE_PERIODIC_ADVERTISING
+0x4000 FUN_LL_FEATURE_CHANNEL_SELECTION_ALGORITHM
+0x8000 FUN_LL_FEATURE_LE_POWER_CLASS_1
+0x10000 FUN_LL_FEATURE_MINIMUM_NUMBER_OF_USED_CHANNELS_PROCEDURE
+)
+
+(//bit of mem_le_tx_phys and mem_le_rx_phys
+0x00 BIT_LE_1M_PHY
+0x01 BIT_LE_2M_PHY
+0x02 BIT_LE_CODED_PHY
+
+0x02 BIT_LE_CODED_PHY_S2
+0x07 BIT_LE_CODED_PHY_S8
+)
+
+(//map of mem_le_tx_phys and mem_le_rx_phys
+0x01 FUN_TX_LL_1M_PHY
+0x02 FUN_TX_LL_2M_PHY
+0x04 FUN_TX_LL_CODED_PHY
+
+0x01 FUN_RX_LL_1M_PHY
+0x02 FUN_RX_LL_2M_PHY
+0x04 FUN_RX_LL_CODED_PHY
+)
+
Index: usb_pc_ai_voice/format/bt.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/bt.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/bt.format	(working copy)
@@ -0,0 +1,656 @@
+
+	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
+18 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
+0x9f TX_POWER_F35DB
+0xa0 TX_POWER_F40DB
+0xa1 TX_POWER_F45DB
+0xa2 TX_POWER_F50DB
+0xa3 TX_POWER_F55DB
+0xa4 TX_POWER_F60DB
+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
+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
+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: usb_pc_ai_voice/format/command.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/command.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/command.format	(working copy)
@@ -0,0 +1,1446 @@
+
+/* Parse Command:
+TX: take bits from tx fifo, jam it into shift and a destination (rf,bucket)
+RX: take bits from demod,  jam it into shift and a destination (acl,sco,bucket) */
+
+/* Inject Command:
+TX: 0 into shift, send tail of shift into a destination (rf,bucket)
+RX: 0 into shift, send tail of shift into a destination (acl,sco,bucket) */
+
+format
+  ! 15 romdat
+  % d0
+  % d1
+  % d2
+  % d3
+  [8] d0
+  [8] d1
+  [8] d2
+  [8] d3
+end
+
+format
+  ! 15 enable   /* set flag to 1 */
+  % flag
+  [5] opcode
+  [6] 1
+  [6] flag
+  [6] null
+  [9] 0
+end
+ /* High 5 bytes of channel map */
+format
+  ! 15 pulse   /* set flag to 1 */
+  % flag
+  [5] opcode
+  [6] 1
+  [6] flag
+  [6] null
+  [9] 0
+end
+
+format
+  ! 15 disable   /* set flag to 0 */
+  % flag
+  [5] opcode
+  [6] 2
+  [6] flag
+  [6] null
+  [9] 0
+end
+
+format
+  ! 15 set0  /* set selected bit of reg to 0 */
+  % immediate
+  % reg
+  [5] opcode
+  [6] 9
+  [6] never
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 15 set1  /* set selected bit of reg to 1 */
+  % immediate
+  % reg
+  [5] opcode
+  [6] 9          /* alu op demux */
+  [6] always
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 15 setflag  /* set selected bit of the reg to the polarity of the flag */
+  % flag
+  % immediate
+  % reg
+  [5] opcode
+  [6] 9
+  [6] flag
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 15 nsetflag  /* set the selected bit of the reg to the opposite polarity of the flag */
+  % flag
+  % immediate
+  % reg
+  [5] opcode
+  [6] 0x29
+  [6] flag
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 15 setflip    /* invert the selected bit of the reg */
+  % immediate
+  % reg
+  [5] opcode
+  [6] 10            /* this is alu op */
+  [6] always
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 0x1f qset1      /* demux the lowest 4 bit of queue and OR it with regr into regw */
+  % reg             /* in short, set the bit in reg indexed by queue to 1 */
+  [5] opcode
+  [6] 9
+  [6] always
+  [6] reg
+  [9] 0
+end
+  
+format
+  ! 0x1f qset0      /* demux the lowest 4 bit of queue and AND it with regr into regw */
+  % reg             /* in short, set the bit in reg indexed by queue to 0 */
+  [5] opcode
+  [6] 9
+  [6] never
+  [6] reg
+  [9] 0
+end
+
+format 
+  ! 0x1f qsetflag   /* set the bit in reg index by queue to same as flag */
+  % flag
+  % reg
+  [5] opcode
+  [6] 9
+  [6] flag
+  [6] reg
+  [9] 0
+end
+
+format 
+  ! 0x1f nqsetflag   /* set the bit in the reg index by queue to opposite of flag */
+  % flag
+  % reg
+  [5] opcode
+  [6] 0x29
+  [6] flag
+  [6] reg
+  [9] 0
+end
+
+format
+  ! 0x1f qsetflip      /* flip the bit in reg index by queue */
+  % reg
+  [5] opcode
+  [6] 10
+  [6] always
+  [6] reg
+  [9] 0
+end
+
+format
+  ! 1 parse       /* take bits out of source (sco_tx,tx_buffer,rx-elas) into pdata and dest (sco_rx,rx_fifo,tx-elas) */
+  % source
+  % dest
+  % immediate
+  [5] opcode
+  [4] source      /* voice, data, demod */
+  [2] 0
+  [6] 0    
+  [2] 0           /* parse or inject */ 
+  [4] dest        /* acl, sco, mod, bucket */
+  [9] immediate   /* number of bits to parse off */
+end
+
+format
+  ! 1 inject      /* shift data from pdata into destination (tx-elas,rx_fifo,sco_rx) */
+  % destination
+  % immediate
+  [5] opcode
+  [4] 0
+  [2] 0
+  [6] 1
+  [2] 0
+  [4] destination /* acl,sco,mod,bucket */
+  [9] immediate   /* number of bits to be injected */
+end
+
+format
+  ! 1 iinject
+  % destination
+  % regr
+  [5] opcode
+  [6] regr       /* contain the number of bits to inject */
+  [6] 3
+  [2] 0
+  [4] destination /* acl,sco,mod,bucket */
+  [9] 0 
+end
+
+format
+  ! 1 stuff  /* automatic parse, stuff_counter decrement on every bit until hits zero */
+  % source
+  % destination
+  [5] opcode
+  [4] source
+  [2] 0
+  [6] 2
+  [2] 0
+  [4] destination
+  [9] 0
+end
+
+format    /* force immediate value into registers */
+  ! 3 force
+  % immediate
+  % regw
+  [5] opcode
+  [6] 0
+  [6] 0    /* alu operation force */
+  [6] regw  /* destination register */
+  [9] immediate
+end
+
+format    /* force whatever is on shift_reg to regsiters */
+  ! 0x13 iforce
+  % regw
+  [5] opcode
+  [6] 0
+  [6] 0    /* alu operation force */
+  [6] regw  /* destination register */
+  [9] 0
+end
+
+format    /* force immediate value into registers */
+  ! 3 increase
+  % immediate
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 1    /* alu operation add */
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 3 pincrease
+  % immediate
+  [5] opcode
+  [6] -1  /* pdata */
+  [6] 1   /* alu add */
+  [6] -1  /* back to pdata */
+  [9] immediate
+end
+
+format    /* force immediate value into registers */
+  ! 3 and_into
+  % immediate
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 2    /* alu operation and into */
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 3 and
+  % regr
+  % immediate
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 2    /* alu operation and into */
+  [6] regw
+  [9] immediate
+end
+  
+format
+  ! 0x13 iand    /* pdata & regr -> regw */
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 2    /* alu operation and into */
+  [6] regw
+  [9] 0
+end
+  
+
+format    /* and whatever is in shiftreg with reg */
+  ! 0x13 iand_into
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 2    /* alu operation and into */
+  [6] reg
+  [9] 0
+end
+
+format
+  ! 3 or_into
+  % immediate
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 3    /* alu operation or into */
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 3 or
+  % regr
+  % immediate
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 3    /* alu operation or into */
+  [6] regw
+  [9] immediate
+end
+
+format
+  ! 0x13 ior
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 3    /* alu operation or into */
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 0x13 ior_into
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 3    /* alu operation or into */
+  [6] reg
+  [9] 0
+end
+
+format
+  ! 3 skip_to   /* jump to location stored in reg */
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 4   /* alu operation copy */
+  [6] rom_addr
+  [9] 0
+end
+
+format
+  ! 3 copy
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 4   /* alu operation copy */
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 deposit   /* copy the register content thru alu to shift register, not prealigned like preload */
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 4   /* alu operation copy */
+  [6] -1  /* pdata */
+  [9] 0
+end
+
+format
+  ! 3 icopy     /* copy the shift register lsb content directly to register, not aligned */
+  % regw
+  [5] opcode
+  [6] -1  /* pdata */
+  [6]  4  /* alu copy */
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 add
+  % regr
+  % immediate
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 1
+  [6] regw
+  [9] immediate
+end
+
+format
+  ! 0x13 iadd       /* regr + pdata -> regw */
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 1
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 sub          /* immediate - regr -> regw */
+  % regr
+  % immediate
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 12
+  [6] regw
+  [9] immediate
+end
+
+format
+  ! 0x13 isub       /* pdata - regr -> regw */
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 12
+  [6] regw
+  [9] 0
+end
+
+
+format
+  ! 3 flip
+  % immediate
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 5
+  [6] reg
+  [9] immediate
+end
+  
+format
+  ! 0x13 iflip  /* use shift register as immediate to do xor */
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 5
+  [6] regw
+  [9] 0
+end
+  
+format
+  ! 3 xor
+  % regr
+  % immediate
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 5
+  [6] regw
+  [9] immediate
+end
+
+format
+  ! 3 xor_into
+  % immediate
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 5
+  [6] reg
+  [9] immediate
+end
+  
+format
+  ! 0x13 ixor  /* pdata xor regr and store result in regw */
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 5
+  [6] regw
+  [9] 0
+end
+  
+format
+  ! 3 invert
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 8
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 pinvert    /* invert pdata into itself */
+  [5] opcode
+  [6] -1
+  [6] 8
+  [6] -1
+  [9] 0
+end
+
+format
+  ! 3 div                 /* regr div immediate div */
+  % reg
+  % immediate
+  [5] opcode
+  [6] reg
+  [6] 13                   /* generate diven pulse to div */
+  [6] null
+  [9] immediate
+end
+
+format
+  ! 0x13 idiv           /* pdata div regr data ready at most after 41 nops */
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 13                   /* generate diven pulse to div */
+  [6] null
+  [9] 0
+end
+
+format
+  ! 0x13 idiv48           /* pdata div regr data 48bit */
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 17                   /* generate diven pulse to div */
+  [6] null
+  [9] 0
+end
+
+format
+  ! 3 remainder            /* harvest div remainder */
+  % regw
+  [5] opcode
+  [6] 0
+  [6] 14
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 quotient             /* harvest div quotient */
+  % regw
+  [5] opcode
+  [6] 0
+  [6] 15
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 6
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift2
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 22
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift3
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 18
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift4
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 35
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift8
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 25
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift16
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 34
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift32
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 30
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 lshift
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 7
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 lshift2
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 23
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 lshift8
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 26
+  [6] regw
+  [9] 0
+end
+
+  
+format
+  ! 3 lshift3
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 19
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 lshift4
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 36
+  [6] regw
+  [9] 0
+end
+  
+
+format
+  ! 3 lshift16
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 32
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 0x13 bcrc         // calculate regr's byte crc value into pdata
+  % regr
+  [5] opcode
+  [6] regr
+  [6] 24
+  [6] 63
+  [9] 0
+end
+
+
+format
+  ! 3 random               /* random number into regw */
+  % reg
+  [5] opcode
+  [6] 0
+  [6] 20
+  [6] reg
+  [9] 0
+end
+
+format                     /* bit reverse within a byte */
+  ! 3 reverse
+  % reg
+  % regw
+  [5] opcode
+  [6] reg
+  [6] 27
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 priority    /* priority encode reg into regw, lsb is the top priority, ie, priority(8'b00010000) = 4 */
+  % reg
+  % regw
+  [5] opcode
+  [6] reg
+  [6] 21
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 7 setsect   /* set a section of pdata */
+  % section    /* 0 sets 17:0 of pdata with set_data, 1 sets 35:18, 2 sets 53:36, 3 sets 71:54 */
+  % set_data
+  [5] opcode
+  [7] 0
+  [2] section
+  [18] set_data
+end
+
+format
+  ! 10 preload   /* load stuff into pdata according to fhs format, check us.v */
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 0
+  [6] -1
+  [9] 0
+end
+
+format  /* load register with pdata content, according to fhs format, check us.v */
+  ! 10 ialigned   /* all bits are in position */
+  % regw
+  [5] opcode
+  [6] -1
+  [6] 0
+  [6] regw
+  [9] 0
+end
+
+format  /* load register to another according to fhs format */
+  ! 10 aligned
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 0
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 4 branch
+  % addr
+  % flag
+  [5] opcode
+  [6] 1
+  [6] flag
+  [15] addr
+end
+
+format
+  ! 4 call
+  % addr
+  % flag
+  [5] opcode
+  [6] 2
+  [6] flag
+  [15] addr
+end
+
+format
+  ! 4 rtn
+  % flag
+  [5] opcode
+  [6] 3
+  [6] flag
+  [15] 0
+end
+
+format
+  ! 0x0d fetch          /* read from memory, data into pdata, address from immediate then mem_ptr */
+  % num_bytes
+  % addr
+  [5] opcode
+  [6] 63
+  [1] addr
+  [1] 0
+  [4] num_bytes
+  [15] addr
+end
+
+format
+  ! 0x0d fetcht          /* read from memory, data into temp, address from immediate won't increment */
+  % num_bytes
+  % addr
+  [5] opcode
+  [6] 2
+  [1] addr
+  [1] 1
+  [4] num_bytes
+  [15] addr
+end
+
+format
+  ! 0x1d ifetch         /* read from memory, data into pdata, address from regr then mem_ptr */
+  % num_bytes
+  % reg
+  [5] opcode
+  [6] 63
+  [2] 0
+  [4] num_bytes
+  [9] 0
+  [6] reg
+end
+
+format
+  ! 0x1d ifetcht         /* read from memory, data into temp, address from regr won't increment */
+  % num_bytes
+  % reg
+  [5] opcode
+  [6] 2
+  [2] 0
+  [4] num_bytes
+  [9] 0
+  [6] reg
+end
+
+format
+  ! 0x0c store          /* write to memory, data from pdata, address from immediate then mem_ptr */
+  % num_bytes
+  % addr
+  [5] opcode
+  [6] 63
+  [1] addr
+  [1] 0
+  [4] num_bytes
+  [15] addr
+end
+
+format
+  ! 0x0c storet          /* write to memory, data from temp, address from immediate won't increment */
+  % num_bytes
+  % addr
+  [5] opcode
+  [6] 2
+  [1] addr
+  [1] 1
+  [4] num_bytes
+  [15] addr
+end
+
+format
+  ! 0x1c istore        /* write pdata to memory, address from regaddr */
+  % num_bytes
+  % regaddr
+  [5] opcode
+  [6] 63            
+  [2] 0
+  [4] num_bytes
+  [9] 0
+  [6] regaddr
+end
+
+format
+  ! 0x1c istoret        /* write temp to memory, address from regaddr */
+  % num_bytes
+  % regaddr
+  [5] opcode
+  [6] 2            
+  [2] 0
+  [4] num_bytes
+  [9] 0
+  [6] regaddr
+end
+
+
+format
+  ! 0x0d crc         // read from memory, count from loopcnt, put crc result into pdata 
+  % addr
+  [5] opcode
+  [6] 63
+  [6] 0
+  [15] addr
+end
+
+format
+  ! 0x1d icrc         /* read from memory, address from reg, count from loopcnt, put crc result into pdata */
+  % reg
+  [5] opcode
+  [6] 63
+  [15] 0
+  [6] reg
+end
+
+
+format
+  ! 0x0c storer          /* write reg to memory, address from immediate then mem_ptr */
+  % reg
+  % num_bytes
+  % addr
+  [5] opcode
+  [6] reg               
+  [1] addr
+  [1] 0
+  [4] num_bytes
+  [15] addr
+end
+
+
+format
+  ! 0x1c istorer        /* write regr to memory, address from regaddr */
+  % regr
+  % num_bytes
+  % regaddr
+  [5] opcode
+  [6] regr            
+  [2] 0
+  [4] num_bytes
+  [9] 0
+  [6] regaddr
+end
+
+
+format
+  ! 0x1c lstorer        /* write regr to memory, address from regaddr, length from loopcnt */
+  % regr
+  % regaddr
+  [5] opcode
+  [6] regr            
+  [6] 0
+  [9] 0
+  [6] regaddr
+end
+
+format
+  ! 0x1c lstore        /* write pdata to memory, address from regaddr, length from loopcnt */
+  % regaddr
+  [5] opcode
+  [6] 63            
+  [6] 0
+  [9] 0
+  [6] regaddr
+end
+
+format
+  ! 0x1c lstorew        /* 32bit write pdata to memory, address from regaddr, length from loopcnt */
+  % regaddr
+  [5] opcode
+  [6] 63
+  [6] 42
+  [9] 0
+  [6] regaddr
+end
+
+
+format
+  ! 0x0d fetchr          /* read reg from memory, address from immediate then mem_ptr */
+  % reg
+  % num_bytes
+  % addr
+  [5] opcode
+  [6] reg               
+  [1] addr
+  [1] 0
+  [4] num_bytes
+  [15] addr
+end
+
+format
+  ! 0x1d ifetchr        /* read regr from memory, address from regaddr */
+  % regr
+  % num_bytes
+  % regaddr
+  [5] opcode
+  [6] regr
+  [2] 0
+  [4] num_bytes
+  [9] 0
+  [6] regaddr
+end
+
+
+
+
+format
+  ! 0x0e jam
+  % immediate
+  % addr
+  [5] opcode
+  [3] 0
+  [16] addr
+  [8] immediate
+end
+
+format			/* 0x242... */
+  ! 4 nbranch
+  % addr
+  % flag
+  [5] opcode
+  [1] 1
+  [5] 1
+  [6] flag
+  [15] addr
+end
+
+format
+  ! 4 ncall
+  % addr
+  % flag
+  [5] opcode
+  [1] 1
+  [5] 2
+  [6] flag
+  [15] addr
+end
+
+format
+  ! 4 nrtn
+  % flag
+  [5] opcode
+  [1] 1
+  [5] 3
+  [6] flag
+  [15] 0
+end
+
+format
+  ! 4 nop
+  % addr  /* no-op for addr+2 clocks */
+  [5] opcode
+  [6] 0     
+  [6] 0     /* always */ 
+  [15] addr
+end
+
+format
+  ! 4 clear_stack
+  [5] opcode
+  [6] 4
+  [6] 0    /* always */
+  [15] 0
+end
+
+format
+  ! 6 until
+  % reg
+  % flag
+  [5] opcode
+  [6] reg
+  [6] flag
+  [6] 1
+  [9] 0
+end
+  
+format
+  ! 6 correlate   /* quit if 1. flag is true 2, regr time up 3, found sync,(cond_true) */
+  % reg          /* expire counter to check against */
+  % flag
+  [5] opcode
+  [6] reg
+  [6] flag
+  [6] 2           /* correlate */
+  [9] 0           
+end
+
+format
+  ! 5 compare   /* sets cond flag,  if reg equals immediate */
+  % immediate
+  % reg
+  % mask
+  [5] opcode
+  [6] reg
+  [3] 0
+  [9] mask
+  [9] immediate
+end
+
+format
+  ! 0x15 icompare   /* sets cond flag,  if reg equals pdata */
+  % mask
+  % reg
+  [5] opcode
+  [6] reg
+  [3] 0
+  [9] mask
+  [9] 0
+end
+
+format   /* sets cond. flag, if reg equals LS half of shift reg with MS half of reg being mask */
+  ! 5 iverify
+  % reg
+  [5] opcode
+  [6] reg
+  [3] 2
+  [18] 0
+end
+
+format
+  ! 0x15 qisolate1
+  % reg
+  [5] opcode
+  [6] reg
+  [3] 3
+  [18] -1
+end
+
+format
+  ! 0x15 qisolate0
+  % reg
+  [5] opcode
+  [6] reg
+  [3] 3
+  [18] 0
+end
+
+	/* REVAB bug: cannot access bit above 35 */
+format
+  ! 5 isolate1
+  % addr
+  % reg
+  [5] opcode
+  [6] reg
+  [3] 3
+  [9] -1
+  [9] addr
+end
+
+format
+  ! 5 isolate0
+  % addr
+  % reg
+  [5] opcode
+  [6] reg
+  [3] 3
+  [9] 0
+  [9] addr
+end
+
+format
+  ! 11 setarg
+  % immediate
+  [5] opcode
+  [27] immediate
+end
+
+format
+  ! 0x1b arg
+  % immediate
+  % reg
+  [5] opcode
+  [6] reg
+  [21] immediate
+end
+
+  
+format
+  ! 0 sleep
+  [5] opcode
+  [27] 0
+end
+
+format
+  ! 0 snooze
+  [5] opcode
+  [6] -1
+  [21] 0
+end
+
+format
+  ! 0 revision
+  % rev_num
+  [5] opcode
+  [27] rev_num
+end
+
+format
+  ! 0x18 loop   /* branch when loopcnt is NOT zero, and decrease loopcnt */
+  % addr
+  [5] opcode
+  [4] 4
+  [8] 0
+  [15] addr
+end
+
+format
+  ! 0x18 beq   /* branch when pdata is equal to immediate */
+  % imme
+  % addr
+  [5] opcode
+  [4] 0
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 bne   /* branch when pdata is NOT equal to immediate */
+  % imme
+  % addr
+  [5] opcode
+  [4] 1
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 rtneq   /* return when pdata is equal to immediate */
+  % imme
+  [5] opcode
+  [4] 2
+  [8] imme
+  [15] 0
+end
+
+format
+  ! 0x18 rtnne   /* return when pdata is NOT equal to immediate */
+  % imme
+  [5] opcode
+  [4] 3
+  [8] imme
+  [15] 0
+end
+
+format
+  ! 0x18 bbit1   /* branch when pdata's imme bit is 1 */
+  % imme
+  % addr
+  [5] opcode
+  [4] 5
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 bbit0   /* branch when pdata's imme bit is 0 */
+  % imme
+  % addr
+  [5] opcode
+  [4] 6
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 rtnbit1   /* return when pdata's imme bit is 0 */
+  % imme
+  [5] opcode
+  [4] 7
+  [8] imme
+  [15] 0
+end
+
+format
+  ! 0x18 rtnbit0   /* return when pdata's imme bit is 0 */
+  % imme
+  [5] opcode
+  [4] 8
+  [8] imme
+  [15] 0
+end
+
+format
+  ! 8	bpatch
+  % imme
+  % addr
+  [5] opcode
+  [4] 9
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 8	bpatchx
+  % imme
+  % addr
+  [5] opcode
+  [4] 14
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 bmark1   /* branch when mark's imme bit is 1 */
+  % imme
+  % addr
+  [5] opcode
+  [4] 10
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 bmark0   /* branch when mark's imme bit is 0 */
+  % imme
+  % addr
+  [5] opcode
+  [4] 11
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 rtnmark1   /* return when mark's imme bit is 0 */
+  % imme
+  [5] opcode
+  [4] 12
+  [8] imme
+  [15] 0
+end
+
+format
+  ! 0x18 rtnmark0   /* return when mark's imme bit is 0 */
+  % imme
+  [5] opcode
+  [4] 13
+  [8] imme
+  [15] 0
+end
+
+format
+  ! 3 mul32                  /* immediate mult regr */ 
+  % regr
+  % immediate                                  
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 31           
+  [6] regw
+  [9] immediate
+end
+
+format
+  ! 0x13 imul32           /* pdata mult regr 32x32=64bit */  
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 31                   
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 0x13 imults           /* pdata mult regr 32x32=64bit, signed */  
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 16
+  [6] regw
+  [9] 0
+end
+
+
+format
+  ! 3 byteswap
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 33
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 shasx          /* SHA256 Sx operation, immediate is Sx */
+  % regr
+  % immediate
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 28
+  [6] regw
+  [9] immediate
+end
+
+
+format
+  ! 0x13 regexrot 	/* regext[0] <- regext[7], regext[1] <- regext[0], regext[2] <- regext[1] ... */
+  [5] opcode
+  [6] 0
+  [6] 29
+  [6] null
+  [9] 0
+end
+
+format
+  ! 0x13 adpcm         // encode adpcm from regr into regw
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 43
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 0x13 pcm         // decode adpcm from regr into regw
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 44
+  [6] regw
+  [9] 0
+end
+
+
Index: usb_pc_ai_voice/format/debug.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/debug.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/debug.format	(working copy)
@@ -0,0 +1,6 @@
+xmemalloc(
+
+1 mem_rf_debug_rx_gpio
+1 mem_rf_debug_tx_gpio
+)
+
Index: usb_pc_ai_voice/format/g24_protocol_stack/24g.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g.format	(working copy)
@@ -0,0 +1,80 @@
+
+xmemalloc g24(
+6 mem_24g_lap
+34 mem_24g_rxbuf
+32 mem_24g_txbuf
+36 mem_24g_txpayload
+32 mem_24g_rxpayload
+1 mem_24g_rxdata_length
+1 mem_24g_pid
+1 mem_24g_no_ack
+3 mem_24g_sta_crc
+3 mem_24g_last_crc
+1 mem_24g_sta_pid
+1 mem_24g_last_pid
+1 mem_24g_datalen
+1 mem_24g_data_type
+1 mem_24g_txlen
+2 mem_24g_rx_window
+1 mem_24g_ch
+1 mem_24g_current_ch_number
+4 mem_24g_addr
+4 mem_24g_ch_map1
+4 mem_24g_ch_map2
+4 mem_24g_ch_map3
+4 mem_24g_ch_map4
+4 mem_24g_tx_btclk
+1 mem_24g_interval
+1 mem_24g_interval_min
+1 mem_24g_interval_max
+2 mem_24g_syncword
+1 mem_24g_syncword_crc8
+1 mem_24g_get_syncword_crc8
+1 mem_24g_pair_switch
+8 mem_24g_enter_hibernate
+
+1 mem_24g_rx_phy
+1 mem_24g_tx_phy
+
+1 mem_24g_ch_map_update
+4 mem_24g_ch_update_map1
+4 mem_24g_ch_update_map2
+4 mem_24g_ch_update_map3
+4 mem_24g_ch_update_map4
+
+1 mem_24g_disable_fec1
+1 mem_24g_off_type
+)
+
+
+xmemalloc g24_tx(
+1 mem_rssi_hex_received
+
+)
+
+
+
+(//mem_24g_data_type
+1 TYPE_MS
+2 TYPE_KB
+0x07 bits_data
+//0-2 data type
+3 bit_abort
+4 bit_hop
+5 bit_sync
+//6-7 channel offset
+)
+
+
+(
+0 ERR_NULL
+1 ERR_SYNC_TO
+2 ERR_HEC
+3 ERR_LR_LEN
+4 ERR_TYPE
+5 ERR_LEN_OVER
+6 ERR_CRC
+)
+
+
+
Index: usb_pc_ai_voice/format/g24_protocol_stack/24g_pair.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g_pair.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g_pair.format	(working copy)
@@ -0,0 +1,52 @@
+
+
+xmemalloc g24(
+4 mem_24g_pair_addr
+1 mem_24g_pair_ch
+1 mem_24g_pair_tx_power
+
+)
+
+xmemalloc g24_tx(
+1 mem_24g_pair_sm
+1 mem_24g_pair_no_ack
+2 mem_24g_pair_timeout_init
+2 mem_24g_pair_timeout
+2 mem_24g_pair_count
+)
+
+xmemalloc g24_rx(
+1 mem_24g_device1_bind_step
+1 mem_24g_device2_bind_step
+1 mem_24g_bind_device_status
+8 mem_24g_bind_payload
+1 mem_24g_device1_bind_disable
+1 mem_24g_device2_bind_disable
+
+)
+
+(//mem_24g_pair_sm
+0 STATE_24G_PAIRING_NULL
+1 STATE_24G_PAIRING_1
+2 STATE_24G_PAIRING_2
+3 STATE_24G_PAIRING_3
+4 STATE_24G_PAIRING_4
+0X11 STATE_24G_PAIRING_1_WAITING_ACK
+0X12 STATE_24G_PAIRING_2_WAITING_ACK
+0X13 STATE_24G_PAIRING_3_WAITING_ACK
+0X14 STATE_24G_PAIRING_4_WAITING_ACK
+0XFF STATE_24G_PAIRING_SUCCESS
+)
+
+(
+0x01 DATATYPE_DEVICE1	//mouse
+0x02 DATATYPE_DEVICE2	//keyboard
+0xaa DATATYPE_BIND		//bind step 1
+0x55 DATATYPE_CONFIG	//bind step 2
+0x22 DATATYPE_OK		//bind step 3
+0xff DATATYPE_ATTEMP	//reconn
+)
+
+(
+5 BIND_MODE_CONTINUE
+)
Index: usb_pc_ai_voice/format/g24_protocol_stack/24g_receiver.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g_receiver.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g_receiver.format	(working copy)
@@ -0,0 +1,50 @@
+
+
+xmemalloc g24_rx(
+2 mem_cb_24g_receive_process
+2 mem_cb_24g_ackpayload
+2 mem_cb_24g_data_device1
+2 mem_cb_24g_data_device2
+34 mem_24g_rxdata_temp
+1 mem_24g_abort_packet
+4 mem_24g_hop_btclk
+1 mem_24g_hop_interval
+1 mem_24g_pair_mode
+1 mem_24g_ackpayload_enable
+1 mem_24g_hop_packet
+1 mem_24g_mode_switch
+1 mem_24g_nodata_timer_enable
+
+1 mem_24g_mode_init
+1 mem_24g_work_mode
+1 mem_24g_time_slice
+1 mem_24g_self_last_ch
+1 mem_24g_self_ch_number
+1 mem_24g_self_config_ch_once
+1 mem_24g_device1_last_ch
+1 mem_24g_device1_ch_number
+1 mem_24g_device1_config_ch_once
+1 mem_24g_device2_last_ch
+1 mem_24g_device2_ch_number
+1 mem_24g_device2_config_ch_once
+1 mem_24g_led_status
+1 mem_24g_bind_mode_continue
+
+1 mem_tx_power_temp
+
+1 mem_24g_mode_B_S_switch
+1 mem_24g_mode_B_S_switch_init
+2 mem_24g_mode_B_S_switch_cnt
+1 mem_24g_mode_B_S_switch_exit
+1 mem_24g_B_S_time_slice
+1 mem_24g_B_S_mode_switch_disable
+
+1 mem_24g_bind_device_living
+)
+
+
+(
+0 bit_ack_24g
+)
+
+
Index: usb_pc_ai_voice/format/g24_protocol_stack/24g_reconn.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g_reconn.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/format/g24_protocol_stack/24g_rssi.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g_rssi.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g_rssi.format	(working copy)
@@ -0,0 +1,40 @@
+
+xmemalloc g24(
+1 mem_rssi_buff_index
+)
+
+
+xmemalloc g24_tx(
+1 mem_rssi_signal_index
+2 mem_rssi_signal_buf_ptr
+
+)
+
+
+xmemalloc g24_rx(
+1 mem_rssi_noise_avg
+1 mem_rssi_noise_index
+
+1 mem_rssi_noise_self_avg
+1 mem_rssi_noise_device1_avg
+1 mem_rssi_noise_device2_avg
+1 mem_rssi_noise_self_index
+1 mem_rssi_noise_device1_index
+1 mem_rssi_noise_device2_index
+
+2 mem_rssi_noise_buffer_ptr
+2 mem_rssi_noise_self_buffer_ptr
+2 mem_rssi_noise_device1_buffer_ptr
+2 mem_rssi_noise_device2_buffer_ptr
+
+)
+
+
+
+(
+0x50 RSSI_THRESH_NOISE
+)
+
+
+
+
Index: usb_pc_ai_voice/format/g24_protocol_stack/24g_transmitter.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g_transmitter.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g_transmitter.format	(working copy)
@@ -0,0 +1,67 @@
+
+
+xmemalloc g24_tx(
+2 mem_cb_24g_transmit_data
+2 mem_cb_24g_search_receiver
+2 mem_cb_24g_lpm_before
+2 mem_cb_24g_transmit_short_sleep
+2 mem_cb_24g_transmit_long_sleep
+
+1 mem_24g_conn_sm
+
+1 mem_24g_ensure
+2 mem_24g_txfail_cnt
+1 mem_24g_attempt_fail_flag
+
+1 mem_24g_retry
+1 mem_24g_abort_pac
+1 mem_24g_max_retry
+4 mem_24g_device_addr
+3 mem_24g_short_sleep_set
+8 mem_24g_long_sleep_set
+4 mem_24g_long_sleep_set1
+
+1 mem_24g_pac_index
+1 mem_24g_transmit_by_interrupt
+2 mem_24g_transmit_by_interrupt_exit_count
+2 mem_24g_transmit_by_interrupt_exit_count_init
+2 mem_24g_long_sleep_param_update_timer_init
+2 mem_24g_long_sleep_param_update_timer
+
+1 mem_24g_fast_hop_count
+2 mem_24g_retransmit
+)
+
+(
+1 NO_ACK_24G
+0 WITH_ACK_24G
+)
+
+(//mem_24g_conn_sm
+0 STATE_24G_STOP
+0 STATE_24G_START
+1 STATE_24G_PAIR
+2 STATE_24G_RECONN
+)
+
+(//mem_24g_transmit_by_interrupt
+1 G24_TX_TIMER_INT_ENABLE
+0 G24_TX_TIMER_INT_DISABLE
+)
+
+
+(
+1 OFFSET_DATA_TYPE
+2 OFFSET_LR_DATA_TYPE
+)
+
+(
+0x017700 G24_LONG_SLEEP_STEP1	//8ms
+0x36ee80 G24_LONG_SLEEP_STEP2	//300ms
+0x124f80 G24_LONG_SLEEP_STEP3	//100ms
+63500 G24_8MS_INTERVAL_PARAM		//8ms
+12210 G24_4MS_INTERVAL_PARAM
+)
+
+
+
Index: usb_pc_ai_voice/format/g24_protocol_stack/24g_txpower_ctrl.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g_txpower_ctrl.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/g24_protocol_stack/24g_txpower_ctrl.format	(working copy)
@@ -0,0 +1,20 @@
+
+xmemalloc g24_tx(
+1 mem_rssi_avg_received
+1 mem_power_ctrl_level
+1 mem_power_ctrl_pac_succ_cnt
+1 mem_power_ctrl_pac_succ_cnt_init
+
+1 mem_rssi_dis_min_24g
+1 mem_rssi_dis_max_24g
+1 mem_rssi_hex_received_max_value
+
+1 mem_rssi_dis_min_ble
+1 mem_rssi_dis_max_ble
+)
+
+
+(
+50 POWER_CTRL_DECRS_THRESHOLD
+)
+
Index: usb_pc_ai_voice/format/hci.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/hci.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/hci.format	(working copy)
@@ -0,0 +1,520 @@
+
+
+memalloc hci_boot(
+2 mem_hci_opcode_ocf
+1 mem_hci_opcode_ogf
+
+//event head
+1 mem_hci_event_head_type
+1 mem_hci_event_head_event_code
+1 mem_hci_event_para_total_length
+
+//command complete
+1 mem_hci_command_complete_num_hci_command_packet
+0 mem_hci_command_complete_command_opcode
+2 mem_hci_opcode
+0 mem_hci_command_complete_return_parameter
+1 mem_hci_command_complete_return_parameter_status
+0 mem_hci_command_complete_return_parameter_chip_id
+
+)
+
+xmemalloc hci_boot(
+1 mem_hci_uart_tx_gpio
+1 mem_hci_uart_rx_gpio
+1 mem_hci_uart_rts_gpio
+1 mem_hci_uart_cts_gpio
+1 mem_hci_pwm_12mhz_gpio
+)
+
+(
+0x07 HCI_UART_TX_GPIO_NUM
+0x06 HCI_UART_RX_GPIO_NUM
+0x09 HCI_UART_RTS_GPIO_NUM
+0x0a HCI_UART_CTS_GPIO_NUM
+0x0c HCI_PMW_12MHZ_GPIO_NUM
+)
+
+(
+0x00 COMMAND_SUCCEEDED
+0x01 COMMAND_UNKNOWN
+0x0c COMMAND_DISALLOWED
+)
+
+//HCI H4 Packet TYPE
+(
+0x01 HCI_H4_TYPE_CMD
+0x02 HCI_H4_TYPE_ACL
+0x04 HCI_H4_TYPE_EVENT
+)
+
+(
+0x00 BT_ACL_START_NO_FLUSH
+0x01 BT_ACL_CONT
+0x02 BT_ACL_START
+)
+
+// HCI command opcode group field values
+(
+0x01 HCI_OGF_LINK_CONTROL
+0x02 HCI_OGF_LINK_POLICY
+0x03 HCI_OGF_CONTROLLER_AND_BASEBAND
+0x04 HCI_OGF_INFOMATIONAL_PARAM
+0x05 HCI_OGF_STATUS_PARAM
+0x06 HCI_OGF_TEST
+0x08 HCI_OGF_LE_CONTROLLER
+0x3f HCI_OGF_VENDOR_SPECIFIC_DEBUG
+)
+
+// HCI link control opcode command field values, OGF=1
+(
+0x01 HCI_INQUIRY 
+0x02 HCI_INQUIRY_CANCEL 
+0x03 HCI_PERIODIC_INQUIRY_MODE 
+0x04 HCI_EXIT_PERIODIC_INQUIRY_MODE 
+0x05 HCI_CREATE_CONNECTION 
+0x06 HCI_DISCONNECT 
+0x07 HCI_ADD_SCO_CONNECTION 
+0x08 HCI_CREATE_CONNECTION_CANCEL
+0x09 HCI_ACCEPT_CONNECTION 
+0x0A HCI_REJECT_CONNECTION 
+0x0B HCI_LINK_KEY_REQUEST_REPLY 
+0x0C HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY 
+0x0D HCI_PIN_CODE_REQUEST_REPLY 
+0x0E HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY 
+0x0F HCI_CHANGE_CONNECTION_PACKET_TYPE 
+0x11 HCI_AUTHENTICATION_REQUESTED 
+0x13 HCI_SET_CONNECTION_ENCRYPTION 
+0x15 HCI_CHANGE_CONNECTION_LINK_KEY 
+0x17 HCI_MASTER_LINK_KEY 
+0x19 HCI_REMOTE_NAME_REQUEST 
+0x1A HCI_REMOTE_NAME_REQUEST_CANCEL
+0x1B HCI_READ_REMOTE_SUPPORTED_FEATURES 
+0x1C HCI_READ_REMOTE_EXT_FEATURES 
+0x1D HCI_READ_REMOTE_VERSION_INFORMATION 
+0x1F HCI_READ_CLOCK_OFFSET 
+0x20 HCI_READ_LMP_HANDLE
+0x28 HCI_SETUP_SCO_CONNECTION
+0x29 HCI_ACCEPT_SCO_CONNECTION
+0x2A HCI_REJECT_SCO_CONNECTION
+0x2B HCI_IO_CAP_REQUEST_REPLY
+0x2C HCI_USER_CONFIRMATION_REQUEST_REPLY
+0x2D HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY
+0x2E HCI_USER_PASSKEY_REQUEST_REPLY
+0x2F HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY
+0x30 HCI_REMOTE_OOB_DATA_REQUEST_REPLY
+0x33 HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY
+0x34 HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY
+0x35 HCI_CREATE_PHYSICAL_LINK
+0x36 HCI_ACCEPT_PHYSICAL_LINK
+0x37 HCI_DISCONNECT_PHYSICAL_LINK
+0x38 HCI_CREATE_LOGICAL_LINK
+0x39 HCI_ACCEPT_LOGICAL_LINK
+0x3A HCI_DISCONNECT_LOGICAL_LINK
+0x3B HCI_LOGICAL_LINK_CANCEL
+0x3C HCI_FLOW_SPEC_MODIFY
+0x3D HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION
+0x3E HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST
+0x3F HCI_TRUNCATED_PAGE
+0x40 HCI_TRUNCATED_PAGE_CANCEL
+0x41 HCI_SET_CONNECTIONLESS_SLAVE_BROADCAST
+0x42 HCI_SET_CONNECTIONLESS_SLAVE_BROADCAST_RECEIVE
+0x43 HCI_START_SYNCHRONIZATION_TRAIN
+0x44 HCI_RECEIVE_SYNCHRONIZATION_TRAIN
+0x45 HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY
+)
+
+
+// HCI link policy commands OCF value, OGF=2
+(
+0x01 HCI_HOLD_MODE 
+0x03 HCI_SNIFF_MODE 
+0x04 HCI_EXIT_SNIFF_MODE 
+0x05 HCI_PARK_MODE 
+0x06 HCI_EXIT_PARK_MODE 
+0x07 HCI_QOS_SETUP 
+0x09 HCI_ROLE_DISCOVERY 
+0x0B HCI_SWITCH_ROLE 
+0x0C HCI_READ_LINK_POLICY_SETTINGS 
+0x0D HCI_WRITE_LINK_POLICY_SETTINGS 
+0x0e HCI_READ_DEFAULT_LINK_POLICY_SETTINGS
+0x0f HCI_WRITE_DEFAULT_LINK_POLICY_SETTINGS
+0x10 HCI_FLOW_SPECIFICATION
+0x11 HCI_SNIFF_SUBRATING
+)
+
+// HCI host controller and baseband commands OCF values, OGF=3
+(
+0x01 HCI_SET_EVENT_MASK 
+0x03 HCI_RESET 
+0x05 HCI_SET_EVENT_FILTER 
+0x08 HCI_FLUSH 
+0x09 HCI_READ_PIN_TYPE 
+0x0A HCI_WRITE_PIN_TYPE 
+0x0B HCI_CREATE_NEW_UNIT_KEY 
+0x0D HCI_READ_STORED_LINK_KEY 
+0x11 HCI_WRITE_STORED_LINK_KEY 
+0x12 HCI_DELETE_STORED_LINK_KEY 
+0x13 HCI_WRITE_LOCAL_NAME 
+0x14 HCI_READ_LOCAL_NAME 
+0x15 HCI_READ_CONN_ACCEPT_TIMEOUT 
+0x16 HCI_WRITE_CONN_ACCEPT_TIMEOUT 
+0x17 HCI_READ_PAGE_TIMEOUT 
+0x18 HCI_WRITE_PAGE_TIMEOUT 
+0x19 HCI_READ_SCAN_ENABLE 
+0x1A HCI_WRITE_SCAN_ENABLE 
+0x1B HCI_READ_PAGE_SCAN_ACTIVITY 
+0x1C HCI_WRITE_PAGE_SCAN_ACTIVITY 
+0x1D HCI_READ_INQUIRY_SCAN_ACTIVITY 
+0x1E HCI_WRITE_INQUIRY_SCAN_ACTIVITY 
+0x1F HCI_READ_AUTHENTICATION_ENABLE 
+0x20 HCI_WRITE_AUTHENTICATION_ENABLE 
+0x21 HCI_READ_ENCRYPTION_MODE 
+0x22 HCI_WRITE_ENCRYPTION_MODE 
+0x23 HCI_READ_CLASS_OF_DEVICE 
+0x24 HCI_WRITE_CLASS_OF_DEVICE 
+0x25 HCI_READ_VOICE_SETTING 
+0x26 HCI_WRITE_VOICE_SETTING 
+0x27 HCI_READ_AUTOMATIC_FLUSH_TIMEOUT 
+0x28 HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT 
+0x29 HCI_READ_NUM_BROADCAST_RETRANSMISSIONS 
+0x2A HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS 
+0x2B HCI_READ_HOLD_MODE_ACTIVITY 
+0x2C HCI_WRITE_HOLD_MODE_ACTIVITY 
+0x2D HCI_READ_TRANSMIT_POWER_LEVEL 
+0x2E HCI_READ_SCO_FLOW_CONTROL_ENABLE 
+0x2F HCI_WRITE_SCO_FLOW_CONTROL_ENABLE 
+0x31 HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL 
+0x33 HCI_HOST_BUFFER_SIZE 
+0x35 HCI_HOST_NUM_COMPLETED_PACKETS 
+0x36 HCI_READ_LINK_SUPERVISION_TIMEOUT 
+0x37 HCI_WRITE_LINK_SUPERVISION_TIMEOUT 
+0x38 HCI_READ_NUMBER_OF_SUPPORTED_IAC 
+0x39 HCI_READ_CURRENT_IAC_LAP 
+0x3A HCI_WRITE_CURRENT_IAC_LAP 
+0x3B HCI_READ_PAGE_SCAN_PERIOD_MODE 
+0x3C HCI_WRITE_PAGE_SCAN_PERIOD_MODE 
+0x3D HCI_READ_PAGE_SCAN_MODE 
+0x3E HCI_WRITE_PAGE_SCAN_MODE 
+0x3F HCI_SET_AFH_CHANNEL_CLASSIFICATION 
+
+
+0x42 HCI_READ_INQUIRY_SCAN_TYPE 
+0x43 HCI_WRITE_INQUIRY_SCAN_TYPE 
+0x44 HCI_READ_INQUIRY_MODE 
+0x45 HCI_WRITE_INQUIRY_MODE 
+0x46 HCI_READ_PAGE_SCAN_TYPE 
+0x47 HCI_WRITE_PAGE_SCAN_TYPE 
+
+0x48 HCI_READ_AFH_CHANNEL_ACCESSMENT_MODE 
+0x49 HCI_WRITE_AFH_CHANNEL_ACCESSMENT_MODE 
+0x51 HCI_READ_EXTENDED_INQUIRY_RESPONSE
+0x52 HCI_WRITE_EXTENDED_INQUIRY_RESPONSE
+0x53 HCI_REFRESH_ENCRYPTION_KEY
+0x55 HCI_READ_SIMPLE_PAIRING_MODE
+0x56 HCI_WRITE_SIMPLE_PAIRING_MODE
+0x57 HCI_READ_LOCAL_OOB_DATA
+0x58 HCI_READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL
+0x59 HCI_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL
+0x60 HCI_SEND_KEYPRESS_NOTIFICATION
+0x5A HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING
+0x5B HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING
+0x5F HCI_ENHANCED_FLUSH
+0x61 HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT
+0x62 HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT
+0x63 HCI_SET_EVENT_MASK_PAGE_2
+0x64 HCI_READ_LOCATION_DATA
+0x65 HCI_WRITE_LOCATION_DATA
+0x66 HCI_READ_FLOW_CONTROL_MODE
+0x67 HCI_WRITE_FLOW_CONTROL_MODE
+0x68 HCI_READ_ENHANCE_TRANSMIT_POWER_LEVEL
+0x69 HCI_READ_BEST_EFFORT_FLUSH_TIMEOUT
+0x6A HCI_WRITE_BEST_EFFORT_FLUSH_TIMEOUT
+0x6B HCI_SHORT_RANGE_MODE
+0x6C HCI_READ_LE_HOST_SUPPORT
+0x6D HCI_WRITE_LE_HOST_SUPPORT
+0x6E HCI_SET_MWS_CHANNEL_PARAMETERS
+0x6F HCI_SET_EXTERNAL_FRAME_CONFIGURATION
+0x70 HCI_SET_MWS_SIGNALING
+0x71 HCI_SET_MWS_TRANSPORT_LAYER
+0x72 HCI_SET_MWS_SCAN_FREQUENCY_TABLE
+0x73 HCI_SET_MWS_PATTERN_CONFIGURATION
+0x74 HCI_SET_RESERVED_LT_ADDR
+0x75 HCI_DELETE_RESERVED_LT_ADDR
+0x76 HCI_SET_CONNECTIONLESS_SLAVE_BROADCAST_DATA
+0x77 HCI_READ_SYNCHRONIZATION_TRAIN_PARAMETERS
+0x78 HCI_WRITE_SYNCHRONIZATION_TRAIN_PARAMETERS
+0x79 HCI_READ_SECURE_CONNECTIONS_HOST_SUPPORT
+0x7A HCI_WRITE_SECURE_CONNECTIONS_HOST_SUPPORT
+0x7B HCI_READ_AUTHENTICATED_PAYLOAD_TIMEOUT
+0x7C HCI_WRITE_AUTHENTICATED_PAYLOAD_TIMEOUT
+0x7D HCI_READ_LOCAL_OOB_EXTENDED_DATA
+0x7E HCI_READ_EXTENDED_PAGE_TIMEOUT
+0x7F HCI_WRITE_EXTENDED_PAGE_TIMEOUT
+0x80 HCI_READ_EXTENDED_INQUIRY_LENGTH
+0x81 HCI_WRITE_EXTENDED_INQUIRY_LENGTH
+)
+
+
+// HCI informational parameters OCF values, OGF=4
+(
+0x01 HCI_READ_LOCAL_VERSION_INFORMATION 
+0x02 HCI_READ_LOCAL_SUPPORTED_COMMANDS
+0x03 HCI_READ_LOCAL_SUPPORTED_FEATURES 
+0x04 HCI_READ_LOCAL_EXT_FEATURES 
+0x05 HCI_READ_BUFFER_SIZE 
+0x07 HCI_READ_COUNTRY_CODE 
+0x09 HCI_READ_BD_ADDR 
+0x0A HCI_REJECT_CONNECTION_REQUEST
+0x0B HCI_READ_LOCAL_SUPPORTED_CODECS
+)
+
+// HCI status parameters OCF values, OGF=5
+(
+0x01 HCI_READ_FAILED_CONTACT_COUNTER 
+0x02 HCI_RESET_FAILED_CONTACT_COUNTER 
+0x03 HCI_GET_LINK_QUALITY 
+0x05 HCI_READ_RSSI 
+0x06 HCI_READ_AFH_CHANNEL_MAP
+0x07 HCI_READ_BD_CLOCK
+0x08 HCI_READ_ENCRYPTION_KEY_SIZE
+0x09 HCI_READ_LOCAL_AMP_INFO
+0x0A HCI_READ_LOCAL_AMP_ASSOC
+0x0B HCI_WRITE_REMOTE_AMP_ASSOC
+0x0C HCI_GET_MWS_TRANSPORT_LAYER_CONFIGURATION
+0x0D HCI_SET_TRIGGERED_CLOCK_CAPTURE
+)
+
+// HCI testing command OCF values, OGF=6
+(
+0x01 HCI_READ_LOOPBACK_MODE 
+0x02 HCI_WRITE_LOOPBACK_MODE 
+0x03 HCI_ENABLE_DEVICE_UNDER_TEST_MODE 
+0x04 HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE
+0x07 HCI_ENABLE_AMP_RECEIVER_REPORTS
+0x08 HCI_AMP_TEST_END
+0x09 HCI_AMP_TEST
+0x0A HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE
+)
+
+// HCI vendor specific command OCF values -OGF=3F
+(
+0x01 HCI_WRITE_BD_ADDR 
+0x02 HCI_READ_INQUIRY_RESPONSE_TIMEOUT 
+0x03 HCI_WRITE_INQUIRY_RESPONSE_TIMEOUT 
+0x04 HCI_READ_PAGE_SCAN_REPETITION_MODE 
+0x05 HCI_WRITE_PAGE_SCAN_REPETITION_MODE 
+0x06 HCI_READ_PAGE_RESPONSE_TIMEOUT 
+0x07 HCI_WRITE_PAGE_RESPONSE_TIMEOUT 
+0x08 HCI_READ_NEW_CONNECTION_TIMEOUT 
+0x09 HCI_WRITE_NEW_CONNECTION_TIMEOUT 
+0x0a HCI_INITIALIZE_BASEBAND 
+0x0b HCI_WRITE_LOCAL_SUPPORTED_FEATURES 
+0x0c HCI_WRITE_PARK_PARAMETERS 
+0x0d HCI_READ_PARK_PARAMETERS 
+0x0e HCI_WRITE_QUALITY_OF_SERVICE 
+0x0f HCI_NOT_USED 
+0x10 HCI_MODIFY_BEACON_PARAMETERS 
+0x11 HCI_UNPARK_USING_PM_ADDR 
+0x12 HCI_WRITE_HOPPING_CHANNELS 
+0x13 HCI_SLEEP_FOREVER_MODE 
+0x14 HCI_WRITE_AUTO_PAGE_SCAN_ENABLE 
+0x15 HCI_READ_AUTO_PAGE_SCAN_ENABLE 
+0x16 HCI_SET_ENCRYPTION_KEY_SIZE 
+0x17 HCI_INVALIDATE_FLASH_AND_REBOOT 
+0x18 HCI_UPDATE_UART_BAUD_RATE 
+0x19 HCI_WRITE_GPIO_1_4_AS_OUTPUT 
+0x1A HCI_WRITE_GPIO_2_LED 
+0x1B HCI_SET_TESTMODE_TYPE 
+0x1C HCI_WRITE_SCO_PCM_INT_PARAM 
+0x1D HCI_READ_SCO_PCM_INT_PARAM 
+0x1E HCI_WRITE_PCM_DATA_FORMAT_PARAM 
+0x1F HCI_READ_PCM_DATA_FORMAT_PARAM 
+0x20 HCI_WRITE_COMFORT_NOISE_PARAM 
+0x21 HCI_READ_COMFORT_NOISE_PARAM 
+0x22 HCI_WRITE_SCO_TS 
+0x23 HCI_READ_SCO_TS 
+0x24 HCI_WRITE_PCM_LOOPBACK_MODE 
+0x25 HCI_READ_PCM_LOOPBACK_MODE 
+0x26 HCI_SET_TRANSMIT_POWER 
+0x27 HCI_SET_SLEEPMODE_PARAM 
+0x28 HCI_READ_SLEEPMODE_PARAM 
+0x29 HCI_SLEEPMODE_CMD 
+0x2A HCI_DELAY_PERIPHERAL_SCO_STARTUP 
+0x2B HCI_WRITE_RECEIVE_ONLY 
+0x2C HCI_WRITE_RATE_CONTROL 
+0x2D HCI_TX_UNMOD_CARRIER 
+0x2E HCI_DOWNLOAD_MINIDRIVER 
+0x2F HCI_CRYSTAL_PPM 
+0x30 HCI_SET_POWER_AMP_BIAS 
+0x31 HCI_SET_HAM_BEHAVIOR 
+0x32 HCI_SET_AFH_BEHAVIOR 
+0x33 HCI_READ_USER_DEFINED_NVRAM 
+0x34 HCI_ENABLE_RADIO 
+0x35 HCI_READ_DIAGNOSTIC_INFO 
+0x36 HCI_GET_HID_DEVICE_LIST 
+0x37 HCI_ADD_HID_DEVICE 
+0x38 HCI_READ_APP_FW_CONFIG_VERSION 
+0x39 HCI_DELETE_HID_DEVICE 
+0x3B HCI_ENABLE_USB_HID_EMULATION 
+// 0x3A available
+// 0x3B available
+0x3C HCI_SEND_LMPDU 
+0x3D HCI_AUTO_PAIR_REQ 
+0x3E HCI_READ_VS_EXTENSION 
+0x3F HCI_WRITE_VS_EXTENSION 
+
+0x77 HCI_OPCODE_FC77
+0x79 HCI_OPCODE_FC79
+0xC4 HCI_DOWNLOAD_PATCH
+0xCC HCI_OPCODE_FCCC
+
+0x00 HCI_VENDOR_CMD_RESET
+0x01 HCI_VENDOR_CMD_CHIPID
+0x02 HCI_VENDOR_CMD_BAUD
+0x03 HCI_VENDOR_CMD_PATCH
+0x04 HCI_VENDOR_CMD_PATCH_DONE
+0x05 HCI_VENDOR_CMD_ECHO
+0x06 HCI_VENDOR_CMD_BDADDR
+
+0x07 HCI_VENDOR_CMD_ENTER_LPM
+0x08 HCI_VENDOR_CMD_COMMU_READY
+
+0x10 HCI_VENDOR_CMD_MEM
+0x11 HCI_VENDOR_CMD_EEP
+
+0X12 HCI_VENDOR_CMD_PATCH_SEC_INIT
+0X13 HCI_VENDOR_CMD_PATCH_SEC
+0x14 HCI_VENDOR_CMD_SET_FLOW_CONTROL
+)
+
+//HCI LE controller command OCF values, OGF=8
+(
+0x01 HCI_LE_SET_EVENT_MASK
+0x02 HCI_LE_READ_BUFFER_SIZE
+0x03 HCI_LE_READ_LOCAL_SUPPORTED_FEATURES
+0x05 HCI_LE_SET_RANDOM_ADDRESS
+0x06 HCI_LE_SET_ADVERTISING_PARAMETERS
+0x07 HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER
+0x08 HCI_LE_SET_ADVERTISING_DATA
+0x09 HCI_LE_SET_SCAN_RESPONSE_DATA
+0x0A HCI_LE_SET_ADVERTISE_ENABLE
+0x0B HCI_LE_SET_SCAN_PARAMETERS
+0x0C HCI_LE_SET_SCAN_ENABLE
+0x0D HCI_LE_CREATE_CONNECTION
+0x0E HCI_LE_CREATE_CONNECTION_CANCEL
+0x0F HCI_LE_READ_WHITE_LIST_SIZE
+0x10 HCI_LE_CLEAR_WHITE_LIST
+0x11 HCI_LE_ADD_DEVICE_TO_WHITE_LIST
+0x12 HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST
+0x13 HCI_LE_CONNECTION_UPDATE
+0x14 HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION
+0x15 HCI_LE_READ_CHANNEL_MAP
+0x16 HCI_LE_READ_REMOTE_USED_FEATURES
+0x17 HCI_LE_ENCRYPT
+0x18 HCI_LE_RAND
+0x19 HCI_LE_START_ENCRYPTION
+0x1A HCI_LE_LONG_TERM_KEY_REQUEST_REPLY
+0x1B HCI_LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY
+0x1C HCI_LE_READ_SUPPORTED_STATES
+0x1D HCI_LE_RECEIVER_TEST
+0x1E HCI_LE_TRANSMITTER_TEST
+0x1F HCI_LE_TEST_END
+0x20 HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY
+0x21 HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY
+)
+// HCI event code
+(
+0x01 HCI_EVENT_INQUIRY_COMPLETE
+0x02 HCI_EVENT_INQUIRY_RESULT
+0x03 HCI_EVENT_CONNECTION_COMPLETE
+0x04 HCI_EVENT_CONNECTION_REQUEST
+0x05 HCI_EVENT_DISCONNECTION_COMPLETE
+0x06 HCI_EVENT_AUTHENTICATION_COMPLETE
+0x07 HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE
+0x08 HCI_EVENT_ENCRYPTION_CHANGE_COMPLETE
+0x09 HCI_EVENT_CHANGE_CONNECTION_LINK_KEY_COMPLETE
+0x0A HCI_EVENT_MASTER_LINK_KEY_COMPLETE
+0x0B HCI_EVENT_READ_REMOTE_FEATURES_COMPLETE
+0x0C HCI_EVENT_READ_REMOTE_VERSION_INFORMATION_COMPLETE
+0x0D HCI_EVENT_QOS_SETUP_COMPLETE
+0x0E HCI_EVENT_COMMAND_COMPLETE
+0x0F HCI_EVENT_COMMAND_STATUS
+0x10 HCI_EVENT_HARDWARE_ERROR
+0x11 HCI_EVENT_FLUSH_OCCURRED
+0x12 HCI_EVENT_ROLE_CHANGE
+0x13 HCI_EVENT_NUM_COMPLETED_PACKETS
+0x14 HCI_EVENT_MODE_CHANGE
+0x15 HCI_EVENT_RETURN_LINK_KEYS
+0x16 HCI_EVENT_PIN_CODE_REQUEST
+0x17 HCI_EVENT_LINK_KEY_REQUEST
+0x18 HCI_EVENT_LINK_KEY_NOTIFICATION
+0x19 HCI_EVENT_LOOPBACK_COMMAND
+0x1A HCI_EVENT_DATA_BUFFER_OVERFLOW
+0x1B HCI_EVENT_MAX_SLOTS_CHANGE
+0x1C HCI_EVENT_READ_CLOCK_OFFSET_COMPLETE
+0x1D HCI_EVENT_CONNECTION_PACKET_TYPE_CHANGED
+0x1E HCI_EVENT_QOS_VIOLATION
+0x1F HCI_EVENT_PAGE_SCAN_MODE_CHANGE
+0x20 HCI_EVENT_PAGE_SCAN_REPETITION_MODE_CHANGE
+0x21 HCI_EVENT_FLOW_SPECIFICATION_COMPLETE
+0x22 HCI_EVENT_INQUIRY_RESULT_WITHRSSI
+0x23 HCI_EVENT_READ_REMOTE_EXT_FEATURES_COMPLETE
+0x2C HCI_EVENT_SCO_CONNECTION_COMPLETE
+0x2D HCI_EVENT_SCO_CONNECTION_CHANGED
+0x2E HCI_EVENT_SNIFF_SUBRATING
+0x2F HCI_EVENT_EXT_INQUIRY_RESULT
+0x30 HCI_EVENT_ENCRYPT_KEY_REFRESH_COMPLETE
+0x31 HCI_EVENT_IO_CAP_REQ
+0x32 HCI_EVENT_IO_CAP_RESPONSE
+0x33 HCI_EVENT_USER_CONFIRMATION_REQUEST
+0x34 HCI_EVENT_UESR_PASSKEY_REQUEST
+0x35 HCI_EVENT_REMOTE_OOB_DATA_REQUEST
+0x36 HCI_EVENT_SIMPLE_PAIRING_COMPLETE
+0x38 HCI_EVENT_LINK_SUPERVISION_TIMEOUT_CHANGED
+0x39 HCI_EVENT_ENHANCED_FLUSH_COMPLETE
+0x3B HCI_EVENT_USER_PASSKEY_NOTIFICATION
+0x3C HCI_EVENT_KEYPRESS_NOTIFICATION
+0x3D HCI_EVENT_REMOTE_HOST_SUPPORTED_FEATURES_NOTIFICATION 
+0x3E HCI_EVENT_LE_META_EVENT
+0x40 HCI_EVENT_PHYSICAL_LINK_COMPLETE
+0x41 HCI_EVENT_CHANNEL_SELECTED
+0x42 HCI_EVENT_DISCONNECTION_PHYSICAL_LINK_COMPLETE
+0x43 HCI_EVENT_PHYSICAL_LINK_LOSS_EARLY_WARNING
+0x44 HCI_EVENT_PHYSICAL_LINK_RECOVERY
+0x45 HCI_EVENT_LOGICAL_LINK_COMPLETE
+0x46 HCI_EVENT_DISCONNECTION_LOGICAL_LINK_COMPLETE
+0x47 HCI_EVENT_FLOW_SPEC_MODIFY_COMPLETE
+0x48 HCI_EVENT_NUMBER_OF_COMPLETED_DATA_BLOCKS
+0x49 HCI_EVENT_AMP_START_TEST
+0x4A HCI_EVENT_AMP_TEST_END
+0x4B HCI_EVENT_AMP_RECEIVER_REPORT
+0x4C HCI_EVENT_SHORT_RANGE_MODE_CHANGE_COMPLETE
+0x4D HCI_EVENT_AMP_STATUS_CHANGE
+0x4E HCI_EVENT_TRIGGERED_CLOCK_CAPTURE
+0x4F HCI_EVENT_SYNCHRONIZATION_TRAIN_COMPLETE
+0x50 HCI_EVENT_SYNCHRONIZATION_TRAIN_RECEIVED
+0x51 HCI_EVENT_CONNECTIONLESS_SLAVE_BROADCAST_RECEIVE
+0x52 HCI_EVENT_CONNECTIONLESS_SLAVE_BROADCAST_TIMEOUT
+0x53 HCI_EVENT_TRUNCATED_PAGE_COMPLETE
+0x54 HCI_EVENT_SLAVE_PAGE_RESPONSE_TIMEOUT
+0x55 HCI_EVENT_CONNECTIONLESS_SLAVE_BROADCAST_CHANNEL_MAP_CHANGE
+0x56 HCI_EVENT_INQUIRY_RESPONSE_NOTIFICATION
+0x57 HCI_EVENT_AUTHENTICATED_PAYLOAD_TIMEOUT_EXPIRED
+
+0xFE HCI_EVENT_LOGO_TESTING
+0xFF HCI_EVENT_VENDOR_SPECIFIC
+)
+(
+0x01 HCI_VENDOR_EVENT_COMMU_READY
+)
+//HCI LE SUBEVENT CODE
+(
+0x01 HCI_LE_SUBEVENT_CONN_COMPLETE
+0x02 HCI_LE_SUBEVENT_ADV_REPORT
+0x03 HCI_LE_SUBEVENT_CONN_UPDATE_COMPLETE
+0x04 HCI_LE_SUBEVENT_REMOTE_FEATURE_COMPLETE
+0x05 HCI_LE_SUBEVENT_LTK_REQUEST
+0x06 HCI_LE_SUBEVENT_REMOTE_CONN_PARAM_REQ
+)
+
Index: usb_pc_ai_voice/format/l2cap.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/l2cap.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/l2cap.format	(working copy)
@@ -0,0 +1,40 @@
+
+
+
+xmemalloc(
+0 mem_l2cap_xmem_start
+
+//*******************L2CAP malloc********************//
+1 mem_used_map
+0 mem_tx_fifo0
+1 mem_tx_fifo0_map
+2 mem_tx_fifo0_ptr
+0 mem_tx_fifo1
+1 mem_tx_fifo1_map
+2 mem_tx_fifo1_ptr
+0 mem_tx_fifo2
+1 mem_tx_fifo2_map
+2 mem_tx_fifo2_ptr
+0 mem_tx_fifo3
+1 mem_tx_fifo3_map
+2 mem_tx_fifo3_ptr
+0 mem_tx_fifo_end
+
+2 mem_l2cap_lpm_txbuf_ptr
+0 mem_l2cap_xmem_end
+
+)
+
+
+//mem_l2cap_lpm_txbuf
+(
+256 l2cap_lpm_txbuf_len
+)
+
+(
+4 L2CAP_TX_FIFO_SIZE
+8 L2CAP_TX_BUFF_CNT
+
+)
+
+
Index: usb_pc_ai_voice/format/memblocks.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/memblocks.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/memblocks.format	(working copy)
@@ -0,0 +1,38 @@
+//
+//
+//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: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_access_layer.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_access_layer.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_access_layer.format	(working copy)
@@ -0,0 +1,350 @@
+
+memalloc ali_mesh(
+	1 mem_mesh_receive_model_message_payload_len
+	1 mem_mesh_receive_model_message_payload_opcode
+	23 mem_mesh_receive_model_message_payload
+
+	1 mem_mesh_access_layer_payload_len
+	0 mem_mesh_access_layer_payload
+	50 mem_mesh_access_payload
+	50 mem_mesh_access_payload_padding	//为了透传模块预留
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	3 mem_mesh_NETKeyindex_and_APPKeyindex
+	16 mem_mesh_receive_application_key
+)
+
+
+(//status codes
+0 STATUS_CODE_SUCCESS
+)
+
+
+// ali vendor message
+(
+0xD0 VENDOR_MESSAGE_ATTR_GET
+0xD1 VENDOR_MESSAGE_ATTR_SET
+0xD2 VENDOR_MESSAGE_ATTR_SET_UNACKNOWLEDGED
+0xD3 VENDOR_MESSAGE_ATTR_STATUS
+0xD4 VENDOR_MESSAGE_ATTR_INDICATION
+0xD5 VENDOR_MESSAGE_ATTR_CONFIRMATION
+0xCF VENDOR_MESSAGE_TRANSPARENT_MSG
+)
+
+
+
+(//configuration message and health message opcode
+0x80 MESH_CONFIGURATION_AND_HEALTH_MESSAGE_OPCODE_HEADER
+
+0x00 MESH_MESSAGE_OPCODE_CONFIG_APPKEY_ADD
+0x01 MESH_MESSAGE_OPCODE_CONFIG_APPKEY_UPDATE
+0x02 MESH_MESSAGE_OPCODE_CONFIG_COMPOSITION_DATA_STATUS
+0x03 MESH_MESSAGE_OPCODE_CONFIG_CONFIG_MODEL_PUBLICATION_SET
+0x04 MESH_MESSAGE_OPCODE_HEALTH_CURRENT_STATUS
+0x05 MESH_MESSAGE_OPCODE_HEALTH_FAULT_STATUS
+0x06 MESH_MESSAGE_OPCODE_CONFIG_HEARTBEAT_PUBLICATION_STATUS
+0x00 MESH_MESSAGE_OPCODE_CONFIG_APPKEY_DELETE_NO_HEAD
+0x01 MESH_MESSAGE_OPCODE_CONFIG_APPKEY_GET_NO_HEAD
+0x02 MESH_MESSAGE_OPCODE_CONFIG_APPKEY_LIST_NO_HEAD
+0x03 MESH_MESSAGE_OPCODE_CONFIG_APPKEY_STATUS_NO_HEAD
+0x04 MESH_MESSAGE_OPCODE_HEALTH_ATTENTION_GET_NO_HEAD
+0x05 MESH_MESSAGE_OPCODE_HEALTH_ATTENTION_SET_NO_HEAD
+0x06 MESH_MESSAGE_OPCODE_HEALTH_ATTENTION_SET_UNACKNOWLEDGED_NO_HEAD
+0x07 MESH_MESSAGE_OPCODE_HEALTH_ATTENTION_STATUS_NO_HEAD
+0x08 MESH_MESSAGE_OPCODE_CONFIG_COMPOSITION_DATA_GET_NO_HEAD
+0x09 MESH_MESSAGE_OPCODE_CONFIG_BEACON_GET_NO_HEAD
+0x0A MESH_MESSAGE_OPCODE_CONFIG_BEACON_SET_NO_HEAD
+0x0B MESH_MESSAGE_OPCODE_CONFIG_BEACON_STATUS_NO_HEAD
+0x0C MESH_MESSAGE_OPCODE_CONFIG_DEFAULT_TTL_GET_NO_HEAD
+0x0D MESH_MESSAGE_OPCODE_CONFIG_DEFAULT_TTL_SET_NO_HEAD
+0x0E MESH_MESSAGE_OPCODE_CONFIG_DEFAULT_TTL_STATUS_NO_HEAD
+0x0F MESH_MESSAGE_OPCODE_CONFIG_FRIEND_GET_NO_HEAD
+0x10 MESH_MESSAGE_OPCODE_CONFIG_FRIEND_SET_NO_HEAD
+0x11 MESH_MESSAGE_OPCODE_CONFIG_FRIEND_STATUS_NO_HEAD
+0x12 MESH_MESSAGE_OPCODE_CONFIG_GATT_PROXY_GET_NO_HEAD
+0x13 MESH_MESSAGE_OPCODE_CONFIG_GATT_PROXY_SET_NO_HEAD
+0x14 MESH_MESSAGE_OPCODE_CONFIG_GATT_PROXY_STATUS_NO_HEAD
+0x15 MESH_MESSAGE_OPCODE_CONFIG_KEY_REFRESH_PHASE_GET_NO_HEAD
+0x16 MESH_MESSAGE_OPCODE_CONFIG_KEY_REFRESH_PHASE_SET_NO_HEAD
+0x17 MESH_MESSAGE_OPCODE_CONFIG_KEY_REFRESH_PHASE_STATUS_NO_HEAD
+0x18 MESH_MESSAGE_OPCODE_CONFIG_MODEL_PUBLICATION_GET_NO_HEAD
+0x19 MESH_MESSAGE_OPCODE_CONFIG_MODEL_PUBLICATION_STATUS_NO_HEAD
+0x1A MESH_MESSAGE_OPCODE_CONFIG_MODEL_PUBLICATION_VIRTUAL_ADDRESS_SET_NO_HEAD
+0x1B MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_ADD_NO_HEAD
+0x1C MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_DELETE_NO_HEAD
+0x1D MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_DELETE_ALL_NO_HEAD
+0x1E MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_OVERWRITE_NO_HEAD
+0x1F MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_STATUS_NO_HEAD
+0x20 MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_ADD_NO_HEAD
+0x21 MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_DELETE_NO_HEAD
+0x22 MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_OVERWRITE_NO_HEAD
+0x23 MESH_MESSAGE_OPCODE_CONFIG_NETWORK_TRANSMIT_GET_NO_HEAD
+0x24 MESH_MESSAGE_OPCODE_CONFIG_NETWORK_TRANSMIT_SET_NO_HEAD
+0x25 MESH_MESSAGE_OPCODE_CONFIG_NETWORK_TRANSMIT_STATUS_NO_HEAD
+0x26 MESH_MESSAGE_OPCODE_CONFIG_RELAY_GET_NO_HEAD
+0x27 MESH_MESSAGE_OPCODE_CONFIG_RELAY_SET_NO_HEAD
+0x28 MESH_MESSAGE_OPCODE_CONFIG_RELAY_STATUS_NO_HEAD
+0x29 MESH_MESSAGE_OPCODE_CONFIG_SIG_MODEL_SUBSCRIPTION_GET_NO_HEAD
+0x2A MESH_MESSAGE_OPCODE_CONFIG_SIG_MODEL_SUBSCRIPTION_LIST_NO_HEAD
+0x2B MESH_MESSAGE_OPCODE_CONFIG_VENDOR_MODEL_SUBSCRIPTION_GET_NO_HEAD
+0x2C MESH_MESSAGE_OPCODE_CONFIG_VENDOR_MODEL_SUBSCRIPTION_LIST_NO_HEAD
+0x2D MESH_MESSAGE_OPCODE_CONFIG_LOW_POWER_NODE_POLLTIMEOUT_GET_NO_HEAD
+0x2E MESH_MESSAGE_OPCODE_CONFIG_LOW_POWER_NODE_POLLTIMEOUT_STATUS_NO_HEAD
+0x2F MESH_MESSAGE_OPCODE_HEALTH_FAULT_CLEAR_NO_HEAD
+0x30 MESH_MESSAGE_OPCODE_HEALTH_FAULT_CLEAR_UNACKNOWLEDGED_NO_HEAD
+0x31 MESH_MESSAGE_OPCODE_HEALTH_FAULT_GET_NO_HEAD
+0x32 MESH_MESSAGE_OPCODE_HEALTH_FAULT_TEST_NO_HEAD
+0x33 MESH_MESSAGE_OPCODE_HEALTH_FAULT_TEST_UNACKNOWLEDGED_NO_HEAD
+0x34 MESH_MESSAGE_OPCODE_HEALTH_PERIOD_GET_NO_HEAD
+0x35 MESH_MESSAGE_OPCODE_HEALTH_PERIOD_SET_NO_HEAD
+0x36 MESH_MESSAGE_OPCODE_HEALTH_PERIOD_SET_UNACKNOWLEDGED_NO_HEAD
+0x37 MESH_MESSAGE_OPCODE_HEALTH_PERIOD_STATUS_NO_HEAD
+0x38 MESH_MESSAGE_OPCODE_CONFIG_HEARTBEAT_PUBLICATION_GET_NO_HEAD
+0x39 MESH_MESSAGE_OPCODE_CONFIG_HEARTBEAT_PUBLICATION_SET_NO_HEAD
+0x3A MESH_MESSAGE_OPCODE_CONFIG_HEARTBEAT_SUBSCRIPTION_GET_NO_HEAD
+0x3B MESH_MESSAGE_OPCODE_CONFIG_HEARTBEAT_SUBSCRIPTION_SET_NO_HEAD
+0x3C MESH_MESSAGE_OPCODE_CONFIG_HEARTBEAT_SUBSCRIPTION_STATUS_NO_HEAD
+0x3D MESH_MESSAGE_OPCODE_CONFIG_MODEL_APP_BIND_NO_HEAD
+0x3E MESH_MESSAGE_OPCODE_CONFIG_MODEL_APP_STATUS_NO_HEAD
+0x3F MESH_MESSAGE_OPCODE_CONFIG_MODEL_APP_UNBIND_NO_HEAD
+0x40 MESH_MESSAGE_OPCODE_CONFIG_NETKEY_ADD_NO_HEAD
+0x41 MESH_MESSAGE_OPCODE_CONFIG_NETKEY_DELETE_NO_HEAD
+0x42 MESH_MESSAGE_OPCODE_CONFIG_NETKEY_GET_NO_HEAD
+0x43 MESH_MESSAGE_OPCODE_CONFIG_NETKEY_LIST_NO_HEAD
+0x44 MESH_MESSAGE_OPCODE_CONFIG_NETKEY_STATUS_NO_HEAD
+0x45 MESH_MESSAGE_OPCODE_CONFIG_NETKEY_UPDATE_NO_HEAD
+0x46 MESH_MESSAGE_OPCODE_CONFIG_NODE_IDENTITY_GET_NO_HEAD
+0x47 MESH_MESSAGE_OPCODE_CONFIG_NODE_IDENTITY_SET_NO_HEAD
+0x48 MESH_MESSAGE_OPCODE_CONFIG_NODE_IDENTITY_STATUS_NO_HEAD
+0x49 MESH_MESSAGE_OPCODE_CONFIG_NODE_RESET_NO_HEAD
+0x4A MESH_MESSAGE_OPCODE_CONFIG_NODE_RESET_STATUS_NO_HEAD
+0x4B MESH_MESSAGE_OPCODE_CONFIG_SIG_MODEL_APP_GET_NO_HEAD
+0x4C MESH_MESSAGE_OPCODE_CONFIG_SIG_MODEL_APP_LIST_NO_HEAD
+0x4D MESH_MESSAGE_OPCODE_CONFIG_VENDOR_MODEL_APP_GET_NO_HEAD
+0x4E MESH_MESSAGE_OPCODE_CONFIG_VENDOR_MODEL_APP_LIST_NO_HEAD
+0xF2 MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_ADD_OW_NO_HEAD   //overwrite
+0xF3 MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_ADD_OW_STATUS
+)
+
+(//Modle message opcode
+0x82 MESH_MODULE_MESSAGE_OPCODE_HEADER
+
+0x01 MESH_MODULE_MESSAGE_OPCODE_GENERIC_ONOFF_GET_NO_HEAD
+0x02 MESH_MODULE_MESSAGE_OPCODE_GENERIC_ONOFF_SET_NO_HEAD
+0x03 MESH_MODULE_MESSAGE_OPCODE_GENERIC_ONOFF_SET_UNACKNOWLEDGED_NO_HEAD
+0x04 MESH_MODULE_MESSAGE_OPCODE_GENERIC_ONOFF_STATUS_NO_HEAD
+0x05 MESH_MODULE_MESSAGE_OPCODE_GENERIC_LEVEL_GET_NO_HEAD
+0x06 MESH_MODULE_MESSAGE_OPCODE_GENERIC_LEVEL_SET_NO_HEAD
+0x07 MESH_MODULE_MESSAGE_OPCODE_GENERIC_LEVEL_SET_UNACKNOWLEDGED_NO_HEAD
+0x08 MESH_MODULE_MESSAGE_OPCODE_GENERIC_LEVEL_STATUS_NO_HEAD
+0x09 MESH_MODULE_MESSAGE_OPCODE_GENERIC_DELTA_SET_NO_HEAD
+0x0A MESH_MODULE_MESSAGE_OPCODE_GENERIC_DELTA_SET_UNACKNOWLEDGED_NO_HEAD
+0x0B MESH_MODULE_MESSAGE_OPCODE_GENERIC_MOVE_SET_NO_HEAD
+0x0C MESH_MODULE_MESSAGE_OPCODE_GENERIC_MOVE_SET_UNACKNOWLEDGED_NO_HEAD
+0x0D MESH_MODULE_MESSAGE_OPCODE_GENERIC_DEFAULT_TRANSITION_TIME_GET_NO_HEAD
+0x0E MESH_MODULE_MESSAGE_OPCODE_GENERIC_DEFAULT_TRANSITION_TIME_SET_NO_HEAD
+0x0F MESH_MODULE_MESSAGE_OPCODE_GENERIC_DEFAULT_TRANSITION_TIME_SET_UNACKNOWLEDGED_NO_HEAD
+0x10 MESH_MODULE_MESSAGE_OPCODE_GENERIC_DEFAULT_TRANSITION_TIME_STATUS_NO_HEAD
+0x11 MESH_MODULE_MESSAGE_OPCODE_GENERIC_ONPOWERUP_GET_NO_HEAD
+0x12 MESH_MODULE_MESSAGE_OPCODE_GENERIC_ONPOWERUP_STATUS_NO_HEAD
+0x13 MESH_MODULE_MESSAGE_OPCODE_GENERIC_ONPOWERUP_SET_NO_HEAD
+0x14 MESH_MODULE_MESSAGE_OPCODE_GENERIC_ONPOWERUP_SET_UNACKNOWLEDGED_NO_HEAD
+0x15 MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_LEVEL_GET_NO_HEAD
+0x16 MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_LEVEL_SET_NO_HEAD
+0x17 MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_LEVEL_SET_UNACKNOWLEDGED_NO_HEAD
+0x18 MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_LEVEL_STATUS_NO_HEAD
+0x19 MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_LAST_GET_NO_HEAD
+0x1A MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_LAST_STATUS_NO_HEAD
+0x1B MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_DEFAULT_GET_NO_HEAD
+0x1C MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_DEFAULT_STATUS_NO_HEAD
+0x1D MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_RANGE_GET_NO_HEAD
+0x1E MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_RANGE_STATUS_NO_HEAD
+0x1F MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_DEFAULT_SET_NO_HEAD
+0x20 MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_DEFAULT_SET_UNACKNOWLEDGED_NO_HEAD
+0x21 MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_RANGE_SET_NO_HEAD
+0x22 MESH_MODULE_MESSAGE_OPCODE_GENERIC_POWER_RANGE_SET_UNACKNOWLEDGED_NO_HEAD
+0x23 MESH_MODULE_MESSAGE_OPCODE_GENERIC_BATTERY_GET_NO_HEAD
+0x24 MESH_MODULE_MESSAGE_OPCODE_GENERIC_BATTERY_STATUS_NO_HEAD
+0x25 MESH_MODULE_MESSAGE_OPCODE_GENERIC_LOCATION_GLOBAL_GET_NO_HEAD
+0x40 MESH_MODULE_MESSAGE_OPCODE_GENERIC_LOCATION_GLOBAL_STATUS
+0x26 MESH_MODULE_MESSAGE_OPCODE_GENERIC_LOCATION_LOCAL_GET_NO_HEAD
+0x27 MESH_MODULE_MESSAGE_OPCODE_GENERIC_LOCATION_LOCAL_STATUS_NO_HEAD
+0x41 MESH_MODULE_MESSAGE_OPCODE_GENERIC_LOCATION_GLOBAL_SET
+0x42 MESH_MODULE_MESSAGE_OPCODE_GENERIC_LOCATION_GLOBAL_SET_UNACKNOWLEDGED
+0x28 MESH_MODULE_MESSAGE_OPCODE_GENERIC_LOCATION_LOCAL_SET_NO_HEAD
+0x29 MESH_MODULE_MESSAGE_OPCODE_GENERIC_LOCATION_LOCAL_SET_UNACKNOWLEDGED_NO_HEAD
+0x2A MESH_MODULE_MESSAGE_OPCODE_GENERIC_MANUFACTURER_PROPERTIES_GET_NO_HEAD
+0x43 MESH_MODULE_MESSAGE_OPCODE_GENERIC_MANUFACTURER_PROPERTIES_STATUS
+0x2B MESH_MODULE_MESSAGE_OPCODE_GENERIC_MANUFACTURER_PROPERTY_GET_NO_HEAD
+0x44 MESH_MODULE_MESSAGE_OPCODE_GENERIC_MANUFACTURER_PROPERTY_SET
+0x45 MESH_MODULE_MESSAGE_OPCODE_GENERIC_MANUFACTURER_PROPERTY_SET_UNACKNOWLEDGED
+0x46 MESH_MODULE_MESSAGE_OPCODE_GENERIC_MANUFACTURER_PROPERTY_STATUS
+0x2C MESH_MODULE_MESSAGE_OPCODE_GENERIC_ADMIN_PROPERTIES_GET_NO_HEAD
+0x47 MESH_MODULE_MESSAGE_OPCODE_GENERIC_ADMIN_PROPERTIES_STATUS
+0x2D MESH_MODULE_MESSAGE_OPCODE_GENERIC_ADMIN_PROPERTY_GET_NO_HEAD
+0x48 MESH_MODULE_MESSAGE_OPCODE_GENERIC_ADMIN_PROPERTY_SET
+0x49 MESH_MODULE_MESSAGE_OPCODE_GENERIC_ADMIN_PROPERTY_SET_UNACKNOWLEDGED
+0x4A MESH_MODULE_MESSAGE_OPCODE_GENERIC_ADMIN_PROPERTY_STATUS
+0x2E MESH_MODULE_MESSAGE_OPCODE_GENERIC_USER_PROPERTIES_GET_NO_HEAD
+0x4B MESH_MODULE_MESSAGE_OPCODE_GENERIC_USER_PROPERTIES_STATUS
+0x2F MESH_MODULE_MESSAGE_OPCODE_GENERIC_USER_PROPERTY_GET_NO_HEAD
+0x4C MESH_MODULE_MESSAGE_OPCODE_GENERIC_USER_PROPERTY_SET
+0x4D MESH_MODULE_MESSAGE_OPCODE_GENERIC_USER_PROPERTY_SET_UNACKNOWLEDGED
+0x4E MESH_MODULE_MESSAGE_OPCODE_GENERIC_USER_PROPERTY_STATUS
+0x4F MESH_MODULE_MESSAGE_OPCODE_GENERIC_CLIENT_PROPERTIES_GET
+0x50 MESH_MODULE_MESSAGE_OPCODE_GENERIC_CLIENT_PROPERTIES_STATUS
+0x30 MESH_MODULE_MESSAGE_OPCODE_SENSOR_DESCRIPTOR_GET_NO_HEAD
+0x51 MESH_MODULE_MESSAGE_OPCODE_SENSOR_DESCRIPTOR_STATUS
+0x31 MESH_MODULE_MESSAGE_OPCODE_SENSOR_GET_NO_HEAD
+0x52 MESH_MODULE_MESSAGE_OPCODE_SENSOR_STATUS
+0x32 MESH_MODULE_MESSAGE_OPCODE_SENSOR_COLUMN_GET_NO_HEAD
+0x53 MESH_MODULE_MESSAGE_OPCODE_SENSOR_COLUMN_STATUS
+0x33 MESH_MODULE_MESSAGE_OPCODE_SENSOR_SERIES_GET_NO_HEAD
+0x54 MESH_MODULE_MESSAGE_OPCODE_SENSOR_SERIES_STATUS
+0x34 MESH_MODULE_MESSAGE_OPCODE_SENSOR_CADENCE_GET_NO_HEAD
+0x55 MESH_MODULE_MESSAGE_OPCODE_SENSOR_CADENCE_SET
+0x56 MESH_MODULE_MESSAGE_OPCODE_SENSOR_CADENCE_SET_UNACKNOWLEDGED
+0x57 MESH_MODULE_MESSAGE_OPCODE_SENSOR_CADENCE_STATUS
+0x35 MESH_MODULE_MESSAGE_OPCODE_SENSOR_SETTINGS_GET_NO_HEAD
+0x58 MESH_MODULE_MESSAGE_OPCODE_SENSOR_SETTINGS_STATUS
+0x36 MESH_MODULE_MESSAGE_OPCODE_SENSOR_SETTING_GET_NO_HEAD
+0x59 MESH_MODULE_MESSAGE_OPCODE_SENSOR_SETTING_SET
+0x5A MESH_MODULE_MESSAGE_OPCODE_SENSOR_SETTING_SET_UNACKNOWLEDGED
+0x5B MESH_MODULE_MESSAGE_OPCODE_SENSOR_SETTING_STATUS
+0x37 MESH_MODULE_MESSAGE_OPCODE_TIME_GET_NO_HEAD
+0x5C MESH_MODULE_MESSAGE_OPCODE_TIME_SET
+0x5D MESH_MODULE_MESSAGE_OPCODE_TIME_STATUS
+0x38 MESH_MODULE_MESSAGE_OPCODE_TIME_ROLE_GET_NO_HEAD
+0x39 MESH_MODULE_MESSAGE_OPCODE_TIME_ROLE_SET_NO_HEAD
+0x3A MESH_MODULE_MESSAGE_OPCODE_TIME_ROLE_STATUS_NO_HEAD
+0x3B MESH_MODULE_MESSAGE_OPCODE_TIME_ZONE_GET_NO_HEAD
+0x3C MESH_MODULE_MESSAGE_OPCODE_TIME_ZONE_SET_NO_HEAD
+0x3D MESH_MODULE_MESSAGE_OPCODE_TIME_ZONE_STATUS_NO_HEAD
+0x3E MESH_MODULE_MESSAGE_OPCODE_TAI_UTC_DELTA_GET_NO_HEAD
+0x3F MESH_MODULE_MESSAGE_OPCODE_TAI_UTC_DELTA_SET_NO_HEAD
+0x40 MESH_MODULE_MESSAGE_OPCODE_TAI_UTC_DELTA_STATUS_NO_HEAD
+0x41 MESH_MODULE_MESSAGE_OPCODE_SCENE_GET_NO_HEAD
+0x42 MESH_MODULE_MESSAGE_OPCODE_SCENE_RECALL_NO_HEAD
+0x43 MESH_MODULE_MESSAGE_OPCODE_SCENE_RECALL_UNACKNOWLEDGED_NO_HEAD
+0x5E MESH_MODULE_MESSAGE_OPCODE_SCENE_STATUS
+0x44 MESH_MODULE_MESSAGE_OPCODE_SCENE_REGISTER_GET_NO_HEAD
+0x45 MESH_MODULE_MESSAGE_OPCODE_SCENE_REGISTER_STATUS_NO_HEAD
+0x46 MESH_MODULE_MESSAGE_OPCODE_SCENE_STORE_NO_HEAD
+0x47 MESH_MODULE_MESSAGE_OPCODE_SCENE_STORE_UNACKNOWLEDGED_NO_HEAD
+0x9E MESH_MODULE_MESSAGE_OPCODE_SCENE_DELETE_NO_HEAD
+0x9F MESH_MODULE_MESSAGE_OPCODE_SCENE_DELETE_UNACKNOWLEDGED_NO_HEAD
+0x48 MESH_MODULE_MESSAGE_OPCODE_SCHEDULER_ACTION_GET_NO_HEAD
+0x5F MESH_MODULE_MESSAGE_OPCODE_SCHEDULER_ACTION_STATUS
+0x49 MESH_MODULE_MESSAGE_OPCODE_SCHEDULER_GET_NO_HEAD
+0x4A MESH_MODULE_MESSAGE_OPCODE_SCHEDULER_STATUS_NO_HEAD
+0x60 MESH_MODULE_MESSAGE_OPCODE_SCHEDULER_ACTION_SET
+0x61 MESH_MODULE_MESSAGE_OPCODE_SCHEDULER_ACTION_SET_UNACKNOWLEDGED
+0x4B MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_LIGHT_LIGHTNESS_GET_NO_HEAD
+0x4C MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_SET_NO_HEAD
+0x4D MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_SET_UNACKNOWLEDGED_NO_HEAD
+0x4E MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_STATUS_NO_HEAD
+0x4F MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_LINEAR_GET_NO_HEAD
+0x50 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_LINEAR_SET_NO_HEAD
+0x51 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_LINEAR_SET_UNACKNOWLEDGED_NO_HEAD
+0x52 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_LINEAR_STATUS_NO_HEAD
+0x53 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_LAST_GET_NO_HEAD
+0x54 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_LAST_STATUS_NO_HEAD
+0x55 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_DEFAULT_GET_NO_HEAD
+0x56 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_DEFAULT_STATUS_NO_HEAD
+0x57 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_RANGE_GET_NO_HEAD
+0x58 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_RANGE_STATUS_NO_HEAD
+0x59 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_DEFAULT_SET_NO_HEAD
+0x5A MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_DEFAULT_SET_UNACKNOWLEDGED_NO_HEAD
+0x5B MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_RANGE_SET_NO_HEAD
+0x5C MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_RANGE_SET_UNACKNOWLEDGED_NO_HEAD
+0x5D MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_GET_NO_HEAD
+0x5E MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_SET_NO_HEAD
+0x5F MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_SET_UNACKNOWLEDGED_NO_HEAD
+0x60 MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_STATUS_NO_HEAD
+0x61 MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_TEMPERATURE_GET_NO_HEAD
+0x62 MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_TEMPERATURE_RANGE_GET_NO_HEAD
+0x63 MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_TEMPERATURE_RANGE_STATUS_NO_HEAD
+0x64 MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_TEMPERATURE_SET_NO_HEAD
+0x65 MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_TEMPERATURE_SET_UNACKNOWLEDGED_NO_HEAD
+0x66 MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_TEMPERATURE_STATUS_NO_HEAD
+0x67 MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_DEFAULT_GET_NO_HEAD
+0x68 MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_DEFAULT_STATUS_NO_HEAD
+0x69 MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_DEFAULT_SET_NO_HEAD
+0x6A MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_DEFAULT_SET_UNACKNOWLEDGED_NO_HEAD
+0x6B MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_TEMPERATURE_RANGE_SET_NO_HEAD
+0x6C MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_TEMPERATURE_RANGE_SET_UNACKNOWLEDGED_NO_HEAD
+0x6D MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_GET_NO_HEAD
+0x6E MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_HUE_GET_NO_HEAD
+0x6F MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_HUE_SET_NO_HEAD
+0x70 MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_HUE_SET_UNACKNOWLEDGED_NO_HEAD
+0x71 MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_HUE_STATUS_NO_HEAD
+0x72 MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_SATURATION_GET_NO_HEAD
+0x73 MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_SATURATION_SET_NO_HEAD
+0x74 MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_SATURATION_SET_UNACKNOWLEDGED_NO_HEAD
+0x75 MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_SATURATION_STATUS_NO_HEAD
+0x76 MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_SET_NO_HEAD
+0x77 MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_SET_UNACKNOWLEDGED_NO_HEAD
+0x78 MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_STATUS_NO_HEAD
+0x79 MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_TARGET_GET_NO_HEAD
+0x7A MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_TARGET_STATUS_NO_HEAD
+0x7B MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_DEFAULT_GET_NO_HEAD
+0x7C MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_DEFAULT_STATUS_NO_HEAD
+0x7D MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_RANGE_GET_NO_HEAD
+0x7E MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_RANGE_STATUS_NO_HEAD
+0x7F MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_DEFAULT_SET_NO_HEAD
+0x80 MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_DEFAULT_SET_UNACKNOWLEDGED_NO_HEAD
+0x81 MESH_MODULE_MESSAGE_OPCODE_LIGHT_HSL_RANGE_SET_NO_HEAD
+0x83 MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_GET_NO_HEAD
+0x84 MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_SET_NO_HEAD
+0x85 MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_SET_UNACKNOWLEDGED_NO_HEAD
+0x86 MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_STATUS_NO_HEAD
+0x87 MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_TARGET_GET_NO_HEAD
+0x88 MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_TARGET_STATUS_NO_HEAD
+0x89 MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_DEFAULT_GET_NO_HEAD
+0x8A MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_DEFAULT_STATUS_NO_HEAD
+0x8B MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_RANGE_GET_NO_HEAD
+0x8C MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_RANGE_STATUS_NO_HEAD
+0x8D MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_DEFAULT_SET_NO_HEAD
+0x8E MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_DEFAULT_SET_UNACKNOWLEDGED_NO_HEAD
+0x8F MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_RANGE_SET_NO_HEAD
+0x90 MESH_MODULE_MESSAGE_OPCODE_LIGHT_XYL_RANGE_SET_UNACKNOWLEDGED_NO_HEAD
+0x91 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_MODE_GET_NO_HEAD
+0x92 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_MODE_SET_NO_HEAD
+0x93 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_MODE_SET_UNACKNOWLEDGED_NO_HEAD
+0x94 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_MODE_STATUS_NO_HEAD
+0x95 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_OM_GET_NO_HEAD
+0x96 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_OM_SET_NO_HEAD
+0x97 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_OM_SET_UNACKNOWLEDGED_NO_HEAD
+0x98 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_OM_STATUS_NO_HEAD
+0x99 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_LIGHT_ONOFF_GET_NO_HEAD
+0x9A MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_LIGHT_ONOFF_SET_NO_HEAD
+0x9B MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_LIGHT_ONOFF_SET_UNACKNOWLEDGED_NO_HEAD
+0x9C MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_LIGHT_ONOFF_STATUS_NO_HEAD
+0x9D MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_PROPERTY_GET_NO_HEAD
+0x62 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_PROPERTY_SET
+0x63 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_PROPERTY_SET_UNACKNOWLEDGED
+0x64 MESH_MODULE_MESSAGE_OPCODE_LIGHT_LC_PROPERTY_STATUS)
+
+// status code
+(
+0x00 MESH_SUCCESS
+0x01 MESH_INVALID_ADDRESS
+0x02 MESH_INVALID_MODEL
+0x03 MESH_INVALID_APPKEYINDEX
+0x04 MESH_INVALID_NETKEYINDEX
+0x05 MESH_INSUFFICIENT_RESOURCES
+0x06 MESH_KEYINDEX_ALREAD_STORED
+0x07 MESH_INVALID_PUBLISH_PARAMETERS
+0x08 MESH_NOT_A_SUBSCRIBE_MODEL
+0x09 MESH_STORAGE_FAILURE
+0x0a MESH_FEATURE_NOT_SUPPORTED
+0x0b MESH_CANNOT_UPDATE
+0x0c MESH_CANNOT_REMOVE
+0x0d MESH_CANNOT_BIND
+0x0e MESH_TEMPORARILY_UNABLE_TO_CHANGE_STATE
+0x0f MESH_CANNOT_SET
+0x10 MESH_UNSPECIFIED_ERROR
+0x11 MESH_INVALID_BINDING
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_ali_vendor_message.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_ali_vendor_message.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_ali_vendor_message.format	(working copy)
@@ -0,0 +1,209 @@
+
+xmemalloc ali_mesh(
+	1 mem_mesh_vendor_mesh_receive_tid
+	1 mem_mesh_vendor_mesh_send_tid
+
+	4 mem_mesh_vendor_timer_current_time
+	4 mem_system_time
+
+	0 mem_mesh_vendor_timer_timing_delete_index1
+	1 mem_mesh_vendor_timer_timing_index1
+	0 mem_mesh_vendor_timer_timing_delete_index2
+	4 mem_mesh_vendor_timer_timing_time1
+	2 mem_mesh_vendor_timer_timing_attr_type1
+	1 mem_mesh_vendor_timer_timing_attr_para1
+	234 mem_mesh_vendor_timer_timing_buffer
+
+	18 mem_mesh_vendor_timer_timing_palyload
+	2  mem_mesh_vendor_timer_timing_temp
+
+	1 mem_mesh_vendor_timer_timing_time_cyclic_temp
+	1 mem_mesh_vendor_timer_check_loop
+	1 mem_tmall_revd_device_power_on_msge_flag
+	2 mem_tmall_send_power_on_msge_timeout
+
+	2 mem_mesh_vendor_timer_timing_temp1
+	1 mem_mesh_timer_index_buffer_len
+	32 mem_mesh_timer_index_buffer
+	1 mem_mesh_timer_index_count
+)
+
+amemalloc mem_mesh_vendor_timer_timing_palyload(
+	1 mem_mesh_vendor_timer_timing_index_cyclic
+	2 mem_mesh_vendor_timer_timing_time_cyclic
+	2 mem_mesh_vendor_timer_timing_zone_cyclic
+	1 mem_mesh_vendor_timer_timing_weekdays_cyclic
+	2 mem_mesh_vendor_timer_timing_attr_type_cyclic
+	1 mem_mesh_vendor_timer_timing_attr_para_len_cyclic
+	8 mem_mesh_vendor_timer_timing_attr_para_cyclic
+	1 mem_mesh_vendor_timer_timing_cyclic_flag
+)
+
+amemalloc mem_mesh_vendor_timer_timing_palyload(
+	1 mem_mesh_vendor_timer_timing_index
+	4 mem_mesh_vendor_timer_timing_time
+	2 mem_mesh_vendor_timer_timing_attr_type
+	1 mem_mesh_vendor_timer_timing_attr_para_len
+	8 mem_mesh_vendor_timer_timing_attr_para
+	2 mem_mesh_vendor_timer_timing_flag
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	2 mem_mesh_vendor_message_cid
+	1 mem_mesh_vendor_message_tid
+	2 mem_mesh_vendor_message_attr_type
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	5 mem_mesh_vendor_message_header
+	0 mem_mesh_vendor_attr_parameter
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	5 mem_mesh_vendor_message_delay_close_time_header
+	2 mem_mesh_vendor_delay_close_time
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	5 mem_mesh_vendor_message_night_light_onoff_header
+	1 mem_mesh_vendor_night_light_onoff
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	5 mem_mesh_vendor_message_color_header
+	2 mem_mesh_vendor_color_lightness
+	2 mem_mesh_vendor_color_hue
+	2 mem_mesh_vendor_color_saturation
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	5 mem_mesh_vendor_message_back_light_onoff_header
+	1 mem_mesh_vendor_back_light_onoff
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	5 mem_mesh_vendor_message_main_light_onoff_header
+	1 mem_mesh_vendor_main_light_onoff
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	5 mem_mesh_vendor_message_standby_brightness_header
+	2 mem_mesh_vendor_standby_brightness
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	5 mem_mesh_vendor_message_current_time_header
+	4 mem_mesh_vendor_message_current_time
+)
+
+
+//amemalloc mem_mesh_receive_model_message_payload(
+//	5 mem_mesh_vendor_message_timer_header
+//	1 mem_mesh_vendor_timer_timing_index
+//	0 mem_mesh_vendor_timer_timing_index1
+//	4 mem_mesh_vendor_timer_timing_time
+//	2 mem_mesh_vendor_timer_timing_attr_type
+//	1 mem_mesh_vendor_timer_timing_attr_para
+//)
+
+//amemalloc mem_mesh_receive_model_message_payload(
+//	5 mem_mesh_vendor_message_timer_cyclic_header
+//	1 mem_mesh_vendor_timer_timing_index_cyclic
+//	2 mem_mesh_vendor_timer_timing_time_cyclic
+//	1 mem_mesh_vendor_timer_timing_weekdays_cyclic
+//	2 mem_mesh_vendor_timer_timing_attr_type_cyclic
+//	1 mem_mesh_vendor_timer_timing_attr_para_cyclic
+//	1 mem_mesh_vendor_timer_timing_cyclic_flag
+//)
+
+amemalloc mem_mesh_access_layer_payload(
+	//ali mesh vendor struct
+	1 mem_mesh_access_layer_payload_vendor_command
+	2 mem_mesh_access_layer_payload_vendor_CID
+	1 mem_mesh_access_layer_payload_vendor_tid
+	2 mem_mesh_access_layer_payload_vendor_attr_type
+	1 mem_mesh_access_layer_payload_vendor_attr_parameter
+)
+
+
+(
+0x00F0 VENDOR_MESSAGE_TMALL_DST
+)
+
+(// vendor model attribute
+0x0123 VENDOR_ATTR_COLOR_SERVER
+0x0100 VENDOR_ATTR_GENERIC_ONOFF_SERVER
+0x0121 VENDOR_ATTR_LIGHTNESS_LEVEL_SERVER
+0x0122 VENDOR_ATTR_COLOR_TEMPERATURE_SERVER
+0x0534 VENDOR_ATTR_MAIN_LIGHT_SERVER
+0x0533 VENDOR_ATTR_BACKGROUND_LIGHT_ONOFF_SERVER
+0xf004 VENDOR_ATTR_SCENE_SERVER
+)
+
+(//Timer opcode
+0x01A8 VENDOR_MESSAGE_OPCODE_COMPANY_ID
+//时间
+0xF01F VENDOR_MESSAGE_ATTR_TYPE_TIME
+//时区
+0xF01E VENDOR_MESSAGE_ATTR_TYPE_TIME_ZONE
+//对时
+0xF01D VENDOR_MESSAGE_ATTR_TYPE_ON_TIME
+//定时
+0xF010 VENDOR_MESSAGE_ATTR_TYPE_TIMING
+//周期定时
+0xF011 VENDOR_MESSAGE_ATTR_TYPE_CYCLE_TIMING
+//删除定时
+0xF012 VENDOR_MESSAGE_ATTR_TYPE_DELETE_TIMING
+
+//颜色
+0x0123 VENDOR_MESSAGE_ATTR_TYPE_COLOR
+//主灯
+0x0534 VENDOR_MESSAGE_ATTR_TYPE_MAIN_LIGHT
+//背光灯
+0x0533 VENDOR_MESSAGE_ATTR_TYPE_BACKGROUND_LIGHT
+)
+
+(//天猫event事件表
+//设备发生的事件，比如上电或者定时完成
+0xF009 VENDOR_ATTR_TYPE_EVENT_TRIGGER
+
+//天猫设备上电
+0x03 VENDOR_MESSAGE_EVENT_DEVICE_POWER_ON
+//天猫定时完成
+0x11 VENDOR_MESSAGE_EVENT_FINISH_TIMING
+)
+
+(
+0x80 VENDOR_MESSAGE_SEND_TID_MIN
+0xC0 VENDOR_MESSAGE_SEND_TID_MAX
+)
+
+(
+0x59 TIMER_CYCLICAL_FALG
+60 SECONDS_OF_MIN
+345600 SECONDS_OF_FOUR_DAYS
+604800 SECONDS_OF_WEEK
+86400 SECONDS_OF_DAY
+0x01e0 EIGHT_HOURS_TIME_ZONE_OFFSET
+
+)
+
+(
+0xF013 VENDOR_MSEEAGE_ATTR_TYPE_SET_TIME_SINGLE
+0xF014 VENDOR_MSEEAGE_ATTR_TYPE_SET_TIME_REPEAT
+0xF015 VENDOR_MSEEAGE_ATTR_TYPE_SET_TIME_CIRCULATION
+0xF016 VENDOR_MSEEAGE_ATTR_TYPE_TIMER_ENABLE
+0xF017 VENDOR_MESSAGE_ATTR_TYPE_TIMER_DELEATE
+0xF018 VENDOR_MESSAGE_ATTR_TYPE_TIMER_INQUIRE
+0xF019 VENDOR_MESSAGE_ATTR_TYPE_TIMER_EVENT_INQUIRE
+
+)
+
+(
+0xF020 VENDOR_ATTR_TYPE_EVENT_INDEX_REPORT
+)
+
+(
+0x0d MESH_X_TIMERS
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_bearer_layer.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_bearer_layer.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_bearer_layer.format	(working copy)
@@ -0,0 +1,10 @@
+
+memalloc ali_mesh(
+	0 mem_mesh_queue_ele_temp
+	1 mem_mesh_queue_ele_duration
+	1 mem_mesh_queue_ele_gatt_msg_id
+	1 mem_mesh_queue_ele_len
+	31 mem_mesh_queue_ele_payload
+	1 mem_mesh_queue_ele_padding
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_ble_core_advertising.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_ble_core_advertising.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_ble_core_advertising.format	(working copy)
@@ -0,0 +1,27 @@
+
+memalloc ali_mesh(
+	39 mem_le_txheader_mesh_temp
+	
+)
+
+xmemalloc ali_mesh(
+
+	
+	1 mem_mesh_adv_data_len
+	31 mem_mesh_adv_data
+
+	1 mem_mesh_adv_scan_channel
+)
+
+
+(
+6 ADV_PACKET_MIN_LENGTH
+37 ADV_PACKET_MAX_LENGTH
+
+1 AD_TYPE_MIN_LENGTH
+30 AD_TYPE_MAX_LENGTH
+)
+(
+13 mesh_ble_rx_timer
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_chip_peripherals.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_chip_peripherals.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_chip_peripherals.format	(working copy)
@@ -0,0 +1,45 @@
+
+
+amemalloc mem_temp_block0(
+	64 mem_mesh_subscription_eep_temp
+)
+
+(//transport mic cache parameter
+10 TRANSPORT_MIC_CACHE_SPACE_NUM
+4 TRANSPORT_MIC_CACHE_SPACE_SIZE
+//总长度少一个space
+36 TRANSPORT_MIC_CACHE_TOTAL_SIZE
+)
+
+(
+0x00 MESH_EEP_THREE_TUPLE_OFFSET
+0x1a MESH_EEP_NETWORK_KEY_OFFSET
+0x2d MESH_EEP_APPLICATION_KEY_OFFSET
+0x3d MESH_EEP_DEVICE_KEY_OFFSET
+0x4d MESH_EEP_RESET_COUNT_OFFSET
+0x4e MESH_EEP_SEQ_OFFSET
+0x51 MESH_EEP_SUBSCRIPTION_OFFSET
+0x91 MESH_EEP_PROV_RANDOM_OFFSET
+)
+
+(
+0x1a MESH_EEP_THREE_TUPLE_LENGTH
+0x13 MESH_EEP_NETWORK_KEY_LENGTH
+0x10 MESH_EEP_APPLICATION_KEY_LENGTH
+0x10 MESH_EEP_DEVICE_KEY_LENGTH
+0x01 MESH_EEP_RESET_COUNT_LENGTH
+0x03 MESH_EEP_SEQ_LENGTH
+0x10 MESH_EEP_SUBSCRIPTION_LENGTH
+0x40 MESH_EEP_SUBSCRIPTION_TOTAL_LENGTH
+0x04 MESH_EEP_PROV_RANDOM_LENGTH
+)
+
+(
+0x1e000 MESH_FLASH_NETWORK_KEY_ADDR
+0x1e100 MESH_FLASH_APPLICATION_KEY_ADDR
+0x1e200 MESH_FLASH_DEVICE_KEY_ADDR
+0x1f000 MESH_FLASH_MESSAGE_SEQ_ADDR
+0x1e400 MESH_FLASH_SUBSCRIPTION_ADDR
+0x1e500 MESH_FLASH_PROV_RANDOM_ADDR
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_control_ble_advertising.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_control_ble_advertising.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_control_ble_advertising.format	(working copy)
@@ -0,0 +1,63 @@
+
+
+xmemalloc ali_mesh(
+	1 mem_mesh_advertising_unprovisioned_device_beacon_switch
+	//未配网广播间隔
+	2 mem_mesh_advertising_unprovisioned_device_beacon_timer
+
+	//广播生存周期
+	1 mem_mesh_advertising_unprovisioned_device_beacon_duration
+	//广播周期之间的间隔
+	1 mem_mesh_advertising_unprovisioned_device_beacon_interval
+
+)
+
+(//mem_mesh_advertising_unprovisioned_device_beacon_switch
+0 DEVICE_BEACON_OFF
+1 DEVICE_BEACON_ON
+)
+
+(
+//未配网广播超时10min
+0x1770	ADV_UNPROVISIONED_DEVICE_BEACON_TIMEOUT
+//未配网广播间隔500ms
+5		ADV_UNPROVISIONED_DEVICE_BEACON_INTERVAL
+//未配网广播时长120ms=20ms*6
+6		ADV_UNPROVISIONED_DEVICE_BEACON_DURATION
+
+//静默广播超时:无
+0		ADV_SILENCE_DEVICE_BEACON_TIMEOUT
+//静默广播间隔60s
+600		ADV_SILENCE_DEVICE_BEACON_INTERVAL
+//静默广播时长120ms=20ms*6
+6		ADV_SILENCE_DEVICE_BEACON_DURATION
+
+
+//配网后广播间隔
+0x4		ADV_PAIRING_MESH_MESSAGE_INTERVAL
+//配网后广播时长
+20		ADV_PAIRING_MESH_MESSAGE_DURATION
+
+30		ADV_RELAY_MESH_MESSAGE_DURATION
+)
+
+(
+0x12 MAX_APP_MSSAGE_PAYLOAD_LENGTH
+7 BIT_OF_APP_PACKAGE_NUM
+6 BIT_OF_ADV_IN_OFF
+)
+
+(
+//mesh 回复APP广播间隔24*0.625ms = 15ms
+0x15 MESH_ADV_APP_MESSAGE_INTERVAL
+//mesh回复tmall广播间隔32*0.625ms = 20ms
+0x1d MESH_ADV_TMALL_MESSAGE_INTERVAL
+)
+(
+13 mesh_ble_adv_app
+//Tiny Mesh锟姐播tmall锟截革拷
+14 mesh_ble_adv_tmall
+//Tiny Mesh relay
+15 mesh_ble_relay_timer
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_encrypt_function.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_encrypt_function.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_encrypt_function.format	(working copy)
@@ -0,0 +1,111 @@
+memalloc ali_mesh(
+	// sha256
+	0 mem_mesh_sha256_chunk_start
+	64 mem_mesh_sha256_chunk1
+	64 mem_mesh_sha256_chunk2
+	64 mem_mesh_sha256_chunk3
+	64 mem_mesh_sha256_chunk4
+
+	//obfuscation network PDU Header
+	0 mem_mesh_Privacy_Plaintext
+	5 mem_mesh_Privacy_Plaintext_Zero_String
+	4 mem_mesh_Privacy_Plaintext_IV_Index
+	0 mem_mesh_Privacy_Plaintext_Privacy_Random
+	2 mem_mesh_Privacy_Plaintext_Privacy_Random_EncDST
+	5 mem_mesh_Privacy_Plaintext_Privacy_Random_EncTransportPDU_or_NetMIC
+	16 mem_mesh_PECB
+
+	//basic function
+	//aes-ccm
+	2 mem_nonce_ptr
+	1 mem_ccm_data_len
+	2 mem_ccm_data_ptr
+	8 mem_ccm_mic
+	1 mem_ccm_type
+
+
+)
+
+xmemalloc ali_mesh(
+
+	0 mem_mesh_calc_ConfirmationCloud_data
+	8 mem_mesh_ConfirmationCloud_RandomB
+	8 mem_mesh_ConfirmationCloud_RandomA
+	16 mem_mesh_AuthValueProv
+	16 mem_mesh_ConfirmationCloud
+
+
+	//provisioning random  / provisioning_confirmation
+	0 mem_mesh_ConfirmationDevice
+	0 mem_mesh_calc_ConfirmationDevice_data
+	8 mem_mesh_provisioning_random_A
+	8 mem_mesh_provisioning_random_B
+	16 mem_mesh_AuthValueDevice
+
+	16 mem_mesh_Device_Key
+
+
+// CMAC Key
+	16 mem_mesh_Confirmationkey
+
+	//sha256 init data
+	15 mem_mesh_sha256_ConfirmationKey_ascii
+	10 mem_mesh_sha256_SessionKey_ascii
+	9 mem_mesh_sha256_DeviceKey_ascii
+
+	//sha256
+	1 mem_mesh_sha256_load_first_data_flag
+
+	8 mem_mesh_sha256_data_len_byte
+	8 mem_mesh_sha256_data_len_bit
+	2 mem_mesh_sha256_data_end_addr
+	2 mem_mesh_sha256_data_len_addr
+	1 mem_mesh_sha256_chunk_count
+	2 mem_mesh_sha256_chunk_data_ptr
+	2 mem_mesh_sha256_chunk_ptr
+
+
+	//function K2
+	//f2 input
+	1 mem_k2_P_len
+	16 mem_k2_P
+	16 mem_k2_N
+	//f2 init data
+	16 mem_k2_SALT
+	//f2 output
+	16 mem_k2_T
+	0 mem_k2_T0
+	16 mem_k2_T1
+	1 mem_k2_NID
+	16 mem_k2_T3
+	16 mem_k2_T2
+
+
+	//k4 function
+	16 mem_k4_SALT
+	16 mem_k4_T
+	16 mem_k4_id6_01
+	16 mem_k4_k4N
+	1 mem_mesh_transport_AID
+
+	16 mem_k3_SALT
+	16 mem_k3_T
+	5 mem_k3_id64_01
+	8 mem_k3_k4N
+	8 mem_mesh_network_id
+
+
+)
+
+(
+0x2c COMMA
+-4 DECREASED_FOUR
+
+)
+
+(
+0x19 MIC_SIZE_64BIT
+0x09 MIC_SIZE_32BIT
+)
+
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_fast_pairing.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_fast_pairing.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_fast_pairing.format	(working copy)
@@ -0,0 +1,199 @@
+memalloc ali_mesh(
+
+	16 mem_mesh_Device_UUID
+	
+	1 mem_mesh_receive_VID
+
+)
+
+
+xmemalloc ali_mesh(
+
+	// provisioning flag 标志是否入网
+	1 mem_mesh_provisioned_flag
+
+	//入网时的状态机
+	1 mem_mesh_Provisioning_State_Flag
+	
+	1 mem_mesh_Device_PID
+	1 mem_mesh_UUID_FeatureFlag
+	1 mem_mesh_UUID_FeatureFlag1
+	1 mem_mesh_PDU_RFU
+	2 mem_mesh_OOB_information
+
+	//Provisioning_Data
+	0 mem_mesh_Encrypt_Provisioning_Data
+	2 mem_mesh_provisioning_data_Mac_addr
+	1 mem_mesh_KeyFresh_and_Update_flag
+	16 mem_mesh_Network_Key
+	1 mem_mesh_last_IV_Index_byte
+	2 mem_mesh_Unicast_Address
+
+	1 mem_mesh_recv_cfg_appkey_add_timer
+
+	1 mem_mesh_report_power_on_timer
+	1 mem_mesh_report_full_attribute_timer
+
+	1 mem_mesh_health_node_reset_timer
+//	4 mem_mesh_adv_last_time
+	2 mem_mesh_send_packet_timeout
+
+	1 mem_mesh_gatt_package_send_msg_id
+
+)
+
+
+(
+33 GATT_RECEIVE_MSG_BUFFER_SIZE
+)
+
+xmemalloc ali_mesh(
+
+	1 mem_mesh_gatt_receive_msg_timer
+	//fast pairing 
+	//APP control 
+
+
+
+)
+
+amemalloc mem_mesh_queue_ele_temp(
+	2 mem_mesh_gatt_package_receive_msg_buffer_ptr
+	0 mem_mesh_gatt_package_receive_msg_buffer_temp
+	2 mem_mesh_gatt_package_receive_msg_id
+	0 mem_mesh_gatt_package_receive_MAC
+	1 mem_mesh_gatt_package_receive_msg_num
+	1 mem_mesh_gatt_package_receive_msg_total_length
+	29 mem_mesh_gatt_package_receive_msg_payload
+)
+
+amemalloc mem_mesh_Device_UUID(
+	2 mem_mesh_receive_service_uuid_company_id
+	1 mem_mesh_receive_service_uuid_vid
+	1 mem_mesh_receive_service_uuid_provisioning_type
+	2 mem_mesh_receive_service_uuid_mac
+	1 mem_mesh_receive_service_uuid_msg_id
+	1 mem_mesh_receive_service_uuid_package_num
+	1 mem_mesh_receive_service_uuid_length
+	7 mem_mesh_receive_service_uuid_payload_data
+)
+
+
+amemalloc mem_le_txheader_mesh_temp(
+	1 mem_mesh_fast_pair_packet_type
+)
+amemalloc mem_mesh_send_packet_timeout(
+	2 mem_mesh_fast_pairing_timer
+)
+
+(//mem_mesh_provisioned_flag
+0 PAIRED_STATUS
+1 UNPROVISIONED_BEACON_STATUS
+2 PAIRING_STATUS
+3 SILENCE_BEACON_STATUS
+4 RECEIVED_CONFIG_APPKEY_ADD
+5 WAIT_RECEIVE_APPKEY
+6 RECEIVE_CONFIG_COMPOSITION_DATA_GET
+)
+
+(//mem_mesh_UUID_FeatureFlag
+0 BIT_SILENCE_ADV_FLAG
+)
+
+//mem Beacon Tmall Length
+(
+0x01 UNPROVISIONED_ADLEN_LENGTH
+0x01 UNPROVISIONED_ADTYPE_LENGTH
+0x01 UNPROVISIONED_DEVICE_BEACON_LENGTH
+0x10 UNPROVISIONED_DEVICE_UUID_LENGTH
+0x02 UNPROVISIONED_OOB_INFORMATION_LENGTH
+)
+
+// mem Beacon Type
+(
+0x00 UNPROVISIONED_DEVICE_BEACON
+0x01 SECURE_NETWORK_BEACON
+0x1827 MESH_PROVISIONING_UUID
+0x1828 MESH_PROXY_SERVICE
+
+)
+
+// Provisioning Type
+(
+0x00 PROVISIONING_RANDOM
+0x01 PROVISIONING_CONFIRMATION
+0x02 PROVISIONING_DATA
+0x03 PROVISIONING_COMPLETE
+0x04 PROVISIONING_CONFIG
+0x05 PROVISIONING_CONFIG_ACK
+0x06 PROVISIONING_IOS_DATA
+0x07 PROVISIONING_SEND_IOS_DATA
+0x09 PROVISIONING_ADD_APPKEY
+0x0A PROVISIONING_ADD_APPKEY_ACK
+)
+
+(//mem_mesh_Provisioning_State_Flag
+// FLAG bit1:Provisioning Confirmation
+1 RECEIVE_PROVISIONING_RANDOM
+2 RECEIVE_PROVISIONING_DATA
+3 RECEIVE_PROVISIONING_ADD_APPKEY
+)
+
+
+(//provisioning packet info size
+3 PROVISIONING_PACKET_LENGTH_FLAGS
+6 PROVISIONING_PACKET_LENGTH_AD_TYPE_COMPANY_ID_VID_PROVISIONING_TYPE
+5 PROVISIONING_PACKET_AD_TYPE_COMPANY_ID_VID_PROVISIONING_TYPE
+1 PROVISIONING_PACKET_LENGTH
+1 PROVISIONING_PACKET_AD_TYPE
+2 PROVISIONING_PACKET_COMPANY_ID
+1 PROVISIONING_PACKET_VID
+1 PROVISIONING_PACKET_PROVISIONING_TYPE
+//provisioning random
+2 PROVISIONING_PACKET_RANDOM_MAC
+8 PROVISIONING_PACKET_RANDOM_RANDOM_A
+8 PROVISIONING_PACKET_RANDOM_RANDOM_B
+//provisioning confirmation
+2 PROVISIONING_PACKET_CONFIRMATION_MAC
+16 PROVISIONING_PACKET_CONFIRMATION_DEVICE
+//provisioning complete
+6 PROVISIONING_PACKET_COMPLETE_MAC
+//provisioning add appkey ack
+7 PROVISIONING_PACKET_ADD_APPKEY_ACK
+
+2 PROVISIONING_CONFIG_ACK_MAC
+1 PROVISIONING_CONFIG_ACK_FIELD
+
+)
+
+(
+0x01 PROVISIONING_CONFIG_ACK_NOTE
+)
+
+(//gatt package struct
+0 GATT_PACKAGE_MSG_ID
+1 GATT_PACKAGE_PACKAGE_NUM
+2 GATT_PACKAGE_LENGTH
+3 GATT_PACKAGE_PAYLOAD
+)
+
+(
+0x12 MAX_LENGTH_PRIVISIONING_CONTROL_MSG_ANDROID
+0x08 MAX_LENGTH_PRIVISIONING_CONTROL_MSG_IOS
+0x07 MAX_LENGTH_PRIVISIONING_PAIRING_MSG_IOS
+)
+
+(
+4 MAX_GATT_PACKAGE_NUM
+50 GATT_RECEIVE_TIMEOUT
+)
+
+(//mem_mesh_fast_pairing_timer
+300 FAST_PAIRING_TIMEOUT_PROVISIONING
+200 FAST_PAIRING_TIMEOUT_PROXY
+)
+
+(//mem_mesh_add_appkey_ack_timer
+2 FAST_PAIRING_TIMEOUT_ADD_APPKEY_ACK
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_health_message.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_health_message.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_health_message.format	(working copy)
@@ -0,0 +1,27 @@
+
+amemalloc mem_mesh_receive_model_message_payload(
+	1 mem_mesh_configuration_health_message_opcode
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	1 mem_mesh_configuration_health_message_opcode_config_model_subscription
+	2 mem_mesh_subscription_element_address
+	2 mem_mesh_subscription_value_address
+	2 mem_mesh_subscription_model_identifier
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	1 mem_mesh_configuration_health_message_opcode_config_model_subscription_ow  //overwrite
+	2 mem_mesh_subscription_element_address_ow
+	1 mem_mesh_subscription_list_num_ow
+	2 mem_mesh_subscription_value_address_start_ow
+)
+
+(
+8 SUBSCRIPTION_MAX_COUNT
+)
+
+(
+20 HEALTH_NODE_RESET_TIMEOUT
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_init.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_init.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_init.format	(working copy)
@@ -0,0 +1,203 @@
+memalloc ali_mesh(
+	2 mem_mesh_mic_cache_ptr
+	2 mem_adv_CRC_False_initValue
+	2 mem_CRC16_polynomial
+)
+
+
+xmemalloc ali_mesh(
+	4 mem_mesh_three_tuple_ProductID
+	6 mem_mesh_three_tuple_MAC
+	16 mem_mesh_three_tuple_secret
+
+
+	2 mem_mesh_cb_receive_advertising
+
+
+	2 mem_mesh_cb_receive_access_message
+
+
+	2 mem_mesh_cb_receive_config_appkey_add
+
+
+	2 mem_mesh_cb_pairing_fail
+
+	//ali vendor message cb
+	2 mem_mesh_cb_recv_vendor
+
+	2 mem_mesh_scan_selete_next_ch
+	
+	2 mem_mesh_cb_generic_onoff_get
+	2 mem_mesh_cb_generic_onoff_set
+	2 mem_mesh_cb_scene_recall
+	2 mem_mesh_cb_light_lightness_set
+	2 mem_mesh_cb_light_lightness_get
+	2 mem_mesh_cb_light_ctl_set
+
+	2 mem_mesh_cb_main_light_onoff_set
+	2 mem_mesh_cb_background_onoff_set
+	2 mem_mesh_cb_color_set
+
+
+	2 mem_mesh_cb_network_relay
+
+
+	2 mem_mesh_cb_receive_node_reset
+
+
+	2 mem_mesh_cb_seq_changed
+
+	2 mem_mesh_cb_subscriptuion_list_changed
+
+
+	2 mem_mesh_cb_vendor_timing_changed
+	
+
+	2 mem_mesh_core_feature
+
+	1 mem_mesh_element_number
+	2 mem_mesh_element_device_ptr
+	2 mem_mesh_element_device_length
+
+	2 mem_mesh_clear_provisioning_data
+
+	2 mem_mesh_app_deport_device_state
+
+	1 mem_mesh_chip_select
+
+
+)
+amemalloc mem_mesh_sha256_chunk_start(
+	0 mem_chip_clear_paired_info
+)
+
+(//typedef struct of mem_mesh_element_device
+0 ELEMENT_DEVICE_GROUP_ADDR
+2 ELEMENT_DEVICE_QUEUE_BUFFER_PTR
+4 ELEMENT_DEVICE_VENDOR_TIME_PTR
+6 ELEMENT_DEVICE_SUBSCRIPTION_LABEL
+22 ELEMENT_DEVICE_UPPER_ADV_FLAG
+23 ELEMENT_DEVICE_UPPER_QUEUE_PTR
+25 ELEMENT_DEVICE_TRAN_PACKAGE_TID
+26 ELEMENT_DEVICE_TRAN_PACKAGE_TYPE
+27 SIZEOF_ELEMENT_DEVICE
+
+)
+
+
+xmemalloc ali_mesh_element(
+	0 mem_mesh_element_device
+	2 mem_mesh_element_device_group_addr
+	2 mem_mesh_element_device_queue_buffer_ptr
+	2 mem_mesh_element_device_timing_ptr
+	16 mem_mesh_element_device_element_subscription_label
+	1 mem_mesh_element_upper_adv_flag
+	2 mem_mesh_element_upper_queue_buffer_ptr
+	1 mem_mesh_element_tran_package_tid
+	1 mem_mesh_element_tran_package_type
+
+	SIZEOF_ELEMENT_DEVICE mem_mesh_element_device1
+	SIZEOF_ELEMENT_DEVICE mem_mesh_element_device2
+)
+
+(
+36 MESH_SEGMENT_SIZE
+)
+
+xmemalloc ali_mesh_element(
+	MESH_SEGMENT_SIZE mem_mesh_segmented_access_message_Segment
+)
+
+
+
+(
+320 MESH_TIMER_BUFFER_SIZE
+)
+
+/*
+xmemalloc ali_mesh_element_timer(
+	MESH_TIMER_BUFFER_SIZE mem_mesh_element_timing
+	MESH_TIMER_BUFFER_SIZE mem_mesh_element_timing1
+	MESH_TIMER_BUFFER_SIZE mem_mesh_element_timing2
+)
+*/
+
+(//bit map of mem_mesh_core_feature
+0 MESH_FEATURE_DISABLE_LOG
+1 MESH_FEATURE_DISABLE_RELAY
+2 MESH_FEATURE_DISABLE_SUBSCRIPTION
+3 MESH_FEATURE_DISABLE_APP_PAIRING
+)
+
+(//taobao id
+0x01a8	COMPANY_IDENTIFIERS_ALIBABA
+0x0d	ALI_MESH_VID_NUMBER
+0x0da801 COMPANY_ID_ALIBABA_AND_VID
+0x0ea801 COMPANY_ID_ALIBABA_AND_VID_GATT
+)
+
+
+(
+0x00 MESH_CODE_INIT
+0x01 MESH_RECEIVE_PROVISIONING_PACKET
+0x02 MESH_RECEIVE_PROVISIONING_RANDOM_PACKET
+0x03 MESH_SEND_PROVISIONING_CONFIRMATION_PACKET
+0x04 MESH_RECEIVE_PROVISIONING_DATA_PACKET
+0x05 MESH_SEND_PROVISIONING_COMPLETE_PACKET
+0x06 MESH_RECEIVE_PROVISIONING_FAILED_PACKET
+0x07 MESH_RECEIVE_PROVISIONING_ADD_APPKEY_PACKET
+0x08 MESH_SEND_PROVISIONING_ADD_APPKEY_ACK_PACKET
+
+0x10 MESH_ENCRYPT_SHA256_FUNCTION_INPUT
+0x11 MESH_ENCRYPT_SHA256_FUNCTION_RESULT
+0x12 MESH_ENCRYPT_AES_CMAC_FUNCTION_INPUT_M
+0x13 MESH_ENCRYPT_AES_CMAC_FUNCTION_INPUT_K
+0x14 MESH_ENCRYPT_AES_CMAC_FUNCTION_RESULT
+
+0x20 MESH_NETWORK_RECEIVE_PACKET
+0x21 MESH_NETWORK_RELAY_PACKET
+
+0x30 MESH_LOWER_RECEIVE_PACKET
+0x40 MESH_UPPER_RECEIVE_PACKET
+0x41 MESH_UPPER_SEND_PACKET
+
+0x50 MESH_ACCESS_RECEIVE_MESSAGE
+
+0x60 MESH_PROXY_RECEIVE_MESSAGE_HANDLE
+0x61 MESH_PROXY_RECEIVE_MESSAGE
+
+0xF0 MESH_MESSAGE_GENERIC_ONOFF_SET
+0xF1 MESH_MESSAGE_SET_LIGHT_LIGHTNESS
+0xF2 MESH_MESSAGE_SET_CTL
+)
+
+(//LUA LOG 
+0xAA LUA_LOG_PACKET_HEADER
+0x03 LUA_LOG_PAKCET_TYPE
+0xBB LUA_LOG_PACKET_TRAIL
+)
+
+(//logging level
+0 LOGGING_DEBUG
+1 LOGGING_INFO
+2 LOGGING_WARNING
+3 LOGGING_ERROR
+4 LOGGING_CRITICAL
+)
+
+(
+0x1c00 mem_mesh_uart_log_rx_buff
+0x1c01 mem_mesh_uart_log_rx_buff_end
+0x1c02 mem_mesh_uart_log_tx_buff
+0x1fff mem_mesh_uart_log_tx_buff_end
+)
+
+(
+0x77 MESH_PAIRED_INFO_LENGTH
+)
+
+(
+0x01 MESH_CHIP_FROM_EEPROM
+0x02 MESH_CHIP_FROM_FLASH
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_lower_transport_layer.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_lower_transport_layer.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_lower_transport_layer.format	(working copy)
@@ -0,0 +1,61 @@
+memalloc ali_mesh(
+	1 mem_mesh_lower_transport_layer_payload_len
+
+)
+
+
+
+xmemalloc ali_mesh(
+	//current segmented access message head
+	1 mem_mesh_segmented_access_message_SZMIC
+	2 mem_mesh_segmented_access_message_SeqZero
+	1 mem_mesh_segmented_access_message_SegO
+	1 mem_mesh_segmented_access_message_SegN
+
+	4 mem_mesh_segmented_access_message_BlockAck
+	1 mem_mesh_segmented_access_message_receive_finish
+	1 mem_mesh_segmented_access_message_current_length
+
+	1 mem_mesh_segmented_access_message_SegN_upper_limit
+	2 mem_mesh_segmented_access_message_Segment_ptr
+)
+
+amemalloc mem_mesh_send_access_lower_transport_layer(
+	//proxy configuration messages -----Filter Status message format
+	1 mem_mesh_filter_status_message_opcode
+	1 mem_mesh_filter_status_message_FilterType
+	2 mem_mesh_filter_status_message_ListSize
+	8 mem_mesh_filter_status_message_MIC
+)
+
+amemalloc mem_mesh_send_access_lower_transport_layer(
+	//bit7 is SEQ 0=Unsegment Message
+	//bit6 is AKF
+	//bit5-bit0 is AID
+	1 mem_mesh_unsegmented_access_lower_transport_layer_head
+	11 mem_mesh_unsegmented_access_lower_transport_layer_parameters
+	4 mem_mesh_unsegmented_access_lower_transport_layer_mic
+)
+
+amemalloc mem_mesh_send_access_lower_transport_layer(
+	//bit7 is SEQ 1=segment Message
+	//bit6 is AKF
+	//bit5-bit0 is AID
+	1 mem_mesh_segmented_access_lower_transport_layer_head
+	//bit23 is SZMIC size of transMIC
+	//bit22-bit10 is SeqZero Least significant bits of SeqAuth
+	//bit9-bit5 is SegO Segment offset number
+	//bit4-bit0 is SegN Last Segment number
+	3 mem_mesh_segmented_access_lower_transport_layer_SZMIC_SeqZero_SegO_SegN
+	8 mem_mesh_segmented_access_lower_transport_layer_parameters
+	4 mem_mesh_segmented_access_lower_transport_layer_mic
+)
+
+(
+7 TRANSPORT_HEAD_BIT_SEG
+6 TRANSPORT_HEAD_BIT_AKF
+05 TRANSPORT_HEAD_BIT_AID
+7 BIT_CTL
+)
+
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_model_layer.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_model_layer.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_model_layer.format	(working copy)
@@ -0,0 +1,70 @@
+
+
+xmemalloc ali_mesh(
+	2 mem_mesh_last_CTL_Temperature
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	1 mem_mesh_module_message_opcode
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	//generic OnOff Set
+	1 mem_mesh_module_message_opcode_onoff_set
+	1 mem_mesh_generic_onoff_set_payload_OnOff
+	1 mem_mesh_generic_onoff_set_payload_TID
+	1 mem_mesh_generic_onoff_set_payload_Transition_Time
+	1 mem_mesh_generic_onoff_set_payload_Delay
+
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	//Scene recall 模式设置
+	1 mem_mesh_module_message_opcode_scene_recall
+	2 mem_mesh_scene_recall_payload_scene_number
+	1 mem_mesh_scene_recall_payload_TID
+	1 mem_mesh_scene_recall_payload_Transition_Time
+	1 mem_mesh_scene_recall_payload_Delay
+
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	//light lightness
+	1 mem_mesh_module_message_opcode_set_light_lightness
+	2 mem_mesh_light_lightness_set_payload_lightness
+	1 mem_mesh_light_lightness_set_payload_TID
+	1 mem_mesh_light_lightness_set_payload_Transition_Time
+	1 mem_mesh_light_lightness_set_payload_Delay
+	1 mem_mesh_light_lightness_calc_lightness
+)
+
+amemalloc mem_mesh_receive_model_message_payload(
+	//light CTL
+	1 mem_mesh_module_message_opcode_set_light_ctl
+	2 mem_mesh_CTL_Lightness
+	2 mem_mesh_CTL_Temperature
+	2 mem_mesh_CTL_Delta_UV
+	1 mem_mesh_CTL_lightness_TID
+	1 mem_mesh_CTL_lightness_Transition_Time
+	1 mem_mesh_CTL_lightness_Delay	
+	1 mem_mesh_CTL_calc_lightness
+	1 mem_mesh_CTL_calc_temperature
+
+)
+
+(//Generic OnOff
+0x00 GENERIC_ONOFF_CMD_OFF
+0x01 GENERIC_ONOFF_CMD_ON
+)
+
+(//LIGHTNESS
+0xFFFF ALI_MESH_LIGHTNESS_MAX
+0x0064 ALI_MESH_LIGHTNESS_LEVEL
+)
+
+(//TEMPERATURE
+0x4E20 ALI_MESH_TEMPERATURE_MAX
+0x0320 ALI_MESH_TEMPERATURE_MIN
+0x0064 ALI_MESH_TEMPERATURE_LEVEL
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_more_element_check.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_more_element_check.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_more_element_check.format	(working copy)
@@ -0,0 +1,17 @@
+
+memalloc ali_mesh(
+	2 mem_mesh_loopcnt_tmep
+	2 mem_mesh_rega_temp
+	2 mem_mesh_regb_temp
+	2 mem_mesh_regc_temp
+	2 mem_mesh_alarm_temp
+	
+)
+
+
+
+xmemalloc ali_mesh(
+	1 mem_mesh_receive_group_address
+	1 mem_mesh_receive_element_number
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_network_layer.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_network_layer.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_network_layer.format	(working copy)
@@ -0,0 +1,137 @@
+
+
+memalloc ali_mesh(
+	1 mem_mesh_message_Transport_NetMIC_length
+
+	1 mem_mesh_message_NID
+	1 mem_mesh_message_TTL
+	3 mem_mesh_message_SEQ
+	2 mem_mesh_message_SRC
+	2 mem_mesh_message_DST
+	0 mem_mesh_message_Proxy_TransportPDU_opcode
+	0 mem_mesh_message_Transport_NetMIC
+	1 mem_mesh_message_Transport_Head
+	//unsegmented access message
+	0 mem_mesh_message_Proxy_TransportPDU_Parameters
+	0 mem_mesh_message_Transport_unsegmented_access_messagePDU
+	//segmented access message
+	0 mem_mesh_message_Transport_segmented_access_messagePDU
+	3 mem_mesh_message_segment_access_SZMIC_SeqZero_SegO_SegN
+	0 mem_mesh_message_Transport_segmented_access_messagePDU_Segment
+	16 mem_mesh_message_Transport_NetMIC_end
+
+	13 mem_mesh_nonce_struct
+
+	2 mem_mesh_send_message_DST
+	3 mem_mesh_last_message_SEQ
+	1 mem_mesh_network_packet_type
+
+	1 mem_mesh_receive_message_count
+	2 mem_mesh_receive_message_first_unicast_address
+	2 mem_mesh_receive_message_second_unicast_address
+	2 mem_mesh_receive_message_third_unicast_address
+	2 mem_mesh_receive_message_fourth_unicast_address	
+
+)
+
+xmemalloc ali_mesh(
+	1 mem_mesh_network_dup_cache_next
+	1 mem_mesh_network_msg_cache_next
+	2 mem_mesh_network_proxy_unicast_address
+
+	4 mem_mesh_IV_Index
+
+
+
+// mesh SRC/SEQ  cache
+	0 mem_mesh_TMALL_cache_start
+	2 mem_mesh_TMALL_SRC1
+	3 mem_mesh_TMALL_SEQ1
+	45 mem_mesh_TMALL_cache
+	0 mem_mesh_TMALL_cache_end
+
+	0 mem_mesh_transport_message_mic_cache
+	4 mem_mesh_transport_message_mic_cache_buff1
+	36 mem_mesh_transport_message_mic_cache_buff2_10
+
+	0 mem_mesh_network_relay_queue
+	1 mem_mesh_network_relay_queue_each_size
+	1 mem_mesh_network_relay_queue_length
+	1 mem_mesh_network_relay_queue_current_num
+	1 mem_mesh_network_relay_queue_read_ptr
+	1 mem_mesh_network_relay_queue_write_ptr
+	136 mem_mesh_network_relay_queue_ele
+
+)
+
+
+amemalloc mem_k2_T2(
+	16 mem_k2_EncryptionKey
+)
+
+amemalloc mem_k2_T3(
+	16 mem_k2_PrivacyKey
+)
+
+amemalloc mem_mesh_nonce_struct(
+	//DST and TransportPDU encryption
+	0 mem_mesh_Network_Nonce
+	1 mem_mesh_Network_Nonce_nonce_type
+	1 mem_mesh_Network_Nonce_CTL_and_TTL
+	3 mem_mesh_Network_Nonce_SEQ
+	2 mem_mesh_Network_Nonce_SRC
+	2 mem_mesh_Network_Nonce_Pad	//0x0000
+	4 mem_mesh_Network_Nonce_IV_Index
+
+)
+
+amemalloc mem_le_txheader_mesh_temp(
+	1 mem_mesh_network_packet_type_temp
+
+	1 mem_mesh_message_NID_temp
+	1 mem_mesh_message_TTL_temp
+	3 mem_mesh_message_SEQ_temp
+	2 mem_mesh_message_SRC_temp
+	2 mem_mesh_message_DST_temp
+	20  mem_mesh_message_Transport_PDU_temp
+)
+
+(//nonce type
+0x00 NETWORK_NONCE
+0x01 APPLICATION_NONCE
+0x02 DEVICE_NONCE
+0x03 PROXY_NONCE
+)
+
+
+(
+0x00c0 GROUP_ADDRESS_0XC000_little_endian
+0xffcf GROUP_ADDRESS_0XCFFF_little_endian
+0x02c0 GROUP_ADDRESS_0XC002_little_endian
+0x07c0 GROUP_ADDRESS_0XC007_little_endian
+0x01c0 GROUP_ADDRESS_0XC001_little_endian
+0xffff GROUP_ADDRESS_0XFFFF_little_endian
+)
+
+
+(//SRC SEQ cache parameter
+10 CACHE_SPACE_NUM
+5 CACHE_SPACE_SIZE
+)
+
+(
+12 MESH_NETWORK_PACKET_MIN_LENGTH
+30 MESH_NETWORK_PACKET_MAX_LENGTH
+)
+
+(
+0 MESH_MESSAGE_TMALL
+1 MESH_MESSAGE_APP
+2 MESH_MESSAGE_PROXY
+)
+
+(
+
+0x20 MESH_ADV_RELAY_MESSAGE_INTERVAL
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_proxy_layer.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_proxy_layer.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_proxy_layer.format	(working copy)
@@ -0,0 +1,50 @@
+
+memalloc ali_mesh(
+	0 mem_mesh_Proxy_Nonce
+	1 mem_mesh_Proxy_Nonce_Nonce_Type
+	1 mem_mesh_Proxy_Nonce_Pad
+	3 mem_mesh_Proxy_Nonce_SEQ
+	2 mem_mesh_Proxy_Nonce_SRC
+	2 mem_mesh_Proxy_Nonce_Pad2
+	4 mem_mesh_Proxy_Nonce_IV_Index
+
+	16 mem_mesh_white_list
+	2 mem_mesh_white_list_num
+	1 mem_mesh_addressed_filter_type
+)
+
+
+xmemalloc ali_mesh_element(
+	196 mem_mesh_le_att_list
+	3 mem_mesh_send_message_SEQ_temp
+	
+)
+
+(
+0x00 MESH_PROXY_SERVICE_DATA_ID_TYPE_NETWORK_ID
+0x01 MESH_PROXY_SERVICE_DATA_ID_TYPE_NODE_IDENTITY
+)
+
+(
+0x00 MESH_PROXY_MESSAGE_TYPE_NETWORK_PDU
+0x01 MESH_PROXY_MESSAGE_TYPE_MESH_BEACON
+0x02 MESH_PROXY_MESSAGE_TYPE_PROXY_CONFIGURATION
+0x03 MESH_PROXY_MESSAGE_TYPE_PROVISIONING_PDU
+)
+
+(
+0x0e	MESH_PROXY_DATA_IN_HANDLE
+0x10	MESH_PROXY_DATA_OUT_HANDLE
+0x11	MESH_PROXY_ENABLE_DATA_OUT_HANDLE
+0x14	MESH_PROVISIONING_DATA_IN_HANDLE
+0x16	MESH_PROVISIONING_DATA_OUT_HANDLE
+0x17	MESH_PROVISIONING_ENABLE_DATA_OUT_HANDLE
+)
+
+(
+0x00 PROXY_OPCODE_SET_FILTER_TYPE
+0x01 PROXY_OPCODE_ADD_ADDR_TO_FILTER
+0x02 PROXY_OPCODE_REMOVE_ADDR_TO_FILTER
+0x03 PROXY_OPCODE_FILTER_STATUS
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_sha.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_sha.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_sha.format	(working copy)
@@ -0,0 +1,15 @@
+
+memalloc (
+	0 memresult
+	0 mem_sp_calc_result
+	4 memh
+	4 memg
+	4 memf
+	4 meme
+	0 mem_sp_calc_result_high
+	4 memd
+	4 memc
+	4 memb
+	4 mema
+)
+
Index: usb_pc_ai_voice/format/mesh_protocol_stack/mesh_upper_transport_layer.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_upper_transport_layer.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/mesh_protocol_stack/mesh_upper_transport_layer.format	(working copy)
@@ -0,0 +1,172 @@
+
+memalloc ali_mesh(
+	2 mem_mesh_upper_transport_layer_payload_ptr
+	1 mem_mesh_segmented_upper_transport_layer_payload_len
+	2 mem_mesh_segmented_lower_transport_layer_SegZero
+	1 mem_mesh_segmented_lower_transport_layer_SegO
+	1 mem_mesh_segmented_lower_transport_layer_SegN
+	1 mem_mesh_segmented_last_packet_upper_teansport_payload_len
+
+	0 mem_mesh_upper_tran_layer_queue_temp
+	1 mem_mesh_upper_tran_layer_temp_packet_flag
+	2 mem_mesh_upper_tran_layer_temp_packet_transmit_delay
+	1 mem_mesh_upper_tran_layer_temp_packet_TID
+	1 mem_mesh_upper_tran_layer_temp_packet_header_IVI_NID
+	1 mem_mesh_upper_tran_layer_temp_packet_header_CTL_TTL
+	3 mem_mesh_upper_tran_layer_temp_packet_header_SEQ
+	2 mem_mesh_upper_tran_layer_temp_packet_header_SRC
+	2 mem_mesh_upper_tran_layer_temp_packet_header_DST
+	1 mem_mesh_upper_tran_layer_temp_packet_length
+	108 mem_mesh_upper_tran_layer_temp_packet_payload
+
+
+	64 mem_mesh_network_dup_cache
+	80 mem_mesh_network_msg_cache
+
+	1 mem_mesh_network_relay_gatt_queue_each_size
+	1 mem_mesh_network_relay_gatt_queue_length
+	1 mem_mesh_network_relay_gatt_queue_current_num
+	1 mem_mesh_network_relay_gatt_queue_read_ptr
+	1 mem_mesh_network_relay_gatt_queue_write_ptr
+	340 mem_mesh_network_relay_gatt_queue_ele
+
+	
+
+	
+
+)
+
+xmemalloc ali_mesh(
+	16 mem_mesh_application_key
+	1 mem_mesh_ASZMIC
+
+	0 mem_mesh_access_message_mic_cache
+	4 mem_mesh_access_message_mic_cache_buff1
+	36 mem_mesh_access_message_mic_cache_buff2_10
+
+	3 mem_mesh_send_message_SEQ
+
+	2 mem_mesh_send_message_SRC
+
+	1 mem_mesh_send_message_TTL
+
+	//Upper transport access PDU
+	1 mem_mesh_send_upper_layer_IVI_and_NID
+	1 mem_mesh_send_upper_layer_CTL_and_TTL
+	3 mem_mesh_send_upper_layer_SEQ
+	2 mem_mesh_send_upper_layer_SRC
+	2 mem_mesh_send_upper_layer_DST
+	16 mem_mesh_send_access_lower_transport_layer
+	4 mem_mesh_send_network_layer_NetMIC
+
+	1 mem_mesh_upper_tran_layer_packet_advertising
+	1 mem_mesh_upper_tran_layer_packet_tid
+	1 mem_mesh_upper_tran_layer_packet_type
+
+	1 mem_mesh_upper_receive_new_message_timer
+
+	1 mem_mesh_upper_tran_layer_queue_each_size
+	1 mem_mesh_upper_tran_layer_queue_length
+	1 mem_mesh_upper_tran_layer_queue_current_num
+	1 mem_mesh_upper_tran_layer_queue_read_ptr
+	1 mem_mesh_upper_tran_layer_queue_write_ptr
+	40 mem_mesh_upper_tran_layer_queue_element_1
+	40 mem_mesh_upper_tran_layer_queue_element_2
+	40 mem_mesh_upper_tran_layer_queue_element_3
+	40 mem_mesh_upper_tran_layer_queue_element_4
+
+	1 mem_mesh_queue_each_size
+	1 mem_mesh_queue_length
+	1 mem_mesh_queue_current_num
+	1 mem_mesh_queue_read_ptr
+	1 mem_mesh_queue_write_ptr
+	136 mem_mesh_queue_ele
+
+)
+
+
+amemalloc mem_mesh_nonce_struct(
+	//application payload encryption
+	0 mem_mesh_Application_Nonce
+	1 mem_mesh_Application_Nonce_Nonce_Type
+	//bit7 is ASZMIC
+	1 mem_mesh_Application_Nonce_ASZMIC_and_Pad	//
+	3 mem_mesh_Application_Nonce_SEQ
+	2 mem_mesh_Application_Nonce_SRC
+	2 mem_mesh_Application_Nonce_DST
+	4 mem_mesh_Application_Nonce_IV_Index
+)
+
+amemalloc mem_mesh_nonce_struct(
+	//application payload encryption
+	0 mem_mesh_Device_Nonce
+	1 mem_mesh_Device_Nonce_Nonce_Type
+	1 mem_mesh_Device_Nonce_ASZMIC_and_Pad	//
+	3 mem_mesh_Device_Nonce_SEQ
+	2 mem_mesh_Device_Nonce_SRC
+	2 mem_mesh_Device_Nonce_DST
+	4 mem_mesh_Device_Nonce_IV_Index
+)
+
+amemalloc mem_mesh_access_layer_payload_len(
+	1 mem_mesh_upper_transport_layer_payload_len
+)
+
+amemalloc mem_mesh_upper_tran_layer_temp_packet_payload(
+//unsegment access message
+	0 mem_mesh_upper_tran_layer_temp_pakcet_AKF_AID
+	1 mem_mesh_upper_tran_layer_temp_unsegmented_pakcet_AKF_AID
+	4 mem_mesh_upper_tran_layer_temp_unsegmented_packet_fill
+	0 mem_mesh_upper_tran_layer_temp_pakcet_upper_tran_access_pdu
+	15 mem_mesh_upper_tran_layer_temp_unsegmented_pakcet_upper_tran_access_pdu
+)
+
+amemalloc mem_mesh_upper_tran_layer_temp_packet_payload(
+//segment access message
+	1 mem_mesh_upper_tran_layer_temp_segmented_pakcet_AKF_AID
+	2 mem_mesh_upper_tran_layer_temp_segmented_pakcet_SeqZero
+	1 mem_mesh_upper_tran_layer_temp_segmented_pakcet_SegO
+	1 mem_mesh_upper_tran_layer_temp_segmented_pakcet_SegN
+	104 mem_mesh_upper_tran_layer_temp_segmented_pakcet_upper_tran_access_pdu
+)
+
+
+
+(
+15 UNSEGMENTED_ACCESS_MESSAGE_MAX_UPPER_TRANSPORT_ACCESS_PDU_LEN
+12 SEGMENTED_ACCESS_MESSAGE_UNINT_PDU_LEN
+)
+
+(//bit of mem_mesh_upper_tran_layer_temp_packet_flag
+7 BIT_UPPER_FLAG_PROXY_CONTROL
+6 BIT_UPPER_FLAG_APP_CONTROL
+5 BIT_UPPER_FLAG_VENDOR_INDICATION
+4 BIT_UPPER_FLAG_RETRANSMIT
+//BIT3-0
+0x0f DATA_UPPER_FLAG_MAX_RETRY_COUNT
+
+1 UPPER_RETRY_COUNT_STATUS
+1 UPPER_RETRY_COUNT_INDICATION
+)
+
+(
+0 NULL_PACKET_ADVERTISING
+1 PACKET_IN_BEARER
+2 PACKET_IN_ADVERTING
+3 PACKET_RECEIVE_INDICATION
+)
+
+(
+1 UPPER_TRAN_TMALL_MESSAGE
+2 UPPER_TRAN_APP_MESSAGE
+3 UPPER_TRAN_TMALL_AND_APP
+
+0 BIT_UPPER_TRAN_TMALL_MESSAGE
+1 BIT_UPPER_TRAN_APP_MESSAGE
+2 BIT_UUPER_TRAN_PROXY_MESSAGE
+)
+
+(
+30 MESH_RECEIVE_NEW_MESSAGE_TIMER
+)
+
Index: usb_pc_ai_voice/format/patch.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/patch.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/patch.format	(working copy)
@@ -0,0 +1,516 @@
+
+(
+	  0 patch00_0
+	  1 patch00_1
+	  2 patch00_2
+	  3 patch00_3
+	  4 patch00_4
+	  5 patch00_5
+	  6 patch00_6
+	  7 patch00_7
+	  8 patch01_0
+	  9 patch01_1
+	 10 patch01_2
+	 11 patch01_3
+	 12 patch01_4
+	 13 patch01_5
+	 14 patch01_6
+	 15 patch01_7
+	 16 patch02_0
+	 17 patch02_1
+	 18 patch02_2
+	 19 patch02_3
+	 20 patch02_4
+	 21 patch02_5
+	 22 patch02_6
+	 23 patch02_7
+	 24 patch03_0
+	 25 patch03_1
+	 26 patch03_2
+	 27 patch03_3
+	 28 patch03_4
+	 29 patch03_5
+	 30 patch03_6
+	 31 patch03_7
+	 32 patch04_0
+	 33 patch04_1
+	 34 patch04_2
+	 35 patch04_3
+	 36 patch04_4
+	 37 patch04_5
+	 38 patch04_6
+	 39 patch04_7
+	 40 patch05_0
+	 41 patch05_1
+	 42 patch05_2
+	 43 patch05_3
+	 44 patch05_4
+	 45 patch05_5
+	 46 patch05_6
+	 47 patch05_7
+	 48 patch06_0
+	 49 patch06_1
+	 50 patch06_2
+	 51 patch06_3
+	 52 patch06_4
+	 53 patch06_5
+	 54 patch06_6
+	 55 patch06_7
+	 56 patch07_0
+	 57 patch07_1
+	 58 patch07_2
+	 59 patch07_3
+	 60 patch07_4
+	 61 patch07_5
+	 62 patch07_6
+	 63 patch07_7
+	 64 patch08_0
+	 65 patch08_1
+	 66 patch08_2
+	 67 patch08_3
+	 68 patch08_4
+	 69 patch08_5
+	 70 patch08_6
+	 71 patch08_7
+	 72 patch09_0
+	 73 patch09_1
+	 74 patch09_2
+	 75 patch09_3
+	 76 patch09_4
+	 77 patch09_5
+	 78 patch09_6
+	 79 patch09_7
+	 80 patch0a_0
+	 81 patch0a_1
+	 82 patch0a_2
+	 83 patch0a_3
+	 84 patch0a_4
+	 85 patch0a_5
+	 86 patch0a_6
+	 87 patch0a_7
+	 88 patch0b_0
+	 89 patch0b_1
+	 90 patch0b_2
+	 91 patch0b_3
+	 92 patch0b_4
+	 93 patch0b_5
+	 94 patch0b_6
+	 95 patch0b_7
+	 96 patch0c_0
+	 97 patch0c_1
+	 98 patch0c_2
+	 99 patch0c_3
+	100 patch0c_4
+	101 patch0c_5
+	102 patch0c_6
+	103 patch0c_7
+	104 patch0d_0
+	105 patch0d_1
+	106 patch0d_2
+	107 patch0d_3
+	108 patch0d_4
+	109 patch0d_5
+	110 patch0d_6
+	111 patch0d_7
+	112 patch0e_0
+	113 patch0e_1
+	114 patch0e_2
+	115 patch0e_3
+	116 patch0e_4
+	117 patch0e_5
+	118 patch0e_6
+	119 patch0e_7
+	120 patch0f_0
+	121 patch0f_1
+	122 patch0f_2
+	123 patch0f_3
+	124 patch0f_4
+	125 patch0f_5
+	126 patch0f_6
+	127 patch0f_7
+	128 patch10_0
+	129 patch10_1
+	130 patch10_2
+	131 patch10_3
+	132 patch10_4
+	133 patch10_5
+	134 patch10_6
+	135 patch10_7
+	136 patch11_0
+	137 patch11_1
+	138 patch11_2
+	139 patch11_3
+	140 patch11_4
+	141 patch11_5
+	142 patch11_6
+	143 patch11_7
+	144 patch12_0
+	145 patch12_1
+	146 patch12_2
+	147 patch12_3
+	148 patch12_4
+	149 patch12_5
+	150 patch12_6
+	151 patch12_7
+	152 patch13_0
+	153 patch13_1
+	154 patch13_2
+	155 patch13_3
+	156 patch13_4
+	157 patch13_5
+	158 patch13_6
+	159 patch13_7
+	160 patch14_0
+	161 patch14_1
+	162 patch14_2
+	163 patch14_3
+	164 patch14_4
+	165 patch14_5
+	166 patch14_6
+	167 patch14_7
+	168 patch15_0
+	169 patch15_1
+	170 patch15_2
+	171 patch15_3
+	172 patch15_4
+	173 patch15_5
+	174 patch15_6
+	175 patch15_7
+	176 patch16_0
+	177 patch16_1
+	178 patch16_2
+	179 patch16_3
+	180 patch16_4
+	181 patch16_5
+	182 patch16_6
+	183 patch16_7
+	184 patch17_0
+	185 patch17_1
+	186 patch17_2
+	187 patch17_3
+	188 patch17_4
+	189 patch17_5
+	190 patch17_6
+	191 patch17_7
+	192 patch18_0
+	193 patch18_1
+	194 patch18_2
+	195 patch18_3
+	196 patch18_4
+	197 patch18_5
+	198 patch18_6
+	199 patch18_7
+	200 patch19_0
+	201 patch19_1
+	202 patch19_2
+	203 patch19_3
+	204 patch19_4
+	205 patch19_5
+	206 patch19_6
+	207 patch19_7
+	208 patch1a_0
+	209 patch1a_1
+	210 patch1a_2
+	211 patch1a_3
+	212 patch1a_4
+	213 patch1a_5
+	214 patch1a_6
+	215 patch1a_7
+	216 patch1b_0
+	217 patch1b_1
+	218 patch1b_2
+	219 patch1b_3
+	220 patch1b_4
+	221 patch1b_5
+	222 patch1b_6
+	223 patch1b_7
+	224 patch1c_0
+	225 patch1c_1
+	226 patch1c_2
+	227 patch1c_3
+	228 patch1c_4
+	229 patch1c_5
+	230 patch1c_6
+	231 patch1c_7
+	232 patch1d_0
+	233 patch1d_1
+	234 patch1d_2
+	235 patch1d_3
+	236 patch1d_4
+	237 patch1d_5
+	238 patch1d_6
+	239 patch1d_7
+	240 patch1e_0
+	241 patch1e_1
+	242 patch1e_2
+	243 patch1e_3
+	244 patch1e_4
+	245 patch1e_5
+	246 patch1e_6
+	247 patch1e_7
+	248 patch1f_0
+	249 patch1f_1
+	250 patch1f_2
+	251 patch1f_3
+	252 patch1f_4
+	253 patch1f_5
+	254 patch1f_6
+	255 patch1f_7
+	  0 patch20_0
+	  1 patch20_1
+	  2 patch20_2
+	  3 patch20_3
+	  4 patch20_4
+	  5 patch20_5
+	  6 patch20_6
+	  7 patch20_7
+	  8 patch21_0
+	  9 patch21_1
+	 10 patch21_2
+	 11 patch21_3
+	 12 patch21_4
+	 13 patch21_5
+	 14 patch21_6
+	 15 patch21_7
+	 16 patch22_0
+	 17 patch22_1
+	 18 patch22_2
+	 19 patch22_3
+	 20 patch22_4
+	 21 patch22_5
+	 22 patch22_6
+	 23 patch22_7
+	 24 patch23_0
+	 25 patch23_1
+	 26 patch23_2
+	 27 patch23_3
+	 28 patch23_4
+	 29 patch23_5
+	 30 patch23_6
+	 31 patch23_7
+	 32 patch24_0
+	 33 patch24_1
+	 34 patch24_2
+	 35 patch24_3
+	 36 patch24_4
+	 37 patch24_5
+	 38 patch24_6
+	 39 patch24_7
+	 40 patch25_0
+	 41 patch25_1
+	 42 patch25_2
+	 43 patch25_3
+	 44 patch25_4
+	 45 patch25_5
+	 46 patch25_6
+	 47 patch25_7
+	 48 patch26_0
+	 49 patch26_1
+	 50 patch26_2
+	 51 patch26_3
+	 52 patch26_4
+	 53 patch26_5
+	 54 patch26_6
+	 55 patch26_7
+	 56 patch27_0
+	 57 patch27_1
+	 58 patch27_2
+	 59 patch27_3
+	 60 patch27_4
+	 61 patch27_5
+	 62 patch27_6
+	 63 patch27_7
+	 64 patch28_0
+	 65 patch28_1
+	 66 patch28_2
+	 67 patch28_3
+	 68 patch28_4
+	 69 patch28_5
+	 70 patch28_6
+	 71 patch28_7
+	 72 patch29_0
+	 73 patch29_1
+	 74 patch29_2
+	 75 patch29_3
+	 76 patch29_4
+	 77 patch29_5
+	 78 patch29_6
+	 79 patch29_7
+	 80 patch2a_0
+	 81 patch2a_1
+	 82 patch2a_2
+	 83 patch2a_3
+	 84 patch2a_4
+	 85 patch2a_5
+	 86 patch2a_6
+	 87 patch2a_7
+	 88 patch2b_0
+	 89 patch2b_1
+	 90 patch2b_2
+	 91 patch2b_3
+	 92 patch2b_4
+	 93 patch2b_5
+	 94 patch2b_6
+	 95 patch2b_7
+	 96 patch2c_0
+	 97 patch2c_1
+	 98 patch2c_2
+	 99 patch2c_3
+	100 patch2c_4
+	101 patch2c_5
+	102 patch2c_6
+	103 patch2c_7
+	104 patch2d_0
+	105 patch2d_1
+	106 patch2d_2
+	107 patch2d_3
+	108 patch2d_4
+	109 patch2d_5
+	110 patch2d_6
+	111 patch2d_7
+	112 patch2e_0
+	113 patch2e_1
+	114 patch2e_2
+	115 patch2e_3
+	116 patch2e_4
+	117 patch2e_5
+	118 patch2e_6
+	119 patch2e_7
+	120 patch2f_0
+	121 patch2f_1
+	122 patch2f_2
+	123 patch2f_3
+	124 patch2f_4
+	125 patch2f_5
+	126 patch2f_6
+	127 patch2f_7
+	128 patch30_0
+	129 patch30_1
+	130 patch30_2
+	131 patch30_3
+	132 patch30_4
+	133 patch30_5
+	134 patch30_6
+	135 patch30_7
+	136 patch31_0
+	137 patch31_1
+	138 patch31_2
+	139 patch31_3
+	140 patch31_4
+	141 patch31_5
+	142 patch31_6
+	143 patch31_7
+	144 patch32_0
+	145 patch32_1
+	146 patch32_2
+	147 patch32_3
+	148 patch32_4
+	149 patch32_5
+	150 patch32_6
+	151 patch32_7
+	152 patch33_0
+	153 patch33_1
+	154 patch33_2
+	155 patch33_3
+	156 patch33_4
+	157 patch33_5
+	158 patch33_6
+	159 patch33_7
+	160 patch34_0
+	161 patch34_1
+	162 patch34_2
+	163 patch34_3
+	164 patch34_4
+	165 patch34_5
+	166 patch34_6
+	167 patch34_7
+	168 patch35_0
+	169 patch35_1
+	170 patch35_2
+	171 patch35_3
+	172 patch35_4
+	173 patch35_5
+	174 patch35_6
+	175 patch35_7
+	176 patch36_0
+	177 patch36_1
+	178 patch36_2
+	179 patch36_3
+	180 patch36_4
+	181 patch36_5
+	182 patch36_6
+	183 patch36_7
+	184 patch37_0
+	185 patch37_1
+	186 patch37_2
+	187 patch37_3
+	188 patch37_4
+	189 patch37_5
+	190 patch37_6
+	191 patch37_7
+	192 patch38_0
+	193 patch38_1
+	194 patch38_2
+	195 patch38_3
+	196 patch38_4
+	197 patch38_5
+	198 patch38_6
+	199 patch38_7
+	200 patch39_0
+	201 patch39_1
+	202 patch39_2
+	203 patch39_3
+	204 patch39_4
+	205 patch39_5
+	206 patch39_6
+	207 patch39_7
+	208 patch3a_0
+	209 patch3a_1
+	210 patch3a_2
+	211 patch3a_3
+	212 patch3a_4
+	213 patch3a_5
+	214 patch3a_6
+	215 patch3a_7
+	216 patch3b_0
+	217 patch3b_1
+	218 patch3b_2
+	219 patch3b_3
+	220 patch3b_4
+	221 patch3b_5
+	222 patch3b_6
+	223 patch3b_7
+	224 patch3c_0
+	225 patch3c_1
+	226 patch3c_2
+	227 patch3c_3
+	228 patch3c_4
+	229 patch3c_5
+	230 patch3c_6
+	231 patch3c_7
+	232 patch3d_0
+	233 patch3d_1
+	234 patch3d_2
+	235 patch3d_3
+	236 patch3d_4
+	237 patch3d_5
+	238 patch3d_6
+	239 patch3d_7
+	240 patch3e_0
+	241 patch3e_1
+	242 patch3e_2
+	243 patch3e_3
+	244 patch3e_4
+	245 patch3e_5
+	246 patch3e_6
+	247 patch3e_7
+	248 patch3f_0
+	249 patch3f_1
+	250 patch3f_2
+	251 patch3f_3
+	252 patch3f_4
+	253 patch3f_5
+	254 patch3f_6
+	255 patch3f_7
+
+)
Index: usb_pc_ai_voice/format/regs.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/regs.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/regs.format	(working copy)
@@ -0,0 +1,549 @@
+(
+	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
+	
+	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
+
+	
+
+
+
+    
+    
+)
+
+(
+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
+	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
+)
+
Index: usb_pc_ai_voice/format/security.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/security.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/security.format	(working copy)
@@ -0,0 +1,63 @@
+
+memalloc (
+16 mem_input_store
+
+2 mem_ec_loopc
+1 mem_aes_cmac_data_length
+
+96 mem_dat
+
+/* ecc calculation */
+32 mem_ax_256 //32 bytes
+32 mem_ay_256 // 32 bytes
+32 mem_az_256 // 32 bytes
+32 mem_bx_256 // 32 bytes
+32 mem_by_256 // 31 bytes
+
+0 mem_bz_256  //32 bytes
+0 mem_tmp1
+24 memahbak
+8 mem_tmp5
+32 mem_cx_256  //32 bytes
+31 mem_cy_256  // 32 bytes
+1 mem_cy5_256 // 1 byte
+32 mem_cz_256 // 32 bytes
+32 mem_k_256 //32 bytes
+32  mem_tmp1_256 //32 bytes
+
+32 mem_tmp5_256
+32  mem_tmp2_256
+0 mem_tmp3_256
+32 mem_t1_256
+0 mem_tmp0_256
+32 mem_t0_256
+32 mem_t2_256
+32 mem_t3_256
+32 mem_t7_256
+
+24 mem_p
+24 mem_a
+24 mem_b
+24 mem_gx
+24 mem_gy
+32 memh0
+
+32 mem_p_256		
+32 mem_a_256
+32 mem_gx_256
+32 mem_gy_256
+16 mem_le_slat
+
+)
+
+xmemalloc(
+5 mem_ccm_pcnt_tx
+5 mem_ccm_pcnt_rx
+4 mem_ccm_last_mic
+0 mem_ccm_iv
+4 mem_ccm_ivm
+4 mem_ccm_ivs
+2 mem_ccm_len
+2 mem_ccm_rx_ptr
+)
+
Index: usb_pc_ai_voice/format/simple_pairing.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/simple_pairing.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/simple_pairing.format	(working copy)
@@ -0,0 +1,68 @@
+
+ifdef SECURE_CONNECTION
+
+memalloc(
+0 mem_sp_state_start
+1 mem_sp_dhkey_invalid
+4 mem_gkey
+0 mem_sp_state_end
+
+32 mem_le_pubkey_remote_x_256
+32 mem_le_pubkey_remote_y_256
+32 mem_le_dhkey_256
+
+16 mem_sp_confirm_remote
+)
+
+xmemalloc(
+1 mem_sc_only_mode
+1 mem_sp_debug_mode
+1 mem_secure_connections_enable
+1 mem_sc_calc
+1 mem_sc_local_key_invalid
+
+
+32 mem_sc_private_key_256
+32 mem_sc_pubkey_local_x_256
+32 mem_sc_pubkey_local_y_256
+
+
+0 mem_sp_state_xmem
+1 mem_authentication_passkey_times
+1 mem_passkey_1bit
+0 mem_sp_state_xmem_end
+)
+endif
+
+/* simple pairing status flag */
+(
+  0x00   SP_FLAG_STANDBY
+  0x02   LE_SP_FLAG_COMMIT_256
+
+)
+
+/* simple pairing calc flag */
+(
+  0x00   SP_CALC_STANDBY
+  0x03   SP_CALC_PUBKEY_256
+  0x04   SP_CALC_DHKEY_256
+)
+
+
+
+/* simple paring invalid flag */
+(
+  0x00   SP_KEY_INVALID
+  0x03   SP_KEY_VALID_256
+
+)
+
+
+//mem_secure_connections_enable
+(
+0 SECURE_CONNECTIONS_LE_BIT
+1 SECURE_CONNECTIONS_BR_BIT
+)
+
+
+  
Index: usb_pc_ai_voice/format/ui.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ui.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/ui.format	(working copy)
@@ -0,0 +1,148 @@
+/*****************************************************************************/
+/* RCS HEADER -- DO NOT ERASE                                                */
+/* $Author: Administrator $                                                           */
+/* $Id: bt_ui_format.upper,v 1.1 2009-09-28 04:06:17 Administrator Exp $     */
+/************************************************************************/
+
+
+	/* ========= memory ============== */
+memalloc(
+1 mem_ipc_skip_continue_proc
+) 
+
+xmemalloc(
+//UI Work area
+1 mem_ipc_lock_bt
+1 mem_ipc_lock_c51
+8 mem_ipc_fifo_bt2c51
+8 mem_ipc_fifo_c512bt
+
+1 mem_ui_button_timer
+1 mem_ui_button_last_state
+4 mem_ui_timer_last_btclk
+2 mem_ui_state_map
+
+1 mem_ui_button_timeout
+1 mem_ui_button_gpio
+1 mem_ui_led_init_state_set
+
+1 mem_ui_led_struct_num
+2 mem_ui_led_struct_ptr
+
+)
+
+
+//mem_ui_state_map
+(
+9 UI_STATE_BLE_CONNECTED
+10 UI_STATE_BLE_WRITE_RCV
+11 UI_STATE_BLE_ADV
+12 UI_STATE_BTN_DOWN
+)
+
+
+
+/* memui_Commands */
+(
+0 BT_CMD_STANDBY
+13 BT_CMD_START_ADV
+14 BT_CMD_STOP_ADV
+15 BT_CMD_START_DIRECT_ADV
+16 BT_CMD_STOP_DIRECT_ADV
+17 BT_CMD_LE_DISCONNECT
+18 BT_CMD_LE_UPDATE_CONN
+19 BT_CMD_LED_OFF
+20 BT_CMD_LED_ON
+21 BT_CMD_LED_BLINK
+22 BT_CMD_LE_START_CONN
+23 BT_CMD_LE_START_SCAN
+24 BT_CMD_LE_STOP_SCAN
+25 BT_CMD_ENTER_HIBERNATE
+27 BT_CMD_LE_SMP_SECURITY_REQUEST
+31 BT_CMD_STORE_RECONN_INFO_LE
+34 BT_CMD_START_24G
+35 BT_CMD_STOP_24G
+36 BT_CMD_PAIR_24G
+)
+
+(
+0x00 BT_EVT_NULL
+0x0F BT_EVT_DISCOVERY_STOPED
+0x10 BT_EVT_BUTTON_LONG_PRESSED
+0x14 BT_EVT_LE_CONNECTED
+0X15 BT_EVT_LE_DISCONNECTED
+0x17 BT_EVT_BUTTON_ENTER_HIBERNATE
+0x25 BT_EVT_BUTTON_ADJUST_DPI
+0x28 BT_EVT_LE_WRITE_REQUEST
+0x29 BT_EVT_LE_ENC_INFO
+0x2c BT_EVT_BUTTON_DOWN
+0x2d BT_EVT_BUTTON_UP
+0x2e BT_EVT_REMOTE_UNSNIFF
+0x30 BT_EVT_LE_PAIRING_FAIL
+0x31 BT_EVT_LE_PAIRING_SUCCESS
+0x32 BT_EVT_LE_START_ENC
+0X33 BT_EVT_LE_PAUSE_ENC
+0X34 BT_EVT_LE_TK_GENERATE
+0x35 BT_EVT_BT_GKEY_GENERATE
+0x36 BT_EVT_BT_GET_PASSKEY
+0x39 BT_EVT_24G_PAIRING_COMPLETE
+0x3a BT_EVT_24G_ATTEMPT_FAIL
+0x3b BT_EVT_LE_GKEY_GENERATE
+0x3c BT_EVT_24G_ATTEMPT_SUCCESS
+0x3d BT_EVT_STORE_NVRAM
+0x3e BT_EVT_LE_PAIRING_COMPLETE
+0x3F BT_EVT_LE_RECONNECT_COMPLETE
+0x40 BT_EVT_LE_PARSE_CONN_PAPA_UPDATE_RSP
+0x41 BT_EVT_LE_LTK_LOST
+0x42 BT_EVT_LE_UPDATE_PHY
+0x43 BT_EVT_LE_GET_PASSKEY
+0x44 BT_EVT_LE_PARSE_CONN_PARAM_ACCEPTED
+)
+//switch
+(
+0 OFF
+1 ON
+)
+
+
+(
+	160 UI_HUNDRED_MILLISECOND_TIME
+	0XFF UI_BUTTON_GPIO_DISABLE
+)
+
+(
+0x00 UI_BUTTON_STATE_DOWN
+0x01 UI_BUTTON_STATE_UP
+)
+
+//mem_ipc_skip_continue_proc
+(
+	0 IPC_CONTINUE_PROCESS
+	1 IPC_SKIP_CONTINUE_PROCESS
+)
+
+
+(//led style struct 
+0 		LED_OFFSET_LED_TYPE
+1 		LED_OFFSET_BLINK_COUNT
+2		LED_OFFSET_LED_GPIO
+3		LED_OFFSET_ON_TIME
+5		LED_OFFSET_OFF_TIME
+7 		LED_OFFSET_CB_LEDON
+9		LED_OFFSET_CB_LEDOFF
+11		LED_OFFSET_LENGTH
+)
+
+(//LED state
+0 UI_LED_STATE_BLINK_STOP
+1 UI_LED_STATE_BLINK_START
+2 UI_LED_STATE_LIGHTING
+3 UI_LED_STATE_DARKING
+4 UI_LED_STATE_BLINK_LIGHTING
+5 UI_LED_STATE_BLINK_DARKING
+
+0xFF LED_INFINITE_FLASH_NUM
+
+)
+
+
Index: usb_pc_ai_voice/format/usb.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/usb.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/usb.format	(working copy)
@@ -0,0 +1,255 @@
+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_multikey
+16 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
+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: usb_pc_ai_voice/format/utility.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/utility.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/format/utility.format	(working copy)
@@ -0,0 +1,72 @@
+
+memalloc(
+
+1 mem_fifo_temp
+
+8 mem_pdatatemp
+8 mem_temp //8 bytes
+4 mem_timeup // 4 bytes
+4 mem_rega //4 bytes
+4 mem_regb //4 bytes
+3 mem_regc //3 bytes
+2 mem_contr //2 bytes
+2 mem_contw //2 bytes
+2 mem_contus
+2 mem_contue
+2 mem_contu
+2 mem_queue
+2 mem_loopcnt
+
+4 mem_saved_gpio_in
+
+0 mem_module_rx_error_data_buffer
+0 mem_le_adv_channel_map_temp
+0 mem_le_data_len_temp	//1byte
+0 mem_event_cmd_response_content	//2byte
+0 mem_le_prand		//16byte
+0 mem_AES_CMAC_k	 //16 bytes
+0 mem_regext_index 	//1 bytes
+1 mem_temp_block0
+0 mem_le_data_temp	//15bytes
+15 mem_temp_block1
+0 mem_le_tx_buf_temp //48byte
+0 mem_le_aes_128	//16byte
+0 mem_regext   //64 bytes
+0 mem_AES_CMAC_k1  //16 bytes
+16 mem_temp_block2
+0 mem_AES_CMAC_k2  //16 bytes
+16 mem_temp_block3
+0 mem_AES_CMAC_temp  // 16 bytes
+16 mem_temp_block4
+0 mem_AES_CMAC_M_last // 16 bytes
+1 mem_module_uart_cmd
+1 mem_module_uart_opcode
+1 mem_module_uart_len
+1 mem_module_temp_nl_discard_packet
+12 mem_temp_block5
+0 mem_le_mackey //16 bytes
+0 mem_app_receive_temp
+2 mem_key_value_temp
+2 mem_key_value
+1 mem_key_value_temp1
+1 mem_key_value_temp2
+1 mem_key_value_temp3
+1 mem_key_value_temp4
+1 mem_key_value_temp5
+1 mem_key_value_temp6
+6 mem_temp_block6
+
+3 mem_scale_ratio
+3 mem_xcnt
+2 mem_scale_ratio_temp
+)
+
+
+//util fifo param
+(
+
+8 UTIL_FIFO_LEN
+-1 UTIL_FIFO_OFFSET
+)
+
+
Index: usb_pc_ai_voice/output/eeprom.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/output/eeprom.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/output/eeprom.dat	(working copy)
@@ -0,0 +1,8192 @@
+00
+02
+aa
+55
+c2
+0e
+c2
+84
+00
+17
+c0
+00
+00
+29
+c0
+01
+00
+2f
+c0
+08
+80
+38
+c0
+0a
+01
+e5
+c0
+0a
+80
+dc
+c0
+0c
+00
+ea
+c0
+0c
+80
+96
+c0
+0d
+00
+52
+c0
+0e
+00
+41
+c0
+1b
+82
+a2
+c0
+1c
+00
+af
+c0
+1c
+80
+ab
+c0
+1e
+82
+9f
+c0
+1f
+03
+4a
+c0
+58
+82
+b9
+c0
+62
+80
+a8
+c0
+6d
+01
+b6
+c0
+6e
+01
+c6
+c0
+7e
+82
+40
+c0
+7f
+02
+2b
+c0
+7f
+80
+f4
+20
+20
+23
+5a
+c0
+00
+01
+0f
+c0
+01
+02
+01
+c0
+03
+01
+72
+c0
+37
+03
+10
+c0
+37
+82
+ab
+c0
+39
+03
+05
+c0
+39
+82
+f0
+c0
+3a
+83
+1f
+c0
+3f
+02
+b5
+c0
+40
+83
+2f
+c0
+41
+02
+4f
+c0
+42
+03
+70
+c0
+42
+83
+74
+c0
+44
+02
+87
+c0
+45
+02
+94
+c0
+45
+82
+44
+c1
+7f
+80
+00
+20
+20
+23
+5a
+20
+80
+00
+00
+37
+d9
+82
+00
+6f
+e0
+c0
+cb
+20
+40
+23
+e1
+20
+00
+75
+30
+20
+20
+20
+03
+20
+40
+75
+52
+20
+40
+74
+48
+20
+40
+2a
+45
+20
+40
+20
+2a
+20
+40
+42
+ad
+20
+40
+20
+18
+20
+40
+31
+0f
+20
+40
+24
+8c
+20
+20
+00
+2f
+70
+8a
+0f
+60
+70
+8a
+10
+aa
+70
+8a
+12
+7a
+70
+8a
+25
+00
+70
+8a
+26
+00
+20
+00
+00
+3c
+70
+8a
+20
+20
+70
+8a
+23
+f5
+20
+20
+21
+69
+70
+8a
+20
+30
+70
+8a
+23
+dd
+20
+40
+21
+d0
+58
+00
+00
+00
+67
+e1
+06
+70
+d8
+40
+3a
+98
+6f
+e1
+06
+70
+1f
+e0
+fe
+01
+67
+e1
+06
+70
+98
+46
+7c
+00
+20
+21
+6c
+a3
+6f
+f0
+8a
+7c
+c3
+00
+00
+47
+20
+20
+22
+9a
+37
+d9
+82
+00
+70
+81
+3c
+58
+20
+20
+23
+e2
+70
+8a
+88
+40
+70
+89
+46
+0d
+70
+89
+6f
+10
+70
+8a
+13
+cd
+70
+8a
+06
+10
+70
+8a
+84
+4a
+70
+8a
+85
+40
+70
+8a
+16
+fe
+20
+40
+00
+b1
+6f
+e0
+c4
+36
+20
+5a
+70
+d7
+24
+55
+80
+4f
+37
+d9
+82
+00
+70
+81
+3b
+5f
+6f
+e0
+c0
+99
+c0
+08
+00
+8b
+6f
+e0
+c4
+38
+1f
+e1
+fe
+04
+67
+f0
+8a
+02
+70
+89
+0f
+01
+70
+8a
+80
+24
+70
+8a
+81
+62
+58
+e6
+12
+12
+67
+f1
+8a
+73
+70
+8a
+86
+60
+70
+8a
+8b
+3b
+20
+40
+00
+7d
+70
+80
+43
+00
+70
+80
+42
+05
+58
+55
+74
+74
+67
+f1
+89
+68
+70
+89
+60
+6e
+20
+40
+01
+88
+20
+40
+01
+b3
+20
+40
+00
+78
+70
+41
+48
+0c
+20
+40
+6f
+4e
+20
+20
+01
+b5
+20
+75
+80
+00
+37
+d9
+82
+00
+6f
+e0
+c1
+1c
+67
+f0
+81
+3a
+20
+20
+23
+e2
+6f
+e0
+c0
+99
+c0
+0c
+00
+83
+6f
+e0
+c4
+38
+1f
+e1
+fe
+06
+67
+f0
+8a
+02
+70
+8a
+05
+e0
+70
+8a
+00
+d8
+20
+00
+00
+3c
+70
+8a
+01
+a0
+70
+8a
+00
+df
+70
+8a
+01
+fa
+20
+00
+00
+14
+70
+8a
+00
+9f
+20
+60
+00
+00
+6f
+e0
+c4
+38
+1f
+e1
+fe
+06
+67
+f0
+8a
+02
+70
+89
+0f
+00
+70
+8a
+80
+23
+70
+8a
+81
+b0
+58
+e4
+09
+09
+67
+f1
+8a
+73
+70
+8a
+76
+2a
+70
+89
+02
+04
+20
+20
+00
+6a
+6f
+e0
+c1
+41
+c0
+03
+22
+25
+c0
+4f
+00
+9c
+c0
+4f
+80
+a0
+c0
+50
+00
+a4
+20
+20
+22
+0e
+70
+8a
+14
+17
+58
+25
+03
+00
+67
+f1
+8a
+60
+20
+20
+22
+1a
+70
+8a
+14
+17
+58
+25
+01
+00
+67
+f1
+8a
+60
+20
+20
+22
+1a
+70
+8a
+14
+17
+58
+25
+00
+00
+67
+f1
+8a
+60
+20
+20
+22
+1a
+20
+40
+6b
+3a
+20
+40
+6b
+75
+20
+20
+6b
+38
+df
+20
+00
+01
+da
+20
+46
+48
+da
+40
+1f
+00
+20
+20
+6b
+45
+da
+40
+1f
+00
+20
+20
+47
+f1
+20
+35
+80
+d8
+6f
+e2
+02
+0d
+20
+7a
+00
+00
+37
+d9
+82
+00
+6f
+f0
+81
+36
+1f
+e1
+7e
+f0
+68
+48
+82
+0d
+98
+41
+fe
+00
+67
+f0
+81
+36
+37
+d9
+82
+00
+6f
+f0
+81
+38
+1f
+e1
+7e
+07
+68
+48
+82
+0e
+18
+49
+84
+00
+98
+41
+fe
+00
+67
+f0
+81
+38
+37
+d9
+82
+00
+6f
+f0
+8a
+cb
+1f
+e1
+7e
+f0
+68
+48
+82
+0f
+60
+48
+c1
+5b
+98
+41
+fe
+00
+67
+f0
+8a
+cb
+6f
+e0
+82
+10
+67
+e0
+c1
+5c
+2f
+ef
+fe
+03
+6f
+f0
+8a
+06
+79
+20
+fe
+07
+67
+f0
+8a
+06
+6f
+e0
+82
+10
+1f
+e1
+04
+07
+18
+52
+04
+00
+18
+43
+84
+00
+60
+48
+c4
+38
+6f
+f0
+8a
+02
+1f
+e1
+7e
+1f
+98
+41
+fe
+00
+67
+f0
+8a
+02
+20
+60
+00
+00
+6f
+e1
+41
+5b
+20
+7a
+00
+00
+67
+e1
+02
+0f
+20
+20
+00
+c2
+20
+40
+68
+6f
+20
+40
+21
+ba
+18
+00
+2a
+08
+18
+00
+2a
+00
+58
+0a
+aa
+da
+67
+f1
+8a
+0f
+70
+8a
+25
+40
+70
+8a
+26
+10
+20
+00
+00
+3c
+70
+8a
+01
+fb
+70
+8a
+25
+ff
+70
+8a
+26
+30
+70
+8a
+16
+fe
+20
+20
+21
+b4
+58
+0a
+aa
+7e
+67
+f1
+8a
+0f
+20
+00
+00
+3c
+70
+8a
+25
+00
+70
+8a
+26
+0d
+70
+8a
+16
+f6
+20
+20
+22
+03
+6f
+f0
+8c
+25
+c3
+83
+00
+00
+20
+20
+79
+93
+6f
+e0
+87
+09
+c4
+02
+80
+00
+20
+40
+79
+89
+28
+41
+fe
+0d
+20
+20
+f9
+99
+6f
+e0
+c6
+96
+c0
+00
+81
+03
+d8
+a0
+08
+6d
+20
+40
+79
+94
+6f
+e0
+87
+0c
+c0
+00
+79
+86
+c0
+00
+f9
+b6
+1f
+e6
+7c
+07
+20
+61
+00
+00
+20
+20
+01
+0f
+d8
+a0
+08
+75
+20
+40
+79
+94
+70
+46
+96
+00
+6f
+e0
+87
+0c
+c0
+00
+81
+0b
+70
+08
+f7
+01
+70
+8c
+1b
+03
+20
+60
+00
+00
+6f
+e0
+88
+6d
+c3
+83
+80
+00
+6f
+e0
+88
+75
+20
+20
+79
+b8
+79
+3f
+80
+23
+6f
+e0
+88
+6d
+1f
+e1
+7e
+80
+c0
+40
+01
+15
+c0
+00
+01
+59
+20
+20
+23
+5a
+6f
+e0
+88
+6d
+1f
+f1
+fe
+00
+1f
+e3
+7e
+00
+1f
+e1
+7e
+03
+c0
+00
+01
+1b
+20
+20
+79
+bf
+6f
+e0
+88
+6e
+c0
+00
+01
+1e
+20
+20
+79
+cb
+6f
+e0
+88
+6b
+c0
+01
+79
+e4
+6f
+e0
+88
+6f
+c0
+80
+79
+e4
+6f
+e0
+88
+70
+c0
+80
+79
+e4
+6f
+e0
+88
+73
+c0
+81
+79
+e4
+6f
+e0
+88
+74
+c0
+80
+79
+e4
+6f
+e0
+88
+72
+c0
+80
+79
+e4
+6f
+e0
+88
+6d
+c0
+41
+01
+2d
+20
+20
+7a
+65
+6f
+e0
+88
+6b
+c0
+82
+79
+e4
+6f
+e0
+88
+71
+c0
+01
+7a
+89
+c0
+01
+fa
+8b
+20
+20
+7a
+7d
+6f
+e0
+88
+6e
+c0
+00
+81
+37
+c0
+01
+81
+4a
+20
+20
+79
+d9
+6f
+e0
+88
+6b
+c0
+82
+79
+e4
+6f
+e0
+88
+73
+c0
+80
+79
+e4
+6f
+e0
+88
+74
+c0
+80
+79
+e4
+6f
+e0
+88
+70
+c0
+80
+79
+e4
+6f
+e0
+88
+72
+c0
+80
+79
+e4
+6f
+e0
+88
+6d
+c0
+01
+01
+44
+20
+20
+7a
+b7
+6f
+e0
+88
+6f
+c0
+80
+79
+e4
+6f
+e0
+88
+71
+c0
+01
+7a
+d7
+c0
+01
+fa
+d9
+20
+20
+7a
+cc
+6f
+e0
+88
+73
+c0
+80
+79
+e4
+6f
+e0
+88
+74
+c0
+80
+79
+e4
+6f
+e0
+88
+6d
+c0
+01
+01
+51
+20
+20
+7a
+e0
+6f
+e0
+88
+6f
+c0
+80
+79
+e4
+6f
+e0
+88
+70
+c0
+80
+79
+e4
+6f
+e0
+88
+71
+c0
+01
+7b
+02
+c0
+01
+fb
+04
+20
+20
+7a
+f8
+6f
+e0
+88
+6d
+1f
+f1
+fe
+00
+1f
+e3
+7e
+00
+1f
+e1
+7e
+03
+c0
+00
+01
+33
+c0
+00
+81
+61
+c0
+01
+79
+e3
+20
+20
+23
+5a
+6f
+e0
+88
+6e
+c0
+05
+7b
+4b
+c0
+04
+81
+66
+c0
+05
+fb
+7c
+20
+20
+79
+e4
+20
+00
+3a
+98
+d8
+a0
+08
+75
+20
+40
+00
+f1
+70
+08
+f7
+01
+20
+40
+7b
+6e
+6f
+e0
+c6
+96
+1f
+e0
+fe
+01
+67
+e0
+c6
+96
+6f
+e1
+08
+6f
+67
+e1
+08
+f5
+70
+8c
+1b
+02
+20
+20
+7b
+65
+6f
+e0
+89
+0d
+20
+7a
+00
+00
+6f
+f0
+8c
+25
+1f
+e1
+7e
+0f
+24
+3a
+7c
+30
+6f
+e0
+89
+0e
+20
+3a
+7c
+06
+6f
+e0
+89
+00
+c0
+01
+fc
+40
+c0
+81
+7c
+06
+6f
+e0
+89
+02
+24
+3a
+7c
+06
+20
+40
+01
+80
+20
+20
+01
+84
+6f
+f0
+8c
+25
+1f
+e1
+7e
+0f
+24
+7a
+00
+00
+20
+20
+7b
+f0
+6f
+f0
+8c
+25
+1f
+e1
+7e
+0f
+24
+7a
+00
+00
+20
+20
+7b
+fb
+20
+75
+80
+00
+20
+40
+21
+60
+d8
+40
+00
+27
+20
+40
+21
+6f
+20
+40
+21
+a6
+70
+8a
+25
+7f
+70
+8a
+30
+1a
+70
+8a
+31
+78
+70
+8a
+8f
+b2
+70
+8a
+c2
+00
+70
+8a
+c3
+00
+d8
+e0
+00
+06
+20
+40
+01
+a5
+2a
+2f
+fe
+0d
+20
+40
+21
+1d
+2a
+4f
+fe
+0d
+20
+40
+21
+1e
+d8
+e0
+00
+05
+20
+40
+21
+1c
+20
+40
+21
+1e
+20
+40
+01
+a5
+d8
+a0
+8a
+c2
+1a
+31
+fe
+00
+20
+40
+21
+17
+1a
+51
+fe
+00
+20
+40
+21
+17
+18
+e0
+8f
+ff
+20
+21
+01
+9a
+20
+20
+21
+4f
+20
+00
+00
+3c
+58
+00
+0f
+00
+67
+f1
+09
+82
+58
+00
+0f
+f0
+67
+f1
+09
+84
+70
+89
+81
+09
+70
+89
+81
+03
+70
+89
+80
+06
+20
+00
+00
+3c
+da
+20
+00
+00
+da
+40
+00
+00
+df
+20
+00
+10
+d8
+c0
+0f
+00
+20
+20
+21
+2d
+20
+75
+80
+00
+20
+20
+22
+72
+20
+60
+00
+00
+20
+75
+80
+00
+70
+8a
+07
+77
+70
+8a
+08
+c9
+70
+8a
+0b
+01
+6f
+e0
+c4
+09
+67
+f0
+80
+cd
+20
+00
+0b
+b8
+20
+40
+01
+de
+70
+8a
+08
+c1
+6a
+40
+c4
+19
+df
+20
+00
+08
+20
+40
+6f
+58
+6f
+e0
+c4
+19
+67
+e0
+c4
+33
+62
+40
+c4
+19
+20
+60
+00
+00
+20
+40
+01
+d4
+6f
+f0
+8a
+09
+79
+3f
+fe
+07
+67
+f0
+8a
+09
+70
+8a
+07
+77
+70
+8a
+08
+c1
+70
+8a
+0b
+01
+20
+40
+6f
+90
+6f
+e0
+c4
+09
+67
+f0
+80
+cd
+20
+00
+0b
+b8
+20
+40
+01
+de
+70
+80
+cd
+00
+20
+20
+6f
+a1
+6f
+f0
+80
+cc
+79
+20
+7e
+01
+67
+f0
+80
+cc
+6a
+40
+c4
+19
+6f
+e0
+c4
+33
+67
+e0
+c4
+19
+df
+20
+00
+08
+20
+40
+6f
+67
+62
+40
+c4
+19
+20
+60
+00
+00
+70
+80
+cc
+03
+6f
+f0
+81
+29
+c3
+02
+81
+df
+68
+59
+01
+64
+60
+49
+44
+0a
+70
+80
+cc
+00
+20
+60
+00
+00
+70
+8a
+82
+11
+70
+8a
+8d
+12
+70
+8a
+8e
+0a
+6f
+e0
+c0
+99
+c0
+08
+01
+fe
+58
+00
+57
+62
+67
+f1
+09
+07
+70
+89
+01
+03
+70
+89
+30
+03
+c6
+16
+80
+00
+70
+89
+01
+01
+70
+8a
+82
+07
+70
+8a
+8d
+44
+70
+8a
+8e
+0a
+6f
+e0
+c0
+99
+c0
+08
+01
+fb
+58
+00
+2b
+b1
+67
+f1
+09
+07
+c6
+97
+80
+00
+70
+89
+30
+24
+70
+89
+01
+05
+20
+60
+00
+00
+58
+00
+41
+89
+67
+f1
+09
+07
+20
+20
+01
+f7
+58
+00
+83
+12
+67
+f1
+09
+07
+20
+20
+01
+ec
+6f
+e0
+88
+70
+c0
+00
+fa
+14
+c0
+01
+02
+08
+c0
+01
+fa
+30
+c0
+10
+82
+0b
+c0
+11
+02
+1a
+20
+20
+79
+e4
+58
+00
+47
+55
+68
+48
+c7
+55
+20
+20
+7a
+18
+70
+08
+fd
+00
+6f
+e0
+88
+71
+c0
+00
+02
+11
+c0
+00
+82
+14
+c0
+01
+02
+17
+20
+20
+79
+e4
+6a
+40
+c7
+68
+da
+20
+47
+68
+20
+20
+7b
+8b
+6a
+40
+c7
+81
+da
+20
+47
+81
+20
+20
+7b
+8b
+6a
+40
+c7
+9a
+da
+20
+47
+9a
+20
+20
+7b
+8b
+6f
+e1
+08
+71
+c0
+00
+02
+1f
+c0
+00
+82
+22
+c0
+01
+02
+24
+20
+20
+79
+e4
+6a
+40
+c6
+97
+58
+00
+46
+97
+20
+20
+02
+28
+6a
+21
+07
+a9
+20
+20
+7b
+89
+70
+09
+0e
+01
+70
+09
+00
+01
+6a
+40
+c6
+dd
+58
+00
+46
+dd
+1f
+e0
+fe
+01
+1f
+e2
+22
+00
+20
+20
+7b
+8b
+20
+40
+73
+96
+20
+40
+79
+32
+58
+00
+49
+5a
+d8
+a0
+48
+56
+98
+a6
+72
+00
+20
+40
+7c
+a1
+70
+8c
+00
+00
+20
+00
+27
+10
+70
+8c
+12
+00
+6f
+f1
+00
+50
+79
+3f
+fe
+0a
+67
+f1
+00
+50
+70
+8c
+10
+21
+70
+8c
+11
+9d
+70
+8c
+00
+3c
+58
+00
+47
+b9
+67
+f1
+0c
+02
+67
+f1
+0c
+06
+58
+00
+48
+55
+67
+f1
+0c
+04
+20
+20
+79
+23
+6f
+f0
+8c
+22
+2f
+ef
+fe
+03
+20
+40
+82
+2d
+20
+20
+79
+0a
+6f
+e0
+c6
+16
+c1
+83
+80
+00
+20
+40
+34
+76
+20
+40
+34
+ae
+20
+40
+03
+3b
+24
+37
+b3
+be
+20
+40
+35
+06
+20
+42
+83
+64
+6f
+e0
+c6
+0a
+20
+5a
+34
+4d
+20
+20
+34
+93
+6f
+e0
+ca
+4c
+c0
+55
+02
+55
+c0
+2a
+82
+57
+c0
+11
+02
+6d
+c0
+7f
+82
+5f
+20
+60
+00
+00
+6f
+e0
+ca
+4d
+20
+20
+33
+2a
+6f
+e0
+c5
+ae
+20
+3a
+02
+5d
+6f
+e2
+4a
+4e
+68
+4a
+44
+f1
+98
+46
+7c
+00
+24
+62
+80
+00
+6f
+e0
+ca
+4d
+20
+20
+33
+41
+6f
+e0
+ca
+4d
+c0
+00
+82
+63
+c0
+01
+02
+68
+20
+60
+00
+00
+6f
+e0
+c5
+de
+24
+7a
+00
+00
+6f
+e2
+4a
+4e
+67
+e2
+46
+2c
+20
+20
+35
+a3
+6f
+e0
+c5
+df
+24
+7a
+00
+00
+6f
+e2
+4a
+4e
+67
+e2
+46
+2c
+20
+20
+35
+a9
+6f
+e0
+c5
+ae
+20
+3a
+02
+73
+6f
+e2
+4a
+4e
+68
+4a
+46
+2c
+98
+46
+7c
+00
+24
+62
+80
+00
+6f
+e0
+ca
+4d
+c0
+00
+82
+77
+c0
+01
+02
+7f
+20
+60
+00
+00
+6f
+e0
+c5
+de
+24
+7a
+00
+00
+6f
+e0
+c5
+d3
+c0
+01
+02
+7c
+20
+60
+00
+00
+70
+45
+de
+01
+20
+40
+33
+8d
+20
+20
+33
+6b
+6f
+e0
+c5
+df
+24
+7a
+00
+00
+6f
+e0
+c5
+d4
+c0
+80
+02
+84
+20
+60
+00
+00
+70
+45
+df
+01
+20
+40
+33
+93
+20
+20
+33
+78
+6f
+e0
+c6
+16
+c1
+00
+00
+00
+6f
+e0
+c6
+2a
+24
+7a
+00
+00
+6f
+e0
+c6
+28
+24
+7a
+00
+00
+6f
+e0
+c6
+24
+20
+7a
+00
+00
+6f
+e0
+c5
+d3
+c1
+80
+00
+00
+6f
+e0
+c5
+d4
+c1
+80
+00
+00
+20
+20
+34
+36
+6f
+e0
+c6
+16
+c1
+80
+80
+00
+20
+40
+02
+98
+20
+20
+34
+6d
+6f
+e0
+c6
+15
+c3
+80
+80
+00
+79
+20
+7e
+01
+67
+e0
+c6
+15
+58
+00
+00
+00
+67
+e1
+c5
+d3
+20
+20
+33
+07
+20
+20
+48
+68
+58
+00
+00
+10
+20
+20
+70
+c8
+20
+40
+47
+c3
+6f
+e0
+c6
+95
+67
+e0
+c5
+d1
+70
+45
+ca
+01
+20
+40
+32
+81
+6f
+e0
+c6
+69
+c4
+00
+00
+00
+70
+45
+ca
+01
+20
+20
+32
+84
+6f
+e0
+c6
+69
+c3
+00
+31
+65
+78
+37
+fc
+00
+20
+00
+00
+18
+6f
+e0
+c9
+5b
+79
+20
+7e
+00
+67
+e0
+c9
+5b
+20
+40
+33
+a5
+20
+40
+31
+e5
+20
+20
+31
+95
+70
+45
+d0
+4a
+6f
+e2
+4a
+9b
+67
+e2
+45
+cc
+20
+60
+00
+00
+58
+00
+47
+ea
+67
+e1
+45
+e0
+58
+00
+03
+96
+67
+e1
+45
+e4
+58
+00
+03
+9f
+67
+e1
+45
+e6
+58
+00
+02
+c4
+67
+e1
+45
+e2
+58
+00
+47
+f9
+67
+e1
+08
+59
+20
+20
+79
+12
+6f
+e0
+c5
+89
+c0
+00
+82
+c7
+c0
+01
+02
+ce
+6f
+e0
+c6
+93
+c2
+80
+02
+ca
+20
+20
+02
+d0
+6f
+e0
+c6
+93
+79
+3f
+fe
+00
+67
+e0
+c6
+93
+20
+20
+02
+d7
+6f
+e0
+c6
+93
+c2
+80
+82
+d4
+6f
+e0
+c6
+11
+c0
+00
+82
+db
+c0
+01
+82
+e3
+20
+60
+00
+00
+6f
+e0
+c6
+93
+79
+3f
+fe
+01
+67
+e0
+c6
+93
+70
+45
+88
+01
+58
+00
+00
+ff
+67
+e0
+c9
+aa
+20
+60
+00
+00
+70
+46
+11
+01
+20
+40
+02
+ea
+24
+77
+80
+00
+70
+46
+11
+01
+70
+45
+88
+08
+d8
+c0
+45
+d6
+d8
+a0
+49
+aa
+20
+20
+7c
+89
+6f
+e0
+c9
+5c
+c0
+00
+82
+db
+c0
+7f
+82
+db
+70
+08
+f9
+00
+70
+45
+88
+01
+6f
+e0
+c6
+21
+20
+20
+02
+d9
+6f
+e0
+c6
+16
+c1
+80
+80
+00
+6f
+e0
+c6
+10
+24
+7a
+00
+00
+6f
+e0
+c9
+5d
+20
+20
+33
+83
+6f
+e0
+c5
+88
+1f
+e0
+fe
+03
+67
+e0
+c5
+8a
+6f
+e0
+c5
+ac
+67
+e0
+c9
+fa
+6f
+e0
+c5
+89
+1f
+e9
+fe
+00
+68
+48
+c5
+7e
+18
+41
+04
+03
+18
+43
+84
+00
+98
+41
+fe
+00
+68
+48
+c5
+7f
+98
+40
+fe
+00
+e7
+e0
+80
+05
+6f
+e0
+c5
+88
+e7
+e0
+80
+05
+6f
+e0
+c5
+88
+98
+00
+72
+00
+d8
+c0
+49
+aa
+20
+40
+7c
+da
+20
+20
+31
+fc
+c5
+17
+83
+0a
+6f
+e0
+c5
+ca
+24
+3a
+03
+0a
+78
+4e
+fc
+00
+78
+2d
+fc
+00
+78
+23
+fc
+00
+78
+24
+fc
+00
+6f
+e0
+c5
+8a
+98
+00
+72
+00
+d8
+c0
+49
+fa
+20
+20
+31
+b3
+20
+40
+31
+7d
+67
+e0
+c9
+5a
+c5
+13
+83
+18
+6f
+e0
+c9
+5a
+1f
+e9
+7e
+00
+68
+48
+c5
+89
+a8
+40
+0e
+00
+24
+20
+b1
+8c
+20
+40
+31
+7d
+e7
+e0
+80
+05
+1f
+e6
+7c
+4e
+24
+21
+31
+8e
+1f
+e2
+72
+00
+20
+22
+b1
+54
+20
+20
+31
+51
+6f
+e0
+c9
+5b
+67
+e0
+c5
+7d
+1f
+e0
+fe
+01
+d8
+c0
+49
+5b
+98
+c0
+8c
+00
+ef
+e1
+80
+06
+67
+e1
+c5
+80
+6f
+e0
+c9
+5a
+1f
+e1
+04
+01
+60
+48
+ca
+9a
+1f
+e3
+04
+00
+18
+41
+04
+03
+60
+48
+c5
+86
+1f
+e9
+7e
+00
+67
+e0
+c9
+5a
+20
+60
+00
+00
+20
+40
+33
+be
+20
+40
+31
+19
+24
+37
+b3
+be
+20
+40
+03
+36
+20
+40
+03
+3e
+20
+40
+03
+46
+20
+20
+33
+16
+70
+46
+22
+05
+d8
+c0
+49
+5a
+d8
+a0
+4a
+4a
+20
+40
+7c
+89
+20
+20
+33
+22
+20
+40
+33
+be
+20
+40
+31
+19
+24
+77
+80
+00
+6f
+e0
+c9
+5a
+1f
+e9
+7e
+00
+67
+e0
+c5
+89
+20
+40
+03
+1f
+6f
+e0
+ca
+9a
+2f
+ef
+fe
+00
+20
+20
+b3
+fd
+20
+20
+33
+fa
+6f
+e0
+c5
+d5
+20
+7a
+00
+00
+6f
+e0
+ca
+4d
+20
+20
+33
+9c
+6f
+e0
+c6
+16
+c1
+80
+00
+00
+20
+40
+03
+5e
+20
+40
+48
+27
+6f
+e0
+c6
+10
+24
+7a
+00
+00
+6f
+e0
+c6
+11
+c1
+80
+00
+00
+6f
+e0
+c6
+14
+20
+7a
+00
+00
+d8
+e0
+00
+08
+20
+40
+7c
+ef
+24
+7a
+00
+00
+20
+40
+35
+1b
+20
+20
+35
+11
+6f
+e0
+c6
+0a
+c0
+00
+b5
+ea
+6f
+e0
+c6
+12
+c0
+00
+b5
+2c
+20
+60
+00
+00
+6f
+e0
+c6
+16
+c1
+80
+00
+00
+20
+40
+34
+51
+20
+40
+03
+59
+20
+40
+03
+3b
+24
+37
+b3
+be
+20
+40
+33
+e3
+24
+34
+33
+be
+6f
+e0
+c5
+7d
+20
+3a
+33
+be
+1f
+e0
+fe
+02
+98
+00
+72
+00
+d8
+c0
+49
+5a
+d8
+a0
+4a
+4a
+20
+40
+7c
+da
+70
+46
+13
+00
+6f
+e0
+c6
+10
+20
+5a
+03
+77
+6f
+e0
+ca
+4c
+c0
+7f
+83
+7d
+c0
+00
+83
+7f
+c0
+01
+03
+8f
+d8
+a0
+49
+5a
+df
+20
+00
+46
+20
+20
+7c
+a1
+6f
+e0
+c6
+2b
+20
+3a
+33
+fe
+70
+46
+14
+01
+58
+00
+06
+40
+d8
+e0
+00
+08
+20
+20
+7c
+e1
+20
+40
+03
+48
+20
+20
+02
+5f
+20
+40
+33
+8d
+20
+40
+35
+2e
+6f
+e0
+c6
+0a
+68
+48
+ca
+4a
+28
+4f
+fe
+03
+79
+20
+fe
+00
+67
+e0
+c6
+0a
+c0
+00
+83
+8a
+6f
+e0
+c6
+12
+68
+48
+ca
+4a
+20
+20
+33
+ce
+6f
+e0
+c5
+de
+24
+7a
+00
+00
+70
+45
+de
+01
+6f
+e2
+4a
+54
+20
+20
+35
+a3
+20
+40
+33
+93
+68
+48
+ca
+4a
+28
+4f
+fe
+03
+20
+20
+83
+94
+20
+20
+33
+d7
+6f
+e2
+4a
+54
+20
+20
+35
+a9
+58
+00
+00
+01
+67
+e0
+89
+13
+6f
+e3
+ca
+4d
+e7
+e3
+80
+05
+6f
+e0
+ca
+4d
+24
+5a
+48
+dd
+6f
+e0
+ca
+4d
+20
+5a
+48
+e1
+20
+20
+48
+36
+6f
+e0
+ca
+4d
+c0
+00
+03
+a4
+c0
+01
+03
+aa
+c0
+01
+83
+ad
+20
+20
+33
+be
+6f
+e0
+ca
+4f
+67
+e0
+c6
+11
+70
+4a
+4f
+00
+d8
+a0
+09
+23
+d8
+c0
+4a
+4e
+20
+20
+48
+ef
+d8
+a0
+09
+43
+d8
+c0
+4a
+4d
+20
+20
+49
+1f
+d8
+a0
+09
+33
+d8
+c0
+4a
+4d
+20
+20
+49
+07
+cb
+21
+aa
+55
+40
+00
+00
+40
+05
+00
+32
+17
+00
+00
+80
+63
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+02
+00
+20
+00
+00
+14
+00
+00
+00
+e0
+45
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+c0
+2c
+40
+36
+0d
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+aa
+55
+01
+00
+cb
+43
+04
+aa
+55
+01
+00
+ec
+44
+ff
+aa
+55
+01
+00
+1c
+02
+5a
+aa
+55
+01
+00
+69
+46
+10
+aa
+55
+01
+00
+94
+46
+03
+aa
+55
+18
+00
+6a
+46
+01
+51
+31
+20
+10
+51
+31
+20
+30
+00
+0d
+32
+2e
+34
+47
+20
+52
+65
+63
+65
+69
+76
+65
+72
+aa
+55
+01
+00
+95
+46
+94
+aa
+55
+06
+00
+f1
+44
+35
+17
+86
+74
+12
+23
+aa
+55
+02
+00
+8b
+45
+78
+69
+aa
+55
+02
+00
+0f
+46
+1e
+00
+aa
+55
+11
+00
+b9
+45
+01
+06
+1a
+3a
+4d
+00
+13
+23
+4c
+0f
+2c
+31
+43
+11
+15
+36
+48
+aa
+55
+04
+00
+9b
+4a
+25
+20
+15
+10
+aa
+55
+55
+00
+55
+47
+54
+09
+02
+54
+00
+03
+01
+00
+a0
+32
+09
+04
+00
+00
+01
+03
+01
+01
+00
+09
+21
+00
+02
+00
+01
+22
+3f
+00
+07
+05
+81
+03
+40
+00
+02
+09
+04
+01
+00
+01
+03
+01
+02
+00
+09
+21
+00
+02
+00
+01
+22
+a3
+00
+07
+05
+82
+03
+40
+00
+02
+09
+04
+02
+00
+01
+03
+01
+02
+00
+09
+21
+00
+02
+00
+01
+22
+63
+00
+07
+05
+02
+03
+40
+00
+01
+aa
+55
+40
+00
+97
+46
+3f
+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
+25
+03
+05
+07
+19
+00
+29
+ff
+81
+00
+c0
+aa
+55
+64
+00
+dd
+46
+63
+06
+a0
+ff
+09
+0e
+a1
+01
+85
+a0
+95
+3f
+75
+08
+26
+ff
+00
+15
+00
+09
+01
+81
+02
+c0
+06
+a1
+ff
+09
+0e
+a1
+01
+85
+a1
+95
+3f
+75
+08
+26
+ff
+00
+15
+00
+09
+01
+81
+02
+85
+a2
+95
+3f
+75
+08
+26
+ff
+00
+15
+00
+09
+01
+b1
+02
+c0
+06
+a2
+ff
+09
+0e
+a1
+01
+85
+a3
+95
+3f
+75
+08
+26
+ff
+00
+15
+00
+09
+01
+81
+02
+85
+a4
+95
+3f
+75
+08
+26
+ff
+00
+15
+00
+09
+01
+b1
+02
+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
+a5
+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
+00
+aa
+55
+05
+00
+5e
+41
+08
+0e
+05
+03
+00
+aa
+55
+01
+00
+68
+41
+20
+aa
+55
+02
+00
+9a
+40
+00
+0c
+aa
+55
+05
+00
+43
+41
+ff
+04
+00
+00
+08
+aa
+55
+01
+00
+07
+44
+01
+aa
+55
+01
+00
+09
+44
+0a
+aa
+55
+01
+00
+08
+44
+00
+aa
+55
+01
+00
+11
+44
+00
+aa
+55
+04
+00
+0d
+44
+00
+07
+ff
+07
+aa
+55
+01
+00
+38
+44
+a0
+aa
+55
+02
+00
+3b
+44
+bc
+02
+aa
+55
+02
+00
+39
+44
+90
+01
+aa
+55
+02
+00
+3d
+44
+03
+09
+aa
+55
+01
+00
+49
+41
+ff
+aa
+55
+02
+00
+9c
+40
+49
+41
+55
+aa
+aa
+55
+4e
+8e
+3c
+1d
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+e6
+f4
Index: usb_pc_ai_voice/output/memmap.format
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/output/memmap.format	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/output/memmap.format	(working copy)
@@ -0,0 +1,2468 @@
+0x0000 mem_le_adv_transmit
+0x0001 mem_le_adv_waitcnt
+0x0002 mem_le_adv_rcv
+0x0003 mem_le_req_rcv
+0x0004 mem_le_scanrsp_rcv
+0x0005 mem_le_conn_rcv
+0x0006 mem_current_context
+0x0007 mem_le_ch_mapped
+0x0008 mem_last_freq
+0x0009 mem_rssi
+0x000a mem_context_ptr
+0x000c mem_rx_window
+0x000e mem_lpm_adjust
+0x000f mem_sync_clke
+0x0015 mem_lpm_current_mult
+0x0016 mem_gpio_wakeup_cfg
+0x0022 mem_clkn_bt
+0x0026 mem_clke_bt
+0x002a mem_dpll_clkn
+0x002e mem_slot_offset
+0x0030 mem_loadcode_times
+0x0031 mem_select_list_item
+0x0032 mem_temp_reconn_record
+0x0032 mem_record_bt_mode
+0x0033 mem_list_item_ptr
+0x0035 mem_rssi_hex
+0x0036 mem_param_tx_setup
+0x0038 mem_param_rf_setup
+0x003a mem_param_conn_access
+0x003c mem_param_clke_cal
+0x003e mem_param_pll_setup
+0x0040 mem_param_rx_setup
+0x0042 mem_param_dpll_start_delay
+0x0044 mem_param_rt_rthalfslot
+0x0046 mem_param_clke_cal_le_1m
+0x0048 mem_param_clke_cal_le_2m
+0x004a mem_param_clke_cal_le_coded
+0x004c mem_le_rxbuf
+0x0150 mem_le_mic
+0x0154 mem_le_peer_mic
+0x0158 mem_le_mrand
+0x0168 mem_le_state
+0x0169 mem_le_mode
+0x016a mem_le_tsniff
+0x016c mem_le_anchor
+0x0170 mem_le_clk_offset
+0x0176 mem_le_receive_window
+0x0178 mem_le_plap
+0x017e mem_le_conn_handle
+0x017f mem_le_arq
+0x0180 mem_le_ch
+0x0181 mem_le_hop
+0x0182 mem_le_event_count
+0x0184 mem_le_supervision_timer
+0x0188 mem_le_instant
+0x018a mem_le_channels
+0x018b mem_le_op
+0x018c mem_le_access
+0x0190 mem_le_crcinit
+0x0193 mem_le_window_size
+0x0194 mem_le_slave_latency
+0x0196 mem_le_superto
+0x0198 mem_le_channel_map
+0x019d mem_le_rx_phy
+0x019e mem_le_tx_phy
+0x019f mem_le_update_new_param
+0x01a8 mem_le_sk
+0x01b8 mem_le_peer_sca
+0x01b9 mem_le_err_code
+0x01ba mem_le_ll_pairing_fail_reason
+0x01bb mem_le_testtype
+0x01bc mem_cmd_le_create_conn
+0x01bd memresult
+0x01bd mem_sp_calc_result
+0x01bd memh
+0x01c1 memg
+0x01c5 memf
+0x01c9 meme
+0x01cd mem_sp_calc_result_high
+0x01cd memd
+0x01d1 memc
+0x01d5 memb
+0x01d9 mema
+0x01dd mem_ucode_status
+0x01de mem_spid_tbuf
+0x01df mem_iicd_tbuf
+0x01df mem_addr_hi
+0x01e0 mem_addr_mi
+0x01e1 mem_addr_lo
+0x01e2 mem_iicd_addr
+0x01e3 mem_spid_rbuf
+0x01e7 mem_ucode_buf
+0x01e9 mem_ucode_len
+0x01eb mem_sched_addr
+0x01ed mem_ucode_keybuf
+0x01fd mem_otp_temp
+0x021d mem_app_evt_timer_count
+0x021e mem_input_store
+0x022e mem_ec_loopc
+0x0230 mem_aes_cmac_data_length
+0x0231 mem_dat
+0x0291 mem_ax_256//32 bytes
+0x02b1 mem_ay_256// 32 bytes
+0x02d1 mem_az_256// 32 bytes
+0x02f1 mem_bx_256// 32 bytes
+0x0311 mem_by_256// 31 bytes
+0x0331 mem_bz_256//32 bytes
+0x0331 mem_tmp1
+0x0331 memahbak
+0x0349 mem_tmp5
+0x0351 mem_cx_256//32 bytes
+0x0371 mem_cy_256// 32 bytes
+0x0390 mem_cy5_256// 1 byte
+0x0391 mem_cz_256// 32 bytes
+0x03b1 mem_k_256//32 bytes
+0x03d1 mem_tmp1_256//32 bytes
+0x03f1 mem_tmp5_256
+0x0411 mem_tmp2_256
+0x0431 mem_tmp3_256
+0x0431 mem_t1_256
+0x0451 mem_tmp0_256
+0x0451 mem_t0_256
+0x0471 mem_t2_256
+0x0491 mem_t3_256
+0x04b1 mem_t7_256
+0x04d1 mem_p
+0x04e9 mem_a
+0x0501 mem_b
+0x0519 mem_gx
+0x0531 mem_gy
+0x0549 memh0
+0x0569 mem_p_256
+0x0589 mem_a_256
+0x05a9 mem_gx_256
+0x05c9 mem_gy_256
+0x05e9 mem_le_slat
+0x05f9 mem_sp_state_start
+0x05f9 mem_sp_dhkey_invalid
+0x05fa mem_gkey
+0x05fe mem_sp_state_end
+0x05fe mem_le_pubkey_remote_x_256
+0x061e mem_le_pubkey_remote_y_256
+0x063e mem_le_dhkey_256
+0x065e mem_sp_confirm_remote
+0x066e mem_ipc_skip_continue_proc
+0x066f mem_fifo_temp
+0x0670 mem_pdatatemp
+0x0678 mem_temp//8 bytes
+0x0680 mem_timeup// 4 bytes
+0x0684 mem_rega//4 bytes
+0x0688 mem_regb//4 bytes
+0x068c mem_regc//3 bytes
+0x068f mem_contr//2 bytes
+0x0691 mem_contw//2 bytes
+0x0693 mem_contus
+0x0695 mem_contue
+0x0697 mem_contu
+0x0699 mem_queue
+0x069b mem_loopcnt
+0x069d mem_saved_gpio_in
+0x06a1 mem_module_rx_error_data_buffer
+0x06a1 mem_le_adv_channel_map_temp
+0x06a1 mem_le_data_len_temp//1byte
+0x06a1 mem_event_cmd_response_content//2byte
+0x06a1 mem_le_prand//16byte
+0x06a1 mem_AES_CMAC_k//16 bytes
+0x06a1 mem_regext_index//1 bytes
+0x06a1 mem_temp_block0
+0x06a2 mem_le_data_temp//15bytes
+0x06a2 mem_temp_block1
+0x06b1 mem_le_tx_buf_temp//48byte
+0x06b1 mem_le_aes_128//16byte
+0x06b1 mem_regext//64 bytes
+0x06b1 mem_AES_CMAC_k1//16 bytes
+0x06b1 mem_temp_block2
+0x06c1 mem_AES_CMAC_k2//16 bytes
+0x06c1 mem_temp_block3
+0x06d1 mem_AES_CMAC_temp// 16 bytes
+0x06d1 mem_temp_block4
+0x06e1 mem_AES_CMAC_M_last// 16 bytes
+0x06e1 mem_module_uart_cmd
+0x06e2 mem_module_uart_opcode
+0x06e3 mem_module_uart_len
+0x06e4 mem_module_temp_nl_discard_packet
+0x06e5 mem_temp_block5
+0x06f1 mem_le_mackey//16 bytes
+0x06f1 mem_app_receive_temp
+0x06f1 mem_key_value_temp
+0x06f3 mem_key_value
+0x06f5 mem_key_value_temp1
+0x06f6 mem_key_value_temp2
+0x06f7 mem_key_value_temp3
+0x06f8 mem_key_value_temp4
+0x06f9 mem_key_value_temp5
+0x06fa mem_key_value_temp6
+0x06fb mem_temp_block6
+0x0701 mem_scale_ratio
+0x0704 mem_xcnt
+0x0707 mem_scale_ratio_temp
+0x0709 mem_mesh_receive_model_message_payload_len
+0x070a mem_mesh_receive_model_message_payload_opcode
+0x070b mem_mesh_receive_model_message_payload
+0x0722 mem_mesh_access_layer_payload_len
+0x0723 mem_mesh_access_layer_payload
+0x0723 mem_mesh_access_payload
+0x0755 mem_mesh_access_payload_padding//为了透传模块预留
+0x0787 mem_mesh_queue_ele_temp
+0x0787 mem_mesh_queue_ele_duration
+0x0788 mem_mesh_queue_ele_gatt_msg_id
+0x0789 mem_mesh_queue_ele_len
+0x078a mem_mesh_queue_ele_payload
+0x07a9 mem_mesh_queue_ele_padding
+0x07aa mem_le_txheader_mesh_temp
+0x07d1 mem_mesh_sha256_chunk_start
+0x07d1 mem_mesh_sha256_chunk1
+0x0811 mem_mesh_sha256_chunk2
+0x0851 mem_mesh_sha256_chunk3
+0x0891 mem_mesh_sha256_chunk4
+0x08d1 mem_mesh_Privacy_Plaintext
+0x08d1 mem_mesh_Privacy_Plaintext_Zero_String
+0x08d6 mem_mesh_Privacy_Plaintext_IV_Index
+0x08da mem_mesh_Privacy_Plaintext_Privacy_Random
+0x08da mem_mesh_Privacy_Plaintext_Privacy_Random_EncDST
+0x08dc mem_mesh_Privacy_Plaintext_Privacy_Random_EncTransportPDU_or_NetMIC
+0x08e1 mem_mesh_PECB
+0x08f1 mem_nonce_ptr
+0x08f3 mem_ccm_data_len
+0x08f4 mem_ccm_data_ptr
+0x08f6 mem_ccm_mic
+0x08fe mem_ccm_type
+0x08ff mem_mesh_Device_UUID
+0x090f mem_mesh_receive_VID
+0x0910 mem_mesh_mic_cache_ptr
+0x0912 mem_adv_CRC_False_initValue
+0x0914 mem_CRC16_polynomial
+0x0916 mem_mesh_lower_transport_layer_payload_len
+0x0917 mem_mesh_loopcnt_tmep
+0x0919 mem_mesh_rega_temp
+0x091b mem_mesh_regb_temp
+0x091d mem_mesh_regc_temp
+0x091f mem_mesh_alarm_temp
+0x0921 mem_mesh_message_Transport_NetMIC_length
+0x0922 mem_mesh_message_NID
+0x0923 mem_mesh_message_TTL
+0x0924 mem_mesh_message_SEQ
+0x0927 mem_mesh_message_SRC
+0x0929 mem_mesh_message_DST
+0x092b mem_mesh_message_Proxy_TransportPDU_opcode
+0x092b mem_mesh_message_Transport_NetMIC
+0x092b mem_mesh_message_Transport_Head
+0x092c mem_mesh_message_Proxy_TransportPDU_Parameters
+0x092c mem_mesh_message_Transport_unsegmented_access_messagePDU
+0x092c mem_mesh_message_Transport_segmented_access_messagePDU
+0x092c mem_mesh_message_segment_access_SZMIC_SeqZero_SegO_SegN
+0x092f mem_mesh_message_Transport_segmented_access_messagePDU_Segment
+0x092f mem_mesh_message_Transport_NetMIC_end
+0x093f mem_mesh_nonce_struct
+0x094c mem_mesh_send_message_DST
+0x094e mem_mesh_last_message_SEQ
+0x0951 mem_mesh_network_packet_type
+0x0952 mem_mesh_receive_message_count
+0x0953 mem_mesh_receive_message_first_unicast_address
+0x0955 mem_mesh_receive_message_second_unicast_address
+0x0957 mem_mesh_receive_message_third_unicast_address
+0x0959 mem_mesh_receive_message_fourth_unicast_address
+0x095b mem_mesh_Proxy_Nonce
+0x095b mem_mesh_Proxy_Nonce_Nonce_Type
+0x095c mem_mesh_Proxy_Nonce_Pad
+0x095d mem_mesh_Proxy_Nonce_SEQ
+0x0960 mem_mesh_Proxy_Nonce_SRC
+0x0962 mem_mesh_Proxy_Nonce_Pad2
+0x0964 mem_mesh_Proxy_Nonce_IV_Index
+0x0968 mem_mesh_white_list
+0x0978 mem_mesh_white_list_num
+0x097a mem_mesh_addressed_filter_type
+0x097b mem_mesh_upper_transport_layer_payload_ptr
+0x097d mem_mesh_segmented_upper_transport_layer_payload_len
+0x097e mem_mesh_segmented_lower_transport_layer_SegZero
+0x0980 mem_mesh_segmented_lower_transport_layer_SegO
+0x0981 mem_mesh_segmented_lower_transport_layer_SegN
+0x0982 mem_mesh_segmented_last_packet_upper_teansport_payload_len
+0x0983 mem_mesh_upper_tran_layer_queue_temp
+0x0983 mem_mesh_upper_tran_layer_temp_packet_flag
+0x0984 mem_mesh_upper_tran_layer_temp_packet_transmit_delay
+0x0986 mem_mesh_upper_tran_layer_temp_packet_TID
+0x0987 mem_mesh_upper_tran_layer_temp_packet_header_IVI_NID
+0x0988 mem_mesh_upper_tran_layer_temp_packet_header_CTL_TTL
+0x0989 mem_mesh_upper_tran_layer_temp_packet_header_SEQ
+0x098c mem_mesh_upper_tran_layer_temp_packet_header_SRC
+0x098e mem_mesh_upper_tran_layer_temp_packet_header_DST
+0x0990 mem_mesh_upper_tran_layer_temp_packet_length
+0x0991 mem_mesh_upper_tran_layer_temp_packet_payload
+0x09fd mem_mesh_network_dup_cache
+0x0a3d mem_mesh_network_msg_cache
+0x0a8d mem_mesh_network_relay_gatt_queue_each_size
+0x0a8e mem_mesh_network_relay_gatt_queue_length
+0x0a8f mem_mesh_network_relay_gatt_queue_current_num
+0x0a90 mem_mesh_network_relay_gatt_queue_read_ptr
+0x0a91 mem_mesh_network_relay_gatt_queue_write_ptr
+0x0a92 mem_mesh_network_relay_gatt_queue_ele
+0x0709 mem_hci_opcode_ocf
+0x070b mem_hci_opcode_ogf
+0x070c mem_hci_event_head_type
+0x070d mem_hci_event_head_event_code
+0x070e mem_hci_event_para_total_length
+0x070f mem_hci_command_complete_num_hci_command_packet
+0x0710 mem_hci_command_complete_command_opcode
+0x0710 mem_hci_opcode
+0x0712 mem_hci_command_complete_return_parameter
+0x0712 mem_hci_command_complete_return_parameter_status
+0x0713 mem_hci_command_complete_return_parameter_chip_id
+0x0709 mem_module_le_rx_data_len
+0x070b mem_module_le_rx_data_address
+0x070d mem_module_le_rx_data_handle
+0x0709 mem_init_cnt
+0x070b mem_data_pre
+0x070d mem_data_current
+0x070f mem_data_sum
+0x0712 mem_data_value
+0x0709 mem_le_test_sync
+0x070b mem_le_test_pcnt
+0x070d mem_tst_pktcnt_crc
+0x070f mem_tst_pktcnt_dmh
+0x0711 mem_tmp_buffer_head
+0x0714 mem_tmp_buffer
+0x0709 mem_usb_status
+0x070b mem_usb_fifo_empty
+0x070c mem_usb_read_len
+0x070e mem_usb_txbuf
+0x074f mem_usb_txbuf1
+0x0759 mem_usb_txbuf2
+0x0763 mem_usb_rxbuf
+0x07a3 mem_usb_rxbuf_end
+0x07a4 mem_bufptr
+0x07a6 mem_remain
+0x07a7 mem_hidreportdesc_kb
+0x07a9 mem_hidreportdesc_m
+0x07ab mem_devicedesc
+0x07be mem_confdesc
+0x07fa mem_string0
+0x07ff mem_string1
+0x081d mem_string2
+0x083b mem_string3
+0x0859 mem_cb_usb_config
+0x085b mem_usb_tx_interval
+0x085c mem_usb_vid_pid
+0x0865 mem_usb_zero_packet
+0x0867 mem_usb_ones_packet
+0x0869 mem_usb_two_packet
+0x086b mem_usb0_state
+0x086c mem_usb_offline_check_gpio
+0x086d mem_usb_clear_mem_start
+0x086d mem_usb_setup
+0x086d mem_usb_setup_bmRequestType
+0x086e mem_usb_setup_bRequest
+0x086f mem_usb_setup_bValue
+0x0870 mem_usb_setup_bValueH
+0x0871 mem_usb_setup_wIndex
+0x0873 mem_usb_setup_bLength
+0x0874 mem_usb_setup_bLengthH
+0x0875 mem_usb0_set_report_data
+0x08b5 mem_usb0_get_report_data
+0x08f5 mem_usb_setup_bValue_temp
+0x08f7 mem_usb0_get_set_report
+0x08f8 mem_usb0_data_ready_report
+0x08f9 mem_usb_tx_win_enable
+0x08fa mem_usb_tx_mac_enable
+0x08fb mem_usb_idle_flag
+0x08fc mem_usb_idle_rate
+0x08fd mem_usb_get_protocol_flag
+0x08fe mem_usb_set_protocol_status
+0x08ff mem_usb_set_protocol_value
+0x0900 mem_usb_state
+0x0901 mem_usb_remote_wakeup
+0x0902 mem_usb_clear_remote_wakeup
+0x0903 mem_sdsystem_wakeup_flag
+0x0904 mem_usb_ep0_stall_status
+0x0905 mem_usb_ep1_stall_status
+0x0906 mem_usb_ep2_stall_status
+0x0907 mem_usb_ep3_stall_status
+0x0908 mem_dsc_info_data_pointer
+0x090a mem_dsc_info_len
+0x090b mem_usb_ep1_data
+0x090c mem_usb_ep2_data
+0x090d mem_usb_tx_enable
+0x090e mem_usb_device_enumeration_endflag
+0x090f mem_usb_wakestate_onetime_flag
+0x0910 mem_usb_mac_wakeup_trig
+0x0911 mem_usb_set_high_addr_flag
+0x0912 mem_usb_clear_halt
+0x0913 mem_usb_mouse_data
+0x0923 mem_usb_kb_data
+0x0933 mem_usb_kb_multikey
+0x0943 mem_usb_kb_system
+0x0953 mem_usb_test_cnt
+0x0955 mem_usb_test_kb
+0x095f mem_usb_clear_mem_end
+0x095f mem_usb_ccid_buf
+0x099f mem_dg_rssi_noise_buffer
+0x0a9f mem_dg_rssi_noise_dg_buffer
+0x0b9f mem_dg_rssi_noise_ms_buffer
+0x0c9f mem_dg_rssi_noise_kb_buffer
+
+0x019f mem_le_new_param
+0x019f mem_le_new_transmitwindowsize
+0x01a0 mem_le_new_transmitwindowoffset
+0x01a2 mem_le_new_conninterval
+0x01a4 mem_le_new_connslavelatency
+0x01a6 mem_le_new_connsupervisiontimeout
+0x019f mem_le_new_map
+0x019f mem_le_new_m2s_phy
+0x01a0 mem_le_new_s2m_phy
+0x004c mem_le_rxbuf_data_header
+0x004d mem_le_rxbuf_data_length
+0x004e mem_le_rxbuf_data_payload
+0x004c mem_le_rxbuf_data_ll_header
+0x004d mem_le_rxbuf_data_ll_length
+0x004e mem_le_rxbuf_data_ll_opcode
+0x004f mem_le_rxbuf_data_ll_control_data
+0x004c mem_le_rxbuf_adv_header
+0x004d mem_le_rxbuf_adv_length
+0x004e mem_le_rxbuf_adv_payload
+0x004c mem_le_rxbuf_adv_scan_req_header
+0x004d mem_le_rxbuf_adv_scan_req_length
+0x004e mem_le_rxbuf_adv_scan_req_scan_address
+0x0054 mem_le_rxbuf_adv_scan_req_adv_address
+0x004c mem_le_rxbuf_adv_connect_ind_header
+0x004d mem_le_rxbuf_adv_connect_ind_length
+0x004e mem_le_rxbuf_adv_connect_ind_init_address
+0x0054 mem_le_rxbuf_adv_connect_ind_adv_address
+0x005a mem_le_rxbuf_adv_connect_ind_access_address
+0x005e mem_le_rxbuf_adv_connect_ind_crc_init
+0x0061 mem_le_rxbuf_adv_connect_ind_win_size
+0x0062 mem_le_rxbuf_adv_connect_ind_win_offset
+0x0064 mem_le_rxbuf_adv_connect_ind_interval
+0x0066 mem_le_rxbuf_adv_connect_ind_latency
+0x0068 mem_le_rxbuf_adv_connect_ind_timeout
+0x006a mem_le_rxbuf_adv_connect_ind_channel_map
+0x006f mem_le_rxbuf_adv_connect_ind_hop_and_sca
+0x06b1 mem_le_search_handle_start
+0x06b3 mem_le_search_handle_end
+0x06b5 mem_le_att_offset
+0x06b5 mem_le_search_att_type_length
+0x06b6 mem_le_search_att_type
+0x06c6 mem_le_curr_att_len
+0x06c7 mem_le_cur_attlist_start_ptr
+0x06c9 mem_le_cur_handle_start
+0x06cb mem_le_cur_handle_end
+0x06cd mem_le_cur_uuid_length
+0x06ce mem_le_cur_uuid
+0x06de mem_le_cur_handle
+0x004c mem_le_rxbuf_data_att_header
+0x004d mem_le_rxbuf_data_att_length
+0x004e mem_le_rxbuf_data_att_l2cap_length
+0x0050 mem_le_rxbuf_data_att_cid
+0x0052 mem_le_rxbuf_data_att_opcode
+0x0053 mem_le_rxbuf_data_att_payload
+0x004c mem_le_rxbuf_data_continue_header
+0x004d mem_le_rxbuf_data_continue_length
+0x004e mem_le_rxbuf_data_continue_payload
+0x004c mem_le_rxbuf_data_att_write_header
+0x004d mem_le_rxbuf_data_att_write_length
+0x004e mem_le_rxbuf_data_att_write_l2cap_length
+0x0050 mem_le_rxbuf_data_att_write_cid
+0x0052 mem_le_rxbuf_data_att_write_opcode
+0x0053 mem_le_rxbuf_data_att_write_handle
+0x0055 mem_le_rxbuf_data_att_write_payload
+0x004c mem_le_rxbuf_data_prepare_att_write_header
+0x004d mem_le_rxbuf_data_prepare_att_write_length
+0x004e mem_le_rxbuf_data_prepare_att_write_l2cap_length
+0x0050 mem_le_rxbuf_data_prepare_att_write_cid
+0x0052 mem_le_rxbuf_data_prepare_att_write_opcode
+0x0053 mem_le_rxbuf_data_prepare_att_write_handle
+0x0055 mem_le_rxbuf_data_prepare_att_write_offset
+0x0057 mem_le_rxbuf_data_prepare_att_write_payload
+0x070b mem_mesh_NETKeyindex_and_APPKeyindex
+0x070e mem_mesh_receive_application_key
+0x070b mem_mesh_vendor_message_cid
+0x070d mem_mesh_vendor_message_tid
+0x070e mem_mesh_vendor_message_attr_type
+0x070b mem_mesh_vendor_message_header
+0x0710 mem_mesh_vendor_attr_parameter
+0x070b mem_mesh_vendor_message_delay_close_time_header
+0x0710 mem_mesh_vendor_delay_close_time
+0x070b mem_mesh_vendor_message_night_light_onoff_header
+0x0710 mem_mesh_vendor_night_light_onoff
+0x070b mem_mesh_vendor_message_color_header
+0x0710 mem_mesh_vendor_color_lightness
+0x0712 mem_mesh_vendor_color_hue
+0x0714 mem_mesh_vendor_color_saturation
+0x070b mem_mesh_vendor_message_back_light_onoff_header
+0x0710 mem_mesh_vendor_back_light_onoff
+0x070b mem_mesh_vendor_message_main_light_onoff_header
+0x0710 mem_mesh_vendor_main_light_onoff
+0x070b mem_mesh_vendor_message_standby_brightness_header
+0x0710 mem_mesh_vendor_standby_brightness
+0x070b mem_mesh_vendor_message_current_time_header
+0x0710 mem_mesh_vendor_message_current_time
+0x0723 mem_mesh_access_layer_payload_vendor_command
+0x0724 mem_mesh_access_layer_payload_vendor_CID
+0x0726 mem_mesh_access_layer_payload_vendor_tid
+0x0727 mem_mesh_access_layer_payload_vendor_attr_type
+0x0729 mem_mesh_access_layer_payload_vendor_attr_parameter
+0x06a1 mem_mesh_subscription_eep_temp
+0x0787 mem_mesh_gatt_package_receive_msg_buffer_ptr
+0x0789 mem_mesh_gatt_package_receive_msg_buffer_temp
+0x0789 mem_mesh_gatt_package_receive_msg_id
+0x078b mem_mesh_gatt_package_receive_MAC
+0x078b mem_mesh_gatt_package_receive_msg_num
+0x078c mem_mesh_gatt_package_receive_msg_total_length
+0x078d mem_mesh_gatt_package_receive_msg_payload
+0x08ff mem_mesh_receive_service_uuid_company_id
+0x0901 mem_mesh_receive_service_uuid_vid
+0x0902 mem_mesh_receive_service_uuid_provisioning_type
+0x0903 mem_mesh_receive_service_uuid_mac
+0x0905 mem_mesh_receive_service_uuid_msg_id
+0x0906 mem_mesh_receive_service_uuid_package_num
+0x0907 mem_mesh_receive_service_uuid_length
+0x0908 mem_mesh_receive_service_uuid_payload_data
+0x07aa mem_mesh_fast_pair_packet_type
+0x070b mem_mesh_configuration_health_message_opcode
+0x070b mem_mesh_configuration_health_message_opcode_config_model_subscription
+0x070c mem_mesh_subscription_element_address
+0x070e mem_mesh_subscription_value_address
+0x0710 mem_mesh_subscription_model_identifier
+0x070b mem_mesh_configuration_health_message_opcode_config_model_subscription_ow//overwrite
+0x070c mem_mesh_subscription_element_address_ow
+0x070e mem_mesh_subscription_list_num_ow
+0x070f mem_mesh_subscription_value_address_start_ow
+0x07d1 mem_chip_clear_paired_info
+0x070b mem_mesh_module_message_opcode
+0x070b mem_mesh_module_message_opcode_onoff_set
+0x070c mem_mesh_generic_onoff_set_payload_OnOff
+0x070d mem_mesh_generic_onoff_set_payload_TID
+0x070e mem_mesh_generic_onoff_set_payload_Transition_Time
+0x070f mem_mesh_generic_onoff_set_payload_Delay
+0x070b mem_mesh_module_message_opcode_scene_recall
+0x070c mem_mesh_scene_recall_payload_scene_number
+0x070e mem_mesh_scene_recall_payload_TID
+0x070f mem_mesh_scene_recall_payload_Transition_Time
+0x0710 mem_mesh_scene_recall_payload_Delay
+0x070b mem_mesh_module_message_opcode_set_light_lightness
+0x070c mem_mesh_light_lightness_set_payload_lightness
+0x070e mem_mesh_light_lightness_set_payload_TID
+0x070f mem_mesh_light_lightness_set_payload_Transition_Time
+0x0710 mem_mesh_light_lightness_set_payload_Delay
+0x0711 mem_mesh_light_lightness_calc_lightness
+0x070b mem_mesh_module_message_opcode_set_light_ctl
+0x070c mem_mesh_CTL_Lightness
+0x070e mem_mesh_CTL_Temperature
+0x0710 mem_mesh_CTL_Delta_UV
+0x0712 mem_mesh_CTL_lightness_TID
+0x0713 mem_mesh_CTL_lightness_Transition_Time
+0x0714 mem_mesh_CTL_lightness_Delay
+0x0715 mem_mesh_CTL_calc_lightness
+0x0716 mem_mesh_CTL_calc_temperature
+0x093f mem_mesh_Network_Nonce
+0x093f mem_mesh_Network_Nonce_nonce_type
+0x0940 mem_mesh_Network_Nonce_CTL_and_TTL
+0x0941 mem_mesh_Network_Nonce_SEQ
+0x0944 mem_mesh_Network_Nonce_SRC
+0x0946 mem_mesh_Network_Nonce_Pad//0x0000
+0x0948 mem_mesh_Network_Nonce_IV_Index
+0x07aa mem_mesh_network_packet_type_temp
+0x07ab mem_mesh_message_NID_temp
+0x07ac mem_mesh_message_TTL_temp
+0x07ad mem_mesh_message_SEQ_temp
+0x07b0 mem_mesh_message_SRC_temp
+0x07b2 mem_mesh_message_DST_temp
+0x07b4 mem_mesh_message_Transport_PDU_temp
+0x093f mem_mesh_Application_Nonce
+0x093f mem_mesh_Application_Nonce_Nonce_Type
+0x0940 mem_mesh_Application_Nonce_ASZMIC_and_Pad//
+0x0941 mem_mesh_Application_Nonce_SEQ
+0x0944 mem_mesh_Application_Nonce_SRC
+0x0946 mem_mesh_Application_Nonce_DST
+0x0948 mem_mesh_Application_Nonce_IV_Index
+0x093f mem_mesh_Device_Nonce
+0x093f mem_mesh_Device_Nonce_Nonce_Type
+0x0940 mem_mesh_Device_Nonce_ASZMIC_and_Pad//
+0x0941 mem_mesh_Device_Nonce_SEQ
+0x0944 mem_mesh_Device_Nonce_SRC
+0x0946 mem_mesh_Device_Nonce_DST
+0x0948 mem_mesh_Device_Nonce_IV_Index
+0x0722 mem_mesh_upper_transport_layer_payload_len
+0x0991 mem_mesh_upper_tran_layer_temp_pakcet_AKF_AID
+0x0991 mem_mesh_upper_tran_layer_temp_unsegmented_pakcet_AKF_AID
+0x0992 mem_mesh_upper_tran_layer_temp_unsegmented_packet_fill
+0x0996 mem_mesh_upper_tran_layer_temp_pakcet_upper_tran_access_pdu
+0x0996 mem_mesh_upper_tran_layer_temp_unsegmented_pakcet_upper_tran_access_pdu
+0x0991 mem_mesh_upper_tran_layer_temp_segmented_pakcet_AKF_AID
+0x0992 mem_mesh_upper_tran_layer_temp_segmented_pakcet_SeqZero
+0x0994 mem_mesh_upper_tran_layer_temp_segmented_pakcet_SegO
+0x0995 mem_mesh_upper_tran_layer_temp_segmented_pakcet_SegN
+0x0996 mem_mesh_upper_tran_layer_temp_segmented_pakcet_upper_tran_access_pdu
+0x01fd mem_otp_adc
+0x0205 mem_otp_temp0
+0x020d mem_otp_core_ldo
+0x020e mem_otp_verf_bg
+0x020f mem_otp_charge_pump
+0x0210 mem_otp_dpll_ibais
+0x0211 mem_otp_temp1
+0x0219 mem_otp_hv_sel
+0x021a mem_otp_ldo_vsel
+0x021b mem_otp_load_delay
+0x021c mem_otp_load_check_sum
+0x4000 mem_patch00
+0x4001 mem_patch01
+0x4002 mem_patch02
+0x4003 mem_patch03
+0x4004 mem_patch04
+0x4005 mem_patch05
+0x4006 mem_patch06
+0x4007 mem_patch07
+0x4008 mem_patch08
+0x4009 mem_patch09
+0x400a mem_patch0a
+0x400b mem_patch0b
+0x400c mem_patch0c
+0x400d mem_patch0d
+0x400e mem_patch0e
+0x400f mem_patch0f
+0x4010 mem_patch10
+0x4011 mem_patch11
+0x4012 mem_patch12
+0x4013 mem_patch13
+0x4014 mem_patch14
+0x4015 mem_patch15
+0x4016 mem_patch16
+0x4017 mem_patch17
+0x4018 mem_patch18
+0x4019 mem_patch19
+0x401a mem_patch1a
+0x401b mem_patch1b
+0x401c mem_patch1c
+0x401d mem_patch1d
+0x401e mem_patch1e
+0x401f mem_patch1f
+0x4020 mem_patch20
+0x4021 mem_patch21
+0x4022 mem_patch22
+0x4023 mem_patch23
+0x4024 mem_patch24
+0x4025 mem_patch25
+0x4026 mem_patch26
+0x4027 mem_patch27
+0x4028 mem_patch28
+0x4029 mem_patch29
+0x402a mem_patch2a
+0x402b mem_patch2b
+0x402c mem_patch2c
+0x402d mem_patch2d
+0x402e mem_patch2e
+0x402f mem_patch2f
+0x4030 mem_patch30
+0x4031 mem_patch31
+0x4032 mem_patch32
+0x4033 mem_patch33
+0x4034 mem_patch34
+0x4035 mem_patch35
+0x4036 mem_patch36
+0x4037 mem_patch37
+0x4038 mem_patch38
+0x4039 mem_patch39
+0x403a mem_patch3a
+0x403b mem_patch3b
+0x403c mem_patch3c
+0x403d mem_patch3d
+0x403e mem_patch3e
+0x403f mem_patch3f
+0x4040 mem_context
+0x4093 mem_current_amaddr
+0x4094 mem_lpm_mode
+0x4095 mem_last_clkn
+0x4099 mem_fcomp_div
+0x409a mem_rx_window_sniff
+0x409c mem_rf_init_ptr
+0x409e mem_rf_rccal
+0x409f mem_handle_num
+0x40a0 mem_chip_functions
+0x40a2 mem_lpm_wake_lock
+0x40a4 mem_lpm_interval
+0x40a6 mem_lpm_overhead
+0x40a7 mem_lpm_hibernate_switch
+0x40a8 mem_sniff_unint_lost
+0x40a9 mem_sleep_counter
+0x40ad mem_sleep_counter_all
+0x40b1 mem_sleep_clkn
+0x40b7 mem_sniff_rcv
+0x40ba mem_sniff_lost
+0x40bd mem_clks_per_lpo
+0x40c0 mem_lpm_mult
+0x40c1 mem_lpm_mult_timeout
+0x40c2 mem_lpm_mult_cnt
+0x40c3 mem_lpm_xtalcnt
+0x40c4 mem_lpm_buckcnt
+0x40c5 mem_lpm_ldocnt
+0x40c6 mem_lpm_isogate
+0x40c7 mem_lpm_isogate_stage2
+0x40c8 mem_lpm_isogate_final
+0x40c9 mem_lpm_ldo_sel
+0x40ca mem_lpm_sysctl
+0x40cb mem_lpm_hv_sel
+0x40cc mem_saved_gpio
+0x40e4 mem_saved_gsel
+0x40e7 mem_saved_mark
+0x40ef mem_saved_spidctrl
+0x40f0 mem_patch_ptr
+0x40f2 mem_patch_len
+0x40f4 mem_timers
+0x4114 mem_hci_cmd
+0x4115 mem_hci_conn_handle
+0x4116 mem_hci_plap
+0x4119 mem_hci_puap
+0x411a mem_hci_pnap
+0x411c mem_xtal_c_sel
+0x411d mem_ghpc_table
+0x4135 mem_aac_res_table
+0x4141 mem_tx_power
+0x4142 mem_modem_rssi
+0x4143 mem_gain_fix
+0x4144 mem_gain_table
+0x4147 mem_gain_second_agc_en
+0x4148 mem_system_clk
+0x4149 mem_rf_init_data
+0x415b mem_otp_charge_pump_x
+0x415c mem_otp_dpll_ibais_x
+0x415d mem_xtal_freq
+0x415e mem_version
+0x415f mem_company_id
+0x4161 mem_sub_version
+0x4163 mem_le_dsniff
+0x4165 mem_le_conn_interval
+0x4167 mem_le_tx_ifs_defference
+0x4168 mem_le_tx2m_delay
+0x4169 mem_le_txheader
+0x416a mem_le_txlen
+0x416b mem_le_txpayload
+0x426b mem_le_name_len
+0x426c mem_le_name
+0x428a mem_le_ltk
+0x429a mem_ltk_exists
+0x429b mem_le_rconfirm
+0x42ab mem_le_srand
+0x42bb mem_le_iat
+0x42bc mem_le_rat
+0x42bd mem_le_preq
+0x42be mem_le_preq_iocap
+0x42bf mem_le_preq_oob
+0x42c0 mem_le_preq_auth
+0x42c1 mem_le_preq_max_keysize
+0x42c2 mem_le_preq_init_key_distribution
+0x42c3 mem_le_preq_resp_key_distribution
+0x42c4 mem_le_pres
+0x42c5 mem_le_pres_iocap
+0x42c6 mem_le_pres_oob
+0x42c7 mem_le_pres_auth
+0x42c8 mem_le_pres_max_keysize
+0x42c9 mem_le_pres_init_key_distribution
+0x42ca mem_le_pres_resp_key_distribution
+0x42cb mem_le_conn_param
+0x42cb mem_le_conn_peer_addr_type
+0x42cc mem_le_conn_peer_addr
+0x42d2 mem_le_conn_own_addr_type
+0x42d3 mem_le_interval_min
+0x42d5 mem_le_interval_max
+0x42d7 mem_le_latency
+0x42d9 mem_le_timeout
+0x42db mem_le_lap
+0x42de mem_le_uap
+0x42df mem_le_nap
+0x42e1 mem_le_local_mtu
+0x42e3 mem_le_remote_mtu
+0x42e5 mem_le_skdm
+0x42ed mem_le_skds
+0x42f5 mem_le_init_superto
+0x42f7 mem_ui_le_uuid_table
+0x42f9 mem_le_secure_connect_flag
+0x42fa mem_le_secure_connect_state
+0x42fb mem_le_sc_confirm_gkey_flag
+0x42fc mem_le_pairing_state
+0x42fd mem_le_enc_state
+0x42fe mem_le_pairing_mode
+0x42ff mem_le_tk
+0x4303 mem_le_ediv
+0x4305 mem_le_rand
+0x430d mem_le_irk
+0x431d mem_le_transmit_window
+0x4321 mem_le_configuration
+0x4322 mem_le_fixed_ltk
+0x4332 mem_le_pairing_handle
+0x4334 mem_le_packet_llid
+0x4335 mem_le_l2cap_size
+0x4337 mem_le_packet_len_recved
+0x4339 mem_le_payload_ptr
+0x433b mem_le_signaling_identifier
+0x433c mem_le_l2cap_signaling_conn_param_update_rsp_result
+0x433e mem_le_md_count
+0x433f mem_ble_l2cap_tx_buff0_ptr
+0x4341 mem_ble_l2cap_tx_buff_size_ptr
+0x4343 mem_le_scan_enable
+0x4344 mem_le_scan_interval
+0x4346 mem_le_scan_window
+0x4348 mem_le_adv_data_len
+0x4349 mem_le_adv_data
+0x4368 mem_le_scan_data_len
+0x4369 mem_le_scan_data
+0x4388 mem_le_adv_enable
+0x4389 mem_le_adv_param
+0x4389 mem_le_adv_interval
+0x438b mem_le_adv_type
+0x438c mem_le_adv_own_addr_type
+0x438d mem_le_adv_direct_addr
+0x4393 mem_le_adv_channel_map
+0x4394 mem_le_scan_params
+0x4394 mem_le_scan_type
+0x4395 mem_le_scan_own_addr_type
+0x4396 mem_le_l2cap_att_states
+0x4397 mem_le_att_opcode
+0x4398 mem_le_att_handle
+0x439a mem_le_search_res
+0x439b mem_le_notify_handle
+0x439d mem_le_search_uuid_length
+0x439e mem_le_search_uuid
+0x43ae mem_le_local_feature
+0x43b6 mem_le_tx_phys
+0x43b7 mem_le_rx_phys
+0x43b8 mem_remote_rx_max_octets
+0x43ba mem_remote_rx_max_time
+0x43bc mem_remote_tx_max_octets
+0x43be mem_remote_tx_max_time
+0x43c0 mem_local_rx_max_octets
+0x43c2 mem_local_rx_max_time
+0x43c4 mem_local_tx_max_octets
+0x43c6 mem_local_tx_max_time
+0x43c8 mem_ucode_ptr
+0x43ca mem_ucode_flag
+0x43cb mem_device_option
+0x43cc mem_peripheral_lock_flag
+0x43cd mem_bistfix_val
+0x43d3 mem_cb_check_wakelock
+0x43d5 mem_cb_before_hibernate
+0x43d7 mem_cb_before_lpm
+0x43d9 mem_cb_le_process
+0x43db mem_cb_idle_process
+0x43dd mem_cb_bb_event_process
+0x43df mem_cb_att_write
+0x43e1 mem_cb_ble_transmit
+0x43e3 mem_cb_event_timer
+0x43e5 mem_cb_bt_set_mult
+0x43e7 mem_cb_spi_flash_write_complate
+0x43e9 mem_cb_before_lpm_sleep
+0x43eb mem_eeprom_base
+0x43ed mem_wake_up_delay_timer
+0x43ee mem_app_connection_options
+0x43ef mem_app_disconn_reason
+0x43f1 mem_app_disconn_reason_flag
+0x43f3 mem_xrecord_mode
+0x43f4 mem_eeprom_block_size
+0x43f5 mem_spi_init_clk
+0x43f6 mem_spi_init_delay_time
+0x43f7 mem_spi_ncs_gpio
+0x43f8 mem_nv_data_ptr
+0x43fa mem_nv_data_number
+0x43fb mem_queue_ptr
+0x43fd mem_3v_adc_io_data
+0x43ff mem_2v_adc_hvin_data
+0x4401 mem_1v_adc_io_data
+0x4403 mem_3v_adc_hvin_data
+0x4405 mem_reference_voltage
+0x4407 mem_adc_config_flag
+0x4408 mem_adc_channel
+0x4409 mem_adc_clkdiv
+0x440a mem_adc_current_value
+0x440c mem_adc_power_flag//bit0:low power falg ; bit1:no power flag
+0x440d mem_adc_saddr_ptr
+0x440f mem_adc_eaddr_ptr
+0x4411 mem_adc_dma_enable
+0x4412 mem_adc_cal_c0
+0x4413 mem_adc_cal_c1
+0x4414 mem_adc_cal_c2
+0x4415 mem_adc_cal_c3
+0x4416 mem_adc_cal_c4
+0x4417 mem_adc_cal_c5
+0x4418 mem_adc_cal_c6
+0x4419 mem_spi_write_addr
+0x441c mem_spi_write_ptr
+0x441e mem_spi_write_len
+0x4420 mem_spi_write_flash_sm
+0x4421 mem_spi_cs_gpio
+0x4422 mem_spi_si_gpio
+0x4423 mem_spi_so_gpio
+0x4424 mem_spi_sclk_gpio
+0x4425 mem_spi_wp_gpio
+0x4426 mem_spi_hold_gpio
+0x4427 mem_eeprom_wp_gpio
+0x4428 mem_eeprom_scl_gpio
+0x4429 mem_eeprom_sda_gpio
+0x442a mem_kscan_ptr
+0x442c mem_key_num_ptr
+0x442c mem_keyscan_ptr
+0x442e mem_key_value_retention
+0x4430 mem_power_param_ptr
+0x4432 mem_seqi
+0x4433 mem_adc_cal_c7
+0x4433 mem_set_cdb_on
+0x4434 mem_syn_cal_ctrl
+0x4435 mem_nec_decode_error_value
+0x4436 mem_wdt_always_work
+0x4437 mem_power_ctrl_disable
+0x4438 mem_ring_ibias_trim
+0x4439 mem_ring_ibias_vtune_low
+0x443b mem_ring_ibias_vtune_high
+0x443d mem_ring_ibias_calc_adc_gpio
+0x443e mem_ring_ibias_calc_adc_channel
+0x443f mem_rf_debug_rx_gpio
+0x4440 mem_rf_debug_tx_gpio
+0x4441 mem_l2cap_xmem_start
+0x4441 mem_used_map
+0x4442 mem_tx_fifo0
+0x4442 mem_tx_fifo0_map
+0x4443 mem_tx_fifo0_ptr
+0x4445 mem_tx_fifo1
+0x4445 mem_tx_fifo1_map
+0x4446 mem_tx_fifo1_ptr
+0x4448 mem_tx_fifo2
+0x4448 mem_tx_fifo2_map
+0x4449 mem_tx_fifo2_ptr
+0x444b mem_tx_fifo3
+0x444b mem_tx_fifo3_map
+0x444c mem_tx_fifo3_ptr
+0x444e mem_tx_fifo_end
+0x444e mem_l2cap_lpm_txbuf_ptr
+0x4450 mem_l2cap_xmem_end
+0x4450 mem_ccm_pcnt_tx
+0x4455 mem_ccm_pcnt_rx
+0x445a mem_ccm_last_mic
+0x445e mem_ccm_iv
+0x445e mem_ccm_ivm
+0x4462 mem_ccm_ivs
+0x4466 mem_ccm_len
+0x4468 mem_ccm_rx_ptr
+0x446a mem_sc_only_mode
+0x446b mem_sp_debug_mode
+0x446c mem_secure_connections_enable
+0x446d mem_sc_calc
+0x446e mem_sc_local_key_invalid
+0x446f mem_sc_private_key_256
+0x448f mem_sc_pubkey_local_x_256
+0x44af mem_sc_pubkey_local_y_256
+0x44cf mem_sp_state_xmem
+0x44cf mem_authentication_passkey_times
+0x44d0 mem_passkey_1bit
+0x44d1 mem_sp_state_xmem_end
+0x44d1 mem_ipc_lock_bt
+0x44d2 mem_ipc_lock_c51
+0x44d3 mem_ipc_fifo_bt2c51
+0x44db mem_ipc_fifo_c512bt
+0x44e3 mem_ui_button_timer
+0x44e4 mem_ui_button_last_state
+0x44e5 mem_ui_timer_last_btclk
+0x44e9 mem_ui_state_map
+0x44eb mem_ui_button_timeout
+0x44ec mem_ui_button_gpio
+0x44ed mem_ui_led_init_state_set
+0x44ee mem_ui_led_struct_num
+0x44ef mem_ui_led_struct_ptr
+0x44f1 mem_mesh_vendor_mesh_receive_tid
+0x44f2 mem_mesh_vendor_mesh_send_tid
+0x44f3 mem_mesh_vendor_timer_current_time
+0x44f7 mem_system_time
+0x44fb mem_mesh_vendor_timer_timing_delete_index1
+0x44fb mem_mesh_vendor_timer_timing_index1
+0x44fc mem_mesh_vendor_timer_timing_delete_index2
+0x44fc mem_mesh_vendor_timer_timing_time1
+0x4500 mem_mesh_vendor_timer_timing_attr_type1
+0x4502 mem_mesh_vendor_timer_timing_attr_para1
+0x4503 mem_mesh_vendor_timer_timing_buffer
+0x45ed mem_mesh_vendor_timer_timing_palyload
+0x45ff mem_mesh_vendor_timer_timing_temp
+0x4601 mem_mesh_vendor_timer_timing_time_cyclic_temp
+0x4602 mem_mesh_vendor_timer_check_loop
+0x4603 mem_tmall_revd_device_power_on_msge_flag
+0x4604 mem_tmall_send_power_on_msge_timeout
+0x4606 mem_mesh_vendor_timer_timing_temp1
+0x4608 mem_mesh_timer_index_buffer_len
+0x4609 mem_mesh_timer_index_buffer
+0x4629 mem_mesh_timer_index_count
+0x462a mem_mesh_adv_data_len
+0x462b mem_mesh_adv_data
+0x464a mem_mesh_adv_scan_channel
+0x464b mem_mesh_advertising_unprovisioned_device_beacon_switch
+0x464c mem_mesh_advertising_unprovisioned_device_beacon_timer
+0x464e mem_mesh_advertising_unprovisioned_device_beacon_duration
+0x464f mem_mesh_advertising_unprovisioned_device_beacon_interval
+0x4650 mem_mesh_calc_ConfirmationCloud_data
+0x4650 mem_mesh_ConfirmationCloud_RandomB
+0x4658 mem_mesh_ConfirmationCloud_RandomA
+0x4660 mem_mesh_AuthValueProv
+0x4670 mem_mesh_ConfirmationCloud
+0x4680 mem_mesh_ConfirmationDevice
+0x4680 mem_mesh_calc_ConfirmationDevice_data
+0x4680 mem_mesh_provisioning_random_A
+0x4688 mem_mesh_provisioning_random_B
+0x4690 mem_mesh_AuthValueDevice
+0x46a0 mem_mesh_Device_Key
+0x46b0 mem_mesh_Confirmationkey
+0x46c0 mem_mesh_sha256_ConfirmationKey_ascii
+0x46cf mem_mesh_sha256_SessionKey_ascii
+0x46d9 mem_mesh_sha256_DeviceKey_ascii
+0x46e2 mem_mesh_sha256_load_first_data_flag
+0x46e3 mem_mesh_sha256_data_len_byte
+0x46eb mem_mesh_sha256_data_len_bit
+0x46f3 mem_mesh_sha256_data_end_addr
+0x46f5 mem_mesh_sha256_data_len_addr
+0x46f7 mem_mesh_sha256_chunk_count
+0x46f8 mem_mesh_sha256_chunk_data_ptr
+0x46fa mem_mesh_sha256_chunk_ptr
+0x46fc mem_k2_P_len
+0x46fd mem_k2_P
+0x470d mem_k2_N
+0x471d mem_k2_SALT
+0x472d mem_k2_T
+0x473d mem_k2_T0
+0x473d mem_k2_T1
+0x474d mem_k2_NID
+0x474e mem_k2_T3
+0x475e mem_k2_T2
+0x476e mem_k4_SALT
+0x477e mem_k4_T
+0x478e mem_k4_id6_01
+0x479e mem_k4_k4N
+0x47ae mem_mesh_transport_AID
+0x47af mem_k3_SALT
+0x47bf mem_k3_T
+0x47cf mem_k3_id64_01
+0x47d4 mem_k3_k4N
+0x47dc mem_mesh_network_id
+0x47e4 mem_mesh_provisioned_flag
+0x47e5 mem_mesh_Provisioning_State_Flag
+0x47e6 mem_mesh_Device_PID
+0x47e7 mem_mesh_UUID_FeatureFlag
+0x47e8 mem_mesh_UUID_FeatureFlag1
+0x47e9 mem_mesh_PDU_RFU
+0x47ea mem_mesh_OOB_information
+0x47ec mem_mesh_Encrypt_Provisioning_Data
+0x47ec mem_mesh_provisioning_data_Mac_addr
+0x47ee mem_mesh_KeyFresh_and_Update_flag
+0x47ef mem_mesh_Network_Key
+0x47ff mem_mesh_last_IV_Index_byte
+0x4800 mem_mesh_Unicast_Address
+0x4802 mem_mesh_recv_cfg_appkey_add_timer
+0x4803 mem_mesh_report_power_on_timer
+0x4804 mem_mesh_report_full_attribute_timer
+0x4805 mem_mesh_health_node_reset_timer
+0x4806 mem_mesh_send_packet_timeout
+0x4808 mem_mesh_gatt_package_send_msg_id
+0x4809 mem_mesh_gatt_receive_msg_timer
+0x480a mem_mesh_three_tuple_ProductID
+0x480e mem_mesh_three_tuple_MAC
+0x4814 mem_mesh_three_tuple_secret
+0x4824 mem_mesh_cb_receive_advertising
+0x4826 mem_mesh_cb_receive_access_message
+0x4828 mem_mesh_cb_receive_config_appkey_add
+0x482a mem_mesh_cb_pairing_fail
+0x482c mem_mesh_cb_recv_vendor
+0x482e mem_mesh_scan_selete_next_ch
+0x4830 mem_mesh_cb_generic_onoff_get
+0x4832 mem_mesh_cb_generic_onoff_set
+0x4834 mem_mesh_cb_scene_recall
+0x4836 mem_mesh_cb_light_lightness_set
+0x4838 mem_mesh_cb_light_lightness_get
+0x483a mem_mesh_cb_light_ctl_set
+0x483c mem_mesh_cb_main_light_onoff_set
+0x483e mem_mesh_cb_background_onoff_set
+0x4840 mem_mesh_cb_color_set
+0x4842 mem_mesh_cb_network_relay
+0x4844 mem_mesh_cb_receive_node_reset
+0x4846 mem_mesh_cb_seq_changed
+0x4848 mem_mesh_cb_subscriptuion_list_changed
+0x484a mem_mesh_cb_vendor_timing_changed
+0x484c mem_mesh_core_feature
+0x484e mem_mesh_element_number
+0x484f mem_mesh_element_device_ptr
+0x4851 mem_mesh_element_device_length
+0x4853 mem_mesh_clear_provisioning_data
+0x4855 mem_mesh_app_deport_device_state
+0x4857 mem_mesh_chip_select
+0x4858 mem_mesh_segmented_access_message_SZMIC
+0x4859 mem_mesh_segmented_access_message_SeqZero
+0x485b mem_mesh_segmented_access_message_SegO
+0x485c mem_mesh_segmented_access_message_SegN
+0x485d mem_mesh_segmented_access_message_BlockAck
+0x4861 mem_mesh_segmented_access_message_receive_finish
+0x4862 mem_mesh_segmented_access_message_current_length
+0x4863 mem_mesh_segmented_access_message_SegN_upper_limit
+0x4864 mem_mesh_segmented_access_message_Segment_ptr
+0x4866 mem_mesh_last_CTL_Temperature
+0x4868 mem_mesh_receive_group_address
+0x4869 mem_mesh_receive_element_number
+0x486a mem_mesh_network_dup_cache_next
+0x486b mem_mesh_network_msg_cache_next
+0x486c mem_mesh_network_proxy_unicast_address
+0x486e mem_mesh_IV_Index
+0x4872 mem_mesh_TMALL_cache_start
+0x4872 mem_mesh_TMALL_SRC1
+0x4874 mem_mesh_TMALL_SEQ1
+0x4877 mem_mesh_TMALL_cache
+0x48a4 mem_mesh_TMALL_cache_end
+0x48a4 mem_mesh_transport_message_mic_cache
+0x48a4 mem_mesh_transport_message_mic_cache_buff1
+0x48a8 mem_mesh_transport_message_mic_cache_buff2_10
+0x48cc mem_mesh_network_relay_queue
+0x48cc mem_mesh_network_relay_queue_each_size
+0x48cd mem_mesh_network_relay_queue_length
+0x48ce mem_mesh_network_relay_queue_current_num
+0x48cf mem_mesh_network_relay_queue_read_ptr
+0x48d0 mem_mesh_network_relay_queue_write_ptr
+0x48d1 mem_mesh_network_relay_queue_ele
+0x4959 mem_mesh_application_key
+0x4969 mem_mesh_ASZMIC
+0x496a mem_mesh_access_message_mic_cache
+0x496a mem_mesh_access_message_mic_cache_buff1
+0x496e mem_mesh_access_message_mic_cache_buff2_10
+0x4992 mem_mesh_send_message_SEQ
+0x4995 mem_mesh_send_message_SRC
+0x4997 mem_mesh_send_message_TTL
+0x4998 mem_mesh_send_upper_layer_IVI_and_NID
+0x4999 mem_mesh_send_upper_layer_CTL_and_TTL
+0x499a mem_mesh_send_upper_layer_SEQ
+0x499d mem_mesh_send_upper_layer_SRC
+0x499f mem_mesh_send_upper_layer_DST
+0x49a1 mem_mesh_send_access_lower_transport_layer
+0x49b1 mem_mesh_send_network_layer_NetMIC
+0x49b5 mem_mesh_upper_tran_layer_packet_advertising
+0x49b6 mem_mesh_upper_tran_layer_packet_tid
+0x49b7 mem_mesh_upper_tran_layer_packet_type
+0x49b8 mem_mesh_upper_receive_new_message_timer
+0x49b9 mem_mesh_upper_tran_layer_queue_each_size
+0x49ba mem_mesh_upper_tran_layer_queue_length
+0x49bb mem_mesh_upper_tran_layer_queue_current_num
+0x49bc mem_mesh_upper_tran_layer_queue_read_ptr
+0x49bd mem_mesh_upper_tran_layer_queue_write_ptr
+0x49be mem_mesh_upper_tran_layer_queue_element_1
+0x49e6 mem_mesh_upper_tran_layer_queue_element_2
+0x4a0e mem_mesh_upper_tran_layer_queue_element_3
+0x4a36 mem_mesh_upper_tran_layer_queue_element_4
+0x4a5e mem_mesh_queue_each_size
+0x4a5f mem_mesh_queue_length
+0x4a60 mem_mesh_queue_current_num
+0x4a61 mem_mesh_queue_read_ptr
+0x4a62 mem_mesh_queue_write_ptr
+0x4a63 mem_mesh_queue_ele
+0x4aeb mem_mesh_element_device
+0x4aeb mem_mesh_element_device_group_addr
+0x4aed mem_mesh_element_device_queue_buffer_ptr
+0x4aef mem_mesh_element_device_timing_ptr
+0x4af1 mem_mesh_element_device_element_subscription_label
+0x4b01 mem_mesh_element_upper_adv_flag
+0x4b02 mem_mesh_element_upper_queue_buffer_ptr
+0x4b04 mem_mesh_element_tran_package_tid
+0x4b05 mem_mesh_element_tran_package_type
+0x4b06 mem_mesh_element_device1
+0x4b21 mem_mesh_element_device2
+0x4b3c mem_mesh_segmented_access_message_Segment
+0x4b60 mem_mesh_le_att_list
+0x4c24 mem_mesh_send_message_SEQ_temp
+0x44f1 mem_24g_lap
+0x44f7 mem_24g_rxbuf
+0x4519 mem_24g_txbuf
+0x4539 mem_24g_txpayload
+0x455d mem_24g_rxpayload
+0x457d mem_24g_rxdata_length
+0x457e mem_24g_pid
+0x457f mem_24g_no_ack
+0x4580 mem_24g_sta_crc
+0x4583 mem_24g_last_crc
+0x4586 mem_24g_sta_pid
+0x4587 mem_24g_last_pid
+0x4588 mem_24g_datalen
+0x4589 mem_24g_data_type
+0x458a mem_24g_txlen
+0x458b mem_24g_rx_window
+0x458d mem_24g_ch
+0x458e mem_24g_current_ch_number
+0x458f mem_24g_addr
+0x4593 mem_24g_ch_map1
+0x4597 mem_24g_ch_map2
+0x459b mem_24g_ch_map3
+0x459f mem_24g_ch_map4
+0x45a3 mem_24g_tx_btclk
+0x45a7 mem_24g_interval
+0x45a8 mem_24g_interval_min
+0x45a9 mem_24g_interval_max
+0x45aa mem_24g_syncword
+0x45ac mem_24g_syncword_crc8
+0x45ad mem_24g_get_syncword_crc8
+0x45ae mem_24g_pair_switch
+0x45af mem_24g_enter_hibernate
+0x45b7 mem_24g_rx_phy
+0x45b8 mem_24g_tx_phy
+0x45b9 mem_24g_ch_map_update
+0x45ba mem_24g_ch_update_map1
+0x45be mem_24g_ch_update_map2
+0x45c2 mem_24g_ch_update_map3
+0x45c6 mem_24g_ch_update_map4
+0x45ca mem_24g_disable_fec1
+0x45cb mem_24g_off_type
+0x45cc mem_24g_pair_addr
+0x45d0 mem_24g_pair_ch
+0x45d1 mem_24g_pair_tx_power
+0x45d2 mem_rssi_buff_index
+0x45d3 mem_24g_device1_bind_step
+0x45d4 mem_24g_device2_bind_step
+0x45d5 mem_24g_bind_device_status
+0x45d6 mem_24g_bind_payload
+0x45de mem_24g_device1_bind_disable
+0x45df mem_24g_device2_bind_disable
+0x45e0 mem_cb_24g_receive_process
+0x45e2 mem_cb_24g_ackpayload
+0x45e4 mem_cb_24g_data_device1
+0x45e6 mem_cb_24g_data_device2
+0x45e8 mem_24g_rxdata_temp
+0x460a mem_24g_abort_packet
+0x460b mem_24g_hop_btclk
+0x460f mem_24g_hop_interval
+0x4610 mem_24g_pair_mode
+0x4611 mem_24g_ackpayload_enable
+0x4612 mem_24g_hop_packet
+0x4613 mem_24g_mode_switch
+0x4614 mem_24g_nodata_timer_enable
+0x4615 mem_24g_mode_init
+0x4616 mem_24g_work_mode
+0x4617 mem_24g_time_slice
+0x4618 mem_24g_self_last_ch
+0x4619 mem_24g_self_ch_number
+0x461a mem_24g_self_config_ch_once
+0x461b mem_24g_device1_last_ch
+0x461c mem_24g_device1_ch_number
+0x461d mem_24g_device1_config_ch_once
+0x461e mem_24g_device2_last_ch
+0x461f mem_24g_device2_ch_number
+0x4620 mem_24g_device2_config_ch_once
+0x4621 mem_24g_led_status
+0x4622 mem_24g_bind_mode_continue
+0x4623 mem_tx_power_temp
+0x4624 mem_24g_mode_B_S_switch
+0x4625 mem_24g_mode_B_S_switch_init
+0x4626 mem_24g_mode_B_S_switch_cnt
+0x4628 mem_24g_mode_B_S_switch_exit
+0x4629 mem_24g_B_S_time_slice
+0x462a mem_24g_B_S_mode_switch_disable
+0x462b mem_24g_bind_device_living
+0x462c mem_24g_transmitter_addr
+0x4630 mem_24g_device1_addr
+0x4634 mem_24g_device2_addr
+0x4638 mem_rssi_noise_avg
+0x4639 mem_rssi_noise_index
+0x463a mem_rssi_noise_self_avg
+0x463b mem_rssi_noise_device1_avg
+0x463c mem_rssi_noise_device2_avg
+0x463d mem_rssi_noise_self_index
+0x463e mem_rssi_noise_device1_index
+0x463f mem_rssi_noise_device2_index
+0x4640 mem_rssi_noise_buffer_ptr
+0x4642 mem_rssi_noise_self_buffer_ptr
+0x4644 mem_rssi_noise_device1_buffer_ptr
+0x4646 mem_rssi_noise_device2_buffer_ptr
+0x4648 mem_car_hard_soft_switch
+0x4649 mem_car_queue_each_size
+0x464a mem_car__queue_length
+0x464b mem_car_queue_curr_num
+0x464c mem_car_queue_read_ptr
+0x464d mem_car_queue_write_ptr
+0x464e mem_car_queue_ele
+0x46c6 mem_car_pop_queue_buff
+0x46da mem_car_led_num
+0x46db mem_car_led_map
+0x46e5 mem_car_style1_led_type
+0x46e6 mem_car_style1_blink_count
+0x46e7 mem_car_style1_struct_led_gpio
+0x46e8 mem_car_style1_on_time
+0x46ea mem_car_style1_off_time
+0x46ec mem_car_style1_cb_ledon
+0x46ee mem_car_style1_cb_ledoff
+0x46f0 mem_car_style2_led_type
+0x46f1 mem_car_style2_blink_count
+0x46f2 mem_car_style2_struct_led_gpio
+0x46f3 mem_car_style2_on_time
+0x46f5 mem_car_style2_off_time
+0x46f7 mem_car_style2_cb_ledon
+0x46f9 mem_car_style2_cb_ledoff
+0x46fb mem_le_receive_data
+0x46fb mem_le_receive_packet_head
+0x46fd mem_le_receive_cmd
+0x46fe mem_le_receive_length
+0x4700 mem_le_receive_payload
+0x470a mem_le_receive_checksum
+0x470b mem_motor1_status
+0x470c mem_motor1_speed
+0x470d mem_motor2_status
+0x470e mem_motor2_speed
+0x470f mem_motor3_status
+0x4710 mem_motor3_speed
+0x4711 mem_motor1_pwm_set
+0x4711 mem_motor1_pwm_pin1_set
+0x4712 mem_motor1_pwm_pin2_set
+0x4713 mem_motor1_pwm_pin_set
+0x4714 mem_motor1_pwm_channel_set
+0x4715 mem_motor1_pwm_freq_set
+0x4718 mem_motor1_pwm_dute_set
+0x4719 mem_motor2_pwm_set
+0x4719 mem_motor2_pwm_pin1_set
+0x471a mem_motor2_pwm_pin2_set
+0x471b mem_motor2_pwm_pin_set
+0x471c mem_motor2_pwm_channel_set
+0x471d mem_motor2_pwm_freq_set
+0x4720 mem_motor2_pwm_dute_set
+0x4721 mem_motor3_pwm_set
+0x4721 mem_motor3_pwm_pin1_set
+0x4722 mem_motor3_pwm_pin2_set
+0x4723 mem_motor3_pwm_pin_set
+0x4724 mem_motor3_pwm_channel_set
+0x4725 mem_motor3_pwm_freq_set
+0x4728 mem_motor3_pwm_dute_set
+0x4729 mem_motor_select_p_n
+0x472a mem_car_motor_status
+0x472b mem_car_motor_speed
+0x472c mem_motor_pwm_set
+0x472c mem_motor_pwm_pin1_set
+0x472d mem_motor_pwm_pin2_set
+0x472e mem_motor_pwm_pin_set
+0x472f mem_motor_pwm_channel_set
+0x4730 mem_motor_pwm_freq_set
+0x4733 mem_motor_pwm_dute_set
+0x4734 mem_ir_rx_gpio
+0x4735 mem_ir_data
+0x4737 mem_ir_rx_buf
+0x4739 mem_ir_receive_clkn
+0x473d mem_ir_notify_data
+0x4740 mem_ir_notify_data_head
+0x4745 mem_ir_notify_data_payload
+0x4747 mem_ir_notify_data_check_sum
+0x4748 mem_car_ir_breakdown_check_timer
+0x4749 mem_car_ir_breakdown_flag
+0x474a mem_car_led_control
+0x474a mem_car_led1_status
+0x474b mem_car_led2_status
+0x474c mem_car_led3_status
+0x474d mem_car_led4_status
+0x474e mem_car_led5_status
+0x474f mem_car_led6_status
+0x4750 mem_car_led7_status
+0x4751 mem_car_led8_status
+0x4752 mem_car_led_control_timer
+0x4753 mem_car_led_blink_status
+0x4754 mem_car_led_no
+0x4755 mem_car_info_request
+0x4758 mem_car_info_request_head
+0x475d mem_car_info_request_payload
+0x4765 mem_car_info_request_checksum
+0x4766 mem_car_config_param
+0x4766 mem_car_config_setting_flag
+0x4767 mem_car_config_device_select
+0x4768 mem_car_config_motor_layout
+0x4769 mem_car_config_ir_enable
+0x476a mem_car_config_ir_rx_gpio
+0x476b mem_car_config_pairing_led_conn_status
+0x476c mem_car_config_pairing_led_gpio
+0x476d mem_car_config_led_num
+0x476e mem_car_config_blood_led_gpio
+0x476e mem_car_config_blood_led1_gpio
+0x476f mem_car_config_blood_led2_gpio
+0x4770 mem_car_config_blood_led3_gpio
+0x4771 mem_car_config_blood_led4_gpio
+0x4772 mem_car_config_blood_led5_gpio
+0x4773 mem_car_config_blood_led6_gpio
+0x4774 mem_car_config_blood_led7_gpio
+0x4775 mem_car_config_blood_led8_gpio
+0x4776 mem_car_config_bat_notify_enable
+0x4777 mem_car_config_low_voltage_led_gpio
+0x4778 mem_car_config_low_voltage_percent
+0x4779 mem_car_config_soft_switch_enable
+0x477a mem_car_config_soft_switch_gpio
+0x477b mem_car_notify_vdd_count
+0x477c mem_car_notify_vdd_timer
+0x477d mem_car_notify_vdd_value_last
+0x477e mem_car_notify_vdd_percent
+0x477f mem_car_working_flag
+0x4780 mem_low_bat_flag
+0x4781 mem_notify_bat_packet
+0x4784 mem_notify_bat_head
+0x4789 mem_notify_bat_payload
+0x478a mem_notify_bat_check_sum
+0x478b mem_vdd_notify_flag
+0x478c mem_car_current_vdd_value_temp
+0x478e mem_car_last_vdd_value
+0x4790 mem_vdd_calculate_set
+0x4790 mem_vdd_full_vol
+0x4792 mem_vdd_empty_vol
+0x4794 mem_vdd_low_vol
+0x4796 mem_vdd_now_vol
+0x4798 mem_car_24g_status
+0x4799 mem_car_24g_no_data_timeout_count
+0x479b mem_car_24g_no_data_timeout_timer
+0x479d mem_car_24g_ir_receive_attack_count
+0x479e mem_car_24g_go_die_flag
+0x479f mem_car_attack_shake_timer
+0x47a0 mem_car_attack_shake_flag
+0x47a1 mem_car_soft_power
+0x47a1 mem_car_power_state
+0x47a2 mem_car_power_timer
+0x47a3 mem_car_power_off_timeout
+0x47a4 mem_car_power_starting_timeout
+0x47a5 mem_car_power_off_cb
+0x47a7 mem_car_power_starting_cb
+0x47a9 mem_car_power_standby_cb
+0x47ab mem_car_ui_button_up_cb
+0x47ad mem_car_le_att_list
+0x49a1 mem_car_moto1_blank_timer
+0x49a2 mem_car_moto2_blank_timer
+0x49a3 mem_car_moto3_blank_timer
+0x49a4 mem_car_motor_gpio_num
+0x49a5 mem_car_motor_gpio_map
+0x49a5 mem_car_motor_left_gpio
+0x49a6 mem_car_motor_right_gpio
+0x49a7 mem_car_motor_front_gpio
+0x49a8 mem_car_motor_back_gpio
+0x49a9 mem_car_gpio
+0x49aa mem_car_app_send_speed
+0x49ab mem_rssi_sum
+0x49ad mem_check_rssi_high_count
+0x49af mem_rssi_data
+0x49b7 mem_car_24g_received_pac
+0x49b8 mem_car_24g_bind_enable_delay_count
+0x49b9 mem_car_keyscan
+0x49b9 mem_car_key_num
+0x49ba mem_cb_car_keyscan
+0x49bc mem_car_enter_lpm_timer_count
+0x49be mem_car_enter_lpm_timer
+0x49c0 mem_car_enter_lpm_flag
+0x49c1 mem_car_24g_ch_polling
+0x49c2 mem_car_rssi_noise_buffer
+0x49ca mem_car_rssi_noise_car_buffer
+0x49d2 mem_car_rssi_noise_remote_buffer
+0x49da mem_car_24g_commom_addr
+0x49de mem_car_24g_commom_addr_temp
+0x49e2 mem_car_24g_commom_addr_read
+0x49e6 mem_car_save_addr_flag
+0x49e7 mem_ble_att_list
+0x4b77 mem_ad_indexTable
+0x4b87 mem_ad_stepsizeTable
+0x4ceb mem_ad_state_valpred
+0x4cef mem_ad_state_index
+0x4cf3 mem_ad_in_numSamples
+0x4cf4 mem_ad_in_ptr
+0x4cf6 mem_ad_out_ptr
+0x4cf8 mem_ad_sign
+0x4cf9 mem_ad_delta
+0x4cfa mem_ad_step
+0x4cfe mem_ad_valpred
+0x4d02 mem_ad_index
+0x4d06 mem_ad_vpdiff
+0x4d0a mem_ad_inputbuffer
+0x4d0e mem_ad_bufferstep
+0x4648 mem_dg_kb_bind_flag
+0x4649 mem_dg_kb_data_sta_data
+0x4651 mem_dg_kb_data_last_data
+0x4659 mem_dg_kb_multikey_sta_data
+0x465c mem_dg_kb_multikey_last_data
+0x465f mem_dg_kb_system_sta_data
+0x4662 mem_dg_kb_system_last_data
+0x4665 mem_dg_kb_blank_data_enable
+0x4666 mem_dg_kb_mul_blank_data_enable
+0x4667 mem_dg_kb_system_crtl_blank_data_enable
+0x4668 mem_dg_ms_blank_data_enable
+0x4669 mem_dg_sys_config
+0x466a mem_dg_usb_vid_pid
+0x4673 mem_dg_usb_tx_interval
+0x4674 mem_dg_usb_device_name
+0x4692 mem_dg_kb_bind_success
+0x4693 mem_dg_pc_sleep_flag
+0x4694 mem_dg_24g_tx_power_default
+0x4695 mem_24g_pair_tx_power_init
+0x4696 mem_setreport_count
+0x4697 mem_hidreportdesc_Interface0_kb
+0x46dd mem_hidreportdesc_Interface2_pc
+0x4755 mem_confdesc_all
+0x47b9 mem_usb_rxbuf_new//at least 78B * 2
+0x4855 mem_usb_rxbuf_new_end//must be even address
+0x4856 mem_usb_clear_mem0_start
+0x4856 mem_usb_txbuf3
+0x4896 mem_usb_rxbuf_temp
+0x48d6 mem_usb_ep3_out_data_len
+0x48d7 mem_usb_ep3_in_data_len
+0x48d8 mem_usb_ep3_out_data_flag
+0x48d9 mem_usb_ep3_in_data
+0x4919 mem_usb_ep3_out_data
+0x4959 mem_usb_rxptr_add
+0x495a mem_usb_clear_mem0_end
+0x495a mem_24g_rxbuf_new
+0x49aa mem_24g_txbuf_new
+0x49fa mem_24g_txpayload_new
+0x4a4a mem_24g_rxdata_temp_new
+0x4a9a mem_24g_rxdata_ack_flag
+0x4a9b mem_24g_pair_addr_new
+0x45d3 mem_rssi_hex_received
+0x45d4 mem_24g_pair_sm
+0x45d5 mem_24g_pair_no_ack
+0x45d6 mem_24g_pair_timeout_init
+0x45d8 mem_24g_pair_timeout
+0x45da mem_24g_pair_count
+0x45dc mem_24g_reconn_timeout_init
+0x45de mem_24g_reconn_timeout
+0x45e0 mem_24g_reconn_count
+0x45e2 mem_24g_reconn_type
+0x45e3 mem_24g_fast_conn_enable
+0x45e4 mem_24g_fast_conn_addr
+0x45e8 mem_24g_receiver_addr
+0x45ec mem_24g_fast_conn_temp_ch
+0x45ed mem_24g_receiver_temp_ch
+0x45ee mem_24g_device_temp_ch
+0x45ef mem_rssi_signal_index
+0x45f0 mem_rssi_signal_buf_ptr
+0x45f2 mem_cb_24g_transmit_data
+0x45f4 mem_cb_24g_search_receiver
+0x45f6 mem_cb_24g_lpm_before
+0x45f8 mem_cb_24g_transmit_short_sleep
+0x45fa mem_cb_24g_transmit_long_sleep
+0x45fc mem_24g_conn_sm
+0x45fd mem_24g_ensure
+0x45fe mem_24g_txfail_cnt
+0x4600 mem_24g_attempt_fail_flag
+0x4601 mem_24g_retry
+0x4602 mem_24g_abort_pac
+0x4603 mem_24g_max_retry
+0x4604 mem_24g_device_addr
+0x4608 mem_24g_short_sleep_set
+0x460b mem_24g_long_sleep_set
+0x4613 mem_24g_long_sleep_set1
+0x4617 mem_24g_pac_index
+0x4618 mem_24g_transmit_by_interrupt
+0x4619 mem_24g_transmit_by_interrupt_exit_count
+0x461b mem_24g_transmit_by_interrupt_exit_count_init
+0x461d mem_24g_long_sleep_param_update_timer_init
+0x461f mem_24g_long_sleep_param_update_timer
+0x4621 mem_24g_fast_hop_count
+0x4622 mem_24g_retransmit
+0x4624 mem_rssi_avg_received
+0x4625 mem_power_ctrl_level
+0x4626 mem_power_ctrl_pac_succ_cnt
+0x4627 mem_power_ctrl_pac_succ_cnt_init
+0x4628 mem_rssi_dis_min_24g
+0x4629 mem_rssi_dis_max_24g
+0x462a mem_rssi_hex_received_max_value
+0x462b mem_rssi_dis_min_ble
+0x462c mem_rssi_dis_max_ble
+0x462d mem_mouse_vdd_calculate_set
+0x462d mem_mouse_vdd_full_vol
+0x462f mem_mouse_vdd_empty_vol
+0x4631 mem_mouse_vdd_low_vol
+0x4633 mem_mouse_vdd_now_vol
+0x4635 mem_adc_channel_gpio
+0x4636 mem_adc_mux_status
+0x4637 mem_mouse_adc_last_low_voltage_flag
+0x4638 mem_mouse_discovery_timeout
+0x463a mem_mouse_24g_pair_timeout_init
+0x463c mem_mouse_direct_timeout
+0x463d mem_mouse_24g_reconn_timeout_init
+0x463e mem_mouse_24g_pair_tx_power
+0x463f mem_rssi_dis_min_24g_init
+0x4640 mem_rssi_dis_max_24g_init
+0x4641 mem_rssi_hex_received_max_value_init
+0x4642 mem_rssi_dis_min_ble_init
+0x4643 mem_rssi_dis_max_ble_init
+0x4644 mem_mouse_param_config
+0x4644 mem_lbutton_gpio
+0x4645 mem_mbutton_gpio
+0x4646 mem_rbutton_gpio
+0x4647 mem_bk_button_gpio
+0x4648 mem_fw_button_gpio
+0x4649 mem_dpi_button_gpio
+0x464a mem_whee_a_data_gpio
+0x464b mem_whee_b_data_gpio
+0x464c mem_mouse_sensor_sclk_gpio
+0x464d mem_mouse_sensor_sdio_gpio
+0x464e mem_select_sensor_angle_gpio
+0x464f mem_sensor_angle_default
+0x4650 mem_sensor_angle_switch
+0x4651 mem_config_sensor_dpi
+0x4652 mem_whee_ta_data_gpio
+0x4653 mem_whee_tb_data_gpio
+0x4654 mem_matrix_public_gpio
+0x4655 mem_config_select_device_button_gpio
+0x4656 mem_customer_key_gpio
+0x4657 mem_firebutton_gpio
+0x4658 mem_dpi_another_button_gpio
+0x4659 mem_sensor_motion_gpio
+0x465a mem_device_switch_gpio
+0x465b mem_mouse_reuse_2ice_gpio
+0x465c mem_mouse_logo_led_gpio
+0x465d mem_mouse_1io2led_multi_24gled
+0x465e mem_mouse_1io2led_multi_bt1led
+0x465f mem_mouse_1io2led_multi_bt2led
+0x4660 mem_mouse_low_voltage_alarm_gpio
+0x4661 mem_mouse_dpi_gpio
+0x4662 mem_mouse_param_config_end
+0x4662 mem_wire_usb_interval
+0x4663 mem_usb_addr
+0x4664 mem_mouse_usb_vdd_status
+0x4665 mem_mouse_usb_keyboard_flag
+0x4666 mem_mouse_information_start
+0x4666 mem_device_flag
+0x4667 mem_device1_type
+0x4668 mem_device1_addr
+0x466e mem_device1_locall_addr
+0x4674 mem_device2_type
+0x4675 mem_device2_addr
+0x467b mem_device2_locall_addr
+0x4681 mem_device3_type
+0x4682 mem_device3_addr
+0x4688 mem_device3_locall_addr
+0x468e mem_store_flag
+0x4690 mem_mouse_dpi
+0x4691 mem_mouse_24g_addr
+0x4695 mem_random_addr_increase_count
+0x4697 mem_mouse_retention
+0x46e6 mem_mouse_information_end
+0x46e6 mem_mouse_compare_addr
+0x46ec mem_flash_base
+0x46ef mem_write_flash_head_temp
+0x46f3 mem_store_information_delay_timer
+0x46f4 mem_store_information_delay_timer_init
+0x46f5 mem_mouse_search_dongle_interval
+0x46f6 mem_mouse_search_dongle_ch
+0x46f7 mem_mouse_search_dongle_count
+0x46f8 mem_mouse_search_dongle_action
+0x46f9 mem_24g_enter_lpm_timer
+0x46fa mem_mouse_24g_enter_lpm_enable
+0x46fb mem_mouse_multi_led_blink_enable
+0x46fc mem_mouse_multi_led_type
+0x46fd mem_mouse_multi_led_state
+0x46fe mem_mouse_multi_led_blink_type//00:rtn	01:24g blink	02:le blink		03:reconn blink 	04:low blink	05:dpi blink
+0x46ff mem_mouse_le_reconn_blink_limit
+0x4700 mem_mouse_multi_led_powon_timer_init//power on time
+0x4701 mem_mouse_multi_led_powon_timer
+0x4702 mem_mouse_multi_24gled_blink_timer_init//24gled blink time
+0x4703 mem_mouse_multi_le_discovery_blink_timer_init//le discovery blink time
+0x4704 mem_mouse_multi_le_reconn_blink_timer_init//le reconn blink time
+0x4705 mem_mouse_dpi_led_blink_timer_init//dpi blink time
+0x4706 mem_mouse_multi_led_blink_timer
+0x4707 mem_mouse_low_led_blink_timer//low blink time
+0x4708 mem_mouse_low_led_blink_half_timer
+0x4709 mem_adc_low_volatage_led_timer_count
+0x470a mem_mouse_multi_24gled_blink_count_init//24g count
+0x470b mem_mouse_multi_le_reconn_blink_count_init//le reconn count
+0x470c mem_mouse_multi_led_blink_count
+0x470d mem_mouse_multi_lowled_blink_count_init//low count
+0x470e mem_mouse_multi_low_led_blink_count
+0x470f mem_mouse_logo_led_on_time_init
+0x4711 mem_mouse_dpi_led_delay_count
+0x4712 mem_mouse_dpi_led_delay_count_init
+0x4713 mem_mouse_flag
+0x471b mem_device_number
+0x471c mem_mouse_page_to
+0x471e mem_mouse_fast_direct_timeout
+0x471f mem_mouse_fast_page_to
+0x4721 mem_mouse_24g_power_on_fast_conn_timer
+0x4723 mem_mouse_24g_search_dongle_time_init
+0x4725 mem_mouse_no_data_timeout
+0x4727 mem_mouse_commbination_key_bt
+0x4728 mem_mouse_commbination_key_24g
+0x4729 mem_mouse_customer_function
+0x472a mem_customer_key_press
+0x4733 mem_customer_key_release
+0x473c mem_mouse_set_high_impedance_bit_set
+0x473f mem_sensor_shutdown_flag
+0x4740 mem_24g_long_sleep_set_level
+0x4741 mem_tx_power_factory_param
+0x4743 mem_mouse_24g_short_sleep_set_4ms
+0x4746 mem_mouse_24g_long_sleep_set_4ms
+0x4749 mem_mouse_24g_fast_hop_count_4ms
+0x474a mem_mouse_24g_short_sleep_set_8ms
+0x474d mem_mouse_24g_long_sleep_set_8ms
+0x4750 mem_mouse_24g_fast_hop_count_8ms
+0x4751 mem_mouse_24g_tsniff
+0x4755 mem_mouse_24g_tsniff_4ms
+0x4759 mem_mouse_24g_tsniff_8ms
+0x475d mem_mouse_24g_short_sleep_set_init
+0x4760 mem_mouse_24g_tx_count
+0x4761 mem_mouse_24g_tx_time_last
+0x4767 mem_mouse_24g_tx_time_last_delt
+0x476b mem_mouse_24g_tx_time_sum
+0x4770 mem_mouse_24g_tx_time_sum_count
+0x4771 mem_mouse_24g_tx_time_offset
+0x4772 mem_mouse_24g_sleep_miss
+0x4773 mem_mouse_24g_sleep_time_temp
+0x4777 mem_mouse_24g_sleep_miss_temp
+0x477b mem_mouse_sleep_deal_type
+0x477c mem_mouse_24g_long_sleep_flag
+0x477d mem_mouse_long_mult_flag
+0x477e mem_mouse_current_mult_timer
+0x477f mem_reconn_times
+0x4780 mem_reconn_times_init
+0x4781 mem_mouse_no_data_timer
+0x4783 mem_mouse_rssi_signal_buf
+0x478b mem_btclk_sensor
+0x478f mem_mouse_bluetooth_fast_conn_flag
+0x4790 mem_mouse_discovery_timer
+0x4792 mem_mouse_bluetooth_reconnect_timeout
+0x4793 mem_mouse_need_soft_reset
+0x4794 mem_mouse_le_bb_connected_flag
+0x4795 mem_mouse_le_reconnect_flag
+0x4796 mem_mouse_send_secutiry_request_timer
+0x4797 mem_mouse_le_lap_temp
+0x479a mem_le_adv_ind
+0x479d mem_le_adv_direct_ind
+0x47a0 mem_le_adv_swift_pair
+0x47b4 mem_le_data_len
+0x47b5 mem_le_keyboard_handle
+0x47b7 mem_le_multimedia_handle
+0x47b9 mem_le_systemctrl_handle
+0x47bb mem_le_battery_level_handle
+0x47bd mem_le_battery_level_percentage
+0x47be mem_le_battery_level_updata_timer_init
+0x47c0 mem_le_battery_level_updata_timer
+0x47c2 mem_mouse_le_conn_param_reject
+0x47c3 mem_le_tx_buffer0_omemalloc
+0x47e3 mem_le_tx_buffer1_omemalloc
+0x4803 mem_le_tx_buffer2_omemalloc
+0x4823 mem_le_tx_buffer3_omemalloc
+0x4843 mem_le_connect_status_flag
+0x4844 mem_le_start_encrypt_timer
+0x4845 mem_mouse_direct_timer
+0x4846 mem_power_on_flag
+0x4847 mem_mouse_factory_addr
+0x484d mem_keyboard_flag
+0x4855 mem_keyboard_tx_data
+0x485f mem_keyboard_data_send_flag
+0x4860 mem_keyboard_le_send_conn_param_update
+0x4861 mem_keyboard_le_send_conn_param_update_timer
+0x4862 mem_le_start_auto_reco_timer
+0x4863 mem_mcu_stb_gpio
+0x4864 mem_mcu_clk_gpio
+0x4865 mem_mcu_rstb_gpio
+0x4866 mem_keyboard_caps_led_gpio
+0x4867 mem_keyboard_num_led_gpio
+0x4868 mem_keyboard_power_led_gpio
+0x4869 mem_keyboard_caps_led_on_timer
+0x486b mem_keyboard_led_r_gpio
+0x486c mem_keyboard_led_g_gpio
+0x486d mem_keyboard_led_b_gpio
+0x486e mem_key_row_gpio
+0x4876 mem_key_col_gpio
+0x488a mem_key_excol_gpio
+0x4896 mem_kb_row_ptr
+0x4898 mem_kb_col_ptr
+0x489a mem_kb_excol_ptr
+0x489c mem_keyscan_value_current
+0x48b0 mem_keyscan_value_check
+0x48c4 mem_keyscan_value_old
+0x48d8 mem_keyscan_exmcu_value
+0x48e3 mem_keyscan_value_ptr
+0x48e5 mem_keyscan_exmcu_value_ptr
+0x48e7 mem_keyscan_value_temp
+0x48e8 mem_keyscan_col_loop_count
+0x48e9 mem_keyscan_exmcu_wait_wake_count
+0x48eb mem_same_keyvalue_timerout_flag
+0x48ec mem_same_keyvalue_timer_init
+0x48ee mem_same_keyvalue_timer
+0x48f0 mem_keyboard_current_col_press_key_count
+0x48f1 mem_keyboard_all_press_key_count
+0x48f2 mem_keyboard_same_row_press_key_count
+0x48f3 mem_keyboard_ghost_flag
+0x48f4 mem_keyboard_data_change_flag
+0x48f5 mem_keyboard_keyvalue_temp
+0x48f6 mem_keyboard_press_flag_temp
+0x48f7 mem_keyboard_keyvalue_bit_loop_count
+0x48f8 mem_keyboard_keyvalue_buffer
+0x4901 mem_keyboard_keyvalue_map
+0x49a1 mem_keyboard_fn_flag
+0x49a2 mem_keyboard_control_key_flag
+0x49a3 mem_keyboard_bt_button_flag
+0x49a4 mem_keyboard_pairing_type
+0x49a5 mem_keyboard_commbination_key_bt
+0x49a7 mem_keyboard_commbination_key_24g
+0x49a9 mem_24g_repeat_send_flag
+0x49aa mem_keyboard_led_status
+0x49ab mem_keyboard_led_status_get
+0x49ac mem_keyboard_led_status_get_timer
+0x49ad mem_keyboard_led_status_get_timer_last
+0x49ae mem_keyboard_fn_esc_f1_f12
+0x49ae mem_keyboard_fn_first
+0x49af mem_keyboard_fn_esc
+0x49b0 mem_keyboard_fn_f1
+0x49b1 mem_keyboard_fn_f2
+0x49b2 mem_keyboard_fn_f3
+0x49b3 mem_keyboard_fn_f4
+0x49b4 mem_keyboard_fn_f5
+0x49b5 mem_keyboard_fn_f6
+0x49b6 mem_keyboard_fn_f7
+0x49b7 mem_keyboard_fn_f8
+0x49b8 mem_keyboard_fn_f9
+0x49b9 mem_keyboard_fn_f10
+0x49ba mem_keyboard_fn_f11
+0x49bb mem_keyboard_fn_f12
+0x49bc mem_keyboard_fn_del
+0x49bd mem_keyboard_fn_arrow_enable_flag
+0x49be mem_keyboard_fn_left_ctrl_enable_flag
+0x49bf mem_keyboard_fn_space_enable_flag
+0x49c0 mem_keyboard_fn_system_switch_enable_flag
+0x49c1 mem_keyboard_commbination_key_step
+0x49c2 mem_keyboard_commbination_control_key_value
+0x49c3 mem_keyboard_commbination_standard_key_value
+0x49c4 mem_keyboard_commbination_control_key_delay_release_timer
+0x49c5 mem_keyboard_consumer_key_status
+0x49c6 mem_kb_computer_system
+0x49c7 mem_otp_read_retention_memory
+0x49df mem_otp_read_retention_offset
+0x49e1 mem_le_search_service_uuid
+0x49f1 mem_le_connect_ios_mac_flag
+0x49f2 mem_le_search_mac_uuid
+0x49f4 mem_le_search_mac_manu_name
+0x49fd mem_keybord_appearance
+0x49ff mem_keyboard_commbination_fast_conn_bt
+0x4846 mem_mouse_key
+0x4847 mem_mouse_x
+0x4849 mem_mouse_y
+0x484b mem_mouse_z
+0x484c mem_mouse_tz
+0x484d mem_mouse_xy_h
+0x484e mem_mouse_key_last
+0x484f mem_wheel_tb_old_pinlevel
+0x4850 mem_wheel_tb_new_pinlevel
+0x4851 mem_wheel_tog
+0x4852 mem_mouse_tz_data
+0x4853 mem_mwheel_b_old_pinlevel
+0x4854 mem_mwheel_b_new_pinlevel
+0x4855 mem_mwheel_tog
+0x4856 mem_mouse_z_data
+0x4857 mem_mouse_wheel_trigger
+0x4858 mem_mouse_wheel_trigger_timer
+0x4859 mem_sensor_id1
+0x485a mem_sensor_id2
+0x485b mem_sensor_shutter_hi
+0x485c mem_sensor_shutter_lo
+0x485d mem_sensor_smart_flag
+0x485e mem_sensor_squal_reg
+0x485f mem_sensor_iqc
+0x4860 mem_mouse_move_flag
+0x4861 mem_mouse_asm_flag
+0x4862 mem_mouse_x_pre
+0x4864 mem_mouse_y_pre
+0x4866 mem_mouse_data_xtemp
+0x4867 mem_mouse_data_ytemp
+0x4868 mem_mouse_dpi_seting
+0x4868 mem_320x_dpi_0
+0x4869 mem_320x_dpi_1
+0x486a mem_320x_dpi_2
+0x486b mem_320x_dpi_3
+0x486c mem_3212_dpi_0
+0x486d mem_3212_dpi_1
+0x486e mem_3212_dpi_2
+0x486f mem_3212_dpi_3
+0x4870 mem_ka8g2_dpi_0
+0x4871 mem_ka8g2_dpi_1
+0x4872 mem_ka8g2_dpi_2
+0x4873 mem_ka8g2_dpi_3
+0x4874 mem_sensor_s201_dpi
+0x4874 mem_sensor_s201_dpi_0
+0x4875 mem_sensor_s201_dpi_1
+0x4876 mem_sensor_s201_dpi_2
+0x4877 mem_sensor_s201_dpi_3
+0x4878 mem_sensor_s201_dpi_4
+0x4879 mem_mouse_cpi_count
+0x487a mem_mouse_dpi_button_state
+0x487b mem_mouse_dpi_long_press_flag
+0x487c mem_sensor_3212_init
+0x4886 mem_sensor_3204_init
+0x4890 mem_sensor_3205_init
+0x489a mem_sensor_32xx_init
+0x48b4 mem_sensor_32xx_init_1
+0x48d6 mem_sensor_8650_init
+0x48fc mem_sensor_ka8ul_init
+0x491a mem_sensor_8009_init
+0x492a mem_sensor_ka8g2_init
+0x493a mem_sensor_p6520_init
+0x4946 mem_sensor_poweron_init
+0x494e mem_sensor_ka8g2_poweron_init
+0x4956 mem_mouse_clear_sensor_data_flag
+0x4957 mem_config_sensor_type
+0x4958 mem_config_sensor_angle
+0x4959 mem_bluetooth_125hz_cnt
+0x495a mem_device_addr_temp
+0x4961 mem_mouse_bt_boot_mode
+0x4962 mem_mouse_bt_boot_data
+0x4967 mem_bt_send_max_slot_req_accept_after_switch
+0x4968 mem_mouse_bt_send_first_package_timer
+0x4969 mem_mouse_bt_send_first_package_flag
+0x496a mem_lmi_opcode_temp
+0x496b mem_lpm_mult_init
+0x496c mem_customer_key
+0x496d mem_customer_data_trigger
+0x496e mem_customer_data_trigger_last
+0x496f mem_mouse_lkey_press_status
+0x4970 mem_mouse_rkey_press_status
+0x4971 mem_mouse_mkey_press_status
+0x4972 mem_mouse_bkkey_press_status
+0x4973 mem_mouse_fwkey_press_status
+0x4974 mem_mouse_dpikey_press_status
+0x4975 mem_mouse_pbkey_press_status
+0x4976 mem_mouse_customerkey_press_status
+0x4977 mem_mouse_key_temp
+0x4978 mem_mouse_key_status
+0x4979 mem_mouse_matrix_key_cow_count
+0x497a mem_mouse_matrix_key_row_count
+0x497b mem_mouse_ghost_flag
+0x497c mem_bt_discovery_count
+0x497d mem_select_device_count
+0x497e mem_mouse_commbination_key
+0x497f mem_select_device_button_statue
+0x4980 mem_commbination_key_statue
+0x4981 mem_combination_ui_button_count
+0x4982 mem_fire_key_status
+0x4983 mem_fire_key_delay
+0x4987 mem_fire_key_flag
+0x4988 mem_dpi_another_press_status
+0x4989 mem_dpi_another_button_state
+0x498a mem_dpi_another_button_down_enable
+0x498b mem_mouse_key_temp_patch
+0x498c mem_le_name_patch_len
+0x498d mem_le_name_patch
+0x49a0 mem_device_flag_last
+0x49a1 mem_device_flag_temp
+0x49a2 mem_device_flag_value
+0x49a3 mem_mouse_le_addr1_last
+0x49a9 mem_mouse_le_addr1_temp
+0x49af mem_mouse_le_locall_addr1_last
+0x49b5 mem_mouse_le_locall_addr1_temp
+0x49bb mem_mouse_le_addr2_last
+0x49c1 mem_mouse_le_addr2_temp
+0x49c7 mem_mouse_le_locall_addr2_last
+0x49cd mem_mouse_le_locall_addr2_temp
+0x49d3 mem_mouse_dpi_last
+0x49d4 mem_mouse_dpi_temp
+0x49d5 mem_mouse_otp_dpi_value
+0x49d6 mem_mouse_24g_addr_last
+0x49da mem_mouse_24g_addr_temp
+0x49de mem_random_addr_increase_count_last
+0x49e0 mem_random_addr_increase_count_temp
+0x49e2 mem_otp_offset_device_flag
+0x49e4 mem_otp_offset_device_flag_end
+0x49e6 mem_otp_offset_24g_addr
+0x49e8 mem_otp_offset_24g_addr_end
+0x49ea mem_otp_offset_le_addr1
+0x49ec mem_otp_offset_le_addr1_end
+0x49ee mem_otp_offset_le_locall_addr1
+0x49f0 mem_otp_offset_le_locall_addr1_end
+0x49f2 mem_otp_offset_le_addr2
+0x49f4 mem_otp_offset_le_addr2_end
+0x49f6 mem_otp_offset_le_locall_addr2
+0x49f8 mem_otp_offset_le_locall_addr2_end
+0x49fa mem_otp_offset_dpi
+0x49fc mem_otp_offset_dpi_end
+0x49fe mem_otp_offset_le_addr_increase_count
+0x4a00 mem_otp_offset_le_addr_increase_count_end
+0x4a02 mem_otp_offset_app_initflag
+0x4a04 mem_24g_txpayload_buf
+0x4a14 mem_release_data_from_receiver_enable
+0x4a15 mem_release_data_from_transmiter_enable
+0x4a16 mem_flippen_key0_gpio
+0x4a17 mem_flippen_key1_gpio
+0x4a18 mem_flippen_key2_gpio
+0x4a19 mem_flippen_key3_gpio
+0x4a1a mem_flippen_key4_gpio
+0x4a1b mem_flippen_key5_gpio
+0x4a1c mem_flippen_key6_gpio
+0x4a1d mem_flippen_key7_gpio
+0x4a1e mem_flippen_key0_press_status
+0x4a1f mem_flippen_key1_press_status
+0x4a20 mem_flippen_key2_press_status
+0x4a21 mem_flippen_key3_press_status
+0x4a22 mem_flippen_key4_press_status
+0x4a23 mem_flippen_key5_press_status
+0x4a24 mem_flippen_key6_press_status
+0x4a25 mem_flippen_key7_press_status
+0x4a26 mem_key_press_data
+0x4a26 mem_key_pageup_data
+0x4a2f mem_key_pagedown_data
+0x4a38 mem_key_shift_f5_data
+0x4a41 mem_key_esc_data
+0x4a4a mem_key_b_data
+0x4a53 mem_key_tab
+0x4a5c mem_key_enter
+0x4a65 mem_key_alt_tab
+0x4a6e mem_key_alt_f4
+0x4a77 mem_key_play_pause
+0x4a80 mem_key_vol_up
+0x4a89 mem_key_vol_down
+0x4a92 mem_standard_key_release
+0x4a9b mem_system_ctrl_key_release
+0x4aa4 mem_media_key_release
+0x4aad mem_key0_long_press_flag
+0x4aae mem_key1_long_press_flag
+0x4aaf mem_key2_long_press_flag
+0x4ab0 mem_key3_long_press_flag
+0x4ab1 mem_key4_long_press_flag
+0x4ab2 mem_key0_long_press_event
+0x4ab3 mem_key1_long_press_event
+0x4ab4 mem_key2_long_press_event
+0x4ab5 mem_key3_long_press_event
+0x4ab6 mem_key4_long_press_event
+0x4ab7 mem_key0_short_press_flag
+0x4ab8 mem_key1_short_press_flag
+0x4ab9 mem_key2_short_press_flag
+0x4aba mem_key3_short_press_flag
+0x4abb mem_key4_short_press_flag
+0x4abc mem_key0_press_timer_count
+0x4abd mem_key1_press_timer_count
+0x4abe mem_key2_press_timer_count
+0x4abf mem_key3_press_timer_count
+0x4ac0 mem_key4_press_timer_count
+0x4ac1 mem_combination_key_down_flag
+0x4ac2 mem_combination_key_longpress_flag
+0x4ac3 mem_key_disable_timer
+0x4ac4 mem_24g_calculate_package_id_disable
+0x4ac5 mem_24g_package_id_abandon_flag
+0x4ac6 mem_24g_package_id
+0x4ac7 mem_key_state
+0x4ac8 mem_key_press_state
+0x4ac9 mem_poweron_first_blank_data_enable
+0x4aca mem_flippen_no_data_timeout
+0x4acc mem_flippen_start_pair_no_data_timeout
+0x4ace mem_key_longpress_timer_init
+0x4ad0 mem_key_longpress_timer
+0x4ad2 mem_low_voltage_led_blink_flag
+0x4ad3 mem_low_voltage_led_blink_start_timer
+0x4ad4 mem_poweron_led_blink_flag
+0x4ad5 mem_24g_pair_enable_flag
+0x4ad6 mem_24g_ch_work
+0x4ad7 mem_24g_pair_key_down_flag
+0x4ad8 mem_24g_pairing_stop_flag
+0x4ad9 mem_longpress_24g_enter_hibernate_flag
+0x4ada mem_g24_connected_state
+0x4adb mem_g24_pairing_stop_flag
+0x4adc mem_send_package_before_check
+0x462d mem_remote_car_hard_soft_switch
+0x462e mem_remote_car_queue_each_size
+0x462f mem_remote_car_queue_length
+0x4630 mem_remote_car_queue_curr_num
+0x4631 mem_remote_car_queue_read_ptr
+0x4632 mem_remote_car_queue_write_ptr
+0x4633 mem_remote_car_queue_ele
+0x468d mem_remote_style_led_type
+0x468e mem_remote_style_blink_count
+0x468f mem_remote_style_struct_led_gpio
+0x4690 mem_remote_style_on_time
+0x4692 mem_remote_style_off_time
+0x4694 mem_remote_style_cb_ledon
+0x4696 mem_remote_style_cb_ledoff
+0x4698 mem_remote_car_led_num
+0x4699 mem_remote_car_led_map
+0x46a1 mem_remote_car_keyscan
+0x46a1 mem_remote_car_key_num
+0x46a2 mem_cb_remote_car_keyscan
+0x46a4 mem_remote_car_key_conf0
+0x46a4 mem_remote_car_key_conf0_pin
+0x46a5 mem_remote_car_key_conf1
+0x46a5 mem_remote_car_key_conf1_pin
+0x46a6 mem_remote_car_key_conf2
+0x46a6 mem_remote_car_key_conf2_pin
+0x46a7 mem_remote_car_key_conf3
+0x46a7 mem_remote_car_key_conf3_pin
+0x46a8 mem_remote_car_key_conf4
+0x46a8 mem_remote_car_key_conf4_pin
+0x46a9 mem_remote_car_key_conf5
+0x46a9 mem_remote_car_key_conf5_pin
+0x46aa mem_remote_car_key_conf6
+0x46aa mem_remote_car_key_conf6_pin
+0x46ab mem_rocker_negative_flag
+0x46ac mem_rocker_work_status
+0x46ad mem_current_vdd_value_default_mid_x
+0x46af mem_current_vdd_value_default_mid_y
+0x46b1 mem_current_vdd_value_default_mid_temp
+0x46b3 mem_current_vdd_default_range
+0x46b5 mem_rocker_last_status
+0x46b7 mem_rocker_status
+0x46b7 mem_rocker_x_status
+0x46b8 mem_rocker_y_status
+0x46b9 mem_remote_car_config_param
+0x46b9 mem_remote_car_config_setting_flag
+0x46ba mem_remote_car_config_key_map
+0x46bb mem_remote_car_config_layout
+0x46bc mem_remote_car_config_connect_led_gpio
+0x46bd mem_remote_car_config_check_way
+0x46be mem_remote_car_config_soft_switch_enable
+0x46bf mem_remote_car_config_soft_switch_gpio
+0x46c0 mem_remote_car_config_timeout_shutdown_enable
+0x46c1 mem_remote_car_24g_motor_packet
+0x46c1 mem_remote_car_24g_motor_packet_lenght
+0x46c2 mem_remote_car_24g_motor_send_packet_head
+0x46c4 mem_remote_car_24g_motor_send_cmd
+0x46c5 mem_remote_car_24g_motor_send_length
+0x46c7 mem_remote_car_24g_motor_send_payload
+0x46c7 mem_remote_car_24g_motor1_payload
+0x46c9 mem_remote_car_24g_motor2_payload
+0x46cb mem_remote_car_24g_motor3_payload
+0x46cd mem_remote_car_24g_motor_send_checksum
+0x46ce mem_remote_car_24g_fire_packet
+0x46ce mem_remote_car_24g_fire_packet_lenght
+0x46cf mem_remote_car_24g_fire_send_packet_head
+0x46d1 mem_remote_car_24g_fire_send_cmd
+0x46d2 mem_remote_car_24g_fire_send_length
+0x46d4 mem_remote_car_24g_fire_send_payload
+0x46d6 mem_remote_car_24g_fire_send_checksum
+0x46d7 mem_remote_car_24g_tx_temp
+0x46e6 mem_remote_car_no_data_timeout
+0x46e8 mem_remote_car_no_data_timer
+0x46ea mem_remote_car_soft_power
+0x46ea mem_remote_car_power_state
+0x46eb mem_remote_car_power_timer
+0x46ec mem_remote_car_power_off_timeout
+0x46ed mem_remote_car_power_starting_timeout
+0x46ee mem_remote_car_power_off_cb
+0x46f0 mem_remote_car_power_starting_cb
+0x46f2 mem_remote_car_power_standby_cb
+0x46f4 mem_remote_key_status
+0x46f5 mem_remote_car_24g_status
+0x46f6 mem_remote_car_24g_auto_work_step
+0x46f7 mem_remote_car_24g_pair_success_flag
+0x46f8 mem_remote_car_empty_packet
+0x46f9 mem_remote_car_motor1_key0_press_state
+0x46fa mem_remote_car_motor1_key1_press_state
+0x46fb mem_remote_car_motor2_key2_press_state
+0x46fc mem_remote_car_motor2_key3_press_state
+0x46fd mem_remote_car_motor1_rel_state
+0x46fe mem_remote_car_motor2_rel_state
+0x46ff mem_remote_car_no_data_check
+0x4700 mem_remote_24g_commom_addr
+0x4704 mem_remote_24g_commom_addr_temp
+0x4708 mem_remote_24g_commom_addr_read
+0x470c mem_remote_save_addr_flag
+0x44f1 mem_hci_uart_tx_gpio
+0x44f2 mem_hci_uart_rx_gpio
+0x44f3 mem_hci_uart_rts_gpio
+0x44f4 mem_hci_uart_cts_gpio
+0x44f5 mem_hci_pwm_12mhz_gpio
+0x44f1 mem_soft_version_num
+0x44f3 mem_module_wake_up_gpio
+0x44f4 mem_module_state_gpio
+0x44f5 mem_module_connect_state_gpio
+0x44f6 mem_current_packet_length
+0x44f8 mem_module_state
+0x44f9 mem_module_mcu_wake_pin
+0x44fa mem_module_mcu_wake_delay_us
+0x44fe mem_module_le_lpm_mult
+0x44ff mem_module_bluetooth_stauts_by_command
+0x4500 mem_module_uart_rx_buffer
+0x4502 mem_module_uart_rx_buffer_end
+0x4504 mem_module_uart_tx_buffer
+0x4506 mem_module_uart_tx_buffer_end
+0x4508 mem_module_uarta_baud_rate
+0x450a mem_module_read_vdd_flag
+0x450b mem_module_read_vdd_count
+0x450c mem_module_vdd_quotient
+0x450d mem_module_vdd_remainder
+0x450e mem_module_ble_data_uart_max_length
+0x450f mem_module_flag
+0x4511 mem_module_hci_notify_len
+0x4512 mem_module_hci_notify_handle
+0x4514 mem_module_hci_nofiy_addr
+0x4516 mem_module_hci_notify_type
+0x4517 mem_le_conn_flag
+0x4518 mem_module_le_att_list
+0x4770 mem_module_le_att_list_end
+0x4770 mem_module_nv_data
+0x4770 mem_module_nv_data0
+0x4792 mem_module_nv_data1
+0x47b4 mem_module_nv_data2
+0x47d6 mem_module_nv_data3
+0x47f8 mem_module_nv_data4
+0x481a mem_module_nv_data_end
+0x44f1 mem_ble_shutter_enable_notify
+0x44f2 mem_ble_shutter_reconn_adv_interval
+0x44f4 mem_ble_shutter_discovery_adv_interval
+0x44f6 mem_ble_shutter_reconn_timeout
+0x44f8 mem_ble_shutter_reconn_timer
+0x44fa mem_ble_shutter_reconn_blink_on_time
+0x44fc mem_ble_shutter_reconn_blink_off_time
+0x44fe mem_ble_shutter_discovery_blink_on_time
+0x4500 mem_ble_shutter_discovery_blink_off_time
+0x4502 mem_ble_shutter_interval_min
+0x4504 mem_ble_shutter_interval_max
+0x4506 mem_ble_shutter_latency
+0x4508 mem_ble_shutter_timeout
+0x450a mem_ble_shutter_interval_min_new
+0x450c mem_ble_shutter_interval_max_new
+0x450e mem_ble_shutter_latency_new
+0x4510 mem_ble_shutter_timeout_new
+0x4512 mem_ble_shutter_discovery_timeout
+0x4514 mem_ble_shutter_connect_timeout
+0x4516 mem_shutter_sleep_timeout
+0x4518 mem_shutter_sleep_timer
+0x451a mem_shutter_hard_soft_switch_case
+0x451b mem_shutter_soft_switch_button_gpio
+0x451c mem_shutter_soft_switch_power_state
+0x451d mem_shutter_soft_switch_poweron_time
+0x451e mem_shutter_soft_switch_poweroff_time
+0x451f mem_shutter_soft_switch_poweron_callback_function
+0x4521 mem_shutter_soft_switch_poweroff_callback_function
+0x4523 mem_shutter_keyscan
+0x4523 mem_shutter_key_num
+0x4524 mem_cb_shutter_keycan
+0x4526 mem_shutter_key_conf0
+0x4527 mem_shutter_key_conf1
+0x4528 mem_shutter_key_conf2
+0x4529 mem_shutter_key_conf3
+0x452a mem_shutter_key_conf4
+0x452b mem_shutter_key_conf5
+0x452c mem_shutter_key_conf6
+0x452d mem_shutter_key_conf7
+0x452e mem_key0_press
+0x4533 mem_key1_press
+0x4538 mem_key2_press
+0x453d mem_key3_press
+0x4542 mem_key4_press
+0x4547 mem_key5_press
+0x454c mem_key6_press
+0x4551 mem_key7_press
+0x4556 mem_key0_release
+0x455b mem_key1_release
+0x4560 mem_key2_release
+0x4565 mem_key3_release
+0x456a mem_key4_release
+0x456f mem_key5_release
+0x4574 mem_key6_release
+0x4579 mem_key7_release
+0x457e mem_ble_data_buffer1
+0x4583 mem_ble_data_buffer2
+0x4588 mem_ble_data_buffer3
+0x458d mem_ble_data_buffer4
+0x4592 mem_ble_data_buffer5
+0x4597 mem_ble_data_buffer6
+0x459c mem_ble_data_buffer7
+0x45a1 mem_ble_data_buffer8
+0x45a6 mem_ble_data_buffer9_58
+0x45d8 mem_queue_each_size
+0x45d9 mem_queue_length
+0x45da mem_queue_curr_num
+0x45db mem_queue_read_ptr
+0x45dc mem_queue_write_ptr
+0x45dd mem_queue_ele
+0x45fd mem_shutter_nv_data
+0x46a7 mem_shutter_led_struct_app_led
+0x46a7 mem_shutter_led_struct_app_led_type
+0x46a8 mem_shutter_led_struct_app_led_blink_count
+0x46a9 mem_shutter_led_struct_app_led_gpio
+0x46aa mem_shutter_led_struct_app_led_on_time
+0x46ac mem_shutter_led_struct_app_led_off_time
+0x46ae mem_shutter_led_struct_app_led_on_callback
+0x46b0 mem_shutter_led_struct_app_led_off_callback
+0x46b2 mem_shutter_power_off_led_style
+0x46b2 mem_shutter_power_off_led_style_type
+0x46b3 mem_shutter_power_off_led_style_blink_count
+0x46b4 mem_shutter_power_off_led_style_gpio
+0x46b5 mem_shutter_power_off_led_style_on_time
+0x46b7 mem_shutter_power_off_led_style_off_time
+0x46b9 mem_shutter_power_off_led_style_on_callback
+0x46bb mem_shutter_power_off_led_style_off_callback
+0x46bd mem_shutter_soft_swtich_botton_down
+0x46be mem_shutter_soft_swtich_led_struct_temp
+0x46c9 mem_shutter_power_off_timeout
+0x46ca mem_shutter_power_off_timer
+0x46cb mem_shutter_key_conf0_temp
+0x46cd mem_shutter_led_struct_app_led_gpio_temp
+0x46ce mem_shutter_hard_soft_switch_case_temp
+0x46cf mem_shutter_soft_switch_button_gpio_temp
+0x46d0 mem_shutter_soft_switch_first_power_on
+0x46d1 mem_shutter_dy_conf
+0x46d2 mem_shutter_le_uuid_sup
+0x4876 mem_shutter_key_value_list
+0x489e mem_shutter_discovery_time_conf
+0x48a6 mem_shutter_reconn_or_discovery_blink_time_conf
+0x48ae mem_shutter_1s_timer
+0x48af mem_shutter_timer_625us
+0x48b1 mem_rf_init_data_new
+0x48bc mem_key_value_xmem
+0x48be mem_shutter_le_hid_map
+0x49e0 mem_shutter_le_map_len_android
+0x49e2 mem_shutter_le_map_len_ios
+0x49e4 mem_dy_le_search_service_uuid
+0x49f4 mem_iphone_flag
+0x49f5 mem_send_data_delay
+0x49f6 mem_key_send_clk
+0x49fa mem_shutter_key_state0
+0x4a04 mem_shutter_key_state1
+0x4a0e mem_shutter_key_state2
+0x4a18 mem_shutter_key_state3
+0x4a22 mem_shutter_key_state4
+0x4a2c mem_shutter_key_state5
+0x4a36 mem_shutter_key_state6
+0x4a40 mem_key0_release_new
+0x4a4f mem_key1_release_new
+0x4a5e mem_key2_release_new
+0x4a6d mem_key3_release_new
+0x4a7c mem_key4_release_new
+0x4a8b mem_key5_release_new
+0x4a9a mem_key6_release_new
+0x4aa9 mem_key0_long_press
+0x4aac mem_key1_long_press
+0x4aaf mem_key2_long_press
+0x4ab2 mem_key3_long_press
+0x4ab5 mem_key4_long_press
+0x4ab8 mem_key5_long_press
+0x4abb mem_key6_long_press
+0x4abe mem_key0_long_release
+0x4ac1 mem_key1_long_release
+0x4ac4 mem_key2_long_release
+0x4ac7 mem_key3_long_release
+0x4aca mem_key4_long_release
+0x4acd mem_key5_long_release
+0x4ad0 mem_key6_long_release
+0x4ad3 mem_combine_key0
+0x4ad5 mem_combine_key1
+0x4ad7 mem_combine_key2
+0x4ad9 mem_combine_key3
+0x4adb mem_combine_key4
+0x4add mem_combine_key5
+0x4adf mem_combine_key_state0
+0x4ae1 mem_combine_key0_press
+0x4aeb mem_combine_key1_press
+0x4af5 mem_combine_key2_press
+0x4aff mem_combine_key3_press
+0x4b09 mem_combine_key4_press
+0x4b13 mem_combine_key5_press
+0x4b1d mem_combine_key_release
+0x4b27 mem_shutter_move_data
+0x4b2b mem_key0_press_i
+0x4b35 mem_key1_press_i
+0x4b3f mem_key2_press_i
+0x4b49 mem_key3_press_i
+0x4b53 mem_key4_press_i
+0x4b5d mem_key5_press_i
+0x4b67 mem_key0_release_new_i
+0x4b76 mem_key1_release_new_i
+0x4b85 mem_key2_release_new_i
+0x4b94 mem_key3_release_new_i
+0x4ba3 mem_key4_release_new_i
+0x4bb2 mem_key5_release_new_i
+0x4bc1 mem_key6_release_new_i
+0x4bd0 mem_key0_long_press_i
+0x4bd3 mem_key1_long_press_i
+0x4bd6 mem_key2_long_press_i
+0x4bd9 mem_key3_long_press_i
+0x4bdc mem_key4_long_press_i
+0x4bdf mem_key5_long_press_i
+0x4be2 mem_key6_long_press_i
+0x4be5 mem_key0_long_release_i
+0x4be8 mem_key1_long_release_i
+0x4beb mem_key2_long_release_i
+0x4bee mem_key3_long_release_i
+0x4bf1 mem_key4_long_release_i
+0x4bf4 mem_key5_long_release_i
+0x4bf7 mem_key6_long_release_i
+0x4bfa mem_key3_release_new_t
+0x4c04 mem_key3_release_new_i_t
+0x4c0e mem_key3_press_count
+0x4c0f mem_shutter_like_timeout
+0x4c10 mem_shutter_key_pressed
+0x4c11 mem_shutter_combine_key_release
+0x4c12 mem_shutter_mousekey_value_list
+0x4eba mem_shutter_back_count
+0x4ebb mem_shutter_le_conned
+0x4ebc mem_move_config
+0x4ebc mem_shutter_iphone_beyond_x_count
+0x4ebd mem_shutter_iphone_beyond_y_count
+0x4ebe mem_shutter_move_data_x
+0x4ec0 mem_shutter_move_data_y
+0x4ec2 mem_last_shutter_le_iphone_flag
+0x4ec3 mem_move_config_end
+0x4ec3 mem_shutter_back_count_cache
+0x4ec4 mem_shutter_iphone_beyond_x_cache
+0x4ec5 mem_shutter_iphone_beyond_y_cache
+0x4ec6 mem_shutter_iphone_move_mid
+0x4ed0 mem_shutter_long_key_released_flag
+0x4ed1 mem_shutter_move_mid_timer
+0x4ed2 mem_shutter_pairing_success
+0x4ed3 mem_combine_key_release_value
+0x4ed5 mem_last_press_key_value
+0x4ed6 mem_shutter_first_move
+0x4ed7 mem_move_mode_set
+0x4ed8 mem_move_mode_key_index
+0x4ed9 mem_move_mode_trigger_enable
+0x4eda mem_shutter_android_move_mid
+0x4edf mem_shutter_iphone_up_mid
+0x4ee9 mem_shutter_iphone_like_mid
+0x4ef3 mem_shutter_key_num_conf
+0x4ef4 mem_shutter_dy_key_conf
+0x4efb mem_le_dy_adv_data
+0x4f06 mem_le_dy_scan_data
+0x4f12 mem_ble_shutter_dy_interval_min_new
+0x4f1a mem_shutter_ble_discovery_time_conf
+0x4f22 mem_queue_dy_each_size
+0x4f24 mem_dy_key0_press
+0x4f2e mem_dy_key1_press
+0x4f38 mem_dy_key2_press
+0x4f42 mem_dy_key3_press
+0x4f4c mem_dy_key4_press
+0x4f56 mem_dy_key5_press
+0x4f60 mem_dy_key6_press
+0x4f6a mem_shutter_led_on_light_dark_led_conf
+0x4f71 mem_shutter_led_off_light_dark_led_conf
+0x4f78 mem_shutter_reconn_blink_on_time_conf
+0x4f7c mem_shutter_discovery_blink_on_time_conf
+0x4f80 mem_shutter_efuse_start_offset
+0x4f82 mem_shutter_efuse_end_offset
+0x4f84 mem_initial_move_conf
+0x4f84 mem_android_initial_move_x
+0x4f86 mem_android_initial_move_y
+0x4f88 mem_iphone_initial_move_x
+0x4f8a mem_iphone_initial_move_y
+0x4f8c mem_otp_move_config
+0x4f8c mem_otp_shutter_move_data_x
+0x4f8e mem_otp_shutter_move_data_y
+0x4f90 mem_otp_last_shutter_le_iphone_flag
+0x4f91 mem_otp_move_config_end
+0x4f91 mem_otp_write_offset_addr
+0x4f93 mem_otp_read_offset_addr
+0x4f95 mem_otp_read_ios_android_addr
+0x4f97 mem_shutter_le_pairing_handle
+0x4f99 mem_shutter_temp_count
+0x4f9b mem_shutter_first_read_flag
+0x4f9c mem_shutter_valid_data_flag
+0x4f9d mem_shutter_volume_timer
+0x4f9e mem_shutter_link_timer
+0x4f9f mem_shutter_link_data
+0x4fa7 mem_shutter_link_data_i
+0x4faf mem_shutter_link_loop_flag
+0x4fb0 mem_shutter_end
+
+0x45ed mem_mesh_vendor_timer_timing_index_cyclic
+0x45ee mem_mesh_vendor_timer_timing_time_cyclic
+0x45f0 mem_mesh_vendor_timer_timing_zone_cyclic
+0x45f2 mem_mesh_vendor_timer_timing_weekdays_cyclic
+0x45f3 mem_mesh_vendor_timer_timing_attr_type_cyclic
+0x45f5 mem_mesh_vendor_timer_timing_attr_para_len_cyclic
+0x45f6 mem_mesh_vendor_timer_timing_attr_para_cyclic
+0x45fe mem_mesh_vendor_timer_timing_cyclic_flag
+0x45ed mem_mesh_vendor_timer_timing_index
+0x45ee mem_mesh_vendor_timer_timing_time
+0x45f2 mem_mesh_vendor_timer_timing_attr_type
+0x45f4 mem_mesh_vendor_timer_timing_attr_para_len
+0x45f5 mem_mesh_vendor_timer_timing_attr_para
+0x45fd mem_mesh_vendor_timer_timing_flag
+0x4806 mem_mesh_fast_pairing_timer
+0x49a1 mem_mesh_filter_status_message_opcode
+0x49a2 mem_mesh_filter_status_message_FilterType
+0x49a3 mem_mesh_filter_status_message_ListSize
+0x49a5 mem_mesh_filter_status_message_MIC
+0x49a1 mem_mesh_unsegmented_access_lower_transport_layer_head
+0x49a2 mem_mesh_unsegmented_access_lower_transport_layer_parameters
+0x49ad mem_mesh_unsegmented_access_lower_transport_layer_mic
+0x49a1 mem_mesh_segmented_access_lower_transport_layer_head
+0x49a2 mem_mesh_segmented_access_lower_transport_layer_SZMIC_SeqZero_SegO_SegN
+0x49a5 mem_mesh_segmented_access_lower_transport_layer_parameters
+0x49ad mem_mesh_segmented_access_lower_transport_layer_mic
+0x475e mem_k2_EncryptionKey
+0x474e mem_k2_PrivacyKey
Index: usb_pc_ai_voice/output/otp.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/output/otp.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/output/otp.dat	(working copy)
@@ -0,0 +1,4460 @@
+0b
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+aa
+55
+c2
+0e
+c2
+84
+00
+17
+c0
+00
+00
+29
+c0
+01
+00
+2f
+c0
+08
+80
+38
+c0
+0a
+01
+e5
+c0
+0a
+80
+dc
+c0
+0c
+00
+ea
+c0
+0c
+80
+96
+c0
+0d
+00
+52
+c0
+0e
+00
+41
+c0
+1b
+82
+a2
+c0
+1c
+00
+af
+c0
+1c
+80
+ab
+c0
+1e
+82
+9f
+c0
+1f
+03
+4a
+c0
+58
+82
+b9
+c0
+62
+80
+a8
+c0
+6d
+01
+b6
+c0
+6e
+01
+c6
+c0
+7e
+82
+40
+c0
+7f
+02
+2b
+c0
+7f
+80
+f4
+20
+20
+23
+5a
+c0
+00
+01
+0f
+c0
+01
+02
+01
+c0
+03
+01
+72
+c0
+37
+03
+10
+c0
+37
+82
+ab
+c0
+39
+03
+05
+c0
+39
+82
+f0
+c0
+3a
+83
+1f
+c0
+3f
+02
+b5
+c0
+40
+83
+2f
+c0
+41
+02
+4f
+c0
+42
+03
+70
+c0
+42
+83
+74
+c0
+44
+02
+87
+c0
+45
+02
+94
+c0
+45
+82
+44
+c1
+7f
+80
+00
+20
+20
+23
+5a
+20
+80
+00
+00
+37
+d9
+82
+00
+6f
+e0
+c0
+cb
+20
+40
+23
+e1
+20
+00
+75
+30
+20
+20
+20
+03
+20
+40
+75
+52
+20
+40
+74
+48
+20
+40
+2a
+45
+20
+40
+20
+2a
+20
+40
+42
+ad
+20
+40
+20
+18
+20
+40
+31
+0f
+20
+40
+24
+8c
+20
+20
+00
+2f
+70
+8a
+0f
+60
+70
+8a
+10
+aa
+70
+8a
+12
+7a
+70
+8a
+25
+00
+70
+8a
+26
+00
+20
+00
+00
+3c
+70
+8a
+20
+20
+70
+8a
+23
+f5
+20
+20
+21
+69
+70
+8a
+20
+30
+70
+8a
+23
+dd
+20
+40
+21
+d0
+58
+00
+00
+00
+67
+e1
+06
+70
+d8
+40
+3a
+98
+6f
+e1
+06
+70
+1f
+e0
+fe
+01
+67
+e1
+06
+70
+98
+46
+7c
+00
+20
+21
+6c
+a3
+6f
+f0
+8a
+7c
+c3
+00
+00
+47
+20
+20
+22
+9a
+37
+d9
+82
+00
+70
+81
+3c
+58
+20
+20
+23
+e2
+70
+8a
+88
+40
+70
+89
+46
+0d
+70
+89
+6f
+10
+70
+8a
+13
+cd
+70
+8a
+06
+10
+70
+8a
+84
+4a
+70
+8a
+85
+40
+70
+8a
+16
+fe
+20
+40
+00
+b1
+6f
+e0
+c4
+36
+20
+5a
+70
+d7
+24
+55
+80
+4f
+37
+d9
+82
+00
+70
+81
+3b
+5f
+6f
+e0
+c0
+99
+c0
+08
+00
+8b
+6f
+e0
+c4
+38
+1f
+e1
+fe
+04
+67
+f0
+8a
+02
+70
+89
+0f
+01
+70
+8a
+80
+24
+70
+8a
+81
+62
+58
+e6
+12
+12
+67
+f1
+8a
+73
+70
+8a
+86
+60
+70
+8a
+8b
+3b
+20
+40
+00
+7d
+70
+80
+43
+00
+70
+80
+42
+05
+58
+55
+74
+74
+67
+f1
+89
+68
+70
+89
+60
+6e
+20
+40
+01
+88
+20
+40
+01
+b3
+20
+40
+00
+78
+70
+41
+48
+0c
+20
+40
+6f
+4e
+20
+20
+01
+b5
+20
+75
+80
+00
+37
+d9
+82
+00
+6f
+e0
+c1
+1c
+67
+f0
+81
+3a
+20
+20
+23
+e2
+6f
+e0
+c0
+99
+c0
+0c
+00
+83
+6f
+e0
+c4
+38
+1f
+e1
+fe
+06
+67
+f0
+8a
+02
+70
+8a
+05
+e0
+70
+8a
+00
+d8
+20
+00
+00
+3c
+70
+8a
+01
+a0
+70
+8a
+00
+df
+70
+8a
+01
+fa
+20
+00
+00
+14
+70
+8a
+00
+9f
+20
+60
+00
+00
+6f
+e0
+c4
+38
+1f
+e1
+fe
+06
+67
+f0
+8a
+02
+70
+89
+0f
+00
+70
+8a
+80
+23
+70
+8a
+81
+b0
+58
+e4
+09
+09
+67
+f1
+8a
+73
+70
+8a
+76
+2a
+70
+89
+02
+04
+20
+20
+00
+6a
+6f
+e0
+c1
+41
+c0
+03
+22
+25
+c0
+4f
+00
+9c
+c0
+4f
+80
+a0
+c0
+50
+00
+a4
+20
+20
+22
+0e
+70
+8a
+14
+17
+58
+25
+03
+00
+67
+f1
+8a
+60
+20
+20
+22
+1a
+70
+8a
+14
+17
+58
+25
+01
+00
+67
+f1
+8a
+60
+20
+20
+22
+1a
+70
+8a
+14
+17
+58
+25
+00
+00
+67
+f1
+8a
+60
+20
+20
+22
+1a
+20
+40
+6b
+3a
+20
+40
+6b
+75
+20
+20
+6b
+38
+df
+20
+00
+01
+da
+20
+46
+48
+da
+40
+1f
+00
+20
+20
+6b
+45
+da
+40
+1f
+00
+20
+20
+47
+f1
+20
+35
+80
+d8
+6f
+e2
+02
+0d
+20
+7a
+00
+00
+37
+d9
+82
+00
+6f
+f0
+81
+36
+1f
+e1
+7e
+f0
+68
+48
+82
+0d
+98
+41
+fe
+00
+67
+f0
+81
+36
+37
+d9
+82
+00
+6f
+f0
+81
+38
+1f
+e1
+7e
+07
+68
+48
+82
+0e
+18
+49
+84
+00
+98
+41
+fe
+00
+67
+f0
+81
+38
+37
+d9
+82
+00
+6f
+f0
+8a
+cb
+1f
+e1
+7e
+f0
+68
+48
+82
+0f
+60
+48
+c1
+5b
+98
+41
+fe
+00
+67
+f0
+8a
+cb
+6f
+e0
+82
+10
+67
+e0
+c1
+5c
+2f
+ef
+fe
+03
+6f
+f0
+8a
+06
+79
+20
+fe
+07
+67
+f0
+8a
+06
+6f
+e0
+82
+10
+1f
+e1
+04
+07
+18
+52
+04
+00
+18
+43
+84
+00
+60
+48
+c4
+38
+6f
+f0
+8a
+02
+1f
+e1
+7e
+1f
+98
+41
+fe
+00
+67
+f0
+8a
+02
+20
+60
+00
+00
+6f
+e1
+41
+5b
+20
+7a
+00
+00
+67
+e1
+02
+0f
+20
+20
+00
+c2
+20
+40
+68
+6f
+20
+40
+21
+ba
+18
+00
+2a
+08
+18
+00
+2a
+00
+58
+0a
+aa
+da
+67
+f1
+8a
+0f
+70
+8a
+25
+40
+70
+8a
+26
+10
+20
+00
+00
+3c
+70
+8a
+01
+fb
+70
+8a
+25
+ff
+70
+8a
+26
+30
+70
+8a
+16
+fe
+20
+20
+21
+b4
+58
+0a
+aa
+7e
+67
+f1
+8a
+0f
+20
+00
+00
+3c
+70
+8a
+25
+00
+70
+8a
+26
+0d
+70
+8a
+16
+f6
+20
+20
+22
+03
+6f
+f0
+8c
+25
+c3
+83
+00
+00
+20
+20
+79
+93
+6f
+e0
+87
+09
+c4
+02
+80
+00
+20
+40
+79
+89
+28
+41
+fe
+0d
+20
+20
+f9
+99
+6f
+e0
+c6
+96
+c0
+00
+81
+03
+d8
+a0
+08
+6d
+20
+40
+79
+94
+6f
+e0
+87
+0c
+c0
+00
+79
+86
+c0
+00
+f9
+b6
+1f
+e6
+7c
+07
+20
+61
+00
+00
+20
+20
+01
+0f
+d8
+a0
+08
+75
+20
+40
+79
+94
+70
+46
+96
+00
+6f
+e0
+87
+0c
+c0
+00
+81
+0b
+70
+08
+f7
+01
+70
+8c
+1b
+03
+20
+60
+00
+00
+6f
+e0
+88
+6d
+c3
+83
+80
+00
+6f
+e0
+88
+75
+20
+20
+79
+b8
+79
+3f
+80
+23
+6f
+e0
+88
+6d
+1f
+e1
+7e
+80
+c0
+40
+01
+15
+c0
+00
+01
+59
+20
+20
+23
+5a
+6f
+e0
+88
+6d
+1f
+f1
+fe
+00
+1f
+e3
+7e
+00
+1f
+e1
+7e
+03
+c0
+00
+01
+1b
+20
+20
+79
+bf
+6f
+e0
+88
+6e
+c0
+00
+01
+1e
+20
+20
+79
+cb
+6f
+e0
+88
+6b
+c0
+01
+79
+e4
+6f
+e0
+88
+6f
+c0
+80
+79
+e4
+6f
+e0
+88
+70
+c0
+80
+79
+e4
+6f
+e0
+88
+73
+c0
+81
+79
+e4
+6f
+e0
+88
+74
+c0
+80
+79
+e4
+6f
+e0
+88
+72
+c0
+80
+79
+e4
+6f
+e0
+88
+6d
+c0
+41
+01
+2d
+20
+20
+7a
+65
+6f
+e0
+88
+6b
+c0
+82
+79
+e4
+6f
+e0
+88
+71
+c0
+01
+7a
+89
+c0
+01
+fa
+8b
+20
+20
+7a
+7d
+6f
+e0
+88
+6e
+c0
+00
+81
+37
+c0
+01
+81
+4a
+20
+20
+79
+d9
+6f
+e0
+88
+6b
+c0
+82
+79
+e4
+6f
+e0
+88
+73
+c0
+80
+79
+e4
+6f
+e0
+88
+74
+c0
+80
+79
+e4
+6f
+e0
+88
+70
+c0
+80
+79
+e4
+6f
+e0
+88
+72
+c0
+80
+79
+e4
+6f
+e0
+88
+6d
+c0
+01
+01
+44
+20
+20
+7a
+b7
+6f
+e0
+88
+6f
+c0
+80
+79
+e4
+6f
+e0
+88
+71
+c0
+01
+7a
+d7
+c0
+01
+fa
+d9
+20
+20
+7a
+cc
+6f
+e0
+88
+73
+c0
+80
+79
+e4
+6f
+e0
+88
+74
+c0
+80
+79
+e4
+6f
+e0
+88
+6d
+c0
+01
+01
+51
+20
+20
+7a
+e0
+6f
+e0
+88
+6f
+c0
+80
+79
+e4
+6f
+e0
+88
+70
+c0
+80
+79
+e4
+6f
+e0
+88
+71
+c0
+01
+7b
+02
+c0
+01
+fb
+04
+20
+20
+7a
+f8
+6f
+e0
+88
+6d
+1f
+f1
+fe
+00
+1f
+e3
+7e
+00
+1f
+e1
+7e
+03
+c0
+00
+01
+33
+c0
+00
+81
+61
+c0
+01
+79
+e3
+20
+20
+23
+5a
+6f
+e0
+88
+6e
+c0
+05
+7b
+4b
+c0
+04
+81
+66
+c0
+05
+fb
+7c
+20
+20
+79
+e4
+20
+00
+3a
+98
+d8
+a0
+08
+75
+20
+40
+00
+f1
+70
+08
+f7
+01
+20
+40
+7b
+6e
+6f
+e0
+c6
+96
+1f
+e0
+fe
+01
+67
+e0
+c6
+96
+6f
+e1
+08
+6f
+67
+e1
+08
+f5
+70
+8c
+1b
+02
+20
+20
+7b
+65
+6f
+e0
+89
+0d
+20
+7a
+00
+00
+6f
+f0
+8c
+25
+1f
+e1
+7e
+0f
+24
+3a
+7c
+30
+6f
+e0
+89
+0e
+20
+3a
+7c
+06
+6f
+e0
+89
+00
+c0
+01
+fc
+40
+c0
+81
+7c
+06
+6f
+e0
+89
+02
+24
+3a
+7c
+06
+20
+40
+01
+80
+20
+20
+01
+84
+6f
+f0
+8c
+25
+1f
+e1
+7e
+0f
+24
+7a
+00
+00
+20
+20
+7b
+f0
+6f
+f0
+8c
+25
+1f
+e1
+7e
+0f
+24
+7a
+00
+00
+20
+20
+7b
+fb
+20
+75
+80
+00
+20
+40
+21
+60
+d8
+40
+00
+27
+20
+40
+21
+6f
+20
+40
+21
+a6
+70
+8a
+25
+7f
+70
+8a
+30
+1a
+70
+8a
+31
+78
+70
+8a
+8f
+b2
+70
+8a
+c2
+00
+70
+8a
+c3
+00
+d8
+e0
+00
+06
+20
+40
+01
+a5
+2a
+2f
+fe
+0d
+20
+40
+21
+1d
+2a
+4f
+fe
+0d
+20
+40
+21
+1e
+d8
+e0
+00
+05
+20
+40
+21
+1c
+20
+40
+21
+1e
+20
+40
+01
+a5
+d8
+a0
+8a
+c2
+1a
+31
+fe
+00
+20
+40
+21
+17
+1a
+51
+fe
+00
+20
+40
+21
+17
+18
+e0
+8f
+ff
+20
+21
+01
+9a
+20
+20
+21
+4f
+20
+00
+00
+3c
+58
+00
+0f
+00
+67
+f1
+09
+82
+58
+00
+0f
+f0
+67
+f1
+09
+84
+70
+89
+81
+09
+70
+89
+81
+03
+70
+89
+80
+06
+20
+00
+00
+3c
+da
+20
+00
+00
+da
+40
+00
+00
+df
+20
+00
+10
+d8
+c0
+0f
+00
+20
+20
+21
+2d
+20
+75
+80
+00
+20
+20
+22
+72
+20
+60
+00
+00
+20
+75
+80
+00
+70
+8a
+07
+77
+70
+8a
+08
+c9
+70
+8a
+0b
+01
+6f
+e0
+c4
+09
+67
+f0
+80
+cd
+20
+00
+0b
+b8
+20
+40
+01
+de
+70
+8a
+08
+c1
+6a
+40
+c4
+19
+df
+20
+00
+08
+20
+40
+6f
+58
+6f
+e0
+c4
+19
+67
+e0
+c4
+33
+62
+40
+c4
+19
+20
+60
+00
+00
+20
+40
+01
+d4
+6f
+f0
+8a
+09
+79
+3f
+fe
+07
+67
+f0
+8a
+09
+70
+8a
+07
+77
+70
+8a
+08
+c1
+70
+8a
+0b
+01
+20
+40
+6f
+90
+6f
+e0
+c4
+09
+67
+f0
+80
+cd
+20
+00
+0b
+b8
+20
+40
+01
+de
+70
+80
+cd
+00
+20
+20
+6f
+a1
+6f
+f0
+80
+cc
+79
+20
+7e
+01
+67
+f0
+80
+cc
+6a
+40
+c4
+19
+6f
+e0
+c4
+33
+67
+e0
+c4
+19
+df
+20
+00
+08
+20
+40
+6f
+67
+62
+40
+c4
+19
+20
+60
+00
+00
+70
+80
+cc
+03
+6f
+f0
+81
+29
+c3
+02
+81
+df
+68
+59
+01
+64
+60
+49
+44
+0a
+70
+80
+cc
+00
+20
+60
+00
+00
+70
+8a
+82
+11
+70
+8a
+8d
+12
+70
+8a
+8e
+0a
+6f
+e0
+c0
+99
+c0
+08
+01
+fe
+58
+00
+57
+62
+67
+f1
+09
+07
+70
+89
+01
+03
+70
+89
+30
+03
+c6
+16
+80
+00
+70
+89
+01
+01
+70
+8a
+82
+07
+70
+8a
+8d
+44
+70
+8a
+8e
+0a
+6f
+e0
+c0
+99
+c0
+08
+01
+fb
+58
+00
+2b
+b1
+67
+f1
+09
+07
+c6
+97
+80
+00
+70
+89
+30
+24
+70
+89
+01
+05
+20
+60
+00
+00
+58
+00
+41
+89
+67
+f1
+09
+07
+20
+20
+01
+f7
+58
+00
+83
+12
+67
+f1
+09
+07
+20
+20
+01
+ec
+6f
+e0
+88
+70
+c0
+00
+fa
+14
+c0
+01
+02
+08
+c0
+01
+fa
+30
+c0
+10
+82
+0b
+c0
+11
+02
+1a
+20
+20
+79
+e4
+58
+00
+47
+55
+68
+48
+c7
+55
+20
+20
+7a
+18
+70
+08
+fd
+00
+6f
+e0
+88
+71
+c0
+00
+02
+11
+c0
+00
+82
+14
+c0
+01
+02
+17
+20
+20
+79
+e4
+6a
+40
+c7
+68
+da
+20
+47
+68
+20
+20
+7b
+8b
+6a
+40
+c7
+81
+da
+20
+47
+81
+20
+20
+7b
+8b
+6a
+40
+c7
+9a
+da
+20
+47
+9a
+20
+20
+7b
+8b
+6f
+e1
+08
+71
+c0
+00
+02
+1f
+c0
+00
+82
+22
+c0
+01
+02
+24
+20
+20
+79
+e4
+6a
+40
+c6
+97
+58
+00
+46
+97
+20
+20
+02
+28
+6a
+21
+07
+a9
+20
+20
+7b
+89
+70
+09
+0e
+01
+70
+09
+00
+01
+6a
+40
+c6
+dd
+58
+00
+46
+dd
+1f
+e0
+fe
+01
+1f
+e2
+22
+00
+20
+20
+7b
+8b
+20
+40
+73
+96
+20
+40
+79
+32
+58
+00
+49
+5a
+d8
+a0
+48
+56
+98
+a6
+72
+00
+20
+40
+7c
+a1
+70
+8c
+00
+00
+20
+00
+27
+10
+70
+8c
+12
+00
+6f
+f1
+00
+50
+79
+3f
+fe
+0a
+67
+f1
+00
+50
+70
+8c
+10
+21
+70
+8c
+11
+9d
+70
+8c
+00
+3c
+58
+00
+47
+b9
+67
+f1
+0c
+02
+67
+f1
+0c
+06
+58
+00
+48
+55
+67
+f1
+0c
+04
+20
+20
+79
+23
+6f
+f0
+8c
+22
+2f
+ef
+fe
+03
+20
+40
+82
+2d
+20
+20
+79
+0a
+6f
+e0
+c6
+16
+c1
+83
+80
+00
+20
+40
+34
+76
+20
+40
+34
+ae
+20
+40
+03
+3b
+24
+37
+b3
+be
+20
+40
+35
+06
+20
+42
+83
+64
+6f
+e0
+c6
+0a
+20
+5a
+34
+4d
+20
+20
+34
+93
+6f
+e0
+ca
+4c
+c0
+55
+02
+55
+c0
+2a
+82
+57
+c0
+11
+02
+6d
+c0
+7f
+82
+5f
+20
+60
+00
+00
+6f
+e0
+ca
+4d
+20
+20
+33
+2a
+6f
+e0
+c5
+ae
+20
+3a
+02
+5d
+6f
+e2
+4a
+4e
+68
+4a
+44
+f1
+98
+46
+7c
+00
+24
+62
+80
+00
+6f
+e0
+ca
+4d
+20
+20
+33
+41
+6f
+e0
+ca
+4d
+c0
+00
+82
+63
+c0
+01
+02
+68
+20
+60
+00
+00
+6f
+e0
+c5
+de
+24
+7a
+00
+00
+6f
+e2
+4a
+4e
+67
+e2
+46
+2c
+20
+20
+35
+a3
+6f
+e0
+c5
+df
+24
+7a
+00
+00
+6f
+e2
+4a
+4e
+67
+e2
+46
+2c
+20
+20
+35
+a9
+6f
+e0
+c5
+ae
+20
+3a
+02
+73
+6f
+e2
+4a
+4e
+68
+4a
+46
+2c
+98
+46
+7c
+00
+24
+62
+80
+00
+6f
+e0
+ca
+4d
+c0
+00
+82
+77
+c0
+01
+02
+7f
+20
+60
+00
+00
+6f
+e0
+c5
+de
+24
+7a
+00
+00
+6f
+e0
+c5
+d3
+c0
+01
+02
+7c
+20
+60
+00
+00
+70
+45
+de
+01
+20
+40
+33
+8d
+20
+20
+33
+6b
+6f
+e0
+c5
+df
+24
+7a
+00
+00
+6f
+e0
+c5
+d4
+c0
+80
+02
+84
+20
+60
+00
+00
+70
+45
+df
+01
+20
+40
+33
+93
+20
+20
+33
+78
+6f
+e0
+c6
+16
+c1
+00
+00
+00
+6f
+e0
+c6
+2a
+24
+7a
+00
+00
+6f
+e0
+c6
+28
+24
+7a
+00
+00
+6f
+e0
+c6
+24
+20
+7a
+00
+00
+6f
+e0
+c5
+d3
+c1
+80
+00
+00
+6f
+e0
+c5
+d4
+c1
+80
+00
+00
+20
+20
+34
+36
+6f
+e0
+c6
+16
+c1
+80
+80
+00
+20
+40
+02
+98
+20
+20
+34
+6d
+6f
+e0
+c6
+15
+c3
+80
+80
+00
+79
+20
+7e
+01
+67
+e0
+c6
+15
+58
+00
+00
+00
+67
+e1
+c5
+d3
+20
+20
+33
+07
+20
+20
+48
+68
+58
+00
+00
+10
+20
+20
+70
+c8
+20
+40
+47
+c3
+6f
+e0
+c6
+95
+67
+e0
+c5
+d1
+70
+45
+ca
+01
+20
+40
+32
+81
+6f
+e0
+c6
+69
+c4
+00
+00
+00
+70
+45
+ca
+01
+20
+20
+32
+84
+6f
+e0
+c6
+69
+c3
+00
+31
+65
+78
+37
+fc
+00
+20
+00
+00
+18
+6f
+e0
+c9
+5b
+79
+20
+7e
+00
+67
+e0
+c9
+5b
+20
+40
+33
+a5
+20
+40
+31
+e5
+20
+20
+31
+95
+70
+45
+d0
+4a
+6f
+e2
+4a
+9b
+67
+e2
+45
+cc
+20
+60
+00
+00
+58
+00
+47
+ea
+67
+e1
+45
+e0
+58
+00
+03
+96
+67
+e1
+45
+e4
+58
+00
+03
+9f
+67
+e1
+45
+e6
+58
+00
+02
+c4
+67
+e1
+45
+e2
+58
+00
+47
+f9
+67
+e1
+08
+59
+20
+20
+79
+12
+6f
+e0
+c5
+89
+c0
+00
+82
+c7
+c0
+01
+02
+ce
+6f
+e0
+c6
+93
+c2
+80
+02
+ca
+20
+20
+02
+d0
+6f
+e0
+c6
+93
+79
+3f
+fe
+00
+67
+e0
+c6
+93
+20
+20
+02
+d7
+6f
+e0
+c6
+93
+c2
+80
+82
+d4
+6f
+e0
+c6
+11
+c0
+00
+82
+db
+c0
+01
+82
+e3
+20
+60
+00
+00
+6f
+e0
+c6
+93
+79
+3f
+fe
+01
+67
+e0
+c6
+93
+70
+45
+88
+01
+58
+00
+00
+ff
+67
+e0
+c9
+aa
+20
+60
+00
+00
+70
+46
+11
+01
+20
+40
+02
+ea
+24
+77
+80
+00
+70
+46
+11
+01
+70
+45
+88
+08
+d8
+c0
+45
+d6
+d8
+a0
+49
+aa
+20
+20
+7c
+89
+6f
+e0
+c9
+5c
+c0
+00
+82
+db
+c0
+7f
+82
+db
+70
+08
+f9
+00
+70
+45
+88
+01
+6f
+e0
+c6
+21
+20
+20
+02
+d9
+6f
+e0
+c6
+16
+c1
+80
+80
+00
+6f
+e0
+c6
+10
+24
+7a
+00
+00
+6f
+e0
+c9
+5d
+20
+20
+33
+83
+6f
+e0
+c5
+88
+1f
+e0
+fe
+03
+67
+e0
+c5
+8a
+6f
+e0
+c5
+ac
+67
+e0
+c9
+fa
+6f
+e0
+c5
+89
+1f
+e9
+fe
+00
+68
+48
+c5
+7e
+18
+41
+04
+03
+18
+43
+84
+00
+98
+41
+fe
+00
+68
+48
+c5
+7f
+98
+40
+fe
+00
+e7
+e0
+80
+05
+6f
+e0
+c5
+88
+e7
+e0
+80
+05
+6f
+e0
+c5
+88
+98
+00
+72
+00
+d8
+c0
+49
+aa
+20
+40
+7c
+da
+20
+20
+31
+fc
+c5
+17
+83
+0a
+6f
+e0
+c5
+ca
+24
+3a
+03
+0a
+78
+4e
+fc
+00
+78
+2d
+fc
+00
+78
+23
+fc
+00
+78
+24
+fc
+00
+6f
+e0
+c5
+8a
+98
+00
+72
+00
+d8
+c0
+49
+fa
+20
+20
+31
+b3
+20
+40
+31
+7d
+67
+e0
+c9
+5a
+c5
+13
+83
+18
+6f
+e0
+c9
+5a
+1f
+e9
+7e
+00
+68
+48
+c5
+89
+a8
+40
+0e
+00
+24
+20
+b1
+8c
+20
+40
+31
+7d
+e7
+e0
+80
+05
+1f
+e6
+7c
+4e
+24
+21
+31
+8e
+1f
+e2
+72
+00
+20
+22
+b1
+54
+20
+20
+31
+51
+6f
+e0
+c9
+5b
+67
+e0
+c5
+7d
+1f
+e0
+fe
+01
+d8
+c0
+49
+5b
+98
+c0
+8c
+00
+ef
+e1
+80
+06
+67
+e1
+c5
+80
+6f
+e0
+c9
+5a
+1f
+e1
+04
+01
+60
+48
+ca
+9a
+1f
+e3
+04
+00
+18
+41
+04
+03
+60
+48
+c5
+86
+1f
+e9
+7e
+00
+67
+e0
+c9
+5a
+20
+60
+00
+00
+20
+40
+33
+be
+20
+40
+31
+19
+24
+37
+b3
+be
+20
+40
+03
+36
+20
+40
+03
+3e
+20
+40
+03
+46
+20
+20
+33
+16
+70
+46
+22
+05
+d8
+c0
+49
+5a
+d8
+a0
+4a
+4a
+20
+40
+7c
+89
+20
+20
+33
+22
+20
+40
+33
+be
+20
+40
+31
+19
+24
+77
+80
+00
+6f
+e0
+c9
+5a
+1f
+e9
+7e
+00
+67
+e0
+c5
+89
+20
+40
+03
+1f
+6f
+e0
+ca
+9a
+2f
+ef
+fe
+00
+20
+20
+b3
+fd
+20
+20
+33
+fa
+6f
+e0
+c5
+d5
+20
+7a
+00
+00
+6f
+e0
+ca
+4d
+20
+20
+33
+9c
+6f
+e0
+c6
+16
+c1
+80
+00
+00
+20
+40
+03
+5e
+20
+40
+48
+27
+6f
+e0
+c6
+10
+24
+7a
+00
+00
+6f
+e0
+c6
+11
+c1
+80
+00
+00
+6f
+e0
+c6
+14
+20
+7a
+00
+00
+d8
+e0
+00
+08
+20
+40
+7c
+ef
+24
+7a
+00
+00
+20
+40
+35
+1b
+20
+20
+35
+11
+6f
+e0
+c6
+0a
+c0
+00
+b5
+ea
+6f
+e0
+c6
+12
+c0
+00
+b5
+2c
+20
+60
+00
+00
+6f
+e0
+c6
+16
+c1
+80
+00
+00
+20
+40
+34
+51
+20
+40
+03
+59
+20
+40
+03
+3b
+24
+37
+b3
+be
+20
+40
+33
+e3
+24
+34
+33
+be
+6f
+e0
+c5
+7d
+20
+3a
+33
+be
+1f
+e0
+fe
+02
+98
+00
+72
+00
+d8
+c0
+49
+5a
+d8
+a0
+4a
+4a
+20
+40
+7c
+da
+70
+46
+13
+00
+6f
+e0
+c6
+10
+20
+5a
+03
+77
+6f
+e0
+ca
+4c
+c0
+7f
+83
+7d
+c0
+00
+83
+7f
+c0
+01
+03
+8f
+d8
+a0
+49
+5a
+df
+20
+00
+46
+20
+20
+7c
+a1
+6f
+e0
+c6
+2b
+20
+3a
+33
+fe
+70
+46
+14
+01
+58
+00
+06
+40
+d8
+e0
+00
+08
+20
+20
+7c
+e1
+20
+40
+03
+48
+20
+20
+02
+5f
+20
+40
+33
+8d
+20
+40
+35
+2e
+6f
+e0
+c6
+0a
+68
+48
+ca
+4a
+28
+4f
+fe
+03
+79
+20
+fe
+00
+67
+e0
+c6
+0a
+c0
+00
+83
+8a
+6f
+e0
+c6
+12
+68
+48
+ca
+4a
+20
+20
+33
+ce
+6f
+e0
+c5
+de
+24
+7a
+00
+00
+70
+45
+de
+01
+6f
+e2
+4a
+54
+20
+20
+35
+a3
+20
+40
+33
+93
+68
+48
+ca
+4a
+28
+4f
+fe
+03
+20
+20
+83
+94
+20
+20
+33
+d7
+6f
+e2
+4a
+54
+20
+20
+35
+a9
+58
+00
+00
+01
+67
+e0
+89
+13
+6f
+e3
+ca
+4d
+e7
+e3
+80
+05
+6f
+e0
+ca
+4d
+24
+5a
+48
+dd
+6f
+e0
+ca
+4d
+20
+5a
+48
+e1
+20
+20
+48
+36
+6f
+e0
+ca
+4d
+c0
+00
+03
+a4
+c0
+01
+03
+aa
+c0
+01
+83
+ad
+20
+20
+33
+be
+6f
+e0
+ca
+4f
+67
+e0
+c6
+11
+70
+4a
+4f
+00
+d8
+a0
+09
+23
+d8
+c0
+4a
+4e
+20
+20
+48
+ef
+d8
+a0
+09
+43
+d8
+c0
+4a
+4d
+20
+20
+49
+1f
+d8
+a0
+09
+33
+d8
+c0
+4a
+4d
+20
+20
+49
+07
+cb
+21
+aa
+55
+40
+00
+00
+40
+05
+00
+32
+17
+00
+00
+80
+63
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+02
+00
+20
+00
+00
+14
+00
+00
+00
+e0
+45
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+c0
+2c
+40
+36
+0d
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+aa
+55
+01
+00
+cb
+43
+04
+aa
+55
+01
+00
+ec
+44
+ff
+aa
+55
+01
+00
+1c
+02
+5a
+aa
+55
+01
+00
+69
+46
+10
+aa
+55
+01
+00
+94
+46
+03
+aa
+55
+18
+00
+6a
+46
+01
+51
+31
+20
+10
+51
+31
+20
+30
+00
+0d
+32
+2e
+34
+47
+20
+52
+65
+63
+65
+69
+76
+65
+72
+aa
+55
+01
+00
+95
+46
+94
+aa
+55
+06
+00
+f1
+44
+35
+17
+86
+74
+12
+23
+aa
+55
+02
+00
+8b
+45
+78
+69
+aa
+55
+02
+00
+0f
+46
+1e
+00
+aa
+55
+11
+00
+b9
+45
+01
+06
+1a
+3a
+4d
+00
+13
+23
+4c
+0f
+2c
+31
+43
+11
+15
+36
+48
+aa
+55
+04
+00
+9b
+4a
+25
+20
+15
+10
+aa
+55
+55
+00
+55
+47
+54
+09
+02
+54
+00
+03
+01
+00
+a0
+32
+09
+04
+00
+00
+01
+03
+01
+01
+00
+09
+21
+00
+02
+00
+01
+22
+3f
+00
+07
+05
+81
+03
+40
+00
+02
+09
+04
+01
+00
+01
+03
+01
+02
+00
+09
+21
+00
+02
+00
+01
+22
+a3
+00
+07
+05
+82
+03
+40
+00
+02
+09
+04
+02
+00
+01
+03
+01
+02
+00
+09
+21
+00
+02
+00
+01
+22
+63
+00
+07
+05
+02
+03
+40
+00
+01
+aa
+55
+40
+00
+97
+46
+3f
+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
+25
+03
+05
+07
+19
+00
+29
+ff
+81
+00
+c0
+aa
+55
+64
+00
+dd
+46
+63
+06
+a0
+ff
+09
+0e
+a1
+01
+85
+a0
+95
+3f
+75
+08
+26
+ff
+00
+15
+00
+09
+01
+81
+02
+c0
+06
+a1
+ff
+09
+0e
+a1
+01
+85
+a1
+95
+3f
+75
+08
+26
+ff
+00
+15
+00
+09
+01
+81
+02
+85
+a2
+95
+3f
+75
+08
+26
+ff
+00
+15
+00
+09
+01
+b1
+02
+c0
+06
+a2
+ff
+09
+0e
+a1
+01
+85
+a3
+95
+3f
+75
+08
+26
+ff
+00
+15
+00
+09
+01
+81
+02
+85
+a4
+95
+3f
+75
+08
+26
+ff
+00
+15
+00
+09
+01
+b1
+02
+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
+a5
+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
+00
+aa
+55
+05
+00
+5e
+41
+08
+0e
+05
+03
+00
+aa
+55
+01
+00
+68
+41
+20
+aa
+55
+02
+00
+9a
+40
+00
+0c
+aa
+55
+05
+00
+43
+41
+ff
+04
+00
+00
+08
+aa
+55
+01
+00
+07
+44
+01
+aa
+55
+01
+00
+09
+44
+0a
+aa
+55
+01
+00
+08
+44
+00
+aa
+55
+01
+00
+11
+44
+00
+aa
+55
+04
+00
+0d
+44
+00
+07
+ff
+07
+aa
+55
+01
+00
+38
+44
+a0
+aa
+55
+02
+00
+3b
+44
+bc
+02
+aa
+55
+02
+00
+39
+44
+90
+01
+aa
+55
+02
+00
+3d
+44
+03
+09
+aa
+55
+01
+00
+49
+41
+ff
+aa
+55
+02
+00
+9c
+40
+49
+41
+55
+aa
+aa
+55
+4e
+8e
+3c
+1d
+f0
Index: usb_pc_ai_voice/output/program.lis
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/output/program.lis	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/output/program.lis	(working copy)
@@ -0,0 +1,33462 @@
+              include "bt_format "
+              org 0x0000
+0000 c2840017 bbit1 8 ,pf_patch_ext 
+0001 c0000029 beq patch00_0 ,p_soft_reset 
+0002 c001002f beq patch00_2 ,p_main_loop 
+0003 c0088038 beq patch02_1 ,p_set_sync_on 
+0004 c00a01e5 beq patch02_4 ,p_set_lemode 
+0005 c00a80dc beq patch02_5 ,p_rf_rx_enable 
+0006 c00c00ea beq patch03_0 ,p_txon 
+0007 c00c8096 beq patch03_1 ,p_set_tx_power 
+0008 c00d0052 beq patch03_2 ,p_initialize_radio_cont 
+0009 c00e0041 beq patch03_4 ,p_aac_ghpc 
+000a c01b82a2 beq patch06_7 ,p_dongle_default_init 
+000b c01c00af beq patch07_0 ,p_dongle_read_kb_bind_status 
+000c c01c80ab beq patch07_1 ,p_dongle_write_kb_bind_status 
+000d c01e829f beq patch07_5 ,p_dongle_usb_dispatch 
+000e c01f034a beq patch07_6 ,p_dongle_work_mode_auto 
+000f c05882b9 beq patch16_1 ,p_app_init 
+0010 c06280a8 beq patch18_5 ,p_otp_read_data 
+0011 c06d01b6 beq patch1b_2 ,p_sadc_calibration 
+0012 c06e01c6 beq patch1b_4 ,p_enable_adc 
+0013 c07e8240 beq patch1f_5 ,p_usb_isr 
+0014 c07f022b beq patch1f_6 ,p_usb_init 
+0015 c07f80f4 beq patch1f_7 ,p_usb_rx 
+0016 2020235a branch assert 
+
+pf_patch_ext:
+0017 c000010f beq patch20_0 ,p_usb_class_type 
+0018 c0010201 beq patch20_2 ,p_usb0_request_get_descriptor 
+0019 c0030172 beq patch20_6 ,p_usb_tx 
+001a c0370310 beq patch2d_6 ,p_g24_receive_update_rxbuff 
+001b c03782ab beq patch2d_7 ,p_g24_receive_skip_end 
+001c c0390305 beq patch2e_2 ,p_g24_transmit_packet 
+001d c03982f0 beq patch2e_3 ,p_g24_transmit_prep 
+001e c03a831f beq patch2e_5 ,p_g24_read_len_pid_crc 
+001f c03f02b5 beq patch2f_6 ,p_g24_pair_param_init 
+0020 c040832f beq patch30_1 ,p_g24_bind_data_process 
+0021 c041024f beq patch30_2 ,p_g24_bind_data_parse_next 
+0022 c0420370 beq patch30_4 ,p_g24_receive_packet_parse_end 
+0023 c0428374 beq patch30_5 ,p_g24_rx_interrupt_clear 
+0024 c0440287 beq patch31_0 ,p_g24_mode_switch_bind_search 
+0025 c0450294 beq patch31_2 ,p_g24_bind_mode_auto 
+0026 c0458244 beq patch31_3 ,p_g24_search_mode_auto 
+0027 c17f8000 rtneq patch3f_7 
+0028 2020235a branch assert 
+
+p_soft_reset:
+0029 20800000 clear_stack 
+002a 37d98200 until null ,lpo_edge 
+002b 6fe0c0cb fetch 1 ,mem_lpm_hv_sel 
+002c 204023e1 call lpm_write_sel_hv 
+002d 20007530 nop 30000 
+002e 20202003 branch soft_reset + 2 
+
+p_main_loop:
+002f 20407552 call sp_calc_sequence_256 
+0030 20407448 call sp_calc_sequence_256_check 
+0031 20402a45 call le_advertising_dispatch 
+0032 2040202a call idle_dispatch 
+0033 204042ad call app_process_idle 
+0034 20402018 call connection_dispatch 
+0035 2040310f call g24_dispatch 
+0036 2040248c call lpm_dispatch 
+0037 2020002f branch p_main_loop 
+
+p_set_sync_on:
+0038 708a0f60 jam 0x60 ,0x8a0f 
+0039 708a10aa jam 0xaa ,0x8a10 
+003a 708a127a jam 0x7a ,0x8a12 
+003b 708a2500 jam 0x00 ,0x8a25 
+003c 708a2600 jam 0x00 ,0x8a26 
+003d 2000003c nop 60 
+003e 708a2020 jam 0x20 ,0x8a20 
+003f 708a23f5 jam 0xf5 ,0x8a23 
+0040 20202169 branch set_sync_on_next 
+
+p_aac_ghpc:
+0041 708a2030 jam 0x30 ,0x8a20 
+0042 708a23dd jam 0xdd ,0x8a23 
+0043 204021d0 call calc_freq 
+0044 58000000 setarg 0 
+0045 67e10670 store 2 ,mem_pdatatemp 
+0046 d8403a98 arg 15000 ,temp 
+
+p_wait_cal_done:
+0047 6fe10670 fetch 2 ,mem_pdatatemp 
+0048 1fe0fe01 increase 1 ,pdata 
+0049 67e10670 store 2 ,mem_pdatatemp 
+004a 98467c00 isub temp ,null 
+004b 20216ca3 branch soft_reset_chip ,positive 
+004c 6ff08a7c fetch 1 ,0x8a7c 
+004d c3000047 bbit0 0 ,p_wait_cal_done 
+004e 2020229a branch wait_cal_done + 2 
+
+p_set_ck2rfpll:
+004f 37d98200 until null ,lpo_edge 
+0050 70813c58 jam 0x58 ,0x813c 
+0051 202023e2 branch lpm_write_wait 
+
+p_initialize_radio_cont:
+0052 708a8840 jam 0x40 ,core_rx_cfg0 
+0053 7089460d jam 0x0d ,0x8946 
+0054 70896f10 jam 0x10 ,0x896f 
+0055 708a13cd jam 0xcd ,0x8a13 
+0056 708a0610 jam 0x10 ,0x8a06 
+0057 708a844a jam 0x4a ,0x8a84 
+0058 708a8540 jam 0x40 ,0x8a85 
+0059 708a16fe jam 0xfe ,0x8a16 
+005a 204000b1 call p_set_otp_config 
+005b 6fe0c436 fetch 1 ,mem_wdt_always_work 
+005c 205a70d7 call wdt_set_disable ,blank 
+005d 2455804f ncall p_set_ck2rfpll ,wake 
+005e 37d98200 until null ,lpo_edge 
+005f 70813b5f jam 0x5f ,0x813b 
+0060 6fe0c099 fetch 1 ,mem_fcomp_div 
+0061 c008008b beq xtal_16m ,p_initialize_radio_16m 
+0062 6fe0c438 fetch 1 ,mem_ring_ibias_trim 
+0063 1fe1fe04 or_into 0x04 ,pdata 
+0064 67f08a02 store 1 ,0x8a02 
+0065 70890f01 jam 0x01 ,0x890f 
+0066 708a8024 jam 0x24 ,0x8a80 
+0067 708a8162 jam 0x62 ,0x8a81 
+0068 58e61212 setarg 0xe61212 
+0069 67f18a73 store 3 ,0x8a73 
+
+p_initialize_radio2:
+006a 708a8660 jam 0x60 ,0x8a86 
+006b 708a8b3b jam 0x3b ,0x8a8b 
+006c 2040007d call p_dpll_on 
+006d 70804300 jam 0 ,core_config 
+006e 70804205 jam clksel_dpll ,core_clksel 
+006f 58557474 setarg 0x557474 
+0070 67f18968 store 3 ,0x8968 
+0071 7089606e jam 0x6e ,0x8960 
+0072 20400188 call p_rx_dcoc 
+0073 204001b3 call p_rfpll_aac_ghpc 
+0074 20400078 call p_set_xtal_cap 
+0075 7041480c jam system_clk_12m ,mem_system_clk 
+0076 20406f4e call sadc_calibration 
+0077 202001b5 branch p_dpll_ring_ibias_calc 
+
+p_set_xtal_cap:
+0078 20758000 rtn wake 
+0079 37d98200 until null ,lpo_edge 
+007a 6fe0c11c fetch 1 ,mem_xtal_c_sel 
+007b 67f0813a store 1 ,core_xtal_cap 
+007c 202023e2 branch lpm_write_wait 
+
+p_dpll_on:
+007d 6fe0c099 fetch 1 ,mem_fcomp_div 
+007e c00c0083 beq xtal_24m ,p_dpll_on_24m 
+007f 6fe0c438 fetch 1 ,mem_ring_ibias_trim 
+0080 1fe1fe06 or_into 0x06 ,pdata 
+0081 67f08a02 store 1 ,0x8a02 
+0082 708a05e0 jam 0xe0 ,0x8a05 
+
+p_dpll_on_24m:
+0083 708a00d8 jam 0xd8 ,0x8a00 
+0084 2000003c nop 60 
+0085 708a01a0 jam 0xa0 ,0x8a01 
+0086 708a00df jam 0xdf ,0x8a00 
+0087 708a01fa jam 0xfa ,0x8a01 
+0088 20000014 nop 20 
+0089 708a009f jam 0x9f ,0x8a00 
+008a 20600000 rtn 
+
+p_initialize_radio_16m:
+008b 6fe0c438 fetch 1 ,mem_ring_ibias_trim 
+008c 1fe1fe06 or_into 0x06 ,pdata 
+008d 67f08a02 store 1 ,0x8a02 
+008e 70890f00 jam 0x00 ,0x890f 
+008f 708a8023 jam 0x23 ,0x8a80 
+0090 708a81b0 jam 0xb0 ,0x8a81 
+0091 58e40909 setarg 0xe40909 
+0092 67f18a73 store 3 ,0x8a73 
+0093 708a762a jam 0x2a ,0x8a76 
+0094 70890204 jam 0x04 ,0x8902 
+0095 2020006a branch p_initialize_radio2 
+
+p_set_tx_power:
+0096 6fe0c141 fetch 1 ,mem_tx_power 
+0097 c0032225 beq tx_power_6db ,set_tx_power_7db 
+0098 c04f009c beq tx_power_f30db ,p_set_tx_power_f30db 
+0099 c04f80a0 beq tx_power_f35db ,p_set_tx_power_f35db 
+009a c05000a4 beq tx_power_f40db ,p_set_tx_power_f40db 
+009b 2020220e branch set_tx_power + 2 
+
+p_set_tx_power_f30db:
+009c 708a1417 jam 0x17 ,0x8a14 
+009d 58250300 setarg 0x250300 
+009e 67f18a60 store 3 ,0x8a60 
+009f 2020221a branch set_tx_power_8a63_28 
+
+p_set_tx_power_f35db:
+00a0 708a1417 jam 0x17 ,0x8a14 
+00a1 58250100 setarg 0x250100 
+00a2 67f18a60 store 3 ,0x8a60 
+00a3 2020221a branch set_tx_power_8a63_28 
+
+p_set_tx_power_f40db:
+00a4 708a1417 jam 0x17 ,0x8a14 
+00a5 58250000 setarg 0x250000 
+00a6 67f18a60 store 3 ,0x8a60 
+00a7 2020221a branch set_tx_power_8a63_28 
+
+p_otp_read_data:
+00a8 20406b3a call enable_otp_read 
+00a9 20406b75 call otp_read_data + 1 
+00aa 20206b38 branch otp_disable_chgpump 
+
+p_dongle_write_kb_bind_status:
+00ab df200001 arg 1 ,loopcnt 
+00ac da204648 arg mem_dg_kb_bind_flag ,rega 
+00ad da401f00 arg dongle_kb_bind_otp_offect ,regb 
+00ae 20206b45 branch otp_write 
+
+p_dongle_read_kb_bind_status:
+00af da401f00 arg dongle_kb_bind_otp_offect ,regb 
+00b0 202047f1 branch dongle_read_kb_bind_status + 2 
+
+p_set_otp_config:
+00b1 203580d8 branch p_set_otp_config_wake ,wake 
+00b2 6fe2020d fetch 4 ,mem_otp_core_ldo 
+00b3 207a0000 rtn blank 
+00b4 37d98200 until null ,lpo_edge 
+00b5 6ff08136 fetch 1 ,0x8136 
+00b6 1fe17ef0 and pdata ,0xf0 ,pdata 
+00b7 6848820d fetcht 1 ,mem_otp_core_ldo 
+00b8 9841fe00 ior temp ,pdata 
+00b9 67f08136 store 1 ,0x8136 
+00ba 37d98200 until null ,lpo_edge 
+00bb 6ff08138 fetch 1 ,0x8138 
+00bc 1fe17e07 and pdata ,0x7 ,pdata 
+00bd 6848820e fetcht 1 ,mem_otp_verf_bg 
+00be 18498400 lshift3 temp ,temp 
+00bf 9841fe00 ior temp ,pdata 
+00c0 67f08138 store 1 ,0x8138 
+00c1 37d98200 until null ,lpo_edge 
+
+p_set_otp_config2:
+00c2 6ff08acb fetch 1 ,0x8acb 
+00c3 1fe17ef0 and pdata ,0xf0 ,pdata 
+00c4 6848820f fetcht 1 ,mem_otp_charge_pump 
+00c5 6048c15b storet 1 ,mem_otp_charge_pump_x 
+00c6 9841fe00 ior temp ,pdata 
+00c7 67f08acb store 1 ,0x8acb 
+00c8 6fe08210 fetch 1 ,mem_otp_dpll_ibais 
+00c9 67e0c15c store 1 ,mem_otp_dpll_ibais_x 
+00ca 2feffe03 isolate1 3 ,pdata 
+00cb 6ff08a06 fetch 1 ,0x8a06 
+00cc 7920fe07 setflag true ,7 ,pdata 
+00cd 67f08a06 store 1 ,0x8a06 
+00ce 6fe08210 fetch 1 ,mem_otp_dpll_ibais 
+00cf 1fe10407 and pdata ,7 ,temp 
+00d0 18520400 lshift4 temp ,temp 
+00d1 18438400 lshift temp ,temp 
+00d2 6048c438 storet 1 ,mem_ring_ibias_trim 
+00d3 6ff08a02 fetch 1 ,0x8a02 
+00d4 1fe17e1f and pdata ,0x1f ,pdata 
+00d5 9841fe00 ior temp ,pdata 
+00d6 67f08a02 store 1 ,0x8a02 
+00d7 20600000 rtn 
+
+p_set_otp_config_wake:
+00d8 6fe1415b fetch 2 ,mem_otp_charge_pump_x 
+00d9 207a0000 rtn blank 
+00da 67e1020f store 2 ,mem_otp_charge_pump 
+00db 202000c2 branch p_set_otp_config2 
+
+p_rf_rx_enable:
+00dc 2040686f call rf_debug_rx_gpio_high 
+00dd 204021ba call rf_rx_agc_set 
+00de 18002a08 force 8 ,radio_ctrl 
+00df 18002a00 force 0 ,radio_ctrl 
+00e0 580aaada setarg 0x0aaada 
+00e1 67f18a0f store 3 ,0x8a0f 
+00e2 708a2540 jam 0x40 ,0x8a25 
+00e3 708a2610 jam 0x10 ,0x8a26 
+00e4 2000003c nop 60 
+00e5 708a01fb jam 0xfb ,0x8a01 
+00e6 708a25ff jam 0xff ,0x8a25 
+00e7 708a2630 jam 0x30 ,0x8a26 
+00e8 708a16fe jam 0xfe ,0x8a16 
+00e9 202021b4 branch rf_rx_enable + 14 
+
+p_txon:
+00ea 580aaa7e setarg 0x0aaa7e 
+00eb 67f18a0f store 3 ,0x8a0f 
+00ec 2000003c nop 60 
+00ed 708a2500 jam 0x00 ,0x8a25 
+00ee 708a260d jam 0x0d ,0x8a26 
+00ef 708a16f6 jam 0xf6 ,0x8a16 
+00f0 20202203 branch txon + 7 
+
+p_usb_rx_data:
+00f1 6ff08c25 fetch 1 ,core_usb_txbusy 
+00f2 c3830000 rtnbit1 usb_status_rxfull 
+00f3 20207993 branch usb_rx_data 
+
+p_usb_rx:
+00f4 6fe08709 fetch 1 ,mem_usb_status 
+00f5 c4028000 rtnbit0 usb_status_rxready 
+00f6 20407989 call usb_rx_len 
+00f7 2841fe0d compare 13 ,temp ,0xff 
+00f8 2020f999 branch usb_rx_ep13 ,true 
+00f9 6fe0c696 fetch 1 ,mem_setreport_count 
+00fa c0008103 beq 1 ,p_setreport_next_page_data 
+00fb d8a0086d arg mem_usb_setup ,contw 
+00fc 20407994 call usb_rx_read 
+
+p_usb_rx_next:
+00fd 6fe0870c fetch 1 ,mem_usb_read_len 
+00fe c0007986 beq 0x00 ,usb_rx_no_data 
+00ff c000f9b6 beq 0x01 ,usb_out_one_byte 
+0100 1fe67c07 sub pdata ,7 ,null 
+0101 20610000 rtn positive 
+0102 2020010f branch p_usb_class_type 
+
+p_setreport_next_page_data:
+0103 d8a00875 arg mem_usb0_set_report_data ,contw 
+0104 20407994 call usb_rx_read 
+0105 70469600 jam 0 ,mem_setreport_count 
+0106 6fe0870c fetch 1 ,mem_usb_read_len 
+0107 c000810b beq 0x01 ,p_usb_out_one_byte 
+0108 7008f701 jam 1 ,mem_usb0_get_set_report 
+0109 708c1b03 jam 0x03 ,core_usb_clear_nak 
+010a 20600000 rtn 
+
+p_usb_out_one_byte:
+010b 6fe0886d fetch 1 ,mem_usb_setup 
+010c c3838000 rtnbit1 7 
+010d 6fe08875 fetch 1 ,mem_usb0_set_report_data 
+010e 202079b8 branch usb_out_one_byte + 2 
+
+p_usb_class_type:
+010f 793f8023 set0 mark_isstr ,mark 
+0110 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+0111 1fe17e80 and_into 0x80 ,pdata 
+0112 c0400115 beq in_device ,p_usb_in_device 
+0113 c0000159 beq out_device ,p_usb_out_device 
+0114 2020235a branch assert 
+
+p_usb_in_device:
+0115 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+0116 1ff1fe00 rshift4 pdata ,pdata 
+0117 1fe37e00 rshift pdata ,pdata 
+0118 1fe17e03 and_into 0x03 ,pdata 
+0119 c000011b beq standard_req ,p_usb_in_standard_req 
+011a 202079bf branch usb_in_device + 5 
+
+p_usb_in_standard_req:
+011b 6fe0886e fetch 1 ,mem_usb_setup_brequest 
+011c c000011e beq get_status ,p_usb0_request_get_status 
+011d 202079cb branch usb_in_standard_req + 1 
+
+p_usb0_request_get_status:
+011e 6fe0886b fetch 1 ,mem_usb0_state 
+011f c00179e4 beq dev_default ,usb0_force_stall 
+0120 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+0121 c08079e4 bne 0 ,usb0_force_stall 
+0122 6fe08870 fetch 1 ,mem_usb_setup_bvalueh 
+0123 c08079e4 bne 0 ,usb0_force_stall 
+0124 6fe08873 fetch 1 ,mem_usb_setup_blength 
+0125 c08179e4 bne 2 ,usb0_force_stall 
+0126 6fe08874 fetch 1 ,mem_usb_setup_blengthh 
+0127 c08079e4 bne 0 ,usb0_force_stall 
+0128 6fe08872 fetch 1 ,mem_usb_setup_windex + 1 
+0129 c08079e4 bne 0 ,usb0_force_stall 
+012a 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+012b c041012d beq in_endpoint ,p_usb0_get_status_in_endpoint 
+012c 20207a65 branch usb0_request_get_status + 13 
+
+p_usb0_get_status_in_endpoint:
+012d 6fe0886b fetch 1 ,mem_usb0_state 
+012e c08279e4 bne dev_configured ,usb0_force_stall 
+012f 6fe08871 fetch 1 ,mem_usb_setup_windex 
+0130 c0017a89 beq out_ep2 ,usb0_get_status_in_ep_in_ep2 
+0131 c001fa8b beq out_ep3 ,usb0_get_status_in_ep_in_ep3 
+0132 20207a7d branch usb0_get_status_in_endpoint + 3 
+
+p_usb_out_standard_req:
+0133 6fe0886e fetch 1 ,mem_usb_setup_brequest 
+0134 c0008137 beq clear_feature ,p_usb0_request_clear_feature 
+0135 c001814a beq set_feature ,p_usb0_request_set_feature 
+0136 202079d9 branch usb_out_standard_req + 3 
+
+p_usb0_request_clear_feature:
+0137 6fe0886b fetch 1 ,mem_usb0_state 
+0138 c08279e4 bne dev_configured ,usb0_force_stall 
+0139 6fe08873 fetch 1 ,mem_usb_setup_blength 
+013a c08079e4 bne 0 ,usb0_force_stall 
+013b 6fe08874 fetch 1 ,mem_usb_setup_blengthh 
+013c c08079e4 bne 0 ,usb0_force_stall 
+013d 6fe08870 fetch 1 ,mem_usb_setup_bvalueh 
+013e c08079e4 bne 0 ,usb0_force_stall 
+013f 6fe08872 fetch 1 ,mem_usb_setup_windex + 1 
+0140 c08079e4 bne 0 ,usb0_force_stall 
+0141 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+0142 c0010144 beq out_endpoint ,p_usb0_request_clear_feature_out_endpoint 
+0143 20207ab7 branch usb0_request_clear_feature + 11 
+
+p_usb0_request_clear_feature_out_endpoint:
+0144 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+0145 c08079e4 bne endpoint_halt ,usb0_force_stall 
+0146 6fe08871 fetch 1 ,mem_usb_setup_windex 
+0147 c0017ad7 beq out_ep2 ,usb0_force_stall_ep2_in_off 
+0148 c001fad9 beq out_ep3 ,usb0_force_stall_ep3_in_off 
+0149 20207acc branch usb0_request_clear_feature_out_endpoint + 3 
+
+p_usb0_request_set_feature:
+014a 6fe08873 fetch 1 ,mem_usb_setup_blength 
+014b c08079e4 bne 0 ,usb0_force_stall 
+014c 6fe08874 fetch 1 ,mem_usb_setup_blengthh 
+014d c08079e4 bne 0 ,usb0_force_stall 
+014e 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+014f c0010151 beq out_endpoint ,p_usb0_request_set_feature_out_endpoint 
+0150 20207ae0 branch usb0_request_set_feature + 5 
+
+p_usb0_request_set_feature_out_endpoint:
+0151 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+0152 c08079e4 bne endpoint_halt ,usb0_force_stall 
+0153 6fe08870 fetch 1 ,mem_usb_setup_bvalueh 
+0154 c08079e4 bne 0 ,usb0_force_stall 
+0155 6fe08871 fetch 1 ,mem_usb_setup_windex 
+0156 c0017b02 beq out_ep2 ,usb0_force_stall_ep2_in_on 
+0157 c001fb04 beq out_ep3 ,usb0_force_stall_ep3_in_on 
+0158 20207af8 branch usb0_request_set_feature_out_endpoint + 5 
+
+p_usb_out_device:
+0159 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+015a 1ff1fe00 rshift4 pdata ,pdata 
+015b 1fe37e00 rshift pdata ,pdata 
+015c 1fe17e03 and_into 0x03 ,pdata 
+015d c0000133 beq standard_req ,p_usb_out_standard_req 
+015e c0008161 beq class_req ,p_usb_out_class_req 
+015f c00179e3 beq manufacturer_req ,usb_out_manufacturer_req 
+0160 2020235a branch assert 
+
+p_usb_out_class_req:
+0161 6fe0886e fetch 1 ,mem_usb_setup_brequest 
+0162 c0057b4b beq set_idle ,usb_set_idle 
+0163 c0048166 beq set_report ,p_usb_set_report 
+0164 c005fb7c beq set_protocol ,usb_set_protocol_req 
+0165 202079e4 branch usb0_force_stall 
+
+p_usb_set_report:
+0166 20003a98 nop 15000 
+0167 d8a00875 arg mem_usb0_set_report_data ,contw 
+0168 204000f1 call p_usb_rx_data 
+0169 7008f701 jam 1 ,mem_usb0_get_set_report 
+016a 20407b6e call usb_set_report_resume_judge 
+016b 6fe0c696 fetch 1 ,mem_setreport_count 
+016c 1fe0fe01 pincrease 1 
+016d 67e0c696 store 1 ,mem_setreport_count 
+016e 6fe1086f fetch 2 ,mem_usb_setup_bvalue 
+016f 67e108f5 store 2 ,mem_usb_setup_bvalue_temp 
+0170 708c1b02 jam 0x2 ,core_usb_clear_nak 
+0171 20207b65 branch usb_set_report_next 
+
+p_usb_tx:
+0172 6fe0890d fetch 1 ,mem_usb_tx_enable 
+0173 207a0000 rtn blank 
+0174 6ff08c25 fetch 1 ,core_usb_txbusy 
+0175 1fe17e0f and_into 0x0f ,pdata 
+0176 243a7c30 nbranch usb_inwake_state_tx_dispose ,blank 
+0177 6fe0890e fetch 1 ,mem_usb_device_enumeration_endflag 
+0178 203a7c06 branch usb_tx_fifo_release ,blank 
+0179 6fe08900 fetch 1 ,mem_usb_state 
+017a c001fc40 beq usb_sleep ,usb_windows_wakeup 
+017b c0817c06 bne usb_connected ,usb_tx_fifo_release 
+017c 6fe08902 fetch 1 ,mem_usb_clear_remote_wakeup 
+017d 243a7c06 nbranch usb_tx_fifo_release ,blank 
+017e 20400180 call p_usb_tx_data_ep1 
+017f 20200184 branch p_usb_tx_data_ep2 
+
+p_usb_tx_data_ep1:
+0180 6ff08c25 fetch 1 ,core_usb_txbusy 
+0181 1fe17e0f and_into 0x0f ,pdata 
+0182 247a0000 nrtn blank 
+0183 20207bf0 branch usb_tx_data_ep1 + 2 
+
+p_usb_tx_data_ep2:
+0184 6ff08c25 fetch 1 ,core_usb_txbusy 
+0185 1fe17e0f and_into 0x0f ,pdata 
+0186 247a0000 nrtn blank 
+0187 20207bfb branch usb_tx_data_ep2 + 2 
+
+p_rx_dcoc:
+0188 20758000 rtn wake 
+0189 20402160 call set_sync_on 
+018a d8400027 arg 39 ,temp 
+018b 2040216f call set_freq_rx 
+018c 204021a6 call rf_rx_enable 
+018d 708a257f jam 0x7f ,0x8a25 
+018e 708a301a jam 0x1a ,0x8a30 
+018f 708a3178 jam 0x78 ,0x8a31 
+0190 708a8fb2 jam 0xb2 ,0x8a8f 
+0191 708ac200 jam 0 ,0x8ac2 
+0192 708ac300 jam 0 ,0x8ac3 
+0193 d8e00006 arg 6 ,queue 
+0194 204001a5 call p_rx_dcoc_avg 
+0195 2a2ffe0d isolate1 13 ,rega 
+0196 2040211d call qset_start 
+0197 2a4ffe0d isolate1 13 ,regb 
+0198 2040211e call qset_p 
+0199 d8e00005 arg 5 ,queue 
+
+p_rx_dcoc_loop2:
+019a 2040211c call qset1_p 
+019b 2040211e call qset_p 
+019c 204001a5 call p_rx_dcoc_avg 
+019d d8a08ac2 arg 0x8ac2 ,contw 
+019e 1a31fe00 rshift4 rega ,pdata 
+019f 20402117 call qsetxor 
+01a0 1a51fe00 rshift4 regb ,pdata 
+01a1 20402117 call qsetxor 
+01a2 18e08fff increase -1 ,queue 
+01a3 2021019a branch p_rx_dcoc_loop2 ,positive 
+01a4 2020214f branch rx_dcoc_loop2 + 10 
+
+p_rx_dcoc_avg:
+01a5 2000003c nop 60 
+01a6 58000f00 setarg mem_dcoc_buf 
+01a7 67f10982 store 2 ,0x8982 
+01a8 58000ff0 setarg mem_dcoc_buf_end 
+01a9 67f10984 store 2 ,0x8984 
+01aa 70898109 jam 0x9 ,0x8981 
+01ab 70898103 jam 0x3 ,0x8981 
+01ac 70898006 jam 0x6 ,0x8980 
+01ad 2000003c nop 60 
+01ae da200000 arg 0 ,rega 
+01af da400000 arg 0 ,regb 
+01b0 df200010 arg 16 ,loopcnt 
+01b1 d8c00f00 arg mem_dcoc_buf ,contr 
+01b2 2020212d branch rx_dcoc_loop 
+
+p_rfpll_aac_ghpc:
+01b3 20758000 rtn wake 
+01b4 20202272 branch rfpll_aac_ghpc + 1 
+
+p_dpll_ring_ibias_calc:
+01b5 20600000 rtn 
+
+p_sadc_calibration:
+01b6 20758000 rtn wake 
+01b7 708a0777 jam 0x77 ,core_gpadc_ctrl 
+01b8 708a08c9 jam 0xc9 ,core_gpadc_cfg0 
+01b9 708a0b01 jam 0x01 ,core_gpadc_cfg3 
+01ba 6fe0c409 fetch 1 ,mem_adc_clkdiv 
+01bb 67f080cd store 1 ,core_sadc_clkdiv 
+01bc 20000bb8 nop 3000 
+01bd 204001de call p_sadc_read 
+01be 708a08c1 jam 0xc1 ,core_gpadc_cfg0 
+01bf 6a40c419 fetchr regb ,1 ,mem_spi_write_addr 
+01c0 df200008 arg 8 ,loopcnt 
+01c1 20406f58 call sadc_cal_read + 1 
+01c2 6fe0c419 fetch 1 ,mem_spi_write_addr 
+01c3 67e0c433 store 1 ,mem_adc_cal_c7 
+01c4 6240c419 storer regb ,1 ,mem_spi_write_addr 
+01c5 20600000 rtn 
+
+p_enable_adc:
+01c6 204001d4 call p_sadc_cal_write 
+01c7 6ff08a09 fetch 1 ,core_gpadc_cfg1 
+01c8 793ffe07 set0 7 ,pdata 
+01c9 67f08a09 store 1 ,core_gpadc_cfg1 
+01ca 708a0777 jam 0x77 ,core_gpadc_ctrl 
+01cb 708a08c1 jam 0xc1 ,core_gpadc_cfg0 
+01cc 708a0b01 jam 0x01 ,core_gpadc_cfg3 
+01cd 20406f90 call sadc_channel 
+01ce 6fe0c409 fetch 1 ,mem_adc_clkdiv 
+01cf 67f080cd store 1 ,core_sadc_clkdiv 
+01d0 20000bb8 nop 3000 
+01d1 204001de call p_sadc_read 
+01d2 7080cd00 jam 0 ,core_sadc_clkdiv 
+01d3 20206fa1 branch sadc_dma 
+
+p_sadc_cal_write:
+01d4 6ff080cc fetch 1 ,core_sadc_ctrl 
+01d5 79207e01 set1 1 ,pdata 
+01d6 67f080cc store 1 ,core_sadc_ctrl 
+01d7 6a40c419 fetchr regb ,1 ,mem_spi_write_addr 
+01d8 6fe0c433 fetch 1 ,mem_adc_cal_c7 
+01d9 67e0c419 store 1 ,mem_spi_write_addr 
+01da df200008 arg 8 ,loopcnt 
+01db 20406f67 call sadc_cal_write + 4 
+01dc 6240c419 storer regb ,1 ,mem_spi_write_addr 
+01dd 20600000 rtn 
+
+p_sadc_read:
+01de 7080cc03 jam 0x03 ,core_sadc_ctrl 
+
+p_sadc_read_wait:
+01df 6ff08129 fetch 1 ,core_perf_status 
+01e0 c30281df bbit0 saradc_done ,p_sadc_read_wait 
+01e1 68590164 fetcht 2 ,core_sadc_data 
+01e2 6049440a storet 2 ,mem_adc_current_value 
+01e3 7080cc00 jam 0x00 ,core_sadc_ctrl 
+01e4 20600000 rtn 
+
+p_set_lemode:
+01e5 708a8211 jam 0x11 ,0x8a82 
+01e6 708a8d12 jam 0x12 ,0x8a8d 
+01e7 708a8e0a jam 0x0a ,0x8a8e 
+01e8 6fe0c099 fetch 1 ,mem_fcomp_div 
+01e9 c00801fe beq xtal_16m ,p_set_lemode_2m_16m 
+01ea 58005762 setarg 0x5762 
+01eb 67f10907 store 2 ,0x8907 
+
+p_set_lemode_2m:
+01ec 70890103 jam 3 ,0x8901 
+01ed 70893003 jam 3 ,0x8930 
+01ee c6168000 rtnmark1 mark_ble_2m 
+01ef 70890101 jam 1 ,0x8901 
+01f0 708a8207 jam 0x07 ,0x8a82 
+01f1 708a8d44 jam 0x44 ,0x8a8d 
+01f2 708a8e0a jam 0x0a ,0x8a8e 
+01f3 6fe0c099 fetch 1 ,mem_fcomp_div 
+01f4 c00801fb beq xtal_16m ,p_set_lemode_1m_16m 
+01f5 58002bb1 setarg 0x2bb1 
+01f6 67f10907 store 2 ,0x8907 
+
+p_set_lemode_1m:
+01f7 c6978000 rtnmark0 mark_ble_lr 
+01f8 70893024 jam 0x24 ,0x8930 
+01f9 70890105 jam 5 ,0x8901 
+01fa 20600000 rtn 
+
+p_set_lemode_1m_16m:
+01fb 58004189 setarg 0x4189 
+01fc 67f10907 store 2 ,0x8907 
+01fd 202001f7 branch p_set_lemode_1m 
+
+p_set_lemode_2m_16m:
+01fe 58008312 setarg 0x8312 
+01ff 67f10907 store 2 ,0x8907 
+0200 202001ec branch p_set_lemode_2m 
+
+p_usb0_request_get_descriptor:
+0201 6fe08870 fetch 1 ,mem_usb_setup_bvalueh 
+0202 c000fa14 beq dsc_device ,dsc_device_info 
+0203 c0010208 beq dsc_config ,p_dsc_config_info 
+0204 c001fa30 beq dsc_string ,dsc_string_info 
+0205 c010820b beq dsc_hid ,p_dsc_hid_info 
+0206 c011021a beq dsc_hid_report ,p_dsc_hid_report_info 
+0207 202079e4 branch usb0_force_stall 
+
+p_dsc_config_info:
+0208 58004755 setarg mem_confdesc_all 
+0209 6848c755 fetcht 1 ,mem_confdesc_all 
+020a 20207a18 branch dsc_info_set_data_len 
+
+p_dsc_hid_info:
+020b 7008fd00 jam 0 ,mem_usb_get_protocol_flag 
+020c 6fe08871 fetch 1 ,mem_usb_setup_windex 
+020d c0000211 beq 0 ,p_dsc_hid_info_interface0 
+020e c0008214 beq 1 ,p_dsc_hid_info_interface1 
+020f c0010217 beq 2 ,p_dsc_hid_info_interface2 
+0210 202079e4 branch usb0_force_stall 
+
+p_dsc_hid_info_interface0:
+0211 6a40c768 fetchr regb ,1 ,mem_confdesc_all + 19 
+0212 da204768 arg mem_confdesc_all + 19 ,rega 
+0213 20207b8b branch usb0_respond 
+
+p_dsc_hid_info_interface1:
+0214 6a40c781 fetchr regb ,1 ,mem_confdesc_all + 44 
+0215 da204781 arg mem_confdesc_all + 44 ,rega 
+0216 20207b8b branch usb0_respond 
+
+p_dsc_hid_info_interface2:
+0217 6a40c79a fetchr regb ,1 ,mem_confdesc_all + 69 
+0218 da20479a arg mem_confdesc_all + 69 ,rega 
+0219 20207b8b branch usb0_respond 
+
+p_dsc_hid_report_info:
+021a 6fe10871 fetch 2 ,mem_usb_setup_windex 
+021b c000021f beq 0 ,p_dsc_hid_report_info0 
+021c c0008222 beq 1 ,p_dsc_hid_report_info1 
+021d c0010224 beq 2 ,p_dsc_hid_report_info2 
+021e 202079e4 branch usb0_force_stall 
+
+p_dsc_hid_report_info0:
+021f 6a40c697 fetchr regb ,1 ,mem_hidreportdesc_interface0_kb 
+0220 58004697 setarg mem_hidreportdesc_interface0_kb 
+0221 20200228 branch p_usb0_respond_set 
+
+p_dsc_hid_report_info1:
+0222 6a2107a9 fetchr rega ,2 ,mem_hidreportdesc_m 
+0223 20207b89 branch usb0_respond_length 
+
+p_dsc_hid_report_info2:
+0224 70090e01 jam 1 ,mem_usb_device_enumeration_endflag 
+0225 70090001 jam usb_got_report_req ,mem_usb_state 
+0226 6a40c6dd fetchr regb ,1 ,mem_hidreportdesc_interface2_pc 
+0227 580046dd setarg mem_hidreportdesc_interface2_pc 
+
+p_usb0_respond_set:
+0228 1fe0fe01 increase 1 ,pdata 
+0229 1fe22200 copy pdata ,rega 
+022a 20207b8b branch usb0_respond 
+
+p_usb_init:
+022b 20407396 call enable_authrom 
+022c 20407932 call usb_init_param 
+
+p_usb_init_restart:
+022d 5800495a setarg mem_usb_clear_mem0_end 
+022e d8a04856 arg mem_usb_clear_mem0_start ,contw 
+022f 98a67200 isub contw ,loopcnt 
+0230 20407ca1 call clear_mem 
+0231 708c0000 jam 0x00 ,core_usb_config 
+0232 20002710 nop 10000 
+0233 708c1200 jam 0x0 ,core_usb_hmode 
+0234 6ff10050 fetch 2 ,core_clkoff 
+0235 793ffe0a set0 clock_off_usb ,pdata 
+0236 67f10050 store 2 ,core_clkoff 
+0237 708c1021 jam 0x21 ,core_usb_epmap 
+0238 708c119d jam 0x9d ,core_usb_pupd 
+0239 708c003c jam 0x3c ,core_usb_config 
+023a 580047b9 setarg mem_usb_rxbuf_new 
+023b 67f10c02 store 2 ,core_usb_rx_saddr 
+023c 67f10c06 store 2 ,core_usb_rxptr 
+023d 58004855 setarg mem_usb_rxbuf_new_end 
+023e 67f10c04 store 2 ,core_usb_rx_eaddr 
+023f 20207923 branch usb_init_next 
+
+p_usb_isr:
+0240 6ff08c22 fetch 1 ,core_usb_status 
+0241 2feffe03 isolate1 usb_status_reset ,pdata 
+0242 2040822d call p_usb_init_restart ,true 
+0243 2020790a branch usb_isr + 4 
+
+p_g24_search_mode_auto:
+0244 6fe0c616 fetch 1 ,mem_24g_work_mode 
+0245 c1838000 rtnne dongle_search 
+0246 20403476 call g24_search_mode_init 
+0247 204034ae call g24_auto_addr_ch_search 
+0248 2040033b call p_g24_receive_transmit_ack 
+0249 2437b3be nbranch g24_rx_interrupt_clear ,user3 
+024a 20403506 call g24_receiver_addr_check 
+024b 20428364 call p_g24_receive_packet_parse ,zero 
+024c 6fe0c60a fetch 1 ,mem_24g_abort_packet 
+024d 205a344d call g24_mode_b_s_switch_stop ,blank 
+024e 20203493 branch g24_search_mode_auto + 11 
+
+p_g24_bind_data_parse_next:
+024f 6fe0ca4c fetch 1 ,mem_24g_rxdata_temp_new + 2 
+0250 c0550255 beq datatype_bind ,p_g24_bind_first_step 
+0251 c02a8257 beq datatype_config ,p_g24_bind_second_step 
+0252 c011026d beq datatype_ok ,p_g24_bind_third_step 
+0253 c07f825f beq datatype_attemp ,p_g24_data_attemp 
+0254 20600000 rtn 
+
+p_g24_bind_first_step:
+0255 6fe0ca4d fetch 1 ,mem_24g_rxdata_temp_new + 3 
+0256 2020332a branch g24_bind_first_step + 1 
+
+p_g24_bind_second_step:
+0257 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+0258 203a025d branch p_g24_bind_second_step_skip ,blank 
+0259 6fe24a4e fetch 4 ,mem_24g_rxdata_temp_new + 4 
+025a 684a44f1 fetcht 4 ,mem_24g_lap 
+025b 98467c00 isub temp ,null 
+025c 24628000 nrtn zero 
+
+p_g24_bind_second_step_skip:
+025d 6fe0ca4d fetch 1 ,mem_24g_rxdata_temp_new + 3 
+025e 20203341 branch g24_bind_second_step_skip + 1 
+
+p_g24_data_attemp:
+025f 6fe0ca4d fetch 1 ,mem_24g_rxdata_temp_new + 3 
+0260 c0008263 beq datatype_device1 ,p_g24_data_attemp_device1 
+0261 c0010268 beq datatype_device2 ,p_g24_data_attemp_device2 
+0262 20600000 rtn 
+
+p_g24_data_attemp_device1:
+0263 6fe0c5de fetch 1 ,mem_24g_device1_bind_disable 
+0264 247a0000 nrtn blank 
+0265 6fe24a4e fetch 4 ,mem_24g_rxdata_temp_new + 4 
+0266 67e2462c store 4 ,mem_24g_transmitter_addr 
+0267 202035a3 branch g24_store_device1_addr 
+
+p_g24_data_attemp_device2:
+0268 6fe0c5df fetch 1 ,mem_24g_device2_bind_disable 
+0269 247a0000 nrtn blank 
+026a 6fe24a4e fetch 4 ,mem_24g_rxdata_temp_new + 4 
+026b 67e2462c store 4 ,mem_24g_transmitter_addr 
+026c 202035a9 branch g24_store_device2_addr 
+
+p_g24_bind_third_step:
+026d 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+026e 203a0273 branch p_g24_bind_third_step_skip ,blank 
+026f 6fe24a4e fetch 4 ,mem_24g_rxdata_temp_new + 4 
+0270 684a462c fetcht 4 ,mem_24g_transmitter_addr 
+0271 98467c00 isub temp ,null 
+0272 24628000 nrtn zero 
+
+p_g24_bind_third_step_skip:
+0273 6fe0ca4d fetch 1 ,mem_24g_rxdata_temp_new + 3 
+0274 c0008277 beq datatype_device1 ,p_g24_bind_third_step_device1 
+0275 c001027f beq datatype_device2 ,p_g24_bind_third_step_device2 
+0276 20600000 rtn 
+
+p_g24_bind_third_step_device1:
+0277 6fe0c5de fetch 1 ,mem_24g_device1_bind_disable 
+0278 247a0000 nrtn blank 
+0279 6fe0c5d3 fetch 1 ,mem_24g_device1_bind_step 
+027a c001027c beq 2 ,p_g24_bind_dvc1_step_success 
+027b 20600000 rtn 
+
+p_g24_bind_dvc1_step_success:
+027c 7045de01 jam 1 ,mem_24g_device1_bind_disable 
+027d 2040338d call g24_binding_dvc1_living 
+027e 2020336b branch g24_bind_dvc1_step_success + 1 
+
+p_g24_bind_third_step_device2:
+027f 6fe0c5df fetch 1 ,mem_24g_device2_bind_disable 
+0280 247a0000 nrtn blank 
+0281 6fe0c5d4 fetch 1 ,mem_24g_device2_bind_step 
+0282 c0800284 bne 0 ,p_g24_bind_dvc2_step_success 
+0283 20600000 rtn 
+
+p_g24_bind_dvc2_step_success:
+0284 7045df01 jam 1 ,mem_24g_device2_bind_disable 
+0285 20403393 call g24_binding_dvc2_living 
+0286 20203378 branch g24_bind_dvc2_step_success + 1 
+
+p_g24_mode_switch_bind_search:
+0287 6fe0c616 fetch 1 ,mem_24g_work_mode 
+0288 c1000000 rtneq dongle_work 
+0289 6fe0c62a fetch 1 ,mem_24g_b_s_mode_switch_disable 
+028a 247a0000 nrtn blank 
+028b 6fe0c628 fetch 1 ,mem_24g_mode_b_s_switch_exit 
+028c 247a0000 nrtn blank 
+028d 6fe0c624 fetch 1 ,mem_24g_mode_b_s_switch 
+028e 207a0000 rtn blank 
+028f 6fe0c5d3 fetch 1 ,mem_24g_device1_bind_step 
+0290 c1800000 rtnne 0 
+0291 6fe0c5d4 fetch 1 ,mem_24g_device2_bind_step 
+0292 c1800000 rtnne 0 
+0293 20203436 branch g24_mode_switch_bind_search + 9 
+
+p_g24_bind_mode_auto:
+0294 6fe0c616 fetch 1 ,mem_24g_work_mode 
+0295 c1808000 rtnne dongle_bind 
+0296 20400298 call p_g24_bind_init 
+0297 2020346d branch g24_bind_mode_auto + 4 
+
+p_g24_bind_init:
+0298 6fe0c615 fetch 1 ,mem_24g_mode_init 
+0299 c3808000 rtnbit1 dongle_bind 
+029a 79207e01 set1 dongle_bind ,pdata 
+029b 67e0c615 store 1 ,mem_24g_mode_init 
+029c 58000000 setarg 0 
+029d 67e1c5d3 store 3 ,mem_24g_device1_bind_step 
+029e 20203307 branch g24_bind_init + 8 
+
+p_dongle_usb_dispatch:
+029f 20204868 branch dongle_usb_dispatch + 1 
+
+p_wdt_kick:
+02a0 58000010 setarg 16 
+02a1 202070c8 branch wdt_init_config 
+
+p_dongle_default_init:
+02a2 204047c3 call dongle_default_init + 1 
+02a3 6fe0c695 fetch 1 ,mem_24g_pair_tx_power_init 
+02a4 67e0c5d1 store 1 ,mem_24g_pair_tx_power 
+02a5 7045ca01 jam on ,mem_24g_disable_fec1 
+02a6 20403281 call g24_enable_1m 
+02a7 6fe0c669 fetch 1 ,mem_dg_sys_config 
+02a8 c4000000 rtnbit0 dg_enable_new_revision 
+02a9 7045ca01 jam on ,mem_24g_disable_fec1 
+02aa 20203284 branch g24_enable_2m 
+
+p_g24_receive_skip_end:
+02ab 6fe0c669 fetch 1 ,mem_dg_sys_config 
+02ac c3003165 bbit0 dg_enable_new_revision ,g24_receive_skip_end + 1 
+02ad 7837fc00 enable user3 
+02ae 20000018 nop 24 
+02af 6fe0c95b fetch 1 ,mem_24g_rxbuf_new + 1 
+02b0 79207e00 set1 bit_ack_24g ,pdata 
+02b1 67e0c95b store 1 ,mem_24g_rxbuf_new + 1 
+02b2 204033a5 call g24_ackpayload_prep 
+02b3 204031e5 call g24_transmit_prep 
+02b4 20203195 branch g24_transmit 
+
+p_g24_pair_param_init:
+02b5 7045d04a jam 0x4a ,mem_24g_pair_ch 
+02b6 6fe24a9b fetch 4 ,mem_24g_pair_addr_new 
+02b7 67e245cc store 4 ,mem_24g_pair_addr 
+02b8 20600000 rtn 
+
+p_app_init:
+02b9 580047ea setarg dongle_dispatch 
+02ba 67e145e0 store 2 ,mem_cb_24g_receive_process 
+02bb 58000396 setarg p_dongle_g24_mouse 
+02bc 67e145e4 store 2 ,mem_cb_24g_data_device1 
+02bd 5800039f setarg p_dongle_g24_kb 
+02be 67e145e6 store 2 ,mem_cb_24g_data_device2 
+02bf 580002c4 setarg p_dongle_ackpayload_prep 
+02c0 67e145e2 store 2 ,mem_cb_24g_ackpayload 
+02c1 580047f9 setarg dongle_usb_config 
+02c2 67e10859 store 2 ,mem_cb_usb_config 
+02c3 20207912 branch usb_init 
+
+p_dongle_ackpayload_prep:
+02c4 6fe0c589 fetch 1 ,mem_24g_data_type 
+02c5 c00082c7 beq datatype_device1 ,p_dongle_ackpayload_prep_mouse 
+02c6 c00102ce beq datatype_device2 ,p_dongle_ackpayload_prep_keyboard 
+
+p_dongle_ackpayload_prep_mouse:
+02c7 6fe0c693 fetch 1 ,mem_dg_pc_sleep_flag 
+02c8 c28002ca bbit1 0 ,p_dongle_pc_sleep_ackpayload_prep_mouse 
+02c9 202002d0 branch p_dongle_ackpayload_prep_end 
+
+p_dongle_pc_sleep_ackpayload_prep_mouse:
+02ca 6fe0c693 fetch 1 ,mem_dg_pc_sleep_flag 
+02cb 793ffe00 set0 0 ,pdata 
+02cc 67e0c693 store 1 ,mem_dg_pc_sleep_flag 
+02cd 202002d7 branch p_dongle_pc_sleep_ackpayload_prep 
+
+p_dongle_ackpayload_prep_keyboard:
+02ce 6fe0c693 fetch 1 ,mem_dg_pc_sleep_flag 
+02cf c28082d4 bbit1 1 ,p_dongle_pc_sleep_ackpayload_prep_keyboard 
+
+p_dongle_ackpayload_prep_end:
+02d0 6fe0c611 fetch 1 ,mem_24g_ackpayload_enable 
+02d1 c00082db beq bind_ackpayload ,p_dongle_g24_bind_ackpayload_prep 
+02d2 c00182e3 beq kb_led_ackpayload ,p_dongle_g24_kb_led_ackpayload_prep 
+02d3 20600000 rtn 
+
+p_dongle_pc_sleep_ackpayload_prep_keyboard:
+02d4 6fe0c693 fetch 1 ,mem_dg_pc_sleep_flag 
+02d5 793ffe01 set0 1 ,pdata 
+02d6 67e0c693 store 1 ,mem_dg_pc_sleep_flag 
+
+p_dongle_pc_sleep_ackpayload_prep:
+02d7 70458801 jam 0x01 ,mem_24g_datalen 
+02d8 580000ff setarg 0xff 
+
+p_dongle_24g_txbuf_new_store:
+02d9 67e0c9aa store 1 ,mem_24g_txbuf_new 
+02da 20600000 rtn 
+
+p_dongle_g24_bind_ackpayload_prep:
+02db 70461101 jam 1 ,mem_24g_ackpayload_enable 
+02dc 204002ea call p_g24_binding_device_check 
+02dd 24778000 nrtn user3 
+
+p_g24_bind_ackpayload_prep:
+02de 70461101 jam 1 ,mem_24g_ackpayload_enable 
+02df 70458808 jam 0x08 ,mem_24g_datalen 
+02e0 d8c045d6 arg mem_24g_bind_payload ,contr 
+02e1 d8a049aa arg mem_24g_txbuf_new ,contw 
+02e2 20207c89 branch memcpy8 
+
+p_dongle_g24_kb_led_ackpayload_prep:
+02e3 6fe0c95c fetch 1 ,mem_24g_rxbuf_new + 2 
+02e4 c00082db beq datatype_device1 ,p_dongle_g24_bind_ackpayload_prep 
+02e5 c07f82db beq datatype_attemp ,p_dongle_g24_bind_ackpayload_prep 
+02e6 7008f900 jam 0 ,mem_usb_tx_win_enable 
+02e7 70458801 jam 0x01 ,mem_24g_datalen 
+02e8 6fe0c621 fetch 1 ,mem_24g_led_status 
+02e9 202002d9 branch p_dongle_24g_txbuf_new_store 
+
+p_g24_binding_device_check:
+02ea 6fe0c616 fetch 1 ,mem_24g_work_mode 
+02eb c1808000 rtnne dongle_bind 
+02ec 6fe0c610 fetch 1 ,mem_24g_pair_mode 
+02ed 247a0000 nrtn blank 
+02ee 6fe0c95d fetch 1 ,mem_24g_rxbuf_new + 3 
+02ef 20203383 branch g24_binding_device_check + 5 
+
+p_g24_transmit_prep:
+02f0 6fe0c588 fetch 1 ,mem_24g_datalen 
+02f1 1fe0fe03 increase 3 ,pdata 
+02f2 67e0c58a store 1 ,mem_24g_txlen 
+02f3 6fe0c5ac fetch 1 ,mem_24g_syncword_crc8 
+02f4 67e0c9fa store 1 ,mem_24g_txpayload_new 
+02f5 6fe0c589 fetch 1 ,mem_24g_data_type 
+02f6 1fe9fe00 lshift3 pdata ,pdata 
+02f7 6848c57e fetcht 1 ,mem_24g_pid 
+02f8 18410403 and temp ,0x03 ,temp 
+02f9 18438400 lshift temp ,temp 
+02fa 9841fe00 ior temp ,pdata 
+02fb 6848c57f fetcht 1 ,mem_24g_no_ack 
+02fc 9840fe00 iadd temp ,pdata 
+02fd e7e08005 istore 1 ,contw 
+02fe 6fe0c588 fetch 1 ,mem_24g_datalen 
+02ff e7e08005 istore 1 ,contw 
+0300 6fe0c588 fetch 1 ,mem_24g_datalen 
+0301 98007200 iforce loopcnt 
+0302 d8c049aa arg mem_24g_txbuf_new ,contr 
+0303 20407cda call memcpy 
+0304 202031fc branch g24_transmit_prep_pdu_end 
+
+p_g24_transmit_packet:
+0305 c517830a bmark1 mark_ble_lr ,p_g24_transmit_nolr 
+0306 6fe0c5ca fetch 1 ,mem_24g_disable_fec1 
+0307 243a030a nbranch p_g24_transmit_nolr ,blank 
+0308 784efc00 disable encode_fec0 
+0309 782dfc00 enable encode_fec1 
+
+p_g24_transmit_nolr:
+030a 7823fc00 enable enable_white 
+030b 7824fc00 enable enable_crc 
+030c 6fe0c58a fetch 1 ,mem_24g_txlen 
+030d 98007200 iforce loopcnt 
+030e d8c049fa arg mem_24g_txpayload_new ,contr 
+030f 202031b3 branch g24tr_loop 
+
+p_g24_receive_update_rxbuff:
+0310 2040317d call g24_receive_byte 
+0311 67e0c95a store 1 ,mem_24g_rxbuf_new 
+0312 c5138318 bmark1 mark_24g_rxmode ,p_g24_receive_skip 
+0313 6fe0c95a fetch 1 ,mem_24g_rxbuf_new 
+0314 1fe97e00 rshift3 pdata ,pdata 
+0315 6848c589 fetcht 1 ,mem_24g_data_type 
+0316 a8400e00 icompare bits_data ,temp 
+0317 2420b18c nbranch g24_type_error ,true 
+
+p_g24_receive_skip:
+0318 2040317d call g24_receive_byte 
+0319 e7e08005 istore 1 ,contw 
+031a 1fe67c4e sub pdata ,78 ,null 
+031b 2421318e nbranch g24_len_over_error ,positive 
+031c 1fe27200 copy pdata ,loopcnt 
+031d 2022b154 branch g24rx_nopayload ,zero 
+031e 20203151 branch g24rx_loop 
+
+p_g24_read_len_pid_crc:
+031f 6fe0c95b fetch 1 ,mem_24g_rxbuf_new + 1 
+0320 67e0c57d store 1 ,mem_24g_rxdata_length 
+0321 1fe0fe01 increase 1 ,pdata 
+0322 d8c0495b arg mem_24g_rxbuf_new + 1 ,contr 
+0323 98c08c00 iadd contr ,contr 
+0324 efe18006 ifetch 3 ,contr 
+0325 67e1c580 store 3 ,mem_24g_sta_crc 
+0326 6fe0c95a fetch 1 ,mem_24g_rxbuf_new 
+0327 1fe10401 and pdata ,0x01 ,temp 
+0328 6048ca9a storet 1 ,mem_24g_rxdata_ack_flag 
+0329 1fe30400 rshift pdata ,temp 
+032a 18410403 and temp ,0x03 ,temp 
+032b 6048c586 storet 1 ,mem_24g_sta_pid 
+032c 1fe97e00 rshift3 pdata ,pdata 
+032d 67e0c95a store 1 ,mem_24g_rxbuf_new 
+032e 20600000 rtn 
+
+p_g24_bind_data_process:
+032f 204033be call g24_rx_interrupt_clear 
+0330 20403119 call g24_receive_packet 
+0331 2437b3be nbranch g24_rx_interrupt_clear ,user3 
+0332 20400336 call p_g24_bind_data_parse 
+0333 2040033e call p_g24_transmit_ack 
+0334 20400346 call p_g24_bind_device_status_check 
+0335 20203316 branch g24_bind_data_process + 7 
+
+p_g24_bind_data_parse:
+0336 70462205 jam bind_mode_continue ,mem_24g_bind_mode_continue 
+0337 d8c0495a arg mem_24g_rxbuf_new ,contr 
+0338 d8a04a4a arg mem_24g_rxdata_temp_new ,contw 
+0339 20407c89 call memcpy8 
+033a 20203322 branch g24_bind_data_parse_next 
+
+p_g24_receive_transmit_ack:
+033b 204033be call g24_rx_interrupt_clear 
+033c 20403119 call g24_receive_packet 
+033d 24778000 nrtn user3 
+
+p_g24_transmit_ack:
+033e 6fe0c95a fetch 1 ,mem_24g_rxbuf_new 
+033f 1fe97e00 rshift3 pdata ,pdata 
+0340 67e0c589 store 1 ,mem_24g_data_type 
+0341 2040031f call p_g24_read_len_pid_crc 
+0342 6fe0ca9a fetch 1 ,mem_24g_rxdata_ack_flag 
+0343 2feffe00 isolate1 bit_ack_24g ,pdata 
+0344 2020b3fd branch g24tx_no_ack ,true 
+0345 202033fa branch g24tx_with_ack 
+
+p_g24_bind_device_status_check:
+0346 6fe0c5d5 fetch 1 ,mem_24g_bind_device_status 
+0347 207a0000 rtn blank 
+
+p_g24_bind_device_status:
+0348 6fe0ca4d fetch 1 ,mem_24g_rxdata_temp_new + 3 
+0349 2020339c branch g24_bind_device_status + 1 
+
+p_dongle_work_mode_auto:
+034a 6fe0c616 fetch 1 ,mem_24g_work_mode 
+034b c1800000 rtnne dongle_work 
+034c 2040035e call p_g24_work_mode_start 
+034d 20404827 call dongle_g24_blank_data_process 
+034e 6fe0c610 fetch 1 ,mem_24g_pair_mode 
+034f 247a0000 nrtn blank 
+0350 6fe0c611 fetch 1 ,mem_24g_ackpayload_enable 
+0351 c1800000 rtnne 0 
+0352 6fe0c614 fetch 1 ,mem_24g_nodata_timer_enable 
+0353 207a0000 rtn blank 
+0354 d8e00008 arg g24_timer_nodata ,queue 
+0355 20407cef call timer_check 
+0356 247a0000 nrtn blank 
+0357 2040351b call g24_ch_process + 3 
+0358 20203511 branch g24_nodata_timer_over 
+
+p_g24_ch_process:
+0359 6fe0c60a fetch 1 ,mem_24g_abort_packet 
+035a c000b5ea beq 1 ,rssi_noise_monitor 
+035b 6fe0c612 fetch 1 ,mem_24g_hop_packet 
+035c c000b52c beq 1 ,g24_ch_receive_hop_pac 
+035d 20600000 rtn 
+
+p_g24_work_mode_start:
+035e 6fe0c616 fetch 1 ,mem_24g_work_mode 
+035f c1800000 rtnne dongle_work 
+0360 20403451 call g24_work_init 
+0361 20400359 call p_g24_ch_process 
+
+p_g24_receive_packet_start:
+0362 2040033b call p_g24_receive_transmit_ack 
+0363 2437b3be nbranch g24_rx_interrupt_clear ,user3 
+
+p_g24_receive_packet_parse:
+0364 204033e3 call g24_receive_packet_parse_pid_crc 
+0365 243433be nbranch g24_rx_interrupt_clear ,user 
+0366 6fe0c57d fetch 1 ,mem_24g_rxdata_length 
+0367 203a33be branch g24_rx_interrupt_clear ,blank 
+0368 1fe0fe02 increase 2 ,pdata 
+0369 98007200 iforce loopcnt 
+036a d8c0495a arg mem_24g_rxbuf_new ,contr 
+036b d8a04a4a arg mem_24g_rxdata_temp_new ,contw 
+036c 20407cda call memcpy 
+036d 70461300 jam 0 ,mem_24g_mode_switch 
+036e 6fe0c610 fetch 1 ,mem_24g_pair_mode 
+036f 205a0377 call p_g24_enable_nodata_timer ,blank 
+
+p_g24_receive_packet_parse_end:
+0370 6fe0ca4c fetch 1 ,mem_24g_rxdata_temp_new + 2 
+0371 c07f837d beq datatype_attemp ,p_g24_data_receive_attemp 
+0372 c000837f beq datatype_device1 ,p_g24_data_device1 
+0373 c001038f beq datatype_device2 ,p_g24_data_device2 
+
+p_g24_rx_interrupt_clear:
+0374 d8a0495a arg mem_24g_rxbuf_new ,contw 
+0375 df200046 arg 70 ,loopcnt 
+0376 20207ca1 branch clear_mem 
+
+p_g24_enable_nodata_timer:
+0377 6fe0c62b fetch 1 ,mem_24g_bind_device_living 
+0378 203a33fe branch g24_enable_nodata_timer ,blank 
+0379 70461401 jam 1 ,mem_24g_nodata_timer_enable 
+037a 58000640 setarg 1600 
+037b d8e00008 arg g24_timer_nodata ,queue 
+037c 20207ce1 branch timer_init 
+
+p_g24_data_receive_attemp:
+037d 20400348 call p_g24_bind_device_status 
+037e 2020025f branch p_g24_data_attemp 
+
+p_g24_data_device1:
+037f 2040338d call g24_binding_dvc1_living 
+0380 2040352e call g24_ch_timer_reinit 
+0381 6fe0c60a fetch 1 ,mem_24g_abort_packet 
+0382 6848ca4a fetcht 1 ,mem_24g_rxdata_temp_new 
+0383 284ffe03 isolate1 bit_abort ,temp 
+0384 7920fe00 setflag true ,0 ,pdata 
+0385 67e0c60a store 1 ,mem_24g_abort_packet 
+0386 c000838a beq 1 ,p_g24_data_attemp_device1_abort 
+0387 6fe0c612 fetch 1 ,mem_24g_hop_packet 
+0388 6848ca4a fetcht 1 ,mem_24g_rxdata_temp_new 
+0389 202033ce branch g24_data_device1_next 
+
+p_g24_data_attemp_device1_abort:
+038a 6fe0c5de fetch 1 ,mem_24g_device1_bind_disable 
+038b 247a0000 nrtn blank 
+038c 7045de01 jam 1 ,mem_24g_device1_bind_disable 
+038d 6fe24a54 fetch 4 ,mem_24g_rxdata_temp_new + 10 
+038e 202035a3 branch g24_store_device1_addr 
+
+p_g24_data_device2:
+038f 20403393 call g24_binding_dvc2_living 
+0390 6848ca4a fetcht 1 ,mem_24g_rxdata_temp_new 
+0391 284ffe03 isolate1 bit_abort ,temp 
+0392 20208394 branch p_g24_data_attemp_device2_abort ,true 
+0393 202033d7 branch g24_data_device2 + 4 
+
+p_g24_data_attemp_device2_abort:
+0394 6fe24a54 fetch 4 ,mem_24g_rxdata_temp_new + 10 
+0395 202035a9 branch g24_store_device2_addr 
+
+p_dongle_g24_mouse:
+0396 58000001 setarg ms_report_id 
+0397 67e08913 store 1 ,mem_usb_mouse_data 
+0398 6fe3ca4d fetch 7 ,mem_24g_rxdata_temp_new + 3 
+0399 e7e38005 istore 7 ,contw 
+039a 6fe0ca4d fetch 1 ,mem_24g_rxdata_temp_new + 3 
+039b 245a48dd ncall dongle_g24_ms_enable_blank_data_forcibly ,blank 
+039c 6fe0ca4d fetch 1 ,mem_24g_rxdata_temp_new + 3 
+039d 205a48e1 call dongle_g24_ms_disable_blank_data_forcibly ,blank 
+039e 20204836 branch dongle_usb_tx_ms_data 
+
+p_dongle_g24_kb:
+039f 6fe0ca4d fetch 1 ,mem_24g_rxdata_temp_new + 3 
+03a0 c00003a4 beq 0 ,p_dongle_g24_kb_type0 
+03a1 c00103aa beq 2 ,p_dongle_g24_kb_type2 
+03a2 c00183ad beq 3 ,p_dongle_g24_kb_type3 
+03a3 202033be branch g24_rx_interrupt_clear 
+
+p_dongle_g24_kb_type0:
+03a4 6fe0ca4f fetch 1 ,mem_24g_rxdata_temp_new + 5 
+03a5 67e0c611 store 1 ,mem_24g_ackpayload_enable 
+03a6 704a4f00 jam 0 ,mem_24g_rxdata_temp_new + 5 
+03a7 d8a00923 arg mem_usb_kb_data ,contw 
+03a8 d8c04a4e arg mem_24g_rxdata_temp_new + 4 ,contr 
+03a9 202048ef branch dongle_g24_kb_type0 + 5 
+
+p_dongle_g24_kb_type2:
+03aa d8a00943 arg mem_usb_kb_system ,contw 
+03ab d8c04a4d arg mem_24g_rxdata_temp_new + 3 ,contr 
+03ac 2020491f branch dongle_g24_kb_type2 + 2 
+
+p_dongle_g24_kb_type3:
+03ad d8a00933 arg mem_usb_kb_multikey ,contw 
+03ae d8c04a4d arg mem_24g_rxdata_temp_new + 3 ,contr 
+03af 20204907 branch dongle_g24_kb_type3 + 2 
+              org 0x2000
+
+start:
+2000 20402385 call lpmstate 
+
+soft_reset:
+2001 44804000 bpatch patch00_0 ,mem_patch00 
+2002 20800000 clear_stack 
+2003 204042a3 call app_param_init 
+2004 2040223d call initialize_radio 
+2005 20406cad call iic_init_360khz 
+2006 20402363 call init_param 
+2007 20406946 call l2cap_init 
+2008 4480c000 bpatch patch00_1 ,mem_patch00 
+2009 2040776f call ui_init 
+200a 20404295 call app_init 
+200b 20407447 call publickey_init 
+200c 2055a44f call lpm_recover_clk ,wake 
+
+main_loop:
+200d 44814000 bpatch patch00_2 ,mem_patch00 
+200e 20407552 call sp_calc_sequence_256 
+200f 20407448 call sp_calc_sequence_256_check 
+2010 20402a45 call le_advertising_dispatch 
+2011 2040202a call idle_dispatch 
+2012 204042ad call app_process_idle 
+2013 20402018 call connection_dispatch 
+2014 2040310f call g24_dispatch 
+2015 2040248c call lpm_dispatch 
+2016 20404bfb call kscan_dispatch 
+2017 2020200d 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 202025bc 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 c2802536 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 2020235a 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 7001bc1b 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 c2807cda 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 20207cda 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 20207db8 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 20207db8 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 67e48678 store 9 ,mem_temp 
+2089 44854001 bpatch patch01_2 ,mem_patch01 
+208a 6fe0c46d fetch 1 ,mem_sc_calc 
+208b 243a2090 nbranch context_search_sniff_sc ,blank 
+208c 6fe48678 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 6fe48678 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 20207db8 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 20207db8 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 20202609 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 20207db8 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 2030a152 branch shutdown_radio ,is_rx 
+20d9 37d38200 until null ,tx_clear 
+20da 20000064 nop 100 
+20db 20202152 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 20207dba 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 20407d5f 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 70898308 jam 8 ,0x8983 
+2124 70898509 jam 9 ,0x8985 
+2125 70898109 jam 0x9 ,0x8981 
+2126 70898103 jam 0x3 ,0x8981 
+2127 70898006 jam 0x6 ,0x8980 
+2128 2000003c nop 60 
+2129 da200000 arg 0 ,rega 
+212a da400000 arg 0 ,regb 
+212b df200010 arg 16 ,loopcnt 
+212c d8c00800 arg 0x800 ,contr 
+
+rx_dcoc_loop:
+212d efe10006 ifetch 2 ,contr 
+212e 9a20a200 iadd rega ,rega 
+212f efe10006 ifetch 2 ,contr 
+2130 9a40a400 iadd regb ,regb 
+2131 c200212d loop rx_dcoc_loop 
+2132 20600000 rtn 
+
+rx_dcoc:
+2133 4487c001 bpatch patch01_7 ,mem_patch01 
+2134 20402160 call set_sync_on 
+2135 d8400027 arg 39 ,temp 
+2136 2040216f call set_freq_rx 
+2137 204021a6 call rf_rx_enable 
+2138 708a257f jam 0x7f ,0x8a25 
+2139 708a301a jam 0x1a ,0x8a30 
+213a 708a3178 jam 0x78 ,0x8a31 
+213b 708a8fb2 jam 0xb2 ,0x8a8f 
+213c 708ac200 jam 0 ,0x8ac2 
+213d 708ac300 jam 0 ,0x8ac3 
+213e d8e00006 arg 6 ,queue 
+213f 20402122 call rx_dcoc_avg 
+2140 2a2ffe0d isolate1 13 ,rega 
+2141 2040211d call qset_start 
+2142 2a4ffe0d isolate1 13 ,regb 
+2143 2040211e call qset_p 
+2144 d8e00005 arg 5 ,queue 
+
+rx_dcoc_loop2:
+2145 2040211c call qset1_p 
+2146 2040211e call qset_p 
+2147 20402122 call rx_dcoc_avg 
+2148 d8a08ac2 arg 0x8ac2 ,contw 
+2149 1a31fe00 rshift4 rega ,pdata 
+214a 20402117 call qsetxor 
+214b 1a51fe00 rshift4 regb ,pdata 
+214c 20402117 call qsetxor 
+214d 18e08fff increase -1 ,queue 
+214e 20212145 branch rx_dcoc_loop2 ,positive 
+214f 708a8f52 jam 0x52 ,0x8a8f 
+2150 708a3002 jam 2 ,0x8a30 
+2151 70898100 jam 0 ,0x8981 
+
+shutdown_radio:
+2152 44884002 bpatch patch02_0 ,mem_patch02 
+2153 20406875 call rf_debug_shutdown_radio_line 
+2154 78507c00 disable is_tx 
+2155 7850fc00 disable is_rx 
+2156 58000200 setarg 0x0200 
+2157 67f20a23 store 4 ,0x8a23 
+2158 708a01fa jam 0xfa ,0x8a01 
+2159 2000000c nop 12 
+215a 708a0f00 jam 0 ,0x8a0f 
+215b 708a121a jam 0x1a ,0x8a12 
+215c 708a142b jam 0x2b ,0x8a14 
+215d 18002a08 force 8 ,radio_ctrl 
+215e 18002a00 force 0 ,radio_ctrl 
+215f 2020230f branch gain_control 
+
+set_sync_on:
+2160 4488c002 bpatch patch02_1 ,mem_patch02 
+2161 708a0f60 jam 0x60 ,0x8a0f 
+2162 708a10aa jam 0xaa ,0x8a10 
+2163 708a127a jam 0x7a ,0x8a12 
+2164 708a2500 jam 0x00 ,0x8a25 
+2165 708a2600 jam 0x00 ,0x8a26 
+2166 2000003c nop 60 
+2167 708a2020 jam 0x20 ,0x8a20 
+2168 708a23fd jam 0xfd ,0x8a23 
+
+set_sync_on_next:
+2169 708a2412 jam 0x12 ,0x8a24 
+216a 708a2410 jam 0x10 ,0x8a24 
+216b 2000003c nop 60 
+216c 708a1260 jam 0x60 ,0x8a12 
+216d 708a23dd jam 0xdd ,0x8a23 
+216e 20600000 rtn 
+
+set_freq_rx:
+216f 44894002 bpatch patch02_2 ,mem_patch02 
+2170 70890001 jam 0x01 ,0x8900 
+2171 708a239d jam 0x9d ,0x8a23 
+2172 708a2402 jam 0x02 ,0x8a24 
+2173 20000014 nop 20 
+2174 708a7065 jam 0x65 ,0x8a70 
+2175 708a239f jam 0x9f ,0x8a23 
+2176 2040218f call set_lemode 
+2177 60488008 storet 1 ,mem_last_freq 
+2178 18408401 increase 1 ,temp 
+
+aac_res_lookup:
+2179 4489c002 bpatch patch02_3 ,mem_patch02 
+217a 1851fe00 rshift4 temp ,pdata 
+217b d8c04135 arg mem_aac_res_table ,contr 
+217c 98c08c00 iadd contr ,contr 
+217d efe08006 ifetch 1 ,contr 
+217e 6a308a71 fetchr rega ,1 ,0x8a71 
+217f 1a21220f and_into 0xf ,rega 
+2180 9a21fe00 ior rega ,pdata 
+2181 67f08a71 store 1 ,0x8a71 
+2182 204021d0 call calc_freq 
+2183 20000090 nop 144 
+2184 6fe0c099 fetch 1 ,mem_fcomp_div 
+2185 c00c2187 beq xtal_24m ,aac_res_lookup_end 
+2186 20000024 nop 36 
+
+aac_res_lookup_end:
+2187 708a2080 jam 0x80 ,0x8a20 
+2188 20600000 rtn 
+
+set_lemode_2m_16m:
+2189 58008312 setarg 0x8312 
+218a 67f10907 store 2 ,0x8907 
+218b 20202197 branch set_lemode_2m 
+
+set_lemode_1m_16m:
+218c 58004189 setarg 0x4189 
+218d 67f10907 store 2 ,0x8907 
+218e 202021a3 branch set_lemode_1m 
+
+set_lemode:
+218f 448a4002 bpatch patch02_4 ,mem_patch02 
+2190 708a8211 jam 0x11 ,0x8a82 
+2191 708a8d12 jam 0x12 ,0x8a8d 
+2192 708a8e0a jam 0x0a ,0x8a8e 
+2193 6fe0c099 fetch 1 ,mem_fcomp_div 
+2194 c0082189 beq xtal_16m ,set_lemode_2m_16m 
+2195 58005762 setarg 0x5762 
+2196 67f10907 store 2 ,0x8907 
+
+set_lemode_2m:
+2197 70890103 jam 3 ,0x8901 
+2198 70892084 jam 0x84 ,0x8920 
+2199 c6168000 rtnmark1 mark_ble_2m 
+219a 70890101 jam 1 ,0x8901 
+219b 70892080 jam 0x80 ,0x8920 
+219c 708a8207 jam 0x07 ,0x8a82 
+219d 708a8d44 jam 0x44 ,0x8a8d 
+219e 708a8e0a jam 0x0a ,0x8a8e 
+219f 6fe0c099 fetch 1 ,mem_fcomp_div 
+21a0 c008218c beq xtal_16m ,set_lemode_1m_16m 
+21a1 58002bb1 setarg 0x2bb1 
+21a2 67f10907 store 2 ,0x8907 
+
+set_lemode_1m:
+21a3 c6978000 rtnmark0 mark_ble_lr 
+21a4 70890105 jam 5 ,0x8901 
+21a5 20600000 rtn 
+
+rf_rx_enable:
+21a6 448ac002 bpatch patch02_5 ,mem_patch02 
+21a7 2040686f call rf_debug_rx_gpio_high 
+21a8 204021ba call rf_rx_agc_set 
+21a9 18002a08 force 8 ,radio_ctrl 
+21aa 18002a00 force 0 ,radio_ctrl 
+21ab 580aaada setarg 0x0aaada 
+21ac 67f18a0f store 3 ,0x8a0f 
+21ad 708a2540 jam 0x40 ,0x8a25 
+21ae 708a2610 jam 0x10 ,0x8a26 
+21af 2000003c nop 60 
+21b0 708a01fb jam 0xfb ,0x8a01 
+21b1 708a25ff jam 0xff ,0x8a25 
+21b2 708a2630 jam 0x30 ,0x8a26 
+21b3 708a165e jam 0x5e ,0x8a16 
+21b4 20000014 nop 20 
+21b5 708a1000 jam 0x00 ,0x8a10 
+21b6 708a1108 jam 0x08 ,0x8a11 
+21b7 20000078 nop 120 
+21b8 7089000d jam 0xd ,0x8900 
+21b9 20600000 rtn 
+
+rf_rx_agc_set:
+21ba 6fe0c143 fetch 1 ,mem_gain_fix 
+21bb c07fa1c1 beq 0xff ,rf_rx_enable_no_soft_agc 
+21bc d8c04144 arg mem_gain_table ,contr 
+21bd 98c08c00 iadd contr ,contr 
+21be efe08006 ifetch 1 ,contr 
+21bf 67f08961 store 1 ,core_rf_rx_gain_fix 
+21c0 70896027 jam 0x27 ,core_rf_rx_agc_ctrl 
+
+rf_rx_enable_no_soft_agc:
+21c1 6848c147 fetcht 1 ,mem_gain_second_agc_en 
+21c2 6ff08960 fetch 1 ,core_rf_rx_agc_ctrl 
+21c3 9841fe00 ior temp ,pdata 
+21c4 67f08960 store 1 ,core_rf_rx_agc_ctrl 
+21c5 20600000 rtn 
+
+set_freq_tx_int:
+21c6 70890003 jam 0x03 ,0x8900 
+21c7 708a2402 jam 0x02 ,0x8a24 
+21c8 20000014 nop 20 
+21c9 708a7065 jam 0x65 ,0x8a70 
+21ca 708a23df jam 0xdf ,0x8a23 
+21cb 2040218f call set_lemode 
+21cc 204021e8 call ghp_lookup 
+21cd 60488008 storet 1 ,mem_last_freq 
+21ce 18408402 increase 2 ,temp 
+21cf 20202179 branch aac_res_lookup 
+
+calc_freq:
+21d0 448b4002 bpatch patch02_6 ,mem_patch02 
+21d1 58000960 setarg 2400 
+21d2 9840fe00 iadd temp ,pdata 
+21d3 1fe22200 copy pdata ,rega 
+21d4 6848c099 fetcht 1 ,mem_fcomp_div 
+21d5 18430400 rshift temp ,temp 
+21d6 9846fc00 idiv temp 
+21d7 20407d62 call wait_div_end 
+21d8 1807fe00 quotient pdata 
+21d9 67f10909 store 2 ,0x8909 
+21da 18077e00 remainder pdata 
+21db 1ff07e00 lshift16 pdata ,pdata 
+21dc 1fed7e00 lshift8 pdata ,pdata 
+21dd 9846fc00 idiv temp 
+21de 20407d62 call wait_div_end 
+21df 1807fe00 quotient pdata 
+21e0 67f1890b store 3 ,0x890b 
+21e1 62308a22 storer rega ,1 ,0x8a22 
+21e2 1a2ca200 rshift8 rega ,rega 
+21e3 62308a21 storer rega ,1 ,0x8a21 
+21e4 708a20a0 jam 0xa0 ,0x8a20 
+21e5 708a20e0 jam 0xe0 ,0x8a20 
+21e6 708a20a0 jam 0xa0 ,0x8a20 
+21e7 20600000 rtn 
+
+ghp_lookup:
+21e8 1840fe02 add temp ,2 ,pdata 
+21e9 1fe97e00 rshift3 pdata ,pdata 
+21ea 1fe17ffe and_into -2 ,pdata 
+21eb d8c0411d arg mem_ghpc_table ,contr 
+21ec c596a1ee bmark0 mark_ble_2m ,ghp_1m 
+21ed 18c08c0c increase 12 ,contr 
+
+ghp_1m:
+21ee 98c08c00 iadd contr ,contr 
+21ef ea210006 ifetchr rega ,2 ,contr 
+21f0 efe10006 ifetch 2 ,contr 
+21f1 9a267e00 isub rega ,pdata 
+21f2 18408c02 add temp ,2 ,contr 
+21f3 18c10c0f and_into 0xf ,contr 
+21f4 98cffe00 imul32 contr ,pdata 
+21f5 1ff1fe00 rshift4 pdata ,pdata 
+21f6 9a20fe00 iadd rega ,pdata 
+21f7 67f10905 store 2 ,0x8905 
+21f8 20600000 rtn 
+
+set_freq_tx:
+21f9 448bc002 bpatch patch02_7 ,mem_patch02 
+21fa 204021c6 call set_freq_tx_int 
+21fb 20000258 nop 600 
+
+txon:
+21fc 448c4003 bpatch patch03_0 ,mem_patch03 
+21fd 580aaa7e setarg 0x0aaa7e 
+21fe 67f18a0f store 3 ,0x8a0f 
+21ff 2000003c nop 60 
+2200 708a2500 jam 0x00 ,0x8a25 
+2201 708a260d jam 0x0d ,0x8a26 
+2202 708a1656 jam 0x56 ,0x8a16 
+2203 2000001e nop 30 
+2204 708a151b jam 0x1b ,0x8a15 
+2205 2040220c call set_tx_power 
+2206 20000014 nop 20 
+2207 708a260f jam 0x0f ,0x8a26 
+2208 20000014 nop 20 
+2209 708a10a8 jam 0xa8 ,0x8a10 
+220a 708a1100 jam 0x00 ,0x8a11 
+220b 20600000 rtn 
+
+set_tx_power:
+220c 448cc003 bpatch patch03_1 ,mem_patch03 
+220d 6fe0c141 fetch 1 ,mem_tx_power 
+220e c0002217 beq tx_power_0db ,set_tx_power_0db 
+220f c001a21c beq tx_power_3db ,set_tx_power_3db 
+2210 c002a221 beq tx_power_5db ,set_tx_power_5db 
+2211 c003a225 beq tx_power_7db ,set_tx_power_7db 
+2212 c0052229 beq tx_power_10db ,set_tx_power_10db 
+2213 c041a22d beq tx_power_f3db ,set_tx_power_f3db 
+2214 c042a231 beq tx_power_f5db ,set_tx_power_f5db 
+2215 c0452235 beq tx_power_f10db ,set_tx_power_f10db 
+2216 c04a2239 beq tx_power_f20db ,set_tx_power_f20db 
+
+set_tx_power_0db:
+2217 708a1417 jam 0x17 ,0x8a14 
+2218 58251a3f setarg 0x251a3f 
+2219 67f18a60 store 3 ,0x8a60 
+
+set_tx_power_8a63_28:
+221a 708a6328 jam 0x28 ,0x8a63 
+221b 20600000 rtn 
+
+set_tx_power_3db:
+221c 708a1425 jam 0x25 ,0x8a14 
+221d 58a91c2d setarg 0xa91c2d 
+221e 67f18a60 store 3 ,0x8a60 
+
+set_tx_power_8a63_2f:
+221f 708a632f jam 0x2f ,0x8a63 
+2220 20600000 rtn 
+
+set_tx_power_5db:
+2221 708a1425 jam 0x25 ,0x8a14 
+2222 58a91c3f setarg 0xa91c3f 
+2223 67f18a60 store 3 ,0x8a60 
+2224 2020221f branch set_tx_power_8a63_2f 
+
+set_tx_power_7db:
+2225 708a1425 jam 0x25 ,0x8a14 
+2226 58a9383f setarg 0xa9383f 
+2227 67f18a60 store 3 ,0x8a60 
+2228 2020221f branch set_tx_power_8a63_2f 
+
+set_tx_power_10db:
+2229 708a1425 jam 0x25 ,0x8a14 
+222a 58a93f3f setarg 0xa93f3f 
+222b 67f18a60 store 3 ,0x8a60 
+222c 2020221f branch set_tx_power_8a63_2f 
+
+set_tx_power_f3db:
+222d 708a1417 jam 0x17 ,0x8a14 
+222e 58251827 setarg 0x251827 
+222f 67f18a60 store 3 ,0x8a60 
+2230 2020221a branch set_tx_power_8a63_28 
+
+set_tx_power_f5db:
+2231 708a1417 jam 0x17 ,0x8a14 
+2232 5825181c setarg 0x25181c 
+2233 67f18a60 store 3 ,0x8a60 
+2234 2020221a branch set_tx_power_8a63_28 
+
+set_tx_power_f10db:
+2235 708a1417 jam 0x17 ,0x8a14 
+2236 5825180b setarg 0x25180b 
+2237 67f18a60 store 3 ,0x8a60 
+2238 2020221a branch set_tx_power_8a63_28 
+
+set_tx_power_f20db:
+2239 708a1417 jam 0x17 ,0x8a14 
+223a 58251000 setarg 0x251000 
+223b 67f18a60 store 3 ,0x8a60 
+223c 2020221a branch set_tx_power_8a63_28 
+
+initialize_radio:
+223d 70804206 jam clksel_rc ,core_clksel 
+
+initialize_radio_wait:
+223e 6fe1409c fetch 2 ,mem_rf_init_ptr 
+223f c307223e bbit0 14 ,initialize_radio_wait 
+2240 98000c00 iforce contr 
+2241 d8408a00 arg 0x8a00 ,temp 
+
+initialize_radio_loop:
+2242 efe08006 ifetch 1 ,contr 
+2243 c07fa248 beq 0xff ,initialize_radio_cont 
+2244 98418a00 ior temp ,contw 
+2245 efe08006 ifetch 1 ,contr 
+2246 e7e08005 istore 1 ,contw 
+2247 20202242 branch initialize_radio_loop 
+
+initialize_radio_cont:
+2248 448d4003 bpatch patch03_2 ,mem_patch03 
+2249 6fe0c436 fetch 1 ,mem_wdt_always_work 
+224a 205a70d7 call wdt_set_disable ,blank 
+224b 37d98200 until null ,lpo_edge 
+224c 70813b5f jam 0x5f ,0x813b 
+224d 6fe0c099 fetch 1 ,mem_fcomp_div 
+224e c0082266 beq xtal_16m ,initialize_radio_16m 
+224f 6fe0c438 fetch 1 ,mem_ring_ibias_trim 
+2250 1fe1fe04 or_into 0x04 ,pdata 
+2251 67f08a02 store 1 ,0x8a02 
+2252 70890f01 jam 0x01 ,0x890f 
+2253 708a8024 jam 0x24 ,0x8a80 
+2254 708a8162 jam 0x62 ,0x8a81 
+2255 58e61212 setarg 0xe61212 
+2256 67f18a73 store 3 ,0x8a73 
+
+initialize_radio2:
+2257 708a8660 jam 0x60 ,0x8a86 
+2258 708a8b3b jam 0x3b ,0x8a8b 
+2259 20402286 call dpll_on 
+225a 70804300 jam 0 ,core_config 
+225b 70804205 jam clksel_dpll ,core_clksel 
+225c 58557474 setarg 0x557474 
+225d 67f18968 store 3 ,0x8968 
+225e 7089606e jam 0x6e ,0x8960 
+225f 20402133 call rx_dcoc 
+2260 20402271 call rfpll_aac_ghpc 
+2261 6fe0c11c fetch 1 ,mem_xtal_c_sel 
+2262 67f0813a store 1 ,core_xtal_cap 
+2263 7041480c jam system_clk_12m ,mem_system_clk 
+2264 20406f4e call sadc_calibration 
+2265 202022b4 branch dpll_ring_ibias_calc 
+
+initialize_radio_16m:
+2266 6fe0c438 fetch 1 ,mem_ring_ibias_trim 
+2267 1fe1fe06 or_into 0x06 ,pdata 
+2268 67f08a02 store 1 ,0x8a02 
+2269 70890f00 jam 0x00 ,0x890f 
+226a 708a8023 jam 0x23 ,0x8a80 
+226b 708a81b0 jam 0xb0 ,0x8a81 
+226c 58e40909 setarg 0xe40909 
+226d 67f18a73 store 3 ,0x8a73 
+226e 708a762a jam 0x2a ,0x8a76 
+226f 70890204 jam 0x04 ,0x8902 
+2270 20202257 branch initialize_radio2 
+
+rfpll_aac_ghpc:
+2271 448dc003 bpatch patch03_3 ,mem_patch03 
+2272 20402160 call set_sync_on 
+2273 70890003 jam 3 ,0x8900 
+2274 708a7001 jam 0x1 ,0x8a70 
+2275 da40411d arg mem_ghpc_table ,regb 
+2276 db004135 arg mem_aac_res_table ,regd 
+2277 2040227c call rfpll_aac_ghpc_once 
+2278 7920002d set1 mark_ble_2m ,mark 
+2279 2040227c call rfpll_aac_ghpc_once 
+227a 708a7061 jam 0x61 ,0x8a70 
+227b 20202152 branch shutdown_radio 
+
+rfpll_aac_ghpc_once:
+227c 2040218f call set_lemode 
+227d df200006 arg 6 ,loopcnt 
+227e da600000 arg 0 ,regc 
+
+rfpll_cal_loop:
+227f 1a620400 copy regc ,temp 
+2280 20402294 call aac_ghpc 
+2281 1a40a402 increase 2 ,regb 
+2282 1b00b001 increase 1 ,regd 
+2283 1a60a610 increase 16 ,regc 
+2284 c200227f loop rfpll_cal_loop 
+2285 20600000 rtn 
+
+dpll_on:
+2286 6fe0c099 fetch 1 ,mem_fcomp_div 
+2287 c00c228c beq xtal_24m ,dpll_on_24m 
+2288 6fe0c438 fetch 1 ,mem_ring_ibias_trim 
+2289 1fe1fe06 or_into 0x06 ,pdata 
+228a 67f08a02 store 1 ,0x8a02 
+228b 708a05e0 jam 0xe0 ,0x8a05 
+
+dpll_on_24m:
+228c 708a00c8 jam 0xc8 ,0x8a00 
+228d 2000003c nop 60 
+228e 708a01a0 jam 0xa0 ,0x8a01 
+228f 708a00cf jam 0xcf ,0x8a00 
+2290 708a01fa jam 0xfa ,0x8a01 
+2291 20000014 nop 20 
+2292 708a008f jam 0x8f ,0x8a00 
+2293 20600000 rtn 
+
+aac_ghpc:
+2294 448e4003 bpatch patch03_4 ,mem_patch03 
+2295 708a2030 jam 0x30 ,0x8a20 
+2296 708a23dd jam 0xdd ,0x8a23 
+2297 204021d0 call calc_freq 
+
+wait_cal_done:
+2298 6ff08a7c fetch 1 ,0x8a7c 
+2299 c3002298 bbit0 0 ,wait_cal_done 
+229a 708a7b30 jam 0x30 ,0x8a7b 
+229b 204022ae call read_cal_result 
+229c 98002200 iforce rega 
+229d 708a7b40 jam 0x40 ,0x8a7b 
+229e 204022ae call read_cal_result 
+229f 9a267e00 isub rega ,pdata 
+22a0 1fef847d mul32 pdata ,125 ,temp 
+22a1 58b00000 setarg 0xb00000 
+22a2 9846fc00 idiv temp 
+22a3 20407d62 call wait_div_end 
+22a4 1807fe00 quotient pdata 
+22a5 c596a2a7 bmark0 mark_ble_2m ,aac_ghpc_1m 
+22a6 1fe3fe00 lshift pdata ,pdata 
+
+aac_ghpc_1m:
+22a7 e7e10012 istore 2 ,regb 
+22a8 708a7b20 jam 0x20 ,0x8a7b 
+22a9 6ff08a7e fetch 1 ,0x8a7e 
+22aa 1ff27e00 lshift4 pdata ,pdata 
+22ab e7e08018 istore 1 ,regd 
+22ac 708a7b00 jam 0 ,0x8a7b 
+22ad 20600000 rtn 
+
+read_cal_result:
+22ae 6ff10a7d fetch 2 ,0x8a7d 
+22af 1ff0fe00 byteswap pdata ,pdata 
+22b0 68588a7c fetcht 1 ,0x8a7c 
+22b1 18500400 lshift16 temp ,temp 
+22b2 9841fe00 ior temp ,pdata 
+22b3 20600000 rtn 
+
+dpll_ring_ibias_calc:
+22b4 448ec003 bpatch patch03_5 ,mem_patch03 
+22b5 6ff08a0d fetch 1 ,core_vtest_ctrl0 
+22b6 79207e00 set1 0 ,pdata 
+22b7 67f08a0d store 1 ,core_vtest_ctrl0 
+22b8 708a0ef0 jam 0xf0 ,core_vtest_ctrl1 
+22b9 6ff08a05 fetch 1 ,core_bbpll_cfg3 
+22ba 1fe1fe16 or_into 0x16 ,pdata 
+22bb 67f08a05 store 1 ,core_bbpll_cfg3 
+22bc 6fe0c411 fetch 1 ,mem_adc_dma_enable 
+22bd 67e08678 store 1 ,mem_temp 
+22be 6fe0c408 fetch 1 ,mem_adc_channel 
+22bf 67e08679 store 1 ,mem_temp + 1 
+22c0 70441100 jam 0 ,mem_adc_dma_enable 
+22c1 6fe0c43e fetch 1 ,mem_ring_ibias_calc_adc_channel 
+22c2 67e0c408 store 1 ,mem_adc_channel 
+22c3 6848c43d fetcht 1 ,mem_ring_ibias_calc_adc_gpio 
+22c4 20406f0f call gpio_set_high_impedance 
+22c5 da200000 arg 0 ,rega 
+22c6 df200008 arg 8 ,loopcnt 
+
+dpll_ring_ibias_read_adc:
+22c7 20406f82 call enable_adc 
+22c8 6fe1440a fetch 2 ,mem_adc_current_value 
+22c9 9a20a200 iadd rega ,rega 
+22ca c20022c7 loop dpll_ring_ibias_read_adc 
+22cb 1a292200 rshift3 rega ,rega 
+22cc 67e1440a store 2 ,mem_adc_current_value 
+22cd 6fe08678 fetch 1 ,mem_temp 
+22ce 67e0c411 store 1 ,mem_adc_dma_enable 
+22cf 6fe08679 fetch 1 ,mem_temp + 1 
+22d0 67e0c408 store 1 ,mem_adc_channel 
+22d1 6ff08a05 fetch 1 ,core_bbpll_cfg3 
+22d2 1fe17ee0 and_into 0xe0 ,pdata 
+22d3 67f08a05 store 1 ,core_bbpll_cfg3 
+22d4 708a0e00 jam 0x00 ,core_vtest_ctrl1 
+22d5 6ff08a0d fetch 1 ,core_vtest_ctrl0 
+22d6 793ffe00 set0 0 ,pdata 
+22d7 67f08a0d store 1 ,core_vtest_ctrl0 
+22d8 20406fb0 call vdd_calculate_by_mode 
+22d9 6849443b fetcht 2 ,mem_ring_ibias_vtune_high 
+22da 98467c00 isub temp ,null 
+22db 202122e4 branch ring_ibias_trim_incrs ,positive 
+22dc 68494439 fetcht 2 ,mem_ring_ibias_vtune_low 
+22dd 98467c00 isub temp ,null 
+22de 20610000 rtn positive 
+
+ring_ibias_trim_decrs:
+22df 6fe0c438 fetch 1 ,mem_ring_ibias_trim 
+22e0 c1000000 rtneq 0x00 
+22e1 1fe0ffe0 increase -32 ,pdata 
+22e2 67e0c438 store 1 ,mem_ring_ibias_trim 
+22e3 20600000 rtn 
+
+ring_ibias_trim_incrs:
+22e4 6fe0c438 fetch 1 ,mem_ring_ibias_trim 
+22e5 c1700000 rtneq 0xe0 
+22e6 1fe0fe20 increase 32 ,pdata 
+22e7 67e0c438 store 1 ,mem_ring_ibias_trim 
+22e8 20600000 rtn 
+
+save_rssi:
+22e9 448f4003 bpatch patch03_6 ,mem_patch03 
+22ea 6ff089a2 fetch 1 ,modem_nb_pow 
+22eb 2feffe06 isolate1 6 ,pdata 
+22ec 7920fe07 setflag true ,7 ,pdata 
+22ed 67e0c142 store 1 ,mem_modem_rssi 
+22ee 6ff089a3 fetch 1 ,modem_gain 
+22ef 1fe1040f and pdata ,0x0f ,temp 
+22f0 18438400 lshift temp ,temp 
+22f1 1ff1fe00 rshift4 pdata ,pdata 
+22f2 98408400 iadd temp ,temp 
+22f3 184fa203 mul32 temp ,3 ,rega 
+22f4 6fe0c142 fetch 1 ,mem_modem_rssi 
+22f5 204022ff call byte_sign_extern 
+22f6 1fe67e00 sub pdata ,0 ,pdata 
+22f7 9a20fe00 iadd rega ,pdata 
+22f8 1fe0fff7 increase -9 ,pdata 
+22f9 1fe17fff and pdata ,0x1ff ,pdata 
+22fa 2feffe08 isolate1 8 ,pdata 
+22fb 2420a2fd nbranch save_rssi_store ,true 
+22fc 58000000 setarg 0 
+
+save_rssi_store:
+22fd 67e08035 store 1 ,mem_rssi_hex 
+22fe 20202304 branch rssi_hex2dec 
+
+byte_sign_extern:
+22ff 2feffe07 isolate1 7 ,pdata 
+2300 24608000 nrtn true 
+2301 d840ff00 arg 0xff00 ,temp 
+2302 9841fe00 ior temp ,pdata 
+2303 20600000 rtn 
+
+rssi_hex2dec:
+2304 6fe08035 fetch 1 ,mem_rssi_hex 
+2305 20402308 call bcd 
+2306 67e08009 store 1 ,mem_rssi 
+2307 20600000 rtn 
+
+bcd:
+2308 1fe17eff and_into 0xff ,pdata 
+2309 1fe6fc0a div pdata ,10 
+230a 20407d5f call get_div_result 
+230b 1ff27e00 lshift4 pdata ,pdata 
+230c 18070400 remainder temp 
+230d 9841fe00 ior temp ,pdata 
+230e 20600000 rtn 
+
+gain_control:
+230f 448fc003 bpatch patch03_7 ,mem_patch03 
+2310 6fe0c143 fetch 1 ,mem_gain_fix 
+2311 c17f8000 rtneq 0xff 
+2312 242c2336 nbranch gain_increase ,sync 
+2313 6fe0c142 fetch 1 ,mem_modem_rssi 
+2314 1fe67cf0 sub pdata ,0xf0 ,null 
+2315 2421233a nbranch gain_descend ,positive 
+2316 1fe67c7f sub pdata ,0x7f ,null 
+2317 2021233a branch gain_descend ,positive 
+2318 6a308961 fetchr rega ,1 ,core_rf_rx_gain_fix 
+2319 6fe0c143 fetch 1 ,mem_gain_fix 
+231a c1000000 rtneq 0 
+231b d8c04144 arg mem_gain_table ,contr 
+231c 98c08c00 iadd contr ,contr 
+231d efe08006 ifetch 1 ,contr 
+231e 9a267c00 isub rega ,null 
+231f 24628000 nrtn zero 
+2320 18c08dfe increase -2 ,contr 
+2321 e8408006 ifetcht 1 ,contr 
+2322 1851fe00 rshift4 temp ,pdata 
+2323 1a31a400 rshift4 rega ,regb 
+2324 9a462400 isub regb ,regb 
+2325 18417e0f and temp ,0xf ,pdata 
+2326 1a21220f and rega ,0xf ,rega 
+2327 9a262200 isub rega ,rega 
+2328 1a23fe00 lshift rega ,pdata 
+2329 9a40a400 iadd regb ,regb 
+232a 1a4fa403 mul32 regb ,3 ,regb 
+232b 6848c142 fetcht 1 ,mem_modem_rssi 
+232c 18417e80 and temp ,0x80 ,pdata 
+232d 207a0000 rtn blank 
+
+add_negative:
+232e 58000100 setarg 0x100 
+232f 98460400 isub temp ,temp 
+2330 1a427e00 copy regb ,pdata 
+2331 98467e00 isub temp ,pdata 
+2332 20610000 rtn positive 
+2333 1fe17eff and pdata ,0xff ,pdata 
+2334 c17f8000 rtneq 0xff 
+2335 c17f0000 rtneq 0xfe 
+
+gain_increase:
+2336 6fe0c143 fetch 1 ,mem_gain_fix 
+2337 c000a33f beq 1 ,set_rx_gain0 
+2338 c0012341 beq 2 ,set_rx_gain1 
+2339 2020233f branch set_rx_gain0 
+
+gain_descend:
+233a 6fe0c143 fetch 1 ,mem_gain_fix 
+233b c0002341 beq 0 ,set_rx_gain1 
+233c c000a33d beq 1 ,set_rx_gain2 
+
+set_rx_gain2:
+233d 70414302 jam 2 ,mem_gain_fix 
+233e 20600000 rtn 
+
+set_rx_gain0:
+233f 70414300 jam 0 ,mem_gain_fix 
+2340 20600000 rtn 
+
+set_rx_gain1:
+2341 70414301 jam 1 ,mem_gain_fix 
+2342 20600000 rtn 
+
+ahead_window:
+2343 1fe20400 copy pdata ,temp 
+2344 44904004 bpatch patch04_0 ,mem_patch04 
+2345 18427e00 copy temp ,pdata 
+2346 20407d2c call clk2bt 
+2347 1c307e00 lshift16 bt_clk ,pdata 
+2348 79207e2c set1 44 ,pdata 
+2349 20407d12 call clk_diff 
+234a 793ffe2c set0 44 ,pdata 
+234b 20402352 call get_clk 
+234c 20407d12 call clk_diff 
+234d 20740000 rtn user 
+234e 20407d1f call clk2rt 
+234f 98003600 iforce stop_watch 
+2350 37c18200 until null ,timeout 
+2351 20600000 rtn 
+
+get_clk:
+2352 1b220400 copy clkn ,temp 
+2353 20748000 rtn master 
+2354 1b420400 copy clke ,temp 
+2355 20600000 rtn 
+
+get_clkbt:
+2356 1c427e00 deposit clkn_bt 
+2357 20748000 rtn master 
+2358 1d027e00 deposit clke_bt 
+2359 20600000 rtn 
+
+assert:
+235a 4490c004 bpatch patch04_1 ,mem_patch04 
+235b 2020235a branch assert 
+
+sleep:
+235c 207a0000 rtn blank 
+235d 1fe37e00 rshift pdata ,pdata 
+235e 1fe0fffd increase -3 ,pdata 
+
+sleep_loop:
+235f 1fe0ffff increase -1 ,pdata 
+2360 2422a35f nbranch sleep_loop ,zero 
+2361 18007e00 force 0 ,pdata 
+2362 20600000 rtn 
+
+init_param:
+2363 58000e43 setarg param_tx_setup 
+2364 67e10036 store 2 ,mem_param_tx_setup 
+2365 58000600 setarg param_rf_setup 
+2366 67e10038 store 2 ,mem_param_rf_setup 
+2367 58000600 setarg param_conn_access 
+2368 67e1003a store 2 ,mem_param_conn_access 
+2369 58000d00 setarg param_rx_setup 
+236a 67e10040 store 2 ,mem_param_rx_setup 
+236b 580003bb setarg param_clke_cal 
+236c 67e1003c store 2 ,mem_param_clke_cal 
+236d 58000500 setarg param_pll_setup 
+236e 67e1003e store 2 ,mem_param_pll_setup 
+236f 580007d0 setarg param_dpll_start_delay 
+2370 67e10042 store 2 ,mem_param_dpll_start_delay 
+2371 58000ea6 setarg param_rt_rthalfslot 
+2372 67e10044 store 2 ,mem_param_rt_rthalfslot 
+2373 580001e0 setarg param_clke_cal_le_1m 
+2374 67e10046 store 2 ,mem_param_clke_cal_le_1m 
+2375 58000120 setarg param_clke_cal_le_2m 
+2376 67e10048 store 2 ,mem_param_clke_cal_le_2m 
+2377 5800011a setarg param_clke_cal_le_coded 
+2378 67e1004a store 2 ,mem_param_clke_cal_le_coded 
+2379 44914004 bpatch patch04_2 ,mem_patch04 
+237a 20758000 rtn wake 
+237b 58000017 setarg att_default_mtu 
+237c 67e142e3 store 2 ,mem_le_remote_mtu 
+237d 7041678b jam param_t_ifs_150us + param_sync_time_difference ,mem_le_tx_ifs_defference 
+237e 58000d00 setarg mem_ble_tx_buff0 
+237f 67e1433f store 2 ,mem_ble_l2cap_tx_buff0_ptr 
+2380 58000060 setarg mem_ble_l2cap_tx_buff_size 
+2381 67e14341 store 2 ,mem_ble_l2cap_tx_buff_size_ptr 
+2382 1c437e00 rshift clkn_bt ,pdata 
+2383 67e24095 store 4 ,mem_last_clkn 
+2384 20600000 rtn 
+
+lpmstate:
+2385 5800ee21 setarg 0xee21 
+2386 67f10050 store 2 ,core_clkoff 
+2387 6e12011c fetchr alarm ,4 ,core_gpio_in 
+2388 6ff08132 fetch 1 ,core_lpm_isogate 
+2389 c302a39c bbit0 gpio_latch ,power_up 
+238a 7835fc00 enable wake 
+238b c2822393 bbit1 cold_wake ,lpmwake 
+238c 7855fc00 disable wake 
+238d 1ce27e00 deposit auxcnt 
+238e 243a2393 nbranch lpmwake ,blank 
+238f 6ff08142 fetch 1 ,core_lpm_sysctl 
+2390 c2822393 bbit1 reload_code ,lpmwake 
+2391 d85fffff arg param_hibernate_clks ,temp 
+2392 20202434 branch lpm_enter_sleep 
+
+lpmwake:
+2393 204023a0 call lpm_poweron_retmem 
+2394 2055a3e6 call lpm_load_context ,wake 
+2395 6ff08132 fetch 1 ,core_lpm_isogate 
+2396 793ffe05 set0 gpio_latch ,pdata 
+2397 67f08132 store 1 ,core_lpm_isogate 
+2398 2435a39d nbranch boot_load ,wake 
+2399 20407d74 call clean_smem 
+239a 6602069d storer alarm ,4 ,mem_saved_gpio_in 
+239b 20600000 rtn 
+
+power_up:
+239c 204023a0 call lpm_poweron_retmem 
+
+boot_load:
+239d 20406a68 call loadcode 
+239e 6602069d storer alarm ,4 ,mem_saved_gpio_in 
+239f 20600000 rtn 
+
+lpm_poweron_retmem:
+23a0 37d98200 until null ,lpo_edge 
+23a1 6ff08133 fetch 1 ,core_lpm_ldosel 
+23a2 1fe17e88 and_into 0x88 ,pdata 
+23a3 67f08133 store 1 ,core_lpm_ldosel 
+23a4 37d98200 until null ,lpo_edge 
+23a5 6ff08132 fetch 1 ,core_lpm_isogate 
+23a6 1fe1fe0f or_into 0xf ,pdata 
+23a7 67f08132 store 1 ,core_lpm_isogate 
+23a8 37d98200 until null ,lpo_edge 
+23a9 79207e07 set1 isogate ,pdata 
+23aa 67f08132 store 1 ,core_lpm_isogate 
+23ab 37d98200 until null ,lpo_edge 
+23ac 79207e06 set1 retmem_cs ,pdata 
+23ad 67f08132 store 1 ,core_lpm_isogate 
+23ae 37d98200 until null ,lpo_edge 
+23af 20600000 rtn 
+
+lpm_xtal_default:
+23b0 37d98200 until null ,lpo_edge 
+23b1 70813d76 jam 0x76 ,core_xtal_ib 
+23b2 37d98200 until null ,lpo_edge 
+23b3 70813a37 jam 0x37 ,core_xtal_cap 
+23b4 20600000 rtn 
+
+xtal_fast_wake:
+23b5 37d98200 until null ,lpo_edge 
+23b6 70813d76 jam 0x76 ,core_xtal_ib 
+23b7 37d98200 until null ,lpo_edge 
+23b8 70813a37 jam 0x37 ,core_xtal_cap 
+23b9 20600000 rtn 
+
+lpm_write_lock:
+23ba 6fe0c3cb fetch 1 ,mem_device_option 
+23bb 1ff27e00 lshift4 pdata ,pdata 
+23bc 67f08143 store 1 ,core_ucode_flag 
+23bd 37d98200 until null ,lpo_edge 
+23be 6fe0c3cc fetch 1 ,mem_peripheral_lock_flag 
+23bf 79207e05 set1 rom_lock_bit ,pdata 
+23c0 79207e06 set1 option_lock ,pdata 
+23c1 67f08144 store 1 ,core_peripheral_lock 
+23c2 202023e2 branch lpm_write_wait 
+
+lpm_write_ice_disable:
+23c3 6ff08142 fetch 1 ,core_lpm_sysctl 
+23c4 793ffe03 set0 ice_mode ,pdata 
+23c5 67f08142 store 1 ,core_lpm_sysctl 
+23c6 20600000 rtn 
+
+lpm_write_ice_enable:
+23c7 6ff08142 fetch 1 ,core_lpm_sysctl 
+23c8 79207e03 set1 ice_mode ,pdata 
+23c9 67f08142 store 1 ,core_lpm_sysctl 
+23ca 20600000 rtn 
+
+lpm_preon_counter:
+23cb 6fe1c0c3 fetch 3 ,mem_lpm_xtalcnt 
+23cc d8a0813e arg core_lpm_xtalcnt ,contw 
+
+lpm_write_3bytes:
+23cd df200003 arg 3 ,loopcnt 
+23ce 202023d1 branch lpm_write_loop 
+
+lpm_write_mpu_s0:
+23cf d8a08145 arg core_mpu_s0_saddr ,contw 
+
+lpm_write_dword:
+23d0 df200004 arg 4 ,loopcnt 
+
+lpm_write_loop:
+23d1 37d98200 until null ,lpo_edge 
+23d2 e7e08005 istore 1 ,contw 
+23d3 1fecfe00 rshift8 pdata ,pdata 
+23d4 c20023d1 loop lpm_write_loop 
+23d5 202023e2 branch lpm_write_wait 
+
+lpm_write_mpu_s1:
+23d6 d8a08149 arg core_mpu_s1_saddr ,contw 
+23d7 202023d0 branch lpm_write_dword 
+
+lpm_disable_exen_output:
+23d8 6ff08133 fetch 1 ,core_lpm_ldosel 
+23d9 793ffe03 set0 3 ,pdata 
+23da 67f08133 store 1 ,core_lpm_ldosel 
+23db 20600000 rtn 
+
+lpm_disable_io_dozed:
+23dc 6fe0c0cb fetch 1 ,mem_lpm_hv_sel 
+23dd 207a0000 rtn blank 
+23de 793ffe04 set0 lpm_doze_en_bit ,pdata 
+23df 202023e1 branch lpm_write_sel_hv 
+
+lpm_save_sel_hv:
+23e0 67e0c0cb store 1 ,mem_lpm_hv_sel 
+
+lpm_write_sel_hv:
+23e1 67f08135 store 1 ,core_io_doze_en 
+
+lpm_write_wait:
+23e2 37d98200 until null ,lpo_edge 
+23e3 20600000 rtn 
+
+lpm_write_io_vsel:
+23e4 67f08134 store 1 ,core_io_vsel 
+23e5 202023e2 branch lpm_write_wait 
+
+lpm_load_context:
+23e6 204023dc call lpm_disable_io_dozed 
+23e7 6fe0c0ef fetch 1 ,mem_saved_spidctrl 
+23e8 67f08080 store 1 ,core_spid_ctrl 
+23e9 d8c040cc arg mem_saved_gpio ,contr 
+23ea d8a08070 arg core_gpio_conf ,contw 
+23eb 20407c8f call memcpy16 
+23ec d8a080d4 arg core_gpio_conf_hi ,contw 
+23ed 20407c89 call memcpy8 
+23ee 680440e7 fetchr mark ,8 ,mem_saved_mark 
+23ef d8c0814d arg core_gpio_wakeup_cfg ,contr 
+23f0 d8a00016 arg mem_gpio_wakeup_cfg ,contw 
+23f1 df20000c arg 12 ,loopcnt 
+23f2 20407cda call memcpy 
+23f3 20206b11 branch load_ucode 
+
+lpm_save_context:
+23f4 600440e7 storer mark ,8 ,mem_saved_mark 
+23f5 d8c08070 arg core_gpio_conf ,contr 
+23f6 d8a040cc arg mem_saved_gpio ,contw 
+23f7 20407c8f call memcpy16 
+23f8 d8c080d4 arg core_gpio_conf_hi ,contr 
+23f9 20407c89 call memcpy8 
+23fa 6ff08080 fetch 1 ,core_spid_ctrl 
+23fb 67e0c0ef store 1 ,mem_saved_spidctrl 
+23fc 202023fd branch lpm_write_gpio_wakeup 
+
+lpm_write_gpio_wakeup:
+23fd df20000c arg 12 ,loopcnt 
+23fe d8c00016 arg mem_gpio_wakeup_cfg ,contr 
+23ff da20814d arg core_gpio_wakeup_cfg ,rega 
+
+lpm_write_gpio_loop:
+2400 efe08006 ifetch 1 ,contr 
+2401 245a2405 ncall lpm_write_gpio ,blank 
+2402 1a20a201 increase 1 ,rega 
+2403 c2002400 loop lpm_write_gpio_loop 
+2404 20600000 rtn 
+
+lpm_write_gpio:
+2405 e7e08011 istore 1 ,rega 
+2406 37d98200 until null ,lpo_edge 
+2407 20600000 rtn 
+
+lpo_calibration:
+2408 4491c004 bpatch patch04_3 ,mem_patch04 
+2409 6ff080cb fetch 1 ,core_ccnt_bit 
+240a 243a240f nbranch lpo_cal_inited ,blank 
+240b 6fe1c0bd fetch 3 ,mem_clks_per_lpo 
+240c 247a0000 nrtn blank 
+240d 7080cb0c jam 0xc ,core_ccnt_bit 
+240e 70800680 jam ccnt_start ,core_misc_ctrl 
+
+lpo_cal_inited:
+240f 6ff08129 fetch 1 ,core_perf_status 
+2410 c4008000 rtnbit0 1 
+2411 6ff1815b fetch 3 ,core_clk_counter 
+2412 67e1c0bd store 3 ,mem_clks_per_lpo 
+2413 20600000 rtn 
+
+lpm_doze:
+2414 6fe0c0ca fetch 1 ,mem_lpm_sysctl 
+2415 79207e04 set1 reload_code ,pdata 
+2416 67e0c0ca store 1 ,mem_lpm_sysctl 
+
+lpm_hibernate:
+2417 44924004 bpatch patch04_4 ,mem_patch04 
+2418 d85fffff arg param_hibernate_clks ,temp 
+2419 6fe0c0a7 fetch 1 ,mem_lpm_hibernate_switch 
+241a 67e0c0c8 store 1 ,mem_lpm_isogate_final 
+241b 6fe0c0ca fetch 1 ,mem_lpm_sysctl 
+241c 67f08142 store 1 ,core_lpm_sysctl 
+241d 37d98200 until null ,lpo_edge 
+
+lpm_sleep:
+241e 4492c004 bpatch patch04_5 ,mem_patch04 
+241f 6fe143e9 fetch 2 ,mem_cb_before_lpm_sleep 
+2420 20407d79 call callback_func 
+
+lpm_sleep_skip_cb_function:
+2421 6fe240ad fetch 4 ,mem_sleep_counter_all 
+2422 9840fe00 iadd temp ,pdata 
+2423 67e240ad store 4 ,mem_sleep_counter_all 
+2424 204023f4 call lpm_save_context 
+2425 6fe0c0cb fetch 1 ,mem_lpm_hv_sel 
+2426 79207e04 set1 lpm_doze_en_bit ,pdata 
+2427 204023e1 call lpm_write_sel_hv 
+2428 2455a3cb ncall lpm_preon_counter ,wake 
+2429 37d98200 until null ,lpo_edge 
+242a 632340b1 storer clkn ,6 ,mem_sleep_clkn 
+242b 6fe1c0c6 fetch 3 ,mem_lpm_isogate 
+242c 6a20c0c9 fetchr rega ,1 ,mem_lpm_ldo_sel 
+242d df200003 arg 3 ,loopcnt 
+
+lpm_sleep_loop:
+242e 37d98200 until null ,lpo_edge 
+242f 67f08132 store 1 ,core_lpm_isogate 
+2430 1fecfe00 rshift8 pdata ,pdata 
+2431 c200242e loop lpm_sleep_loop 
+2432 37d98200 until null ,lpo_edge 
+2433 62308133 storer rega ,1 ,core_lpm_ldosel 
+
+lpm_enter_sleep:
+2434 37d98200 until null ,lpo_edge 
+2435 605a004c storet 4 ,core_lpm_reg 
+2436 70800501 jam lpmreg_sel_counter ,core_lpm_wr 
+2437 37df8200 until null ,never 
+
+lpm_cal_xtal_startup:
+2438 6fe0c0c3 fetch 1 ,mem_lpm_xtalcnt 
+2439 247a0000 nrtn blank 
+243a 70804206 jam clksel_rc ,core_clksel 
+243b 708130f8 jam 0xf8 ,core_lpm_ctrl 
+243c 58030d40 setarg 200000 
+243d 2040235c call sleep 
+243e 204023b5 call xtal_fast_wake 
+243f 37d98200 until null ,lpo_edge 
+2440 708130ff jam 0xff ,core_lpm_ctrl 
+2441 1e226000 copy lpo_time ,alarm 
+2442 70804204 jam clksel_xtal ,core_clksel 
+2443 2000000a nop 10 
+2444 37d98200 until null ,lpo_edge 
+2445 1e227e00 deposit lpo_time 
+2446 9e067e00 isub alarm ,pdata 
+2447 1fe0fe30 increase 0x30 ,pdata 
+2448 d84000ff arg 0xff ,temp 
+2449 20407d6c call ceiling 
+244a 67e0c0c3 store 1 ,mem_lpm_xtalcnt 
+244b 20007530 nop 30000 
+244c 20007530 nop 30000 
+244d 20007530 nop 30000 
+244e 20600000 rtn 
+
+lpm_recover_clk:
+244f 44934004 bpatch patch04_6 ,mem_patch04 
+2450 58000000 setarg 0 
+2451 1ce27c00 copy auxcnt ,null 
+2452 2022a45a branch lpm_recover_timeout ,zero 
+2453 6ff0813e fetch 1 ,core_lpm_xtalcnt 
+2454 6858813f fetcht 1 ,core_lpm_buckcnt 
+2455 98467c00 isub temp ,null 
+2456 20212458 branch lpm_recover_xtal ,positive 
+2457 18427e00 deposit temp 
+
+lpm_recover_xtal:
+2458 9ce67e00 isub auxcnt ,pdata 
+2459 1fe0fe01 increase 1 ,pdata 
+
+lpm_recover_timeout:
+245a 1fe0fe08 increase 8 ,pdata 
+245b 37d98200 until null ,lpo_edge 
+245c 9e20fe00 iadd lpo_time ,pdata 
+245d 684a40a9 fetcht 4 ,mem_sleep_counter 
+245e 9840fe00 iadd temp ,pdata 
+245f 6849c0bd fetcht 3 ,mem_clks_per_lpo 
+2460 984ffe00 imul32 temp ,pdata 
+2461 1fecfe00 rshift8 pdata ,pdata 
+2462 1ff1fe00 rshift4 pdata ,pdata 
+2463 1fe0fe6e increase param_lpm_fix ,pdata 
+2464 68490044 fetcht 2 ,mem_param_rt_rthalfslot 
+2465 9846fc00 idiv temp 
+2466 20407d5f call get_div_result 
+2467 1ff07e00 lshift16 pdata ,pdata 
+2468 18070400 remainder temp 
+2469 9841fe00 ior temp ,pdata 
+246a 684b40b1 fetcht 6 ,mem_sleep_clkn 
+246b 20407d05 call clk_add 
+246c 18423200 copy temp ,clkn 
+246d 6fe34048 fetch 6 ,mem_context + coffset_clk_offset 
+246e 20402109 call calc_clke2 
+246f 1b427e00 deposit clke 
+2470 67e30670 store 6 ,mem_pdatatemp 
+2471 1ce27e00 deposit auxcnt 
+2472 e7e08005 istore 1 ,contw 
+2473 6ff0811d fetch 1 ,core_gpio_in1 
+2474 1fe1fef0 or_into 0xf0 ,pdata 
+2475 e7e08005 istore 1 ,contw 
+2476 20600000 rtn 
+
+lpm_adjust_clk:
+2477 4493c004 bpatch patch04_7 ,mem_patch04 
+2478 1b427e00 deposit clke 
+2479 20407d10 call clk_diff_rt 
+247a 684a40ad fetcht 4 ,mem_sleep_counter_all 
+247b 18467cff sub temp ,0xff ,null 
+247c 20610000 rtn positive 
+247d 1fed7e00 lshift8 pdata ,pdata 
+247e 1ff27e00 lshift4 pdata ,pdata 
+247f 9846fc00 idiv temp 
+2480 20407d5f call get_div_result 
+2481 d84000c8 arg param_lpm_adjmax ,temp 
+2482 20407d6c call ceiling 
+2483 67e0800e store 1 ,mem_lpm_adjust 
+2484 24342486 nbranch lpm_adjust_positive ,user 
+2485 1fe67e00 sub pdata ,0 ,pdata 
+
+lpm_adjust_positive:
+2486 6849c0bd fetcht 3 ,mem_clks_per_lpo 
+2487 9840fe00 iadd temp ,pdata 
+2488 67e1c0bd store 3 ,mem_clks_per_lpo 
+
+lpm_clear_counter:
+2489 58000000 setarg 0 
+248a 67e240ad store 4 ,mem_sleep_counter_all 
+248b 20600000 rtn 
+
+lpm_dispatch:
+248c 44944005 bpatch patch05_0 ,mem_patch05 
+248d 20402408 call lpo_calibration 
+248e 6fe1c0bd fetch 3 ,mem_clks_per_lpo 
+248f 207a0000 rtn blank 
+2490 6fe0c094 fetch 1 ,mem_lpm_mode 
+2491 207a0000 rtn blank 
+2492 6fe0c46c fetch 1 ,mem_secure_connections_enable 
+2493 203a2496 branch lpm_dispatch_next ,blank 
+2494 6fe0c46e fetch 1 ,mem_sc_local_key_invalid 
+2495 207a0000 rtn blank 
+
+lpm_dispatch_next:
+2496 6fe0c46d fetch 1 ,mem_sc_calc 
+2497 247a0000 nrtn blank 
+2498 da6020af arg context_check_a_wack ,regc 
+2499 20402069 call context_search 
+249a 20628000 rtn zero 
+249b 204024ef call lpm_check_wake_lock 
+249c 247a0000 nrtn blank 
+249d 2040205d call context_check_idle 
+249e 2422a4bd nbranch lpm_dispatch_unconn ,zero 
+249f 20758000 rtn wake 
+24a0 4494c005 bpatch patch05_1 ,mem_patch05 
+24a1 68488015 fetcht 1 ,mem_lpm_current_mult 
+24a2 6fe14042 fetch 2 ,mem_context + coffset_tsniff 
+24a3 984ffe00 imul32 temp ,pdata 
+24a4 18518400 rshift4 temp ,temp 
+24a5 184b0400 rshift2 temp ,temp 
+24a6 98467e00 isub temp ,pdata 
+24a7 684a4044 fetcht 4 ,mem_context + coffset_sniff_anchor 
+24a8 9840fe00 iadd temp ,pdata 
+24a9 6848c0a6 fetcht 1 ,mem_lpm_overhead 
+24aa 98467e00 isub temp ,pdata 
+24ab 1ff06000 lshift16 pdata ,alarm 
+24ac 6fe1404e fetch 2 ,mem_context + coffset_rx_window 
+24ad 1fe37e00 rshift pdata ,pdata 
+24ae 20407d2c call clk2bt 
+24af 1e027e00 deposit alarm 
+24b0 20407d12 call clk_diff 
+24b1 1b420400 copy clke ,temp 
+24b2 20407d10 call clk_diff_rt 
+24b3 20740000 rtn user 
+
+lpm_dispatch_sleep:
+24b4 20407d25 call clk2lpo 
+
+lpm_dispatch_lpo:
+24b5 44954005 bpatch patch05_2 ,mem_patch05 
+24b6 6fe0c0c3 fetch 1 ,mem_lpm_xtalcnt 
+24b7 98467c00 isub temp ,null 
+24b8 20212489 branch lpm_clear_counter ,positive 
+24b9 604a40a9 storet 4 ,mem_sleep_counter 
+24ba 204042c5 call app_will_enter_lpm 
+24bb 684a40a9 fetcht 4 ,mem_sleep_counter 
+24bc 2020241e branch lpm_sleep 
+
+lpm_dispatch_unconn:
+24bd 4495c005 bpatch patch05_3 ,mem_patch05 
+24be 6fe0c388 fetch 1 ,mem_le_adv_enable 
+24bf 243a24c1 nbranch lpm_unconn_cont ,blank 
+24c0 20600000 rtn 
+
+lpm_unconn_cont:
+24c1 6fe140a4 fetch 2 ,mem_lpm_interval 
+24c2 207a0000 rtn blank 
+
+lpm_sleep_btclk:
+24c3 6848c0a6 fetcht 1 ,mem_lpm_overhead 
+24c4 98467e00 isub temp ,pdata 
+24c5 d8401d4c arg 7500 ,temp 
+24c6 984ffe00 imul32 temp ,pdata 
+24c7 202024b4 branch lpm_dispatch_sleep 
+
+lpm_mult_wait_timeout:
+24c8 6fe143e5 fetch 2 ,mem_cb_bt_set_mult 
+24c9 20407d79 call callback_func 
+24ca 243a24e0 nbranch lpm_mult_short ,blank 
+24cb 70001500 jam 0 ,mem_lpm_current_mult 
+24cc c586a4e0 bmark0 mark_lpm_mult_enable ,lpm_mult_short 
+24cd 6fe0c0c2 fetch 1 ,mem_lpm_mult_cnt 
+24ce 203a24e4 branch lpm_mult_long ,blank 
+24cf 1fe0ffff increase -1 ,pdata 
+24d0 67e0c0c2 store 1 ,mem_lpm_mult_cnt 
+24d1 20600000 rtn 
+
+lpm_match:
+24d2 7040a800 jam 0 ,mem_sniff_unint_lost 
+24d3 6fe1c0b7 fetch 3 ,mem_sniff_rcv 
+24d4 1fe0fe01 increase 1 ,pdata 
+24d5 67e1c0b7 store 3 ,mem_sniff_rcv 
+24d6 20600000 rtn 
+
+lpm_lost:
+24d7 44964005 bpatch patch05_4 ,mem_patch05 
+24d8 70001500 jam 0 ,mem_lpm_current_mult 
+24d9 6fe1c0ba fetch 3 ,mem_sniff_lost 
+24da 1fe0fe01 increase 1 ,pdata 
+24db 67e1c0ba store 3 ,mem_sniff_lost 
+24dc 6fe0c0a8 fetch 1 ,mem_sniff_unint_lost 
+24dd 1fe0fe01 increase 1 ,pdata 
+24de 67e0c0a8 store 1 ,mem_sniff_unint_lost 
+24df 20600000 rtn 
+
+lpm_mult_short:
+24e0 70001500 jam 0 ,mem_lpm_current_mult 
+24e1 6fe0c0c1 fetch 1 ,mem_lpm_mult_timeout 
+24e2 67e0c0c2 store 1 ,mem_lpm_mult_cnt 
+24e3 20600000 rtn 
+
+lpm_mult_long:
+24e4 6848c0c0 fetcht 1 ,mem_lpm_mult 
+24e5 60488015 storet 1 ,mem_lpm_current_mult 
+24e6 20600000 rtn 
+
+lpm_get_wake_lock:
+24e7 6fe140a2 fetch 2 ,mem_lpm_wake_lock 
+24e8 f9207e00 qset1 pdata 
+24e9 67e140a2 store 2 ,mem_lpm_wake_lock 
+24ea 20600000 rtn 
+
+lpm_put_wake_lock:
+24eb 6fe140a2 fetch 2 ,mem_lpm_wake_lock 
+24ec f93ffe00 qset0 pdata 
+24ed 67e140a2 store 2 ,mem_lpm_wake_lock 
+24ee 20600000 rtn 
+
+lpm_check_wake_lock:
+24ef 4496c005 bpatch patch05_5 ,mem_patch05 
+24f0 204042c3 call app_check_wake_lock 
+24f1 6fe140a2 fetch 2 ,mem_lpm_wake_lock 
+24f2 1fe22200 copy pdata ,rega 
+24f3 6fe1c44b fetch 3 ,mem_tx_fifo3 
+24f4 7d3a2201 nsetflag blank ,wake_lock_ble_tx ,rega 
+24f5 6fe444d3 fetch util_fifo_len ,mem_ipc_fifo_bt2c51 
+24f6 7d3a220f nsetflag blank ,wake_lock_ipc_bt2c51 ,rega 
+24f7 6fe444db fetch util_fifo_len ,mem_ipc_fifo_c512bt 
+24f8 7d3a220e nsetflag blank ,wake_lock_ipc_c512bt ,rega 
+24f9 6fe0c114 fetch 1 ,mem_hci_cmd 
+24fa 7d3a2208 nsetflag blank ,wake_lock_cmd ,rega 
+24fb 6fe0c3cb fetch 1 ,mem_device_option 
+24fc 2fe1fe0a compare dvc_op_module ,pdata ,0xff 
+24fd 2040a501 call lpm_uart_wake_lock ,true 
+24fe 1a227e00 copy rega ,pdata 
+24ff 67e140a2 store 2 ,mem_lpm_wake_lock 
+2500 20600000 rtn 
+
+lpm_uart_wake_lock:
+2501 6ff10112 fetch 2 ,core_uart_rxitems 
+2502 7d3a2206 nsetflag blank ,wake_lock_uart_rx ,rega 
+2503 6ff1010e fetch 2 ,core_uart_txitems 
+2504 7d3a2205 nsetflag blank ,wake_lock_uart_tx ,rega 
+2505 20600000 rtn 
+
+le_init_conn:
+2506 47074021 bpatchx patch21_6 ,mem_patch21 
+2507 7855fc00 disable wake 
+2508 70017e01 jam 1 ,mem_le_conn_handle 
+2509 70016803 jam 3 ,mem_le_state 
+250a 70017f01 jam 1 ,mem_le_arq 
+250b 5fffffff setarg -1 
+250c 67e10182 store 2 ,mem_le_event_count 
+250d 18007e00 force 0 ,pdata 
+250e 67e08180 store 1 ,mem_le_ch 
+250f 67e0818b store 1 ,mem_le_op 
+2510 67e1c0b7 store 3 ,mem_sniff_rcv 
+2511 67e1c0ba store 3 ,mem_sniff_lost 
+2512 2040285c call le_clear_enc 
+2513 70416901 jam 1 ,mem_le_txheader 
+2514 70416a00 jam 0 ,mem_le_txlen 
+2515 70019d01 jam fun_rx_ll_1m_phy ,mem_le_rx_phy 
+2516 70019e01 jam fun_tx_ll_1m_phy ,mem_le_tx_phy 
+2517 70439600 jam 0 ,mem_le_l2cap_att_states 
+2518 20202935 branch le_supervision_flush 
+
+le_init_master:
+2519 4707c021 bpatchx patch21_7 ,mem_patch21 
+251a 7834fc00 enable master 
+251b 70016903 jam lemode_master ,mem_le_mode 
+251c 70439801 jam 1 ,mem_le_att_handle 
+251d 7006b101 jam 1 ,mem_le_search_handle_start 
+251e 5800ffff setarg 0xffff 
+251f 67e106b3 store 2 ,mem_le_search_handle_end 
+2520 18007e00 force 0 ,pdata 
+2521 67e2c455 store 5 ,mem_ccm_pcnt_rx 
+2522 79207e27 set1 le_ccm_directionbit ,pdata 
+2523 67e2c450 store 5 ,mem_ccm_pcnt_tx 
+2524 20202506 branch le_init_conn 
+
+le_init_slave:
+2525 47084022 bpatchx patch22_0 ,mem_patch22 
+2526 7854fc00 disable master 
+2527 58000017 setarg 0x17 
+2528 67e142e3 store 2 ,mem_le_remote_mtu 
+2529 1fe0fe04 increase 4 ,pdata 
+252a 67e143b8 store 2 ,mem_remote_rx_max_octets 
+252b 70016901 jam lemode_slave ,mem_le_mode 
+252c 70438800 jam 0 ,mem_le_adv_enable 
+252d 70001500 jam 0 ,mem_lpm_current_mult 
+252e 20402592 call le_clear_pairing_state 
+252f 6fe10196 fetch 2 ,mem_le_superto 
+2530 67e142f5 store 2 ,mem_le_init_superto 
+2531 6fe1016a fetch 2 ,mem_le_tsniff 
+2532 1feffe05 mul32 pdata ,5 ,pdata 
+2533 1ff1fe00 rshift4 pdata ,pdata 
+2534 67e10196 store 2 ,mem_le_superto 
+2535 20202506 branch le_init_conn 
+
+le_conn_dispatch:
+2536 4708c022 bpatchx patch22_1 ,mem_patch22 
+2537 204025b8 call le_enable 
+2538 6fe08168 fetch 1 ,mem_le_state 
+2539 2feffe04 isolate1 lestate_encryption ,pdata 
+253a 79208032 setflag true ,mark_ble_encryption ,mark 
+253b 204042b2 call app_process_ble 
+253c 6fe08169 fetch 1 ,mem_le_mode 
+253d c280a53f bbit1 mode_master ,le_master_dispatch 
+253e 20202551 branch le_slave_dispatch 
+
+le_master_dispatch:
+253f 47094022 bpatchx patch22_2 ,mem_patch22 
+2540 7834fc00 enable master 
+2541 2040292b call le_supervision_update 
+2542 2021254e branch le_master_disconn ,positive 
+2543 204025fb call le_setup 
+2544 20402871 call le_prepare_tx 
+2545 7856fc00 disable match 
+2546 20402730 call le_transmit_receive_sifs 
+2547 24768000 nrtn match 
+2548 6fe08005 fetch 1 ,mem_le_conn_rcv 
+2549 1fe0fe01 increase 1 ,pdata 
+254a 67e08005 store 1 ,mem_le_conn_rcv 
+254b 20402823 call le_acknowledge 
+254c 7854fc00 disable master 
+254d 20600000 rtn 
+
+le_master_disconn:
+254e 20402586 call le_disconnect 
+254f 7854fc00 disable master 
+2550 20600000 rtn 
+
+le_slave_dispatch:
+2551 4709c022 bpatchx patch22_3 ,mem_patch22 
+2552 70433e00 jam 0 ,mem_le_md_count 
+2553 793f8030 set0 mark_ble_crc_fail ,mark 
+2554 20407552 call sp_calc_sequence_256 
+2555 20402ff5 call le_secure_connect_sm 
+2556 78577c00 disable attempt 
+2557 2040292b call le_supervision_update 
+2558 20212586 branch le_slave_disconn ,positive 
+2559 6fe0819d fetch 1 ,mem_le_rx_phy 
+255a 204025a4 call le_enable_phy_by_pdata 
+255b 204025fb call le_setup 
+255c 20402652 call le_receive_slave 
+255d 242c2577 nbranch le_slave_unsync ,sync 
+255e 20402597 call le_got_first_packet 
+255f 2036a562 branch le_slave_match ,match 
+2560 c5182562 bmark1 mark_ble_crc_fail ,le_slave_crc_fail 
+2561 20202571 branch le_slave_cont 
+
+le_slave_crc_fail:
+
+le_slave_match:
+2562 470a4022 bpatchx patch22_4 ,mem_patch22 
+2563 6fe0c33e fetch 1 ,mem_le_md_count 
+2564 1fe0fe01 pincrease 1 
+2565 67e0c33e store 1 ,mem_le_md_count 
+2566 c0062571 beq le_md_max_count ,le_slave_cont 
+2567 20402823 call le_acknowledge 
+2568 20402871 call le_prepare_tx 
+2569 6fe0819e fetch 1 ,mem_le_tx_phy 
+256a 204025a4 call le_enable_phy_by_pdata 
+256b 20402741 call le_transmit 
+256c 204028d4 call le_parse 
+256d 6fe143e1 fetch 2 ,mem_cb_ble_transmit 
+256e 20407d79 call callback_func 
+256f 2040257b call le_check_md 
+2570 20342580 branch le_slave_more_data ,user 
+
+le_slave_cont:
+2571 470ac022 bpatchx patch22_5 ,mem_patch22 
+2572 20402fba call le_pairing_sm 
+2573 20402fb1 call le_check_paring_time 
+2574 20407841 call check_51cmd 
+2575 6fe0818b fetch 1 ,mem_le_op 
+2576 c281a586 bbit1 op_disconn ,le_slave_disconn 
+
+le_slave_unsync:
+2577 470b4022 bpatchx patch22_6 ,mem_patch22 
+2578 204020cf call end_of_packet 
+2579 204029a5 call le_lpm_set_mult 
+257a 202020f7 branch calc_clke_offset 
+
+le_check_md:
+257b 78547c00 disable user 
+257c c5157dba bmark1 mark_ble_rx_md ,enable_user 
+257d c514fdba bmark1 mark_ble_tx_md ,enable_user 
+257e c5187dba bmark1 mark_ble_crc_fail ,enable_user 
+257f 20600000 rtn 
+
+le_slave_more_data:
+2580 470bc022 bpatchx patch22_7 ,mem_patch22 
+2581 78377c00 enable attempt 
+2582 20402734 call le_transmit_receive_sifs_notx 
+2583 2036a562 branch le_slave_match ,match 
+2584 c5182562 bmark1 mark_ble_crc_fail ,le_slave_crc_fail 
+2585 20202571 branch le_slave_cont 
+
+le_slave_disconn:
+
+le_disconnect:
+2586 470c4023 bpatchx patch23_0 ,mem_patch23 
+2587 2040258d call le_clear_connection_info 
+2588 20404302 call app_disconn_reason_collect_ble 
+2589 20402592 call le_clear_pairing_state 
+258a 20403003 call le_sc_state_clear 
+258b 70066f15 jam bt_evt_le_disconnected ,mem_fifo_temp 
+258c 2020782b branch ui_ipc_send_event 
+
+le_clear_connection_info:
+258d d8a04441 arg mem_used_map ,contw 
+258e 20407c99 call memset0_16 
+258f 70017e00 jam 0 ,mem_le_conn_handle 
+2590 70016900 jam lemode_idle ,mem_le_mode 
+2591 70016800 jam 0 ,mem_le_state 
+
+le_clear_pairing_state:
+2592 470cc023 bpatchx patch23_1 ,mem_patch23 
+2593 7042fd00 jam flag_le_enc_null ,mem_le_enc_state 
+2594 7042fc00 jam flag_le_pairing_null ,mem_le_pairing_state 
+2595 20407452 call sp_clear_flags 
+2596 20600000 rtn 
+
+le_got_first_packet:
+2597 470d4023 bpatchx patch23_2 ,mem_patch23 
+2598 6fe08005 fetch 1 ,mem_le_conn_rcv 
+2599 1fe0fe01 increase 1 ,pdata 
+259a 67e08005 store 1 ,mem_le_conn_rcv 
+259b 6fe08168 fetch 1 ,mem_le_state 
+259c c3818000 rtnbit1 lestate_got_first_packet 
+259d 79207e03 set1 lestate_got_first_packet ,pdata 
+259e 67e08168 store 1 ,mem_le_state 
+259f 6fe142f5 fetch 2 ,mem_le_init_superto 
+25a0 67e10196 store 2 ,mem_le_superto 
+25a1 58000000 setarg 0 
+25a2 67e2431d store 4 ,mem_le_transmit_window 
+25a3 20600000 rtn 
+
+le_enable_phy_by_pdata:
+25a4 1fe20400 copy pdata ,temp 
+25a5 470dc023 bpatchx patch23_3 ,mem_patch23 
+
+le_enable_phy_by_pdata1:
+25a6 18427e00 copy temp ,pdata 
+25a7 c28025b8 bbit1 bit_le_1m_phy ,le_enable 
+25a8 c280a5ad bbit1 bit_le_2m_phy ,le_enable_2m 
+25a9 c30125b8 bbit0 bit_le_coded_phy ,le_enable 
+25aa c283a5b4 bbit1 bit_le_coded_phy_s8 ,le_enable_coded_s8 
+25ab c28125b0 bbit1 bit_le_coded_phy_s2 ,le_enable_coded_s2 
+25ac 202025b8 branch le_enable 
+
+le_enable_2m:
+25ad 793f802f set0 mark_ble_lr ,mark 
+25ae 7920002d set1 mark_ble_2m ,mark 
+25af 20600000 rtn 
+
+le_enable_coded_s2:
+
+le_enable_coded:
+25b0 793f802d set0 mark_ble_2m ,mark 
+25b1 7920002f set1 mark_ble_lr ,mark 
+25b2 793f802e set0 mark_ble_lr_s8 ,mark 
+25b3 20600000 rtn 
+
+le_enable_coded_s8:
+25b4 793f802d set0 mark_ble_2m ,mark 
+25b5 7920002f set1 mark_ble_lr ,mark 
+25b6 7920002e set1 mark_ble_lr_s8 ,mark 
+25b7 20600000 rtn 
+
+le_enable:
+25b8 470e4023 bpatchx patch23_4 ,mem_patch23 
+25b9 793f802d set0 mark_ble_2m ,mark 
+25ba 793f802f set0 mark_ble_lr ,mark 
+25bb 20600000 rtn 
+
+le_disable:
+25bc 470ec023 bpatchx patch23_5 ,mem_patch23 
+25bd 793f8032 set0 mark_ble_encryption ,mark 
+25be 70890101 jam 0x01 ,0x8901 
+25bf 70892080 jam 0x80 ,0x8920 
+25c0 70893003 jam 0x03 ,0x8930 
+25c1 20600000 rtn 
+
+le_prep:
+25c2 470f4023 bpatchx patch23_6 ,mem_patch23 
+25c3 7844fc00 disable enable_crc 
+25c4 7843fc00 disable enable_white 
+25c5 6fe18190 fetch 3 ,mem_le_crcinit 
+25c6 98001e00 iforce crc24_init 
+25c7 6fe08007 fetch 1 ,mem_le_ch_mapped 
+
+le_prep_next:
+25c8 1fed8400 reverse pdata ,temp 
+25c9 79200401 set1 1 ,temp 
+25ca 18431c00 rshift temp ,white_init 
+25cb 20600000 rtn 
+
+le_rx_setfreq:
+25cc 204025d5 call le_setfreq 
+
+le_rf_rx_enable:
+25cd 2040216f call set_freq_rx 
+25ce 6fe1003e fetch 2 ,mem_param_pll_setup 
+25cf 2040235c call sleep 
+25d0 202021a6 branch rf_rx_enable 
+
+le_tx_setfreq:
+25d1 2036a1fc branch txon ,match 
+25d2 c51821fc bmark1 mark_ble_crc_fail ,txon 
+
+le_tx_setfreq0:
+25d3 204025d5 call le_setfreq 
+25d4 202021f9 branch set_freq_tx 
+
+le_setfreq:
+25d5 470fc023 bpatchx patch23_7 ,mem_patch23 
+25d6 20402160 call set_sync_on 
+25d7 6fe081bb fetch 1 ,mem_le_testtype 
+25d8 243a25e8 nbranch le_ctf_test ,blank 
+25d9 6fe08007 fetch 1 ,mem_le_ch_mapped 
+25da 1fe67c24 sub pdata ,36 ,null 
+25db 202125e2 branch le_ctf_normal ,positive 
+25dc 18000400 force 0 ,temp 
+25dd c1128000 rtneq 37 
+25de 18000418 force 24 ,temp 
+25df c1130000 rtneq 38 
+25e0 1800044e force 78 ,temp 
+25e1 20600000 rtn 
+
+le_ctf_normal:
+25e2 1fe67c0a sub pdata ,10 ,null 
+25e3 202125e5 branch le_ctf_low ,positive 
+25e4 1fe0fe01 increase 1 ,pdata 
+
+le_ctf_low:
+25e5 1fe3fe00 lshift pdata ,pdata 
+25e6 1fe08402 add pdata ,2 ,temp 
+25e7 20600000 rtn 
+
+le_ctf_test:
+25e8 6fe08007 fetch 1 ,mem_le_ch_mapped 
+25e9 1fe38400 lshift pdata ,temp 
+25ea 20600000 rtn 
+
+le_sca_map:
+25eb d84001f4 arg 500 ,temp 
+25ec 207a0000 rtn blank 
+25ed d84000fa arg 250 ,temp 
+25ee c1008000 rtneq 1 
+25ef d8400096 arg 150 ,temp 
+25f0 c1010000 rtneq 2 
+25f1 d8400064 arg 100 ,temp 
+25f2 c1018000 rtneq 3 
+25f3 d840004b arg 75 ,temp 
+25f4 c1020000 rtneq 4 
+25f5 d8400032 arg 50 ,temp 
+25f6 c1028000 rtneq 5 
+25f7 d8400028 arg 40 ,temp 
+25f8 c1030000 rtneq 6 
+25f9 d8400014 arg 20 ,temp 
+25fa 20600000 rtn 
+
+le_setup:
+25fb 47104024 bpatchx patch24_0 ,mem_patch24 
+25fc 78287c00 enable swfine 
+25fd 6fe2018c fetch 4 ,mem_le_access 
+25fe 98001200 iforce access 
+25ff 20402630 call le_map_channel 
+2600 58000200 setarg 0x200 
+2601 2034a604 branch le_setup_master ,master 
+2602 6fe10176 fetch 2 ,mem_le_receive_window 
+2603 1fe37e00 rshift pdata ,pdata 
+
+le_setup_master:
+2604 6849003e fetcht 2 ,mem_param_pll_setup 
+2605 9840fe00 iadd temp ,pdata 
+2606 20402343 call ahead_window 
+2607 1b427e00 deposit clke 
+2608 20600000 rtn 
+
+le_context_nextevent:
+2609 4710c024 bpatchx patch24_1 ,mem_patch24 
+260a 20407c51 call push_stack_rega_b_c 
+260b 6721069b storer loopcnt ,2 ,mem_loopcnt 
+260c 1a208c01 add rega ,coffset_mode ,contr 
+260d efe08006 ifetch 1 ,contr 
+260e c4000000 rtnbit0 mode_le 
+260f 1a208a1a add rega ,coffset_le_event_cnt ,contw 
+2610 efe10005 ifetch 2 ,contw 
+2611 1fe0fe01 increase 1 ,pdata 
+2612 e7e10005 istore 2 ,contw 
+2613 204027a2 call le_update_param 
+2614 204027c4 call le_update_channel_map 
+2615 204027cd call le_update_phy 
+2616 2040261a call le_context_nexthop 
+2617 20407c60 call pop_stack_rega_b_c 
+2618 6f21069b fetchr loopcnt ,2 ,mem_loopcnt 
+2619 20600000 rtn 
+
+le_context_nexthop:
+261a 1a208c19 add rega ,coffset_le_hop ,contr 
+261b efe08006 ifetch 1 ,contr 
+261c 1a208a18 add rega ,coffset_le_ch ,contw 
+261d e8408005 ifetcht 1 ,contw 
+261e 9840fe00 iadd temp ,pdata 
+261f 1fe67c24 sub pdata ,36 ,null 
+2620 20212622 branch le_nexthop_nowrap ,positive 
+2621 1fe0ffdb increase -37 ,pdata 
+
+le_nexthop_nowrap:
+2622 e7e08005 istore 1 ,contw 
+2623 20600000 rtn 
+
+le_calc_channel_map:
+2624 1a208c30 add rega ,coffset_le_channel_map ,contr 
+2625 efe28006 ifetch 5 ,contr 
+2626 18000400 force 0 ,temp 
+2627 18007225 force 37 ,loopcnt 
+
+le_count_channels_loop:
+2628 c300262a bbit0 0 ,le_count_channels_notused 
+2629 18408401 increase 1 ,temp 
+
+le_count_channels_notused:
+262a 1fe37e00 rshift pdata ,pdata 
+262b c2002628 loop le_count_channels_loop 
+262c 1840ffff add temp ,-1 ,pdata 
+262d 1a208a22 add rega ,coffset_le_channels ,contw 
+262e e7e08005 istore 1 ,contw 
+262f 20600000 rtn 
+
+le_map_channel:
+2630 47114024 bpatchx patch24_2 ,mem_patch24 
+2631 6fe08180 fetch 1 ,mem_le_ch 
+2632 98000e00 iforce queue 
+2633 684a8198 fetcht 5 ,mem_le_channel_map 
+2634 a84fffff qisolate1 temp 
+2635 2020a645 branch le_map_channel_end ,true 
+
+le_map_channel_next:
+2636 6fe0818a fetch 1 ,mem_le_channels 
+2637 98e67e00 isub queue ,pdata 
+2638 2021263b branch le_map_channel_cont ,positive 
+2639 1fe60fff sub pdata ,-1 ,queue 
+263a 20202636 branch le_map_channel_next 
+
+le_map_channel_cont:
+263b 18e27200 copy queue ,loopcnt 
+263c 18000e00 force 0 ,queue 
+
+le_map_channel_loop:
+263d a84fffff qisolate1 temp 
+263e 2020a640 branch le_map_channel_skip ,true 
+263f 1f20f201 increase 1 ,loopcnt 
+
+le_map_channel_skip:
+2640 1f227e00 deposit loopcnt 
+2641 203a2645 branch le_map_channel_end ,blank 
+2642 18e08e01 increase 1 ,queue 
+2643 1f20f3ff increase -1 ,loopcnt 
+2644 2020263d branch le_map_channel_loop 
+
+le_map_channel_end:
+2645 18e27e00 deposit queue 
+2646 67e08007 store 1 ,mem_le_ch_mapped 
+2647 20600000 rtn 
+
+le_wait_tx:
+2648 2034a64b branch le_wait_master ,master 
+2649 37c18200 until null ,timeout 
+264a 20600000 rtn 
+
+le_wait_master:
+264b d9600ea0 arg 0xea0 ,timeup 
+264c 34730200 until clkn_rt ,meet 
+264d 20600000 rtn 
+
+le_receive_adv:
+264e 78487c00 disable swfine 
+264f 6fe14346 fetch 2 ,mem_le_scan_window 
+2650 1fe21600 copy pdata ,timeup 
+2651 20202658 branch le_receive_packet 
+
+le_receive_slave:
+2652 4711c024 bpatchx patch24_3 ,mem_patch24 
+2653 204026be call le_dec_init 
+2654 78287c00 enable swfine 
+2655 6fe10176 fetch 2 ,mem_le_receive_window 
+2656 684a431d fetcht 4 ,mem_le_transmit_window 
+2657 98409600 iadd temp ,timeup 
+
+le_receive_packet:
+2658 204025cc call le_rx_setfreq 
+
+le_receive_rxon:
+2659 47124024 bpatchx patch24_4 ,mem_patch24 
+265a 204025c2 call le_prep 
+265b c597a660 bmark0 mark_ble_lr ,le_receive_nolr 
+265c 783cfc00 pulse dewhiten_code_calc 
+265d 2000001e nop 30 
+265e 204025c2 call le_prep 
+265f 19699600 lshift3 timeup ,timeup 
+
+le_receive_nolr:
+2660 7856fc00 disable match 
+2661 7826fc00 enable decode_fec0 
+2662 7830fc00 enable is_rx 
+2663 78507c00 disable is_tx 
+2664 19623600 copy timeup ,stop_watch 
+2665 37c18400 correlate null ,timeout 
+2666 20372669 branch le_receive_on_attempt ,attempt 
+2667 1b420400 copy clke ,temp 
+2668 604b000f storet 6 ,mem_sync_clke 
+
+le_receive_on_attempt:
+2669 242c26fa nbranch le_unsync_end ,sync 
+266a 78287c00 enable swfine 
+266b 6fe0c167 fetch 1 ,mem_le_tx_ifs_defference 
+266c d8404e20 arg param_20ms_init ,temp 
+266d 98408400 iadd temp ,temp 
+266e 6fe0c148 fetch 1 ,mem_system_clk 
+266f 984fb600 imul32 temp ,stop_watch 
+2670 20406877 call rf_debug_rx_sync_line 
+2671 20372677 branch le_receive_skip ,attempt 
+2672 204026ff call calc_clke_all_modem 
+2673 6fe08168 fetch 1 ,mem_le_state 
+2674 c301a677 bbit0 lestate_got_first_packet ,le_receive_skip 
+2675 684b000f fetcht 6 ,mem_sync_clke 
+2676 2055a477 call lpm_adjust_clk ,wake 
+
+le_receive_skip:
+2677 204022e9 call save_rssi 
+2678 7823fc00 enable enable_white 
+2679 7824fc00 enable enable_crc 
+267a 09800008 parse demod ,bucket ,8 
+267b 19897e00 rshift3 pwindow ,pdata 
+267c 67e0804c store 1 ,mem_le_rxbuf_data_header 
+267d 09800008 parse demod ,bucket ,8 
+267e 19897e00 rshift3 pwindow ,pdata 
+267f 67e0804d store 1 ,mem_le_rxbuf_data_length 
+2680 1fe27200 copy pdata ,loopcnt 
+2681 2022a69d branch le_rx_nopayload ,zero 
+2682 c5192688 bmark1 mark_ble_encryption ,le_rx_dec 
+
+le_rx_loop:
+2683 09800008 parse demod ,bucket ,8 
+2684 19897e00 rshift3 pwindow ,pdata 
+2685 e7e08005 istore 1 ,contw 
+2686 c2002683 loop le_rx_loop 
+2687 2020269d branch le_rx_nopayload 
+
+le_rx_dec:
+2688 18a22400 copy contw ,regb 
+2689 4712c024 bpatchx patch24_5 ,mem_patch24 
+268a 2040281c call le_check_retransmit 
+268b 6a20804d fetchr rega ,1 ,mem_le_rxbuf_data_length 
+268c 1a20a3fc increase -4 ,rega 
+268d 242126f2 nbranch le_mic_error ,positive 
+268e 204026c3 call le_dec_start 
+268f 1a420a00 copy regb ,contw 
+2690 d8400000 arg 0 ,temp 
+2691 6f20804d fetchr loopcnt ,1 ,mem_le_rxbuf_data_length 
+2692 1f20f3fc increase -4 ,loopcnt 
+2693 2022a69b branch le_rx_dec_loop_end ,zero 
+
+le_rx_dec_loop:
+2694 09800008 parse demod ,bucket ,8 
+2695 19897e00 rshift3 pwindow ,pdata 
+2696 e7e08005 istore 1 ,contw 
+2697 18408401 increase 1 ,temp 
+2698 18417c0f and temp ,0xf ,null 
+2699 2042a6e1 call le_dec ,zero 
+269a c2002694 loop le_rx_dec_loop 
+
+le_rx_dec_loop_end:
+269b 204026e9 call le_dec_end 
+269c 1a420a00 copy regb ,contw 
+
+le_rx_nopayload:
+269d 47134024 bpatchx patch24_6 ,mem_patch24 
+269e 09800018 parse demod ,bucket ,24 
+269f 1fef7e00 rshift32 pdata ,pdata 
+26a0 1ff17e00 rshift16 pdata ,pdata 
+26a1 e7e18005 istore 3 ,contw 
+26a2 78287c00 enable swfine 
+26a3 2040270d call le_set_until_tx_timer 
+26a4 202326f6 branch le_crc_fail ,crc_failed 
+26a5 c59926af bmark0 mark_ble_encryption ,le_rx_match 
+26a6 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+26a7 203a26af branch le_rx_match ,blank 
+26a8 1fe0fffc increase -4 ,pdata 
+26a9 67e0804d store 1 ,mem_le_rxbuf_data_length 
+26aa 204072cb call wait_ccm_done 
+26ab 6ff08108 fetch 1 ,core_misc_status 
+26ac c303a6f2 bbit0 7 ,le_mic_error 
+26ad 1800700c force regidx_result ,regext_index 
+26ae 65e20154 storer regext ,4 ,mem_le_peer_mic 
+
+le_rx_match:
+26af 20406876 call rf_debug_rx_crc_line 
+26b0 7836fc00 enable match 
+26b1 793f8030 set0 mark_ble_crc_fail ,mark 
+
+le_crc_fail_tx:
+26b2 4713c024 bpatchx patch24_7 ,mem_patch24 
+26b3 204072cd call ccm_ctrl_clr 
+26b4 6fe0819d fetch 1 ,mem_le_rx_phy 
+26b5 7d3e7e07 nsetflag ble_coded_info ,bit_le_coded_phy_s8 ,pdata 
+26b6 67e0819d store 1 ,mem_le_rx_phy 
+26b7 204026b9 call le_match_set_sync_on 
+26b8 202026bb branch le_match_set_txfreq 
+
+le_match_set_sync_on:
+26b9 7846fc00 disable decode_fec0 
+26ba 20202160 branch set_sync_on 
+
+le_match_set_txfreq:
+26bb 47144025 bpatchx patch25_0 ,mem_patch25 
+26bc 68488008 fetcht 1 ,mem_last_freq 
+26bd 202021c6 branch set_freq_tx_int 
+
+le_dec_init:
+26be c6990000 rtnmark0 mark_ble_encryption 
+26bf 20407368 call load_sk 
+26c0 1800700c force regidx_result ,regext_index 
+26c1 20407370 call aes_clear 
+26c2 2020736f branch aes_clear_data 
+
+le_dec_start:
+26c3 4714c025 bpatchx patch25_1 ,mem_patch25 
+26c4 70806c00 jam 0 ,core_ccm_aad0 
+26c5 70806d01 jam 1 ,core_ccm_aad1 
+26c6 6fe0804c fetch 1 ,mem_le_rxbuf_data_header 
+26c7 1fe17e03 and_into 0x3 ,pdata 
+26c8 67f0806e store 1 ,core_ccm_aad2 
+26c9 5800004e setarg mem_le_rxbuf_data_payload 
+26ca 67f10068 store 2 ,core_ccm_input_playload_addr 
+26cb 67f1006a store 2 ,core_ccm_output_playload_addr 
+26cc 6a20804d fetchr rega ,1 ,mem_le_rxbuf_data_length 
+26cd 1a20a3fc increase -4 ,rega 
+26ce 684ac455 fetcht 5 ,mem_ccm_pcnt_rx 
+26cf 280ffe0f isolate1 mark_old_packet ,mark 
+26d0 2040a6d7 call le_pcnt_rx_sub1 ,true 
+26d1 20407265 call ccm_b0 
+26d2 58000000 setarg 0 
+26d3 67f100c0 store 2 ,core_ccm_inptr 
+26d4 70800a06 jam 6 ,core_ccm_ctrl 
+26d5 70800a07 jam 7 ,core_ccm_ctrl 
+26d6 20600000 rtn 
+
+le_pcnt_rx_sub1:
+26d7 18467c00 sub temp ,0 ,null 
+26d8 2022a6dc branch le_pcnt_rx_sub1_0 ,zero 
+26d9 184085ff increase -1 ,temp 
+26da 79200427 set1 le_ccm_directionbit ,temp 
+26db 20600000 rtn 
+
+le_pcnt_rx_sub1_0:
+26dc 58ffffff setarg 0xffffff 
+26dd 1ff07e00 lshift16 pdata ,pdata 
+26de d840ffff arg 0xffff ,temp 
+26df 98418400 ior temp ,temp 
+26e0 20600000 rtn 
+
+le_dec:
+26e1 18a22400 copy contw ,regb 
+26e2 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+26e3 1fe0fffc increase -4 ,pdata 
+26e4 98467c00 isub temp ,null 
+26e5 20628000 rtn zero 
+26e6 605900c0 storet 2 ,core_ccm_inptr 
+26e7 1a420a00 copy regb ,contw 
+26e8 20600000 rtn 
+
+le_dec_end:
+26e9 09800020 parse demod ,bucket ,32 
+26ea 1fef7e00 rshift32 pdata ,pdata 
+26eb 1fecfe00 rshift8 pdata ,pdata 
+26ec e7e20005 istore 4 ,contw 
+26ed 18a22400 copy contw ,regb 
+26ee 18007000 force regidx_data ,regext_index 
+26ef 1fe25e00 copy pdata ,regext 
+26f0 605900c0 storet 2 ,core_ccm_inptr 
+26f1 20600000 rtn 
+
+le_mic_error:
+26f2 202026fc branch le_end_of_packet 
+
+le_retransmit_end_of_packet:
+26f3 2040270d call le_set_until_tx_timer 
+26f4 204020cf call end_of_packet 
+26f5 202026af branch le_rx_match 
+
+le_crc_fail:
+26f6 20406878 call rf_debug_rx_crc_fail_line 
+26f7 c51826fa bmark1 mark_ble_crc_fail ,le_crc_fail_consecutive 
+26f8 79200030 set1 mark_ble_crc_fail ,mark 
+26f9 202026b2 branch le_crc_fail_tx 
+
+le_unsync_end:
+
+le_crc_fail_consecutive:
+26fa 793f8030 set0 mark_ble_crc_fail ,mark 
+26fb 202026fc branch le_end_of_packet 
+
+le_end_of_packet:
+26fc 47154025 bpatchx patch25_2 ,mem_patch25 
+26fd 204072cd call ccm_ctrl_clr 
+26fe 202020cf branch end_of_packet 
+
+calc_clke_all_modem:
+26ff c517a705 bmark1 mark_ble_lr ,calc_clke_modem_coded 
+2700 c516a709 bmark1 mark_ble_2m ,calc_clke_modem_2m 
+2701 6fe10046 fetch 2 ,mem_param_clke_cal_le_1m 
+2702 1fe25200 copy pdata ,clke_rt 
+2703 1c225000 copy bt_clk ,clke_bt 
+2704 20600000 rtn 
+
+calc_clke_modem_coded:
+2705 6fe1004a fetch 2 ,mem_param_clke_cal_le_coded 
+2706 1fe25200 copy pdata ,clke_rt 
+2707 1c20d001 add bt_clk ,1 ,clke_bt 
+2708 20600000 rtn 
+
+calc_clke_modem_2m:
+2709 6fe10048 fetch 2 ,mem_param_clke_cal_le_2m 
+270a 1fe25200 copy pdata ,clke_rt 
+270b 1c225000 copy bt_clk ,clke_bt 
+270c 20600000 rtn 
+
+le_set_until_tx_timer:
+270d 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+270e 1fe08405 add pdata ,5 ,temp 
+270f 18498400 lshift3 temp ,temp 
+2710 6fe0819d fetch 1 ,mem_le_rx_phy 
+2711 c517a714 bmark1 mark_ble_lr ,le_set_until_tx_timer_rx_lr 
+2712 c2802716 bbit1 bit_le_1m_phy ,le_set_until_tx_timer_rx_1m 
+2713 c280a717 bbit1 bit_le_2m_phy ,le_set_until_tx_timer_rx_2m 
+
+le_set_until_tx_timer_rx_lr:
+2714 203e2719 branch le_set_until_tx_timer_rx_coded_s2 ,ble_coded_info 
+2715 2020271c branch le_set_until_tx_timer_rx_coded_s8 
+
+le_set_until_tx_timer_rx_1m:
+2716 20202721 branch le_calc_stop_watch 
+
+le_set_until_tx_timer_rx_2m:
+2717 18430400 rshift temp ,temp 
+2718 20202721 branch le_calc_stop_watch 
+
+le_set_until_tx_timer_rx_coded_s2:
+2719 18408403 add temp ,3 ,temp 
+271a 18438400 lshift temp ,temp 
+271b 2020271e branch le_set_until_tx_timer_rx_coded 
+
+le_set_until_tx_timer_rx_coded_s8:
+271c 18408403 add temp ,3 ,temp 
+271d 18498400 lshift3 temp ,temp 
+
+le_set_until_tx_timer_rx_coded:
+271e 58000028 setarg param_coded_c1_term1_time_40us 
+271f 98408400 iadd temp ,temp 
+2720 20202721 branch le_calc_stop_watch 
+
+le_calc_stop_watch:
+2721 6fe0c148 fetch 1 ,mem_system_clk 
+2722 984f8400 imul32 temp ,temp 
+2723 da204e20 arg param_20ms_init ,rega 
+2724 9a2ffe00 imul32 rega ,pdata 
+2725 98460400 isub temp ,temp 
+2726 1b627e00 copy stop_watch ,pdata 
+2727 98463600 isub temp ,stop_watch 
+2728 20600000 rtn 
+
+le_transmit_receive_sifs_without_change_mode:
+2729 20402741 call le_transmit 
+272a 68488008 fetcht 1 ,mem_last_freq 
+272b 2040216f call set_freq_rx 
+272c 204021a6 call rf_rx_enable 
+272d 78287c00 enable swfine 
+272e d960157c arg 5500 ,timeup 
+272f 20202659 branch le_receive_rxon 
+
+le_transmit_receive_sifs:
+2730 4715c025 bpatchx patch25_3 ,mem_patch25 
+2731 6fe0819e fetch 1 ,mem_le_tx_phy 
+2732 204025a4 call le_enable_phy_by_pdata 
+2733 20402741 call le_transmit 
+
+le_transmit_receive_sifs_notx:
+2734 6fe0819d fetch 1 ,mem_le_rx_phy 
+2735 204025a4 call le_enable_phy_by_pdata 
+2736 68488008 fetcht 1 ,mem_last_freq 
+2737 2040216f call set_freq_rx 
+2738 204021a6 call rf_rx_enable 
+2739 78287c00 enable swfine 
+273a d960157c arg 5500 ,timeup 
+273b c597a659 bmark0 mark_ble_lr ,le_receive_rxon 
+273c d9602134 arg 8500 ,timeup 
+273d 20202659 branch le_receive_rxon 
+
+le_transmit_norx:
+273e 47164025 bpatchx patch25_4 ,mem_patch25 
+273f 20402741 call le_transmit 
+2740 202020cf branch end_of_packet 
+
+le_transmit:
+2741 4716c025 bpatchx patch25_5 ,mem_patch25 
+2742 204025c2 call le_prep 
+2743 204025d1 call le_tx_setfreq 
+2744 2040687d call rf_debug_tx_on_line 
+2745 79202a00 set1 txgfsk ,radio_ctrl 
+2746 782efc00 enable encode_fec0 
+2747 78307c00 enable is_tx 
+2748 7850fc00 disable is_rx 
+2749 20402648 call le_wait_tx 
+274a 785d7c00 disable lr_s2en 
+274b c517a784 bmark1 mark_ble_lr ,le_transmit_lr 
+274c c516a796 bmark1 mark_ble_2m ,le_transmit_2m 
+274d 19317e00 rshift16 access ,pdata 
+274e 1fecfe00 rshift8 pdata ,pdata 
+274f 1ff1fe00 rshift4 pdata ,pdata 
+2750 08008628 inject mod ,40 
+
+le_transmit_packet:
+2751 7823fc00 enable enable_white 
+2752 7824fc00 enable enable_crc 
+2753 47174025 bpatchx patch25_6 ,mem_patch25 
+2754 6fe0c169 fetch 1 ,mem_le_txheader 
+2755 08008608 inject mod ,8 
+2756 efe08006 ifetch 1 ,contr 
+2757 1fe27200 copy pdata ,loopcnt 
+2758 08008608 inject mod ,8 
+2759 1f267c00 sub loopcnt ,0 ,null 
+275a 2022a762 branch le_tr_nopayload ,zero 
+275b 6ff0800a fetch 1 ,core_ccm_ctrl 
+275c 203a275e branch le_transmit_packet_not_enc ,blank 
+275d c5192779 bmark1 mark_ble_encryption ,le_transmit_packet_enc 
+
+le_transmit_packet_not_enc:
+275e d8c0416b arg mem_le_txpayload ,contr 
+
+le_tr_loop:
+275f efe08006 ifetch 1 ,contr 
+2760 08008608 inject mod ,8 
+2761 c200275f loop le_tr_loop 
+
+le_tr_nopayload:
+2762 78247c00 enable enable_parity 
+2763 08008618 inject mod ,24 
+2764 78447c00 disable enable_parity 
+2765 c597a769 bmark0 mark_ble_lr ,le_transmit_skip 
+2766 7843fc00 disable enable_white 
+2767 58000000 setarg 0 
+2768 08008603 inject mod ,3 
+
+le_transmit_skip:
+2769 37d38200 until null ,tx_clear 
+276a 20000064 nop 100 
+276b 4717c025 bpatchx patch25_7 ,mem_patch25 
+276c 784efc00 disable encode_fec0 
+276d 785c7c00 disable encode_fec3 
+276e 20402160 call set_sync_on 
+276f 2040687b call rf_debug_tx_off_line 
+
+le_check_start_pause_enc:
+2770 6fe0c169 fetch 1 ,mem_le_txheader 
+2771 1fe17e03 and pdata ,llid_le_ll ,pdata 
+2772 c1818000 rtnne llid_le_ll 
+2773 6fe0c2fd fetch 1 ,mem_le_enc_state 
+2774 c001285c beq flag_le_enc_pause ,le_clear_enc 
+2775 c1828000 rtnne flag_le_send_start_enc_req 
+2776 6fe0c16b fetch 1 ,mem_le_txpayload 
+2777 c002a857 beq ll_start_enc_req ,le_set_enc 
+2778 20600000 rtn 
+
+le_transmit_packet_enc:
+2779 1f20f3fc increase -4 ,loopcnt 
+277a 1f220400 copy loopcnt ,temp 
+277b 204072b8 call ccm_wait_enc 
+277c d8c0416b arg mem_le_txpayload ,contr 
+
+le_transmit_packet_enc_loop:
+277d efe08006 ifetch 1 ,contr 
+277e 08008608 inject mod ,8 
+277f c200277d loop le_transmit_packet_enc_loop 
+2780 204072bd call ccm_check_enc_done 
+2781 1de27e00 copy regext ,pdata 
+2782 08008620 inject mod ,32 
+2783 20202762 branch le_tr_nopayload 
+
+le_transmit_lr:
+2784 df20000a arg 10 ,loopcnt 
+
+le_transmit_lr_preamble_loop:
+2785 5800003c setarg 0x3c 
+2786 08008608 inject mod ,8 
+2787 c2002785 loop le_transmit_lr_preamble_loop 
+2788 784efc00 disable encode_fec0 
+2789 783c7c00 enable encode_fec3 
+278a 19317e00 rshift16 access ,pdata 
+278b 1ff17e00 rshift16 pdata ,pdata 
+278c 1ff1fe00 rshift4 pdata ,pdata 
+278d 08008620 inject mod ,32 
+278e c5172793 bmark1 mark_ble_lr_s8 ,le_transmit_lr_s8 
+
+le_transmit_lr_s2:
+278f 58000001 setarg 1 
+2790 08008605 inject mod ,5 
+2791 783d7c00 enable lr_s2en 
+2792 20202751 branch le_transmit_packet 
+
+le_transmit_lr_s8:
+2793 58000000 setarg 0 
+2794 08008605 inject mod ,5 
+2795 20202751 branch le_transmit_packet 
+
+le_transmit_2m:
+2796 6fe0c148 fetch 1 ,mem_system_clk 
+2797 6848c168 fetcht 1 ,mem_le_tx2m_delay 
+2798 9840fe00 iadd temp ,pdata 
+2799 2040235c call sleep 
+279a 19317e00 rshift16 access ,pdata 
+279b 1fecfe00 rshift8 pdata ,pdata 
+279c 1ff18400 rshift4 pdata ,temp 
+279d 18427e00 copy temp ,pdata 
+279e 08008608 inject mod ,8 
+279f 18427e00 copy temp ,pdata 
+27a0 08008628 inject mod ,40 
+27a1 20202751 branch le_transmit_packet 
+
+le_update_param:
+27a2 da6027a6 arg le_update_param_ahead1_cb ,regc 
+27a3 da4027bc arg le_update_param_cb ,regb 
+27a4 d8e00005 arg lestate_update_param ,queue 
+27a5 202027fb branch le_check_update_flag 
+
+le_update_param_ahead1_cb:
+27a6 1a208c04 add rega ,coffset_sniff_anchor ,contr 
+27a7 e8420006 ifetcht 4 ,contr 
+27a8 1a208c37 add rega ,coffest_le_new_transmitwindowsize ,contr 
+27a9 efe08006 ifetch 1 ,contr 
+27aa 1a208a2b add rega ,coffset_le_window_size ,contw 
+27ab e7e08005 istore 1 ,contw 
+27ac efe10006 ifetch 2 ,contr 
+27ad 1febfe00 lshift2 pdata ,pdata 
+27ae 98409600 iadd temp ,timeup 
+27af 1a208a04 add rega ,coffset_sniff_anchor ,contw 
+27b0 19627e00 deposit timeup 
+27b1 e7e20005 istore 4 ,contw 
+27b2 efe10006 ifetch 2 ,contr 
+27b3 1febfe00 lshift2 pdata ,pdata 
+27b4 1a208a02 add rega ,coffset_tsniff ,contw 
+27b5 e7e10005 istore 2 ,contw 
+27b6 efe10006 ifetch 2 ,contr 
+27b7 1a208a2c add rega ,coffset_le_slave_latency ,contw 
+27b8 e7e10005 istore 2 ,contw 
+27b9 efe10006 ifetch 2 ,contr 
+27ba 67e142f5 store 2 ,mem_le_init_superto 
+27bb 20202938 branch le_receive_window_size 
+
+le_update_param_cb:
+27bc efe08011 ifetch 1 ,rega 
+27bd 793ffe03 set0 lestate_got_first_packet ,pdata 
+27be e7e08011 istore 1 ,rega 
+27bf 62210684 storer rega ,2 ,mem_rega 
+27c0 70066f44 jam bt_evt_le_parse_conn_param_accepted ,mem_fifo_temp 
+27c1 2040782b call ui_ipc_send_event 
+27c2 6a210684 fetchr rega ,2 ,mem_rega 
+27c3 20600000 rtn 
+
+le_update_channel_map:
+27c4 da600000 arg 0 ,regc 
+27c5 da4027c8 arg le_update_channel_map_cb ,regb 
+27c6 d8e00006 arg lestate_update_map ,queue 
+27c7 202027fb branch le_check_update_flag 
+
+le_update_channel_map_cb:
+27c8 1a208c37 add rega ,coffset_le_new_map ,contr 
+27c9 efe28006 ifetch 5 ,contr 
+27ca 1a208a30 add rega ,coffset_le_channel_map ,contw 
+27cb e7e28005 istore 5 ,contw 
+27cc 20202624 branch le_calc_channel_map 
+
+le_update_phy:
+27cd da600000 arg 0 ,regc 
+27ce da4027d1 arg le_update_phy_cb ,regb 
+27cf d8e00007 arg lestate_update_phy ,queue 
+27d0 202027fb branch le_check_update_flag 
+
+le_update_phy_cb:
+27d1 1a208c37 add rega ,coffset_le_new_m2s_phy ,contr 
+27d2 efe08006 ifetch 1 ,contr 
+27d3 204027de call le_update_phy_cb_m2s 
+27d4 e7e08005 istore 1 ,contw 
+27d5 1a208c38 add rega ,coffset_le_new_s2m_phy ,contr 
+27d6 efe08006 ifetch 1 ,contr 
+27d7 204027ec call le_update_phy_cb_s2m 
+27d8 e7e08005 istore 1 ,contw 
+27d9 62210684 storer rega ,2 ,mem_rega 
+27da 70066f42 jam bt_evt_le_update_phy ,mem_fifo_temp 
+27db 2040782b call ui_ipc_send_event 
+27dc 6a210684 fetchr rega ,2 ,mem_rega 
+27dd 20600000 rtn 
+
+le_update_phy_cb_m2s:
+27de 205a27e6 call le_update_phy_cb_m2s_no_change ,blank 
+27df 1a208a35 add rega ,coffset_le_rx_phy ,contw 
+27e0 24748000 nrtn master 
+27e1 6848c3b6 fetcht 1 ,mem_le_tx_phys 
+27e2 284ffe07 isolate1 bit_le_coded_phy_s8 ,temp 
+27e3 7920fe07 setflag true ,bit_le_coded_phy_s8 ,pdata 
+27e4 1a208a36 add rega ,coffset_le_tx_phy ,contw 
+27e5 20600000 rtn 
+
+le_update_phy_cb_m2s_no_change:
+27e6 1a208c35 add rega ,coffset_le_rx_phy ,contr 
+27e7 efe08006 ifetch 1 ,contr 
+27e8 24748000 nrtn master 
+27e9 1a208c36 add rega ,coffset_le_tx_phy ,contr 
+27ea efe08006 ifetch 1 ,contr 
+27eb 20600000 rtn 
+
+le_update_phy_cb_s2m:
+27ec 205a27f5 call le_update_phy_cb_s2m_no_change ,blank 
+27ed 6848c3b6 fetcht 1 ,mem_le_tx_phys 
+27ee 284ffe07 isolate1 bit_le_coded_phy_s8 ,temp 
+27ef 7920fe07 setflag true ,bit_le_coded_phy_s8 ,pdata 
+27f0 1a208a36 add rega ,coffset_le_tx_phy ,contw 
+27f1 24748000 nrtn master 
+27f2 793ffe07 set0 bit_le_coded_phy_s8 ,pdata 
+27f3 1a208a35 add rega ,coffset_le_rx_phy ,contw 
+27f4 20600000 rtn 
+
+le_update_phy_cb_s2m_no_change:
+27f5 1a208c36 add rega ,coffset_le_tx_phy ,contr 
+27f6 efe08006 ifetch 1 ,contr 
+27f7 24748000 nrtn master 
+27f8 1a208c35 add rega ,coffset_le_rx_phy ,contr 
+27f9 efe08006 ifetch 1 ,contr 
+27fa 20600000 rtn 
+
+le_check_update_flag:
+27fb 47184026 bpatchx patch26_0 ,mem_patch26 
+27fc efe08011 ifetch 1 ,rega 
+27fd afec0000 qisolate0 pdata 
+27fe 20608000 rtn true 
+27ff 1a208c1a add rega ,coffset_le_event_cnt ,contr 
+2800 e8410006 ifetcht 2 ,contr 
+2801 1a208c20 add rega ,coffset_le_instant ,contr 
+2802 efe10006 ifetch 2 ,contr 
+2803 98467e00 isub temp ,pdata 
+2804 2022a80b branch le_update ,zero 
+2805 24212810 nbranch le_check_update_small ,positive 
+2806 1fe67c01 sub pdata ,1 ,null 
+2807 2022a809 branch le_update_ahead1 ,zero 
+2808 20600000 rtn 
+
+le_update_ahead1:
+2809 1a627e00 copy regc ,pdata 
+280a 20207d79 branch callback_func 
+
+le_update:
+280b efe08011 ifetch 1 ,rega 
+280c f93ffe00 qset0 pdata 
+280d e7e08011 istore 1 ,rega 
+280e 1a427e00 copy regb ,pdata 
+280f 20207d79 branch callback_func 
+
+le_check_update_small:
+2810 1a208c1a add rega ,coffset_le_event_cnt ,contr 
+2811 efe10006 ifetch 2 ,contr 
+2812 1a208c20 add rega ,coffset_le_instant ,contr 
+2813 efe10006 ifetch 2 ,contr 
+2814 98467e00 isub temp ,pdata 
+2815 d840ffff arg 0xffff ,temp 
+2816 98467c00 isub temp ,null 
+2817 2022a80b branch le_update ,zero 
+2818 d840f000 arg 0xf000 ,temp 
+2819 98467c00 isub temp ,null 
+281a 2421280b nbranch le_update ,positive 
+281b 20600000 rtn 
+
+le_check_retransmit:
+281c 6848817f fetcht 1 ,mem_le_arq 
+281d 6fe0804c fetch 1 ,mem_le_rxbuf_data_header 
+281e 1fe37e00 rshift pdata ,pdata 
+281f 9842fe00 ixor temp ,pdata 
+2820 2feffe02 isolate1 nesn ,pdata 
+2821 7920800f setflag true ,mark_old_packet ,mark 
+2822 20600000 rtn 
+
+le_acknowledge:
+2823 4718c026 bpatchx patch26_1 ,mem_patch26 
+2824 20402935 call le_supervision_flush 
+2825 c6180000 rtnmark1 mark_ble_crc_fail 
+2826 2040284a call le_check_wak 
+2827 6fe0804c fetch 1 ,mem_le_rxbuf_data_header 
+2828 2feffe04 isolate1 md ,pdata 
+2829 7920802a setflag true ,mark_ble_rx_md ,mark 
+282a 1fe37e00 rshift pdata ,pdata 
+282b 9842fe00 ixor temp ,pdata 
+282c 2feffe02 isolate1 nesn ,pdata 
+282d 7920800f setflag true ,mark_old_packet ,mark 
+282e c6078000 rtnmark1 mark_old_packet 
+282f 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+2830 203a283c branch le_ack_unenc ,blank 
+2831 6fe08168 fetch 1 ,mem_le_state 
+2832 c302283c bbit0 lestate_encryption ,le_ack_unenc 
+2833 684a0154 fetcht 4 ,mem_le_peer_mic 
+2834 6fe2445a fetch 4 ,mem_ccm_last_mic 
+2835 98467c00 isub temp ,null 
+2836 2022a35a branch assert ,zero 
+2837 604a445a storet 4 ,mem_ccm_last_mic 
+2838 6fe2c455 fetch 5 ,mem_ccm_pcnt_rx 
+2839 1fe0fe01 increase 1 ,pdata 
+283a 79207e27 set1 le_ccm_directionbit ,pdata 
+283b 67e2c455 store 5 ,mem_ccm_pcnt_rx 
+
+le_ack_unenc:
+283c 6848817f fetcht 1 ,mem_le_arq 
+283d 79400402 setflip nesn ,temp 
+283e 6048817f storet 1 ,mem_le_arq 
+283f 6fe0c321 fetch 1 ,mem_le_configuration 
+2840 c4030000 rtnbit0 bit_ble_deal_bb_packet 
+2841 47194026 bpatchx patch26_2 ,mem_patch26 
+2842 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+2843 207a0000 rtn blank 
+2844 6fe0804c fetch 1 ,mem_le_rxbuf_data_header 
+2845 2fe00601 compare llid_continue ,pdata ,3 
+2846 2020ae65 branch le_parse_writing_attribute_continue ,true 
+2847 2fe00602 compare llid_start ,pdata ,3 
+2848 2020ae53 branch le_parse_writing_attribute_start ,true 
+2849 20600000 rtn 
+
+le_check_wak:
+284a 4719c026 bpatchx patch26_3 ,mem_patch26 
+284b 6848817f fetcht 1 ,mem_le_arq 
+284c 284c0005 isolate0 wak ,temp 
+284d 20608000 rtn true 
+284e 6fe0804c fetch 1 ,mem_le_rxbuf_data_header 
+284f 1fe3fe00 lshift pdata ,pdata 
+2850 9842fe00 ixor temp ,pdata 
+2851 c4018000 rtnbit0 sn 
+2852 793f8405 set0 wak ,temp 
+2853 79400403 setflip sn ,temp 
+2854 6048817f storet 1 ,mem_le_arq 
+2855 28400603 compare 3 ,temp ,3 
+2856 20600000 rtn 
+
+le_set_enc:
+2857 6fe08168 fetch 1 ,mem_le_state 
+2858 79207e04 set1 lestate_encryption ,pdata 
+2859 67e08168 store 1 ,mem_le_state 
+285a 79200032 set1 mark_ble_encryption ,mark 
+285b 20600000 rtn 
+
+le_clear_enc:
+285c 471a4026 bpatchx patch26_4 ,mem_patch26 
+285d 7042fd00 jam flag_le_enc_null ,mem_le_enc_state 
+285e dfe00000 arg 0 ,pdata 
+285f 67e2445a store 4 ,mem_ccm_last_mic 
+2860 67e2c450 store 5 ,mem_ccm_pcnt_tx 
+2861 79207e27 set1 le_ccm_directionbit ,pdata 
+2862 67e2c455 store 5 ,mem_ccm_pcnt_rx 
+2863 6fe08168 fetch 1 ,mem_le_state 
+2864 793ffe04 set0 lestate_encryption ,pdata 
+2865 67e08168 store 1 ,mem_le_state 
+2866 793f8032 set0 mark_ble_encryption ,mark 
+2867 20600000 rtn 
+
+le_scan_check_sender_addr_type:
+2868 da200001 arg 1 ,rega 
+2869 6fe0804c fetch 1 ,mem_le_rxbuf_adv_connect_ind_header 
+286a c3830000 rtnbit1 le_sender_addr_bit 
+286b da200000 arg 0 ,rega 
+286c 20600000 rtn 
+
+le_get_master_rx_max:
+286d 18c20a00 copy contr ,contw 
+286e 684943b8 fetcht 2 ,mem_remote_rx_max_octets 
+286f 18a20c00 copy contw ,contr 
+2870 20600000 rtn 
+
+le_prepare_tx:
+2871 471ac026 bpatchx patch26_5 ,mem_patch26 
+2872 6fe0817f fetch 1 ,mem_le_arq 
+2873 c3828000 rtnbit1 wak 
+2874 20402892 call le_check_tx_md 
+2875 20402a10 call le_fifo_get_first_tx_ptr 
+2876 203a28b6 branch le_send_empty ,blank 
+2877 efe10006 ifetch 2 ,contr 
+2878 e8410006 ifetcht 2 ,contr 
+2879 18422200 copy temp ,rega 
+287a 9a267e00 isub rega ,pdata 
+287b 2040286d call le_get_master_rx_max 
+287c 20407db0 call not_greater_than 
+287d 1fe20400 copy pdata ,temp 
+287e e8208006 ifetchr type ,1 ,contr 
+287f 1a227e00 copy rega ,pdata 
+2880 98c0fe00 iadd contr ,pdata 
+2881 67e1068f store 2 ,mem_contr 
+2882 204028a6 call le_update_tx_type 
+2883 204028b8 call le_send_packet 
+2884 20402a10 call le_fifo_get_first_tx_ptr 
+2885 efe10006 ifetch 2 ,contr 
+2886 1fe22200 copy pdata ,rega 
+2887 18c22600 copy contr ,regc 
+2888 e8410006 ifetcht 2 ,contr 
+2889 18422400 copy temp ,regb 
+288a 9a467e00 isub regb ,pdata 
+288b 2040286d call le_get_master_rx_max 
+288c 20407db0 call not_greater_than 
+288d 9a40fe00 iadd regb ,pdata 
+288e e7e10013 istore 2 ,regc 
+288f 9a267c00 isub rega ,null 
+2890 24628000 nrtn zero 
+2891 20202a2a branch le_fifo_release_first_node 
+
+le_check_tx_md:
+2892 20402899 call le_check_continue 
+2893 c6148000 rtnmark1 mark_ble_tx_md 
+2894 6fe0c321 fetch 1 ,mem_le_configuration 
+2895 c30128a4 bbit0 bit_ble_transmit_packet_by_md ,le_clear_md 
+2896 20402a14 call le_fifo_get_second_tx_ptr 
+2897 203a28a4 branch le_clear_md ,blank 
+2898 202028a2 branch le_set_md 
+
+le_check_continue:
+2899 20402a10 call le_fifo_get_first_tx_ptr 
+289a 203a28a4 branch le_clear_md ,blank 
+289b efe10006 ifetch 2 ,contr 
+289c e8410006 ifetcht 2 ,contr 
+289d 98462200 isub temp ,rega 
+289e 2040286d call le_get_master_rx_max 
+289f 18427e00 copy temp ,pdata 
+28a0 9a267c00 isub rega ,null 
+28a1 202128a4 branch le_clear_md ,positive 
+
+le_set_md:
+28a2 79200029 set1 mark_ble_tx_md ,mark 
+28a3 20600000 rtn 
+
+le_clear_md:
+28a4 793f8029 set0 mark_ble_tx_md ,mark 
+28a5 20600000 rtn 
+
+le_update_tx_type:
+28a6 1a227e00 copy rega ,pdata 
+28a7 207a0000 rtn blank 
+28a8 d8200001 arg llid_continue ,type 
+28a9 20600000 rtn 
+
+le_att_check_notification_enable:
+28aa 471b4026 bpatchx patch26_6 ,mem_patch26 
+28ab 18408401 increase 1 ,temp 
+28ac 20402ccf call le_att_get_handle_ptr 
+28ad 18c08dfe increase -2 ,contr 
+28ae efe10006 ifetch 2 ,contr 
+28af d8402902 arg client_charactertic_configuration ,temp 
+28b0 98467c00 isub temp ,null 
+28b1 24628000 nrtn zero 
+28b2 18c08c01 increase 1 ,contr 
+28b3 18c22200 copy contr ,rega 
+28b4 efe08006 ifetch 1 ,contr 
+28b5 20600000 rtn 
+
+le_send_empty:
+28b6 18000400 force 0 ,temp 
+28b7 18000201 force 1 ,type 
+
+le_send_packet:
+28b8 471bc026 bpatchx patch26_7 ,mem_patch26 
+28b9 6048c16a storet 1 ,mem_le_txlen 
+28ba 6848817f fetcht 1 ,mem_le_arq 
+28bb 79200405 set1 wak ,temp 
+28bc 18417efc and temp ,0xfc ,pdata 
+28bd 9821fe00 ior type ,pdata 
+28be 67e0817f store 1 ,mem_le_arq 
+28bf 1fe17e1f and_into 0x1f ,pdata 
+28c0 280ffe29 isolate1 mark_ble_tx_md ,mark 
+28c1 7920fe04 setflag true ,md ,pdata 
+28c2 67e0c169 store 1 ,mem_le_txheader 
+28c3 6fe0c169 fetch 1 ,mem_le_txheader 
+28c4 28200601 compare 1 ,type ,3 
+28c5 2420a8c8 nbranch le_send_no_txlen ,true 
+28c6 6fe0c16a fetch 1 ,mem_le_txlen 
+28c7 207a0000 rtn blank 
+
+le_send_no_txlen:
+28c8 c51928ce bmark1 mark_ble_encryption ,le_send_packet_enc 
+28c9 6f20c16a fetchr loopcnt ,1 ,mem_le_txlen 
+28ca 6fe1068f fetch 2 ,mem_contr 
+28cb 1fe20c00 copy pdata ,contr 
+28cc d8a0416b arg mem_le_txpayload ,contw 
+28cd 20207ccc branch memcpy_fast 
+
+le_send_packet_enc:
+28ce 20407368 call load_sk 
+28cf 2020729f branch le_encrypt_new_start 
+
+get_lpm_wake_ble_rx_lock:
+28d0 d8e00000 arg wake_lock_ble_rx ,queue 
+28d1 202024e7 branch lpm_get_wake_lock 
+
+put_lpm_wake_ble_rx_lock:
+28d2 d8e00000 arg wake_lock_ble_rx ,queue 
+28d3 202024eb branch lpm_put_wake_lock 
+
+le_parse:
+28d4 471c4027 bpatchx patch27_0 ,mem_patch27 
+28d5 c6078000 rtnmark1 mark_old_packet 
+28d6 c6180000 rtnmark1 mark_ble_crc_fail 
+28d7 6fe0804c fetch 1 ,mem_le_rxbuf_data_header 
+28d8 1fe17e03 and pdata ,0x3 ,pdata 
+28d9 67e0c334 store 1 ,mem_le_packet_llid 
+28da 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+28db 207a0000 rtn blank 
+28dc 5800004e setarg mem_le_rxbuf_data_payload 
+28dd 67e14339 store 2 ,mem_le_payload_ptr 
+28de 471cc027 bpatchx patch27_1 ,mem_patch27 
+28df 6fe0c334 fetch 1 ,mem_le_packet_llid 
+28e0 c001b04a beq llid_le_ll ,le_parse_ll 
+
+le_parse_l2cap:
+28e1 204028ee call le_check_l2cap_complete 
+28e2 243428d0 nbranch get_lpm_wake_ble_rx_lock ,user 
+28e3 204028d2 call put_lpm_wake_ble_rx_lock 
+28e4 58000000 setarg 0 
+28e5 67e14337 store 2 ,mem_le_packet_len_recved 
+28e6 6fe14339 fetch 2 ,mem_le_payload_ptr 
+28e7 1fe08c02 add pdata ,2 ,contr 
+28e8 471d4027 bpatchx patch27_2 ,mem_patch27 
+28e9 efe10006 ifetch 2 ,contr 
+28ea c0022b8f beq le_l2cap_cid_att ,le_parse_att 
+28eb c0032ec8 beq le_l2cap_cid_smp ,le_parse_smp 
+28ec c002ae8a beq le_l2cap_cid_signal ,le_parse_signaling 
+28ed 20600000 rtn 
+
+le_check_l2cap_complete:
+28ee 6fe0c334 fetch 1 ,mem_le_packet_llid 
+28ef c00128fd beq llid_start ,le_check_l2cap_llid_start 
+28f0 c000a914 beq llid_continue ,le_check_l2cap_llid_continue 
+28f1 20600000 rtn 
+
+le_check_l2cap_cid_legal:
+28f2 20407dba call enable_user 
+28f3 d8400004 arg le_l2cap_cid_att ,temp 
+28f4 9fe67c00 isub pdata ,null 
+28f5 20628000 rtn zero 
+28f6 d8400005 arg le_l2cap_cid_signal ,temp 
+28f7 9fe67c00 isub pdata ,null 
+28f8 20628000 rtn zero 
+28f9 d8400006 arg le_l2cap_cid_smp ,temp 
+28fa 9fe67c00 isub pdata ,null 
+28fb 20628000 rtn zero 
+28fc 20207dbc branch disable_user 
+
+le_check_l2cap_llid_start:
+28fd 6fe14339 fetch 2 ,mem_le_payload_ptr 
+28fe 1fe20c00 copy pdata ,contr 
+28ff efe10006 ifetch 2 ,contr 
+2900 67e14335 store 2 ,mem_le_l2cap_size 
+2901 efe10006 ifetch 2 ,contr 
+2902 204028f2 call le_check_l2cap_cid_legal 
+2903 24740000 nrtn user 
+2904 6848804d fetcht 1 ,mem_le_rxbuf_data_length 
+2905 60494337 storet 2 ,mem_le_packet_len_recved 
+2906 6fe14335 fetch 2 ,mem_le_l2cap_size 
+2907 1fe0fe04 increase 4 ,pdata 
+2908 98467c00 isub temp ,null 
+2909 2022fdba branch enable_user ,zero 
+290a 6f20804d fetchr loopcnt ,1 ,mem_le_rxbuf_data_length 
+290b d8a00f00 arg mem_le_l2cap_buf ,contw 
+290c 6fe14339 fetch 2 ,mem_le_payload_ptr 
+290d 1fe20c00 copy pdata ,contr 
+290e 20407ccc call memcpy_fast 
+290f 20207dbc branch disable_user 
+
+le_check_l2cap_continue_legal:
+2910 20407dba call enable_user 
+2911 6fe14337 fetch 2 ,mem_le_packet_len_recved 
+2912 247a0000 nrtn blank 
+2913 20207dbc branch disable_user 
+
+le_check_l2cap_llid_continue:
+2914 20402910 call le_check_l2cap_continue_legal 
+2915 24740000 nrtn user 
+2916 6fe14337 fetch 2 ,mem_le_packet_len_recved 
+2917 d8a00f00 arg mem_le_l2cap_buf ,contw 
+2918 98a0a200 iadd contw ,rega 
+2919 6848804d fetcht 1 ,mem_le_rxbuf_data_length 
+291a 9840fe00 iadd temp ,pdata 
+291b 67e14337 store 2 ,mem_le_packet_len_recved 
+291c 6f20804d fetchr loopcnt ,1 ,mem_le_rxbuf_data_length 
+291d 1a220a00 copy rega ,contw 
+291e 6fe14339 fetch 2 ,mem_le_payload_ptr 
+291f 1fe20c00 copy pdata ,contr 
+2920 20407ccc call memcpy_fast 
+2921 58000f00 setarg mem_le_l2cap_buf 
+2922 67e14339 store 2 ,mem_le_payload_ptr 
+2923 6fe14335 fetch 2 ,mem_le_l2cap_size 
+2924 1fe0fe04 increase 4 ,pdata 
+2925 68494337 fetcht 2 ,mem_le_packet_len_recved 
+2926 98467c00 isub temp ,null 
+2927 2022fdba branch enable_user ,zero 
+2928 20207dbc branch disable_user 
+
+le_writeatt_cb:
+2929 6fe143df fetch 2 ,mem_cb_att_write 
+292a 20207d79 branch callback_func 
+
+le_supervision_update:
+292b 471dc027 bpatchx patch27_3 ,mem_patch27 
+292c 684a0184 fetcht 4 ,mem_le_supervision_timer 
+292d 20402356 call get_clkbt 
+292e 98461600 isub temp ,timeup 
+292f 19627e00 deposit timeup 
+2930 68490196 fetcht 2 ,mem_le_superto 
+2931 18520400 lshift4 temp ,temp 
+2932 18438400 lshift temp ,temp 
+2933 98467e00 isub temp ,pdata 
+2934 20600000 rtn 
+
+le_supervision_flush:
+2935 20402356 call get_clkbt 
+2936 67e20184 store 4 ,mem_le_supervision_timer 
+2937 20600000 rtn 
+
+le_receive_window_size:
+2938 471e4027 bpatchx patch27_4 ,mem_patch27 
+2939 1a208c50 add rega ,coffset_le_peer_sca ,contr 
+293a efe08006 ifetch 1 ,contr 
+293b 204025eb call le_sca_map 
+293c 1a208c02 add rega ,coffset_tsniff ,contr 
+293d efe10006 ifetch 2 ,contr 
+293e 984ffe00 imul32 temp ,pdata 
+293f 68490044 fetcht 2 ,mem_param_rt_rthalfslot 
+2940 984ffe00 imul32 temp ,pdata 
+2941 d84f4240 arg 1000000 ,temp 
+2942 9846fc00 idiv temp 
+2943 d8400682 arg param_windown_size ,temp 
+2944 6fe0c148 fetch 1 ,mem_system_clk 
+2945 984f8400 imul32 temp ,temp 
+2946 1a208c2b add rega ,coffset_le_window_size ,contr 
+2947 efe08006 ifetch 1 ,contr 
+2948 984ffe00 imul32 temp ,pdata 
+2949 9840fe00 iadd temp ,pdata 
+294a 67e2431d store 4 ,mem_le_transmit_window 
+294b 6fe1409a fetch 2 ,mem_rx_window_sniff 
+294c 20407d62 call wait_div_end 
+294d 18078400 quotient temp 
+294e 9840fe00 iadd temp ,pdata 
+294f 1a208a0e add rega ,coffset_rx_window ,contw 
+2950 e7e10005 istore 2 ,contw 
+2951 20600000 rtn 
+
+le_modified_name:
+2952 471ec027 bpatchx patch27_5 ,mem_patch27 
+2953 20402955 call le_modified_name_att_list 
+2954 20202969 branch le_modified_name_adv 
+
+le_modified_name_att_list:
+2955 7006b502 jam 2 ,mem_le_search_att_type_length 
+2956 d8402a00 arg uuid_chrctr_device_name ,temp 
+2957 604906b6 storet 2 ,mem_le_search_att_type 
+2958 20402ce0 call le_att_get_uuid_ptr 
+2959 207a0000 rtn blank 
+295a efe08006 ifetch 1 ,contr 
+295b 18c20a00 copy contr ,contw 
+295c 6848c26b fetcht 1 ,mem_le_name_len 
+295d 18427200 copy temp ,loopcnt 
+295e 98467c00 isub temp ,null 
+295f 24212966 nbranch le_name_length_longer_than_att ,positive 
+2960 98460400 isub temp ,temp 
+2961 d8c0426c arg mem_le_name ,contr 
+2962 20407ccc call memcpy_fast 
+2963 18427200 copy temp ,loopcnt 
+2964 2442a9a1 ncall memcpy_empty ,zero 
+2965 20600000 rtn 
+
+le_name_length_longer_than_att:
+2966 1fe27200 copy pdata ,loopcnt 
+2967 d8c0426c arg mem_le_name ,contr 
+2968 20207ccc branch memcpy_fast 
+
+le_modified_name_adv:
+2969 da604368 arg mem_le_adv_data_len + 32 ,regc 
+296a da204349 arg mem_le_adv_data ,rega 
+296b 20402976 call le_modified_name_adv_and_scan 
+296c 58000000 setarg 0 
+296d 79347e00 setflag user ,0 ,pdata 
+296e 67e08670 store 1 ,mem_pdatatemp 
+296f da604388 arg mem_le_scan_data_len + 32 ,regc 
+2970 da204369 arg mem_le_scan_data ,rega 
+2971 20402976 call le_modified_name_adv_and_scan 
+2972 20740000 rtn user 
+2973 6fe08670 fetch 1 ,mem_pdatatemp 
+2974 203a235a branch assert ,blank 
+2975 20600000 rtn 
+
+le_modified_name_adv_and_scan:
+2976 471f4027 bpatchx patch27_6 ,mem_patch27 
+2977 20407dba call enable_user 
+2978 20407ca6 call clear_temp_block 
+2979 da400000 arg 0 ,regb 
+297a d8a006a2 arg mem_le_data_temp ,contw 
+297b 20402990 call le_modified_name_adv_loop 
+297c 6fe0c26b fetch 1 ,mem_le_name_len 
+297d 1fe08401 add pdata ,1 ,temp 
+297e 9a40a200 iadd regb ,rega 
+297f 1a20a202 increase 2 ,rega 
+2980 1a267c1f sub rega ,0x1f ,null 
+2981 2421298e nbranch le_modified_name_adv_and_scan_name_overflow ,positive 
+2982 e0408005 istoret 1 ,contw 
+2983 d8400009 arg gap_adtype_local_name_complete ,temp 
+2984 e0408005 istoret 1 ,contw 
+2985 98007200 iforce loopcnt 
+2986 20407ccc call memcpy_fast 
+2987 1a222400 copy rega ,regb 
+
+le_modified_name_adv_and_scan_store_data:
+2988 1a427e00 deposit regb 
+2989 67e086a1 store 1 ,mem_le_data_len_temp 
+298a d8c006a1 arg mem_le_data_len_temp ,contr 
+298b 5fffffe0 setarg -32 
+298c 9a608a00 iadd regc ,contw 
+298d 20207c8d branch memcpy32 
+
+le_modified_name_adv_and_scan_name_overflow:
+298e 20407dbc call disable_user 
+298f 20202988 branch le_modified_name_adv_and_scan_store_data 
+
+le_modified_name_adv_loop:
+2990 efe08011 ifetch 1 ,rega 
+2991 207a0000 rtn blank 
+2992 1fe0fe01 pincrease 1 
+2993 e8408006 ifetcht 1 ,contr 
+2994 18467c09 sub temp ,gap_adtype_local_name_complete ,null 
+2995 2022a99f branch le_modified_name_adv_found_name ,zero 
+2996 9a40a400 iadd regb ,regb 
+2997 1a220c00 copy rega ,contr 
+2998 98007200 iforce loopcnt 
+2999 20407ccc call memcpy_fast 
+299a 18c22200 copy contr ,rega 
+
+le_modified_name_adv_loop2:
+299b 1a227e00 deposit rega 
+299c 9a667c00 isub regc ,null 
+299d 20610000 rtn positive 
+299e 20202990 branch le_modified_name_adv_loop 
+
+le_modified_name_adv_found_name:
+299f 9a20a200 iadd rega ,rega 
+29a0 2020299b branch le_modified_name_adv_loop2 
+
+memcpy_empty:
+29a1 58000020 setarg space 
+29a2 e7e08005 istore 1 ,contw 
+29a3 c20029a1 loop memcpy_empty 
+29a4 20600000 rtn 
+
+le_lpm_set_mult:
+29a5 471fc027 bpatchx patch27_7 ,mem_patch27 
+29a6 7855fc00 disable wake 
+29a7 203729a9 branch le_lpm_set_mult_attempt ,attempt 
+29a8 2436a9b8 nbranch le_lpm_lost ,match 
+
+le_lpm_set_mult_attempt:
+29a9 204024d2 call lpm_match 
+29aa 6fe1409a fetch 2 ,mem_rx_window_sniff 
+29ab 67e10176 store 2 ,mem_le_receive_window 
+29ac 6fe0c321 fetch 1 ,mem_le_configuration 
+29ad c282a4e0 bbit1 bit_ble_short_mult ,lpm_mult_short 
+29ae c507a4e0 bmark1 mark_old_packet ,lpm_mult_short 
+29af 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+29b0 243a24e0 nbranch lpm_mult_short ,blank 
+29b1 6fe0c16a fetch 1 ,mem_le_txlen 
+29b2 243a24e0 nbranch lpm_mult_short ,blank 
+29b3 6fe08168 fetch 1 ,mem_le_state 
+29b4 c282a4e0 bbit1 lestate_update_param ,lpm_mult_short 
+29b5 c283a4e0 bbit1 lestate_update_phy ,lpm_mult_short 
+29b6 c28324e0 bbit1 lestate_update_map ,lpm_mult_short 
+29b7 202024c8 branch lpm_mult_wait_timeout 
+
+le_lpm_lost:
+29b8 6fe0c0a8 fetch 1 ,mem_sniff_unint_lost 
+29b9 1fe67c1e sub pdata ,30 ,null 
+29ba 242124d7 nbranch lpm_lost ,positive 
+29bb 6849409a fetcht 2 ,mem_rx_window_sniff 
+29bc 18430400 rshift temp ,temp 
+29bd 6fe10176 fetch 2 ,mem_le_receive_window 
+29be 9840fe00 iadd temp ,pdata 
+29bf 67e10176 store 2 ,mem_le_receive_window 
+29c0 202024d7 branch lpm_lost 
+
+le_set_config_fixed_tk:
+29c1 d8e00000 arg bit_ble_passkey_fixed_key ,queue 
+29c2 202029d6 branch le_set_config 
+
+le_clr_config_fixed_tk:
+29c3 d8e00000 arg bit_ble_passkey_fixed_key ,queue 
+29c4 202029db branch le_clr_config 
+
+le_set_config_fixed_ltk:
+29c5 d8e00001 arg bit_ble_pairing_fixed_ltk ,queue 
+29c6 202029d6 branch le_set_config 
+
+le_clr_config_fixed_ltk:
+29c7 d8e00001 arg bit_ble_pairing_fixed_ltk ,queue 
+29c8 202029db branch le_clr_config 
+
+le_set_config_more_data:
+29c9 d8e00002 arg bit_ble_transmit_packet_by_md ,queue 
+29ca 202029d6 branch le_set_config 
+
+le_clr_config_more_data:
+29cb d8e00002 arg bit_ble_transmit_packet_by_md ,queue 
+29cc 202029db branch le_clr_config 
+
+le_set_config_read_authentication:
+29cd d8e00003 arg bit_ble_read_auth ,queue 
+29ce 202029d6 branch le_set_config 
+
+le_clr_config_read_authentication:
+29cf d8e00003 arg bit_ble_read_auth ,queue 
+29d0 202029db branch le_clr_config 
+
+le_set_config_write_authentication:
+29d1 d8e00004 arg bit_ble_write_auth ,queue 
+29d2 202029d6 branch le_set_config 
+
+le_clr_config_write_authentication:
+29d3 d8e00004 arg bit_ble_write_auth ,queue 
+29d4 202029db branch le_clr_config 
+
+le_set_config_short_mult:
+29d5 d8e00005 arg bit_ble_short_mult ,queue 
+
+le_set_config:
+29d6 6fe0c321 fetch 1 ,mem_le_configuration 
+29d7 f9207e00 qset1 pdata 
+29d8 67e0c321 store 1 ,mem_le_configuration 
+29d9 20600000 rtn 
+
+le_clr_config_short_mult:
+29da d8e00005 arg bit_ble_short_mult ,queue 
+
+le_clr_config:
+29db 6fe0c321 fetch 1 ,mem_le_configuration 
+29dc f93ffe00 qset0 pdata 
+29dd 67e0c321 store 1 ,mem_le_configuration 
+29de 20600000 rtn 
+
+le_set_fixed_ltk:
+29df 58112233 setarg 0x112233 
+29e0 67e1c322 store 3 ,mem_le_fixed_ltk 
+29e1 58445566 setarg 0x445566 
+29e2 e7e18005 istore 3 ,contw 
+29e3 58778899 setarg 0x778899 
+29e4 e7e18005 istore 3 ,contw 
+29e5 58001122 setarg 0x001122 
+29e6 e7e18005 istore 3 ,contw 
+29e7 58334455 setarg 0x334455 
+29e8 e7e18005 istore 3 ,contw 
+29e9 58000066 setarg 0x66 
+29ea e7e08005 istore 1 ,contw 
+29eb 20600000 rtn 
+
+le_set_justwork:
+29ec 59000302 setarg 0x01000302 
+29ed 67e242c4 store 4 ,mem_le_pres 
+29ee 58010010 setarg 0x010010 
+29ef 67e1c2c8 store 3 ,mem_le_pres_max_keysize 
+29f0 7042fe01 jam 1 ,mem_le_pairing_mode 
+29f1 20600000 rtn 
+
+le_fifo_malloc_tx_empty:
+29f2 da200000 arg 0 ,rega 
+29f3 d8200001 arg llid_empty ,type 
+29f4 20202a05 branch le_fifo_malloc_tx 
+
+le_fifo_malloc_tx_ll:
+29f5 47204028 bpatchx patch28_0 ,mem_patch28 
+29f6 d8200003 arg llid_le_ll ,type 
+29f7 20402a05 call le_fifo_malloc_tx 
+29f8 1a427e00 copy regb ,pdata 
+29f9 e7e08005 istore 1 ,contw 
+29fa 20600000 rtn 
+
+le_fifo_malloc_tx_l2cap:
+29fb 4720c028 bpatchx patch28_1 ,mem_patch28 
+29fc 18000202 force llid_start ,type 
+29fd 1a20a204 increase 4 ,rega 
+29fe 20402a05 call le_fifo_malloc_tx 
+29ff 1a20a3fc increase -4 ,rega 
+2a00 1a227e00 copy rega ,pdata 
+2a01 e7e10005 istore 2 ,contw 
+2a02 1a427e00 copy regb ,pdata 
+2a03 e7e10005 istore 2 ,contw 
+2a04 20600000 rtn 
+
+le_fifo_malloc_tx:
+2a05 47214028 bpatchx patch28_2 ,mem_patch28 
+2a06 1a20a205 increase 5 ,rega 
+2a07 20406959 call ble_l2cap_malloc 
+2a08 1a20a3fb increase -5 ,rega 
+2a09 1a227e00 copy rega ,pdata 
+2a0a e7e10005 istore 2 ,contw 
+2a0b 58000000 setarg 0 
+2a0c e7e10005 istore 2 ,contw 
+2a0d 18227e00 copy type ,pdata 
+2a0e e7e08005 istore 1 ,contw 
+2a0f 20600000 rtn 
+
+le_fifo_get_first_tx_ptr:
+2a10 4721c028 bpatchx patch28_3 ,mem_patch28 
+2a11 20406993 call l2cap_malloc_fifo_out 
+2a12 1fe20c00 copy pdata ,contr 
+2a13 20600000 rtn 
+
+le_fifo_get_second_tx_ptr:
+2a14 6fe14449 fetch 2 ,mem_tx_fifo2_ptr 
+2a15 20600000 rtn 
+
+le_fifo_get_last_tx_ptr:
+2a16 20402a19 call le_fifo_get_last_tx_ptr0 
+2a17 1fe20c00 copy pdata ,contr 
+2a18 20600000 rtn 
+
+le_fifo_get_last_tx_ptr0:
+2a19 6fe1444c fetch 2 ,mem_tx_fifo3_ptr 
+2a1a 20600000 rtn 
+
+le_fifo_get_first_l2cap_ptr:
+2a1b 20402a10 call le_fifo_get_first_tx_ptr 
+2a1c 18c08c05 increase 5 ,contr 
+2a1d 20600000 rtn 
+
+le_fifo_get_first_att_ptr:
+2a1e 20402a10 call le_fifo_get_first_tx_ptr 
+2a1f 18c08c09 increase 9 ,contr 
+2a20 20600000 rtn 
+
+le_fifo_get_last_att_ptr:
+2a21 20402a16 call le_fifo_get_last_tx_ptr 
+2a22 18c08c09 increase 9 ,contr 
+2a23 20600000 rtn 
+
+le_fifo_get_last_l2cap_ptr:
+2a24 20402a16 call le_fifo_get_last_tx_ptr 
+2a25 18c08c05 increase 5 ,contr 
+2a26 20600000 rtn 
+
+le_fifo_check_full:
+2a27 202069a9 branch l2cap_malloc_is_fifo_full 
+
+le_fifo_check_nearly_full:
+2a28 202069ac branch l2cap_malloc_is_fifo_nearly_full 
+
+le_fifo_check_empty:
+2a29 202069af branch l2cap_malloc_is_fifo_empty 
+
+le_fifo_release_first_node:
+2a2a 20206998 branch l2cap_malloc_free 
+
+le_set_dle:
+2a2b 67e443c0 store 8 ,mem_local_rx_max_octets 
+2a2c 20202a3c branch le_set_feature_data_packet_length_extension 
+
+le_set_phys:
+2a2d 184122ff and temp ,0xff ,rega 
+2a2e 20402a32 call le_set_tx_phy 
+2a2f 184ca200 rshift8 temp ,rega 
+
+le_set_rx_phy:
+2a30 6220c3b7 storer rega ,1 ,mem_le_rx_phys 
+2a31 20202a33 branch le_set_phy_common 
+
+le_set_tx_phy:
+2a32 6220c3b6 storer rega ,1 ,mem_le_tx_phys 
+
+le_set_phy_common:
+2a33 2a2ffe01 isolate1 bit_le_2m_phy ,rega 
+2a34 2040aa38 call le_set_feature_2m_phy ,true 
+2a35 2a2ffe02 isolate1 bit_le_coded_phy ,rega 
+2a36 2040aa3a call le_set_feature_coded_phy ,true 
+2a37 20600000 rtn 
+
+le_set_feature_2m_phy:
+2a38 d8e00008 arg bit_ll_feature_le_2m_phy ,queue 
+2a39 20202a3d branch le_set_feature 
+
+le_set_feature_coded_phy:
+2a3a d8e0000b arg bit_ll_feature_le_coded_phy ,queue 
+2a3b 20202a3d branch le_set_feature 
+
+le_set_feature_data_packet_length_extension:
+2a3c d8e00005 arg bit_ll_feature_le_data_packet_length_extension ,queue 
+
+le_set_feature:
+2a3d 6fe443ae fetch 8 ,mem_le_local_feature 
+2a3e f9207e00 qset1 pdata 
+2a3f 67e443ae store 8 ,mem_le_local_feature 
+2a40 20600000 rtn 
+
+le_set_fixed_ltk_justwork:
+2a41 204029c5 call le_set_config_fixed_ltk 
+2a42 204029ec call le_set_justwork 
+2a43 204029df call le_set_fixed_ltk 
+2a44 202029cd branch le_set_config_read_authentication 
+
+le_advertising_dispatch:
+2a45 70019d01 jam fun_rx_ll_1m_phy ,mem_le_rx_phy 
+2a46 70019e01 jam fun_tx_ll_1m_phy ,mem_le_tx_phy 
+2a47 204025b8 call le_enable 
+2a48 20402a4b call le_scan 
+2a49 20402acb call le_adv 
+2a4a 202025bc branch le_disable 
+
+le_scan:
+2a4b 47224028 bpatchx patch28_4 ,mem_patch28 
+2a4c 6fe0c343 fetch 1 ,mem_le_scan_enable 
+2a4d c1808000 rtnne le_scan_enable 
+2a4e d8e00002 arg le_scan_interval_timer ,queue 
+2a4f 20407cef call timer_check 
+2a50 247a0000 nrtn blank 
+2a51 6fe14344 fetch 2 ,mem_le_scan_interval 
+2a52 68494346 fetcht 2 ,mem_le_scan_window 
+2a53 98467e00 isub temp ,pdata 
+2a54 d8e00002 arg le_scan_interval_timer ,queue 
+2a55 20407ce1 call timer_init 
+2a56 7854fc00 disable master 
+2a57 20402af5 call le_init_adv 
+2a58 20402a6a call le_wait_adv 
+2a59 24768000 nrtn match 
+2a5a 4722c028 bpatchx patch28_5 ,mem_patch28 
+2a5b 6fe3004e fetch 6 ,mem_le_rxbuf + 2 
+2a5c 67e30178 store 6 ,mem_le_plap 
+2a5d 6fe08002 fetch 1 ,mem_le_adv_rcv 
+2a5e 1fe0fe01 increase 1 ,pdata 
+2a5f 67e08002 store 1 ,mem_le_adv_rcv 
+2a60 20402a71 call le_create_conn 
+2a61 20748000 rtn master 
+2a62 20402b1c call le_send_scan_request 
+2a63 24768000 nrtn match 
+2a64 6fe08004 fetch 1 ,mem_le_scanrsp_rcv 
+2a65 1fe0fe01 increase 1 ,pdata 
+2a66 67e08004 store 1 ,mem_le_scanrsp_rcv 
+2a67 6fe48054 fetch 9 ,mem_le_rxbuf + 8 
+2a68 67e486a1 store 9 ,mem_temp_block0 
+2a69 20600000 rtn 
+
+le_wait_adv:
+2a6a 47234028 bpatchx patch28_6 ,mem_patch28 
+2a6b 20402b68 call le_next_adv_channel 
+2a6c 2040264e call le_receive_adv 
+2a6d 6fe08001 fetch 1 ,mem_le_adv_waitcnt 
+2a6e 1fe0fe01 increase 1 ,pdata 
+2a6f 67e08001 store 1 ,mem_le_adv_waitcnt 
+2a70 20600000 rtn 
+
+le_create_conn:
+2a71 4723c028 bpatchx patch28_7 ,mem_patch28 
+2a72 6fe081bc fetch 1 ,mem_cmd_le_create_conn 
+2a73 c18d8000 rtnne hci_cmd_le_create_conn 
+2a74 6fe30178 fetch 6 ,mem_le_plap 
+2a75 684b42cc fetcht 6 ,mem_le_conn_peer_addr 
+2a76 98467c00 isub temp ,null 
+2a77 24628000 nrtn zero 
+2a78 20402056 call context_new 
+2a79 24628000 nrtn zero 
+2a7a 20402a84 call le_connect_request 
+2a7b 20402519 call le_init_master 
+2a7c 204030ed call le_send_version_ind 
+2a7d 70066f14 jam bt_evt_le_connected ,mem_fifo_temp 
+2a7e 2040782b call ui_ipc_send_event 
+2a7f 70411400 jam 0 ,mem_hci_cmd 
+2a80 7001b800 jam 0 ,mem_le_peer_sca 
+2a81 70434300 jam 0 ,mem_le_scan_enable 
+2a82 7001bc00 jam 0 ,mem_cmd_le_create_conn 
+2a83 20202041 branch context_save 
+
+le_connect_request:
+2a84 47244029 bpatchx patch29_0 ,mem_patch29 
+2a85 18007fff force -1 ,pdata 
+2a86 38080001 setsect 2 ,1 
+2a87 67e28198 store 5 ,mem_le_channel_map 
+2a88 da200168 arg mem_le_state ,rega 
+2a89 20402624 call le_calc_channel_map 
+2a8a 18007204 force 4 ,loopcnt 
+2a8b d8a0018c arg mem_le_access ,contw 
+2a8c 20407de8 call generate_random_loop 
+2a8d 6fe142d9 fetch 2 ,mem_le_timeout 
+2a8e 67e10196 store 2 ,mem_le_superto 
+
+le_con_req_hop_retry:
+2a8f 180a7e00 random pdata 
+2a90 1fe17e0f and_into 0xf ,pdata 
+2a91 1fe67c04 sub pdata ,4 ,null 
+2a92 20212a8f branch le_con_req_hop_retry ,positive 
+2a93 67e08181 store 1 ,mem_le_hop 
+2a94 4724c029 bpatchx patch29_1 ,mem_patch29 
+2a95 68494165 fetcht 2 ,mem_le_conn_interval 
+2a96 6049016a storet 2 ,mem_le_tsniff 
+2a97 18422600 copy temp ,regc 
+2a98 1c40fe07 add clkn_bt ,7 ,pdata 
+2a99 9a66fc00 idiv regc 
+2a9a 20407d62 call wait_div_end 
+2a9b 18072200 remainder rega 
+2a9c 9a267e00 isub rega ,pdata 
+2a9d 9a60fe00 iadd regc ,pdata 
+2a9e 68494163 fetcht 2 ,mem_le_dsniff 
+2a9f 9840fe00 iadd temp ,pdata 
+2aa0 67e2016c store 4 ,mem_le_anchor 
+2aa1 9c462200 isub clkn_bt ,rega 
+2aa2 1a20a3fa increase -6 ,rega 
+2aa3 da402205 arg 0x2205 ,regb 
+2aa4 6fe0c2d2 fetch 1 ,mem_le_conn_own_addr_type 
+2aa5 7d3a2406 nsetflag blank ,le_sender_addr_bit ,regb 
+2aa6 6fe0c2cb fetch 1 ,mem_le_conn_peer_addr_type 
+2aa7 7d3a2407 nsetflag blank ,le_receiver_addr_bit ,regb 
+2aa8 1a427e00 copy regb ,pdata 
+2aa9 67e14169 store 2 ,mem_le_txheader 
+2aaa 6fe342db fetch 6 ,mem_le_lap 
+2aab e7e30005 istore 6 ,contw 
+2aac 6fe30178 fetch 6 ,mem_le_plap 
+2aad e7e30005 istore 6 ,contw 
+2aae 6fe2018c fetch 4 ,mem_le_access 
+2aaf e7e20005 istore 4 ,contw 
+2ab0 180a7e00 random pdata 
+2ab1 e7e10005 istore 2 ,contw 
+2ab2 180a7e00 random pdata 
+2ab3 e7e08005 istore 1 ,contw 
+2ab4 18007e02 force 2 ,pdata 
+2ab5 e7e08005 istore 1 ,contw 
+2ab6 1a2b7e00 rshift2 rega ,pdata 
+2ab7 e7e10005 istore 2 ,contw 
+2ab8 1a6b7e00 rshift2 regc ,pdata 
+2ab9 e7e10005 istore 2 ,contw 
+2aba 47254029 bpatchx patch29_2 ,mem_patch29 
+2abb 58000000 setarg 0 
+2abc e7e10005 istore 2 ,contw 
+2abd 6fe142d9 fetch 2 ,mem_le_timeout 
+2abe e7e10005 istore 2 ,contw 
+2abf 6fe28198 fetch 5 ,mem_le_channel_map 
+2ac0 e7e28005 istore 5 ,contw 
+2ac1 6fe08181 fetch 1 ,mem_le_hop 
+2ac2 d84000a0 arg param_le_sca ,temp 
+2ac3 9841fe00 ior temp ,pdata 
+2ac4 e7e08005 istore 1 ,contw 
+2ac5 2040273e call le_transmit_norx 
+2ac6 58004169 setarg mem_le_txheader 
+2ac7 1fe08c12 add pdata ,18 ,contr 
+2ac8 efe18006 ifetch 3 ,contr 
+2ac9 67e18190 store 3 ,mem_le_crcinit 
+2aca 20600000 rtn 
+
+le_adv:
+2acb 70000724 jam 36 ,mem_le_ch_mapped 
+2acc 7006a100 jam 0 ,mem_le_adv_channel_map_temp 
+2acd 20402aef call le_send_adv_protect_txbuf 
+2ace 20402ad0 call le_adv_loop 
+2acf 20202af2 branch le_send_adv_recover_txbuf 
+
+le_adv_loop:
+2ad0 4725c029 bpatchx patch29_3 ,mem_patch29 
+2ad1 6fe0c388 fetch 1 ,mem_le_adv_enable 
+2ad2 207a0000 rtn blank 
+2ad3 d8e00000 arg le_adv_interval_timer ,queue 
+2ad4 20407cef call timer_check 
+2ad5 247a0000 nrtn blank 
+2ad6 78287c00 enable swfine 
+2ad7 20402af5 call le_init_adv 
+2ad8 20402b68 call le_next_adv_channel 
+2ad9 20402afe call le_send_adv_ind 
+2ada 2436aae2 nbranch le_adv_not_match ,match 
+2adb 6fe08003 fetch 1 ,mem_le_req_rcv 
+2adc 1fe0fe01 increase 1 ,pdata 
+2add 67e08003 store 1 ,mem_le_req_rcv 
+2ade 6fe0804c fetch 1 ,mem_le_rxbuf_adv_header 
+2adf 1fe17e0f and pdata ,0x0f ,pdata 
+2ae0 c001ab2d beq scan_req ,le_send_scan_response 
+2ae1 c002ab40 beq connect_req ,le_parse_connect_req 
+
+le_adv_not_match:
+2ae2 47264029 bpatchx patch29_4 ,mem_patch29 
+2ae3 6fe086a1 fetch 1 ,mem_le_adv_channel_map_temp 
+2ae4 6848c393 fetcht 1 ,mem_le_adv_channel_map 
+2ae5 98467c00 isub temp ,null 
+2ae6 2422aad0 nbranch le_adv_loop ,zero 
+2ae7 180a7e00 random pdata 
+2ae8 d84001ff arg 0x1ff ,temp 
+2ae9 98417e00 iand temp ,pdata 
+2aea 1fe0fefa add pdata ,250 ,pdata 
+2aeb 20407c91 call delay 
+2aec d8e00000 arg le_adv_interval_timer ,queue 
+2aed 6fe14389 fetch 2 ,mem_le_adv_interval 
+2aee 20207ce1 branch timer_init 
+
+le_send_adv_protect_txbuf:
+2aef d8a006b1 arg mem_le_tx_buf_temp ,contw 
+2af0 d8c04169 arg mem_le_txheader ,contr 
+2af1 20207c8c branch memcpy48 
+
+le_send_adv_recover_txbuf:
+2af2 d8c006b1 arg mem_le_tx_buf_temp ,contr 
+2af3 d8a04169 arg mem_le_txheader ,contw 
+2af4 20207c8c branch memcpy48 
+
+le_init_adv:
+2af5 4726c029 bpatchx patch29_5 ,mem_patch29 
+2af6 7854fc00 disable master 
+
+le_adv_access:
+2af7 588e89be setarg 0x8e89be 
+2af8 1fed7e00 lshift8 pdata ,pdata 
+2af9 1fe1fed6 or_into 0xd6 ,pdata 
+2afa 98001200 iforce access 
+2afb 58555555 setarg 0x555555 
+2afc 67e18190 store 3 ,mem_le_crcinit 
+2afd 20600000 rtn 
+
+le_send_adv_ind:
+2afe 47274029 bpatchx patch29_6 ,mem_patch29 
+2aff 6fe0c38b fetch 1 ,mem_le_adv_type 
+2b00 6848c38c fetcht 1 ,mem_le_adv_own_addr_type 
+2b01 18520400 lshift4 temp ,temp 
+2b02 184b8400 lshift2 temp ,temp 
+2b03 98408400 iadd temp ,temp 
+2b04 6048c169 storet 1 ,mem_le_txheader 
+2b05 c000ab0f beq adv_direct_ind ,le_send_adv_direct_ind 
+2b06 6848c348 fetcht 1 ,mem_le_adv_data_len 
+2b07 1840fe06 add temp ,6 ,pdata 
+2b08 67e0c16a store 1 ,mem_le_txlen 
+2b09 6fe342db fetch 6 ,mem_le_lap 
+2b0a 67e3416b store 6 ,mem_le_txpayload 
+2b0b 18427200 copy temp ,loopcnt 
+2b0c d8c04349 arg mem_le_adv_data ,contr 
+2b0d 20407ccc call memcpy_fast 
+2b0e 20202b15 branch le_send_adv_transmit 
+
+le_send_adv_direct_ind:
+2b0f 5800000c setarg 12 
+2b10 67e0c16a store 1 ,mem_le_txlen 
+2b11 6fe342db fetch 6 ,mem_le_lap 
+2b12 67e3416b store 6 ,mem_le_txpayload 
+2b13 6fe34116 fetch 6 ,mem_hci_plap 
+2b14 e7e30005 istore 6 ,contw 
+
+le_send_adv_transmit:
+2b15 4727c029 bpatchx patch29_7 ,mem_patch29 
+2b16 6fe08000 fetch 1 ,mem_le_adv_transmit 
+2b17 1fe0fe01 increase 1 ,pdata 
+2b18 67e08000 store 1 ,mem_le_adv_transmit 
+2b19 db600708 arg 1800 ,stop_watch 
+2b1a 7856fc00 disable match 
+2b1b 20202729 branch le_transmit_receive_sifs_without_change_mode 
+
+le_send_scan_request:
+2b1c 4728402a bpatchx patch2a_0 ,mem_patch2a 
+2b1d 6fe0c394 fetch 1 ,mem_le_scan_type 
+2b1e c1808000 rtnne le_scan_type_active 
+2b1f 6fe08000 fetch 1 ,mem_le_adv_transmit 
+2b20 1fe0fe01 increase 1 ,pdata 
+2b21 67e08000 store 1 ,mem_le_adv_transmit 
+2b22 d8400c03 arg 0x0c03 ,temp 
+2b23 6fe0c395 fetch 1 ,mem_le_scan_own_addr_type 
+2b24 7d3a0406 nsetflag blank ,le_sender_addr_bit ,temp 
+2b25 1a227e00 copy rega ,pdata 
+2b26 7d3a0407 nsetflag blank ,le_receiver_addr_bit ,temp 
+2b27 60494169 storet 2 ,mem_le_txheader 
+2b28 6fe342db fetch 6 ,mem_le_lap 
+2b29 e7e30005 istore 6 ,contw 
+2b2a 6fe30178 fetch 6 ,mem_le_plap 
+2b2b e7e30005 istore 6 ,contw 
+2b2c 20202729 branch le_transmit_receive_sifs_without_change_mode 
+
+le_send_scan_response:
+2b2d 4728c02a bpatchx patch2a_1 ,mem_patch2a 
+2b2e 6fe30054 fetch 6 ,mem_le_rxbuf_adv_scan_req_adv_address 
+2b2f 684b42db fetcht 6 ,mem_le_lap 
+2b30 98467c00 isub temp ,null 
+2b31 24628000 nrtn zero 
+2b32 d8400004 arg scan_rsp ,temp 
+2b33 6fe0c38c fetch 1 ,mem_le_adv_own_addr_type 
+2b34 7d3a0406 nsetflag blank ,le_sender_addr_bit ,temp 
+2b35 6048c169 storet 1 ,mem_le_txheader 
+2b36 6848c368 fetcht 1 ,mem_le_scan_data_len 
+2b37 1840fe06 add temp ,6 ,pdata 
+2b38 67e0c16a store 1 ,mem_le_txlen 
+2b39 6fe342db fetch 6 ,mem_le_lap 
+2b3a 67e3416b store 6 ,mem_le_txpayload 
+2b3b d8c04369 arg mem_le_scan_data ,contr 
+2b3c 18427200 copy temp ,loopcnt 
+2b3d 20407ccc call memcpy_fast 
+2b3e 2040273e call le_transmit_norx 
+2b3f 20202ae2 branch le_adv_not_match 
+
+le_parse_connect_req:
+2b40 6fe30054 fetch 6 ,mem_le_rxbuf_adv_connect_ind_adv_address 
+2b41 684b42db fetcht 6 ,mem_le_lap 
+2b42 98467c00 isub temp ,null 
+2b43 24628000 nrtn zero 
+2b44 20402868 call le_scan_check_sender_addr_type 
+2b45 6220c2cb storer rega ,1 ,mem_le_conn_peer_addr_type 
+2b46 6fe3004e fetch 6 ,mem_le_rxbuf_adv_connect_ind_init_address 
+2b47 67e30178 store 6 ,mem_le_plap 
+2b48 6fe4005a fetch 8 ,mem_le_rxbuf_adv_connect_ind_access_address 
+2b49 67e4018c store 8 ,mem_le_access 
+2b4a 68490062 fetcht 2 ,mem_le_rxbuf_adv_connect_ind_win_offset 
+2b4b 4729402a bpatchx patch2a_2 ,mem_patch2a 
+2b4c 184b8400 lshift2 temp ,temp 
+2b4d 6fe10064 fetch 2 ,mem_le_rxbuf_adv_connect_ind_interval 
+2b4e 1febfe00 lshift2 pdata ,pdata 
+2b4f 67e1016a store 2 ,mem_le_tsniff 
+2b50 67e2016c store 4 ,mem_le_anchor 
+2b51 98467e00 isub temp ,pdata 
+2b52 1fe0d1fe add pdata ,-2 ,clke_bt 
+2b53 6fe48066 fetch 9 ,mem_le_rxbuf_adv_connect_ind_latency 
+2b54 67e48194 store 9 ,mem_le_slave_latency 
+2b55 6fe0806f fetch 1 ,mem_le_rxbuf_adv_connect_ind_hop_and_sca 
+2b56 1fe1041f and pdata ,0x1f ,temp 
+2b57 60488181 storet 1 ,mem_le_hop 
+2b58 1ff18400 rshift4 pdata ,temp 
+2b59 18430400 rshift temp ,temp 
+2b5a 604881b8 storet 1 ,mem_le_peer_sca 
+2b5b da200168 arg mem_le_state ,rega 
+2b5c 20402938 call le_receive_window_size 
+2b5d da200168 arg mem_le_state ,rega 
+2b5e 20402624 call le_calc_channel_map 
+2b5f 20402525 call le_init_slave 
+2b60 20402056 call context_new 
+2b61 24628000 nrtn zero 
+2b62 4729c02a bpatchx patch2a_3 ,mem_patch2a 
+2b63 204020f7 call calc_clke_offset 
+2b64 20402ea7 call le_l2cap_reset_signaling_identifier 
+2b65 70066f14 jam bt_evt_le_connected ,mem_fifo_temp 
+2b66 2040782b call ui_ipc_send_event 
+2b67 20202041 branch context_save 
+
+le_next_adv_channel:
+2b68 472a402a bpatchx patch2a_4 ,mem_patch2a 
+2b69 6fe08007 fetch 1 ,mem_le_ch_mapped 
+2b6a c012ab6e beq 37 ,le_next_adv_channel_curr_channel_37 
+2b6b c0132b74 beq 38 ,le_next_adv_channel_curr_channel_38 
+2b6c c013ab7a beq 39 ,le_next_adv_channel_curr_channel_39 
+2b6d 20202b7a branch le_next_adv_channel_curr_channel_39 
+
+le_next_adv_channel_curr_channel_37:
+2b6e 6848c393 fetcht 1 ,mem_le_adv_channel_map 
+2b6f 284ffe01 isolate1 bit_adv_channel_map_38 ,temp 
+2b70 2020ab85 branch set_le_next_adv_channel_38 ,true 
+2b71 284ffe02 isolate1 bit_adv_channel_map_39 ,temp 
+2b72 2020ab8a branch set_le_next_adv_channel_39 ,true 
+2b73 20202b80 branch set_le_next_adv_channel_37 
+
+le_next_adv_channel_curr_channel_38:
+2b74 6848c393 fetcht 1 ,mem_le_adv_channel_map 
+2b75 284ffe02 isolate1 bit_adv_channel_map_39 ,temp 
+2b76 2020ab8a branch set_le_next_adv_channel_39 ,true 
+2b77 284ffe00 isolate1 bit_adv_channel_map_37 ,temp 
+2b78 2020ab80 branch set_le_next_adv_channel_37 ,true 
+2b79 20202b85 branch set_le_next_adv_channel_38 
+
+le_next_adv_channel_curr_channel_39:
+2b7a 6848c393 fetcht 1 ,mem_le_adv_channel_map 
+2b7b 284ffe00 isolate1 bit_adv_channel_map_37 ,temp 
+2b7c 2020ab80 branch set_le_next_adv_channel_37 ,true 
+2b7d 284ffe01 isolate1 bit_adv_channel_map_38 ,temp 
+2b7e 2020ab85 branch set_le_next_adv_channel_38 ,true 
+2b7f 20202b8a branch set_le_next_adv_channel_39 
+
+set_le_next_adv_channel_37:
+2b80 70000725 jam 37 ,mem_le_ch_mapped 
+2b81 6fe086a1 fetch 1 ,mem_le_adv_channel_map_temp 
+2b82 79207e00 set1 bit_adv_channel_map_37 ,pdata 
+2b83 67e086a1 store 1 ,mem_le_adv_channel_map_temp 
+2b84 20600000 rtn 
+
+set_le_next_adv_channel_38:
+2b85 70000726 jam 38 ,mem_le_ch_mapped 
+2b86 6fe086a1 fetch 1 ,mem_le_adv_channel_map_temp 
+2b87 79207e01 set1 bit_adv_channel_map_38 ,pdata 
+2b88 67e086a1 store 1 ,mem_le_adv_channel_map_temp 
+2b89 20600000 rtn 
+
+set_le_next_adv_channel_39:
+2b8a 70000727 jam 39 ,mem_le_ch_mapped 
+2b8b 6fe086a1 fetch 1 ,mem_le_adv_channel_map_temp 
+2b8c 79207e02 set1 bit_adv_channel_map_39 ,pdata 
+2b8d 67e086a1 store 1 ,mem_le_adv_channel_map_temp 
+2b8e 20600000 rtn 
+
+le_parse_att:
+2b8f 18c22200 copy contr ,rega 
+2b90 6fe0c3cb fetch 1 ,mem_device_option 
+2b91 c00366d5 beq dvc_op_shutter_dy ,shutter_dy_le_parse_att 
+2b92 c007d03d beq dvc_op_keyboard ,keyboard_le_att_auto_reco_process 
+2b93 1a220c00 copy rega ,contr 
+2b94 efe18006 ifetch 3 ,contr 
+2b95 67e1c397 store 3 ,mem_le_att_opcode 
+
+le_parse_att2:
+2b96 c0012bab beq attop_exchange_mtu_request ,le_parse_att_exchange_mtu_request 
+2b97 c001abb0 beq attop_exchange_mtu_response ,le_parse_att_exchange_mtu_response 
+2b98 c0022bb3 beq attop_find_information_request ,le_parse_att_find_information_request 
+2b99 c0032bf7 beq attop_find_by_type_value_request ,le_parse_att_find_by_type_value_request 
+2b9a c0042c44 beq attop_read_by_type_request ,le_parse_att_read_by_type_request 
+2b9b c0052d19 beq attop_read_request ,le_parse_att_read_request 
+2b9c c0062d4c beq attop_read_blob_request ,le_parse_att_read_blob_request 
+2b9d c0082d63 beq attop_read_by_group_type_request ,le_parse_att_read_by_group_type_request 
+2b9e c0092da8 beq attop_write_request ,le_parse_att_write_request 
+2b9f c00b2dce beq attop_prepare_write_request ,le_parse_att_prepare_write_request 
+2ba0 c00c2de1 beq attop_execute_write_request ,le_parse_att_execute_write_request 
+2ba1 c00f2de6 beq attop_handle_value_confirmation ,le_parse_handle_value_confirmation 
+2ba2 c0292dea beq attop_write_command ,le_parse_att_write_command 
+2ba3 20600000 rtn 
+
+le_send_att_exchange_mtu_requset:
+2ba4 18002203 force 3 ,rega 
+2ba5 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2ba6 58000002 setarg attop_exchange_mtu_request 
+
+le_send_att_exchange_mtu_common:
+2ba7 e7e08005 istore 1 ,contw 
+2ba8 6fe142e1 fetch 2 ,mem_le_local_mtu 
+2ba9 e7e10005 istore 2 ,contw 
+2baa 20600000 rtn 
+
+le_parse_att_exchange_mtu_request:
+2bab 20402bb0 call le_parse_att_exchange_mtu_response 
+
+le_send_att_exchange_mtu_response:
+2bac 18002203 force 3 ,rega 
+2bad 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2bae 58000003 setarg attop_exchange_mtu_response 
+2baf 20202ba7 branch le_send_att_exchange_mtu_common 
+
+le_parse_att_exchange_mtu_response:
+2bb0 1fecfe00 rshift8 pdata ,pdata 
+2bb1 67e142e3 store 2 ,mem_le_remote_mtu 
+2bb2 20600000 rtn 
+
+le_parse_att_find_information_request:
+2bb3 20402e41 call le_get_search_handle_start_end_common 
+2bb4 20407dba call enable_user 
+2bb5 20202bc3 branch le_send_att_find_information_response 
+
+le_att_handle_inrange:
+2bb6 efe10006 ifetch 2 ,contr 
+2bb7 1fe17eff and_into 0xff ,pdata 
+2bb8 207a0000 rtn blank 
+2bb9 9a467c00 isub regb ,null 
+2bba 20628000 rtn zero 
+2bbb 24610000 nrtn positive 
+2bbc 9a667c00 isub regc ,null 
+2bbd 20628000 rtn zero 
+2bbe 20212bc1 branch le_att_handle_blank ,positive 
+2bbf 18007c01 force 1 ,null 
+2bc0 20600000 rtn 
+
+le_att_handle_blank:
+2bc1 18007e00 force 0 ,pdata 
+2bc2 20600000 rtn 
+
+le_send_att_find_information_response:
+2bc3 d9600003 arg 3 ,timeup 
+2bc4 20402cc7 call le_init_attlist_search 
+
+le_send_att_find_information_res_loop:
+2bc5 20402bb6 call le_att_handle_inrange 
+2bc6 203a2bf5 branch le_send_att_find_information_res_end ,blank 
+2bc7 24212bf3 nbranch le_send_att_find_information_res_next ,positive 
+2bc8 18c08dfe increase -2 ,contr 
+2bc9 20407c6d call store_contr 
+2bca 20407c64 call get_contw 
+2bcb 24342be3 nbranch le_send_att_find_information_res_store_info2 ,user 
+2bcc 20407c51 call push_stack_rega_b_c 
+2bcd 61620680 storer timeup ,4 ,mem_timeup 
+2bce 1800221e force 30 ,rega 
+2bcf 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2bd0 69620680 fetchr timeup ,4 ,mem_timeup 
+2bd1 20407c60 call pop_stack_rega_b_c 
+2bd2 20407dbc call disable_user 
+2bd3 58000005 setarg attop_find_information_response 
+2bd4 e7e08005 istore 1 ,contw 
+2bd5 20407c67 call get_contr 
+2bd6 efe10006 ifetch 2 ,contr 
+2bd7 ea208006 ifetchr rega ,1 ,contr 
+2bd8 1a267c10 sub rega ,16 ,null 
+2bd9 2022abdf branch le_send_att_find_information_res_uuid128 ,zero 
+2bda 1a267c02 sub rega ,2 ,null 
+2bdb 2422ae03 nbranch le_send_att_error_response_notfound ,zero 
+
+le_send_att_find_information_res_uuid16:
+2bdc 58000001 setarg uuid_size_16bit 
+2bdd e7e08005 istore 1 ,contw 
+2bde 20202be8 branch le_send_att_find_information_res_store_info 
+
+le_send_att_find_information_res_uuid128:
+2bdf 58000002 setarg uuid_size_128bit 
+2be0 e7e08005 istore 1 ,contw 
+2be1 d9600001 arg 1 ,timeup 
+2be2 20202be8 branch le_send_att_find_information_res_store_info 
+
+le_send_att_find_information_res_store_info2:
+2be3 20407c67 call get_contr 
+2be4 efe10006 ifetch 2 ,contr 
+2be5 efe08006 ifetch 1 ,contr 
+2be6 9a267c00 isub rega ,null 
+2be7 2422abf5 nbranch le_send_att_find_information_res_end ,zero 
+
+le_send_att_find_information_res_store_info:
+2be8 20407c67 call get_contr 
+2be9 efe10006 ifetch 2 ,contr 
+2bea 1fe17eff and_into 0xff ,pdata 
+2beb e7e10005 istore 2 ,contw 
+2bec ef208006 ifetchr loopcnt ,1 ,contr 
+2bed 20407cda call memcpy 
+2bee 20407c6a call store_contw 
+2bef 196097ff increase -1 ,timeup 
+2bf0 2022abf5 branch le_send_att_find_information_res_end ,zero 
+
+le_send_att_find_information_res_cont:
+2bf1 20402cdd call le_att_contr_add_len 
+2bf2 20202bc5 branch le_send_att_find_information_res_loop 
+
+le_send_att_find_information_res_next:
+2bf3 20402cdd call le_att_contr_add_len 
+2bf4 20202bf1 branch le_send_att_find_information_res_cont 
+
+le_send_att_find_information_res_end:
+2bf5 20342e03 branch le_send_att_error_response_notfound ,user 
+2bf6 20202e34 branch le_send_auto_len_by_mem 
+
+le_parse_att_find_by_type_value_request:
+2bf7 20402e41 call le_get_search_handle_start_end_common 
+2bf8 efe10006 ifetch 2 ,contr 
+2bf9 67e1439e store 2 ,mem_le_search_uuid 
+2bfa 20407c6d call store_contr 
+2bfb d8a006b5 arg mem_le_search_att_type_length ,contw 
+2bfc 6fe14335 fetch 2 ,mem_le_l2cap_size 
+2bfd 1fe0fff9 increase -7 ,pdata 
+2bfe 20402e4f call le_get_search_common2 
+2bff 20202c0a branch le_send_att_find_by_type_value_response 
+
+le_start_end_handle_check_1:
+2c00 78547c00 disable user 
+2c01 684906b1 fetcht 2 ,mem_le_search_handle_start 
+2c02 6fe106b3 fetch 2 ,mem_le_search_handle_end 
+2c03 98467c00 isub temp ,null 
+2c04 24212c07 nbranch le_start_end_handle_check_1_fail ,positive 
+2c05 18427e00 deposit temp 
+2c06 c1800000 rtnne 0 
+
+le_start_end_handle_check_1_fail:
+2c07 78347c00 enable user 
+2c08 7001b901 jam att_err_invalid_handle ,mem_le_err_code 
+2c09 20202e05 branch le_send_att_error_response 
+
+le_send_att_find_by_type_value_response:
+2c0a 20402c00 call le_start_end_handle_check_1 
+2c0b 20740000 rtn user 
+2c0c 6849439e fetcht 2 ,mem_le_search_uuid 
+2c0d 58002800 setarg uuid_gatt_primary_service 
+2c0e 98467c00 isub temp ,null 
+2c0f 2022ac11 branch le_send_att_find_by_type_value_res_primary ,zero 
+2c10 20202e03 branch le_send_att_error_response_notfound 
+
+le_send_att_find_by_type_value_res_primary:
+2c11 70439a00 jam le_find_by_type_val_res_not_found ,mem_le_search_res 
+2c12 684906b1 fetcht 2 ,mem_le_search_handle_start 
+2c13 60490678 storet 2 ,mem_temp 
+2c14 20402d04 call le_att_get_handle_info 
+2c15 243a2e03 nbranch le_send_att_error_response_notfound ,blank 
+
+le_send_att_find_primary_search_loop:
+2c16 68490678 fetcht 2 ,mem_temp 
+2c17 20402d04 call le_att_get_handle_info 
+2c18 243a2c2a nbranch le_send_att_error_response_notfound2 ,blank 
+2c19 18c22200 copy contr ,rega 
+2c1a 6fe086c6 fetch 1 ,mem_le_curr_att_len 
+2c1b 1fe27200 copy pdata ,loopcnt 
+2c1c 684886b5 fetcht 1 ,mem_le_search_att_type_length 
+2c1d 98467c00 isub temp ,null 
+2c1e 2422ac26 nbranch le_send_att_find_primary_search_loop1 ,zero 
+2c1f da4006b6 arg mem_le_search_att_type ,regb 
+2c20 20407d64 call string_compare 
+2c21 2022ac2d branch le_send_att_find_primary_search_end_start_handle_found ,zero 
+2c22 6fe106ce fetch 2 ,mem_le_cur_uuid 
+2c23 6849439e fetcht 2 ,mem_le_search_uuid 
+2c24 98467c00 isub temp ,null 
+2c25 2022ac35 branch le_send_att_find_primary_search_end_ending_handle_found ,zero 
+
+le_send_att_find_primary_search_loop1:
+2c26 6fe10678 fetch 2 ,mem_temp 
+2c27 1fe0fe01 increase 1 ,pdata 
+2c28 67e10678 store 2 ,mem_temp 
+2c29 20202c16 branch le_send_att_find_primary_search_loop 
+
+le_send_att_error_response_notfound2:
+2c2a 6fe0c39a fetch 1 ,mem_le_search_res 
+2c2b c000ac35 beq le_find_by_type_val_res_found_starting_handle ,le_send_att_find_primary_search_end_ending_handle_found 
+2c2c 20202e03 branch le_send_att_error_response_notfound 
+
+le_send_att_find_primary_search_end_start_handle_found:
+2c2d 6fe106ce fetch 2 ,mem_le_cur_uuid 
+2c2e 6849439e fetcht 2 ,mem_le_search_uuid 
+2c2f 98467c00 isub temp ,null 
+2c30 2422ac26 nbranch le_send_att_find_primary_search_loop1 ,zero 
+2c31 70439a01 jam le_find_by_type_val_res_found_starting_handle ,mem_le_search_res 
+2c32 68490678 fetcht 2 ,mem_temp 
+2c33 604906c9 storet 2 ,mem_le_cur_handle_start 
+2c34 20202c26 branch le_send_att_find_primary_search_loop1 
+
+le_send_att_find_primary_search_end_ending_handle_found:
+2c35 6fe0c39a fetch 1 ,mem_le_search_res 
+2c36 c0002c26 beq le_find_by_type_val_res_not_found ,le_send_att_find_primary_search_loop1 
+2c37 70439a02 jam le_find_by_type_val_res_found_ending_handle ,mem_le_search_res 
+2c38 68490678 fetcht 2 ,mem_temp 
+2c39 184085ff increase -1 ,temp 
+2c3a 604906cb storet 2 ,mem_le_cur_handle_end 
+
+le_send_att_find_primary_search_end:
+2c3b da200005 arg 5 ,rega 
+2c3c 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2c3d 58000007 setarg attop_find_by_type_value_response 
+2c3e e7e08005 istore 1 ,contw 
+2c3f 6fe106c9 fetch 2 ,mem_le_cur_handle_start 
+2c40 e7e10005 istore 2 ,contw 
+2c41 6fe106cb fetch 2 ,mem_le_cur_handle_end 
+2c42 e7e10005 istore 2 ,contw 
+2c43 20600000 rtn 
+
+le_parse_att_read_by_type_request:
+2c44 20402e41 call le_get_search_handle_start_end_common 
+2c45 20402e4a call le_get_search_att_type 
+2c46 20202c47 branch le_send_att_read_by_type_response 
+
+le_send_att_read_by_type_response:
+2c47 684906b1 fetcht 2 ,mem_le_search_handle_start 
+2c48 60490678 storet 2 ,mem_temp 
+2c49 20402cc7 call le_init_attlist_search 
+2c4a 20402cd2 call le_att_get_handle_ptr2 
+2c4b 18c08dfe increase -2 ,contr 
+2c4c 18c27e00 copy contr ,pdata 
+2c4d 67e106c7 store 2 ,mem_le_cur_attlist_start_ptr 
+2c4e 684906b6 fetcht 2 ,mem_le_search_att_type 
+2c4f 58002a00 setarg uuid_chrctr_device_name 
+2c50 98467c00 isub temp ,null 
+2c51 2022acb2 branch le_send_att_read_by_type_res_device_name ,zero 
+2c52 58002803 setarg uuid_gatt_characteristic 
+2c53 98467c00 isub temp ,null 
+2c54 2422ac9c nbranch le_send_att_read_by_type_res_not_characteristic ,zero 
+2c55 d9600002 arg 2 ,timeup 
+
+le_send_att_read_by_type_response_loop:
+2c56 20402e17 call le_att_check_handle_end 
+2c57 24212c79 nbranch le_send_att_read_by_type_response_end ,positive 
+2c58 68490678 fetcht 2 ,mem_temp 
+2c59 20402d02 call le_att_get_handle_info_from_ptr 
+2c5a 243a2c79 nbranch le_send_att_read_by_type_response_end ,blank 
+2c5b 20402e1b call le_att_same_type 
+2c5c 2422ac77 nbranch le_send_att_read_by_type_response_next_handle ,zero 
+2c5d 24342c7b nbranch le_send_att_read_by_type_res_found_next ,user 
+2c5e 78547c00 disable user 
+2c5f 20402e46 call le_get_search_max_mtu_data 
+2c60 1fe22200 copy pdata ,rega 
+2c61 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2c62 58000009 setarg attop_read_by_type_response 
+2c63 e7e08005 istore 1 ,contw 
+2c64 18a26000 copy contw ,alarm 
+2c65 18a08a01 increase 1 ,contw 
+2c66 20402c89 call le_send_att_read_by_type_write_properties 
+2c67 20402e13 call le_att_next_handle 
+2c68 20402d02 call le_att_get_handle_info_from_ptr 
+2c69 20402c90 call le_send_att_read_by_type_write_uuid 
+2c6a 6fe086cd fetch 1 ,mem_le_cur_uuid_length 
+2c6b 1fe0a205 add pdata ,5 ,rega 
+2c6c e2208030 istorer rega ,1 ,alarm 
+2c6d 1a267c07 sub rega ,7 ,null 
+2c6e 2442fdbe ncall enable_user2 ,zero 
+2c6f 2042fdc0 call disable_user2 ,zero 
+2c70 20402e46 call le_get_search_max_mtu_data 
+2c71 1fe0fffe increase -2 ,pdata 
+2c72 9a26fc00 idiv rega 
+2c73 20407d62 call wait_div_end 
+2c74 18079600 quotient timeup 
+2c75 196097ff increase -1 ,timeup 
+2c76 2022ac79 branch le_send_att_read_by_type_response_end ,zero 
+
+le_send_att_read_by_type_response_next_handle:
+2c77 20402e13 call le_att_next_handle 
+2c78 20202c56 branch le_send_att_read_by_type_response_loop 
+
+le_send_att_read_by_type_response_end:
+2c79 20342e03 branch le_send_att_error_response_notfound ,user 
+2c7a 20202e34 branch le_send_auto_len_by_mem 
+
+le_send_att_read_by_type_res_found_next:
+2c7b 20402e24 call le_store_att_record 
+2c7c 20402e13 call le_att_next_handle 
+2c7d 20402d02 call le_att_get_handle_info_from_ptr 
+2c7e 20402d96 call le_send_att_read_by_type_res_check_pair_length_type 
+2c7f 243a2c79 nbranch le_send_att_read_by_type_response_end ,blank 
+2c80 20407c64 call get_contw 
+2c81 6fe10678 fetch 2 ,mem_temp 
+2c82 1fe0ffff increase -1 ,pdata 
+2c83 e7e10005 istore 2 ,contw 
+2c84 20402e30 call le_write_att_record_common 
+2c85 20402c90 call le_send_att_read_by_type_write_uuid 
+2c86 196097ff increase -1 ,timeup 
+2c87 2022ac79 branch le_send_att_read_by_type_response_end ,zero 
+2c88 20202c77 branch le_send_att_read_by_type_response_next_handle 
+
+le_send_att_read_by_type_write_properties:
+2c89 6fe10678 fetch 2 ,mem_temp 
+2c8a e7e10005 istore 2 ,contw 
+2c8b 6fe086c6 fetch 1 ,mem_le_curr_att_len 
+2c8c 1fe27200 copy pdata ,loopcnt 
+2c8d 20407c67 call get_contr 
+2c8e 20407ccc call memcpy_fast 
+2c8f 20207c6a branch store_contw 
+
+le_send_att_read_by_type_write_uuid:
+2c90 20407c64 call get_contw 
+2c91 6fe10678 fetch 2 ,mem_temp 
+2c92 e7e10005 istore 2 ,contw 
+2c93 20407c6a call store_contw 
+2c94 6fe086cd fetch 1 ,mem_le_cur_uuid_length 
+2c95 1fe27200 copy pdata ,loopcnt 
+2c96 20407c64 call get_contw 
+2c97 20407c67 call get_contr 
+2c98 9f260c00 isub loopcnt ,contr 
+2c99 18c08dff increase -1 ,contr 
+2c9a 20407ccc call memcpy_fast 
+2c9b 20207c6a branch store_contw 
+
+le_send_att_read_by_type_res_not_characteristic:
+2c9c 472ac02a bpatchx patch2a_5 ,mem_patch2a 
+2c9d 20402ce0 call le_att_get_uuid_ptr 
+2c9e 203a2e03 branch le_send_att_error_response_notfound ,blank 
+2c9f 18c22600 copy contr ,regc 
+2ca0 20402e46 call le_get_search_max_mtu_data 
+2ca1 1a620c00 copy regc ,contr 
+2ca2 e8408006 ifetcht 1 ,contr 
+2ca3 18408404 increase 4 ,temp 
+2ca4 20407db0 call not_greater_than 
+2ca5 1fe22600 copy pdata ,regc 
+2ca6 1fe22200 copy pdata ,rega 
+2ca7 20407c6d call store_contr 
+2ca8 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2ca9 58000009 setarg attop_read_by_type_response 
+2caa e7e08005 istore 1 ,contw 
+2cab 1a60fffe add regc ,-2 ,pdata 
+2cac 1fe0f3fe add pdata ,-2 ,loopcnt 
+2cad e7e08005 istore 1 ,contw 
+2cae 6fe106de fetch 2 ,mem_le_cur_handle 
+2caf e7e10005 istore 2 ,contw 
+2cb0 20407c67 call get_contr 
+2cb1 20207ccc branch memcpy_fast 
+
+le_send_att_read_by_type_res_device_name:
+2cb2 20402ce0 call le_att_get_uuid_ptr 
+2cb3 203a2e03 branch le_send_att_error_response_notfound ,blank 
+2cb4 18c08dfb increase -5 ,contr 
+2cb5 efe10006 ifetch 2 ,contr 
+2cb6 67e10678 store 2 ,mem_temp 
+2cb7 20402e46 call le_get_search_max_mtu_data 
+2cb8 6848c26b fetcht 1 ,mem_le_name_len 
+2cb9 18408404 increase 4 ,temp 
+2cba 20407db0 call not_greater_than 
+2cbb 1fe22600 copy pdata ,regc 
+2cbc 1fe22200 copy pdata ,rega 
+2cbd 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2cbe 58000009 setarg attop_read_by_type_response 
+2cbf e7e08005 istore 1 ,contw 
+2cc0 1a60fffe add regc ,-2 ,pdata 
+2cc1 1fe0f3fe add pdata ,-2 ,loopcnt 
+2cc2 e7e08005 istore 1 ,contw 
+2cc3 6fe10678 fetch 2 ,mem_temp 
+2cc4 e7e10005 istore 2 ,contw 
+2cc5 d8c0426c arg mem_le_name ,contr 
+2cc6 20207ccc branch memcpy_fast 
+
+le_init_attlist_search:
+2cc7 472b402a bpatchx patch2a_6 ,mem_patch2a 
+2cc8 6fe106b1 fetch 2 ,mem_le_search_handle_start 
+2cc9 98002400 iforce regb 
+2cca 6fe106b3 fetch 2 ,mem_le_search_handle_end 
+2ccb 98002600 iforce regc 
+2ccc 6fe142f7 fetch 2 ,mem_ui_le_uuid_table 
+2ccd 98000c00 iforce contr 
+2cce 20207dba branch enable_user 
+
+le_att_get_handle_ptr:
+2ccf 20402cd2 call le_att_get_handle_ptr2 
+2cd0 2022acdd branch le_att_get_handle_ptr_found ,zero 
+2cd1 20600000 rtn 
+
+le_att_get_handle_ptr2:
+2cd2 472bc02a bpatchx patch2a_7 ,mem_patch2a 
+2cd3 6fe142f7 fetch 2 ,mem_ui_le_uuid_table 
+2cd4 98000c00 iforce contr 
+
+le_att_get_handle_loop1:
+2cd5 efe10006 ifetch 2 ,contr 
+2cd6 1fe17eff and_into 0xff ,pdata 
+2cd7 207a0000 rtn blank 
+2cd8 98467c00 isub temp ,null 
+2cd9 20628000 rtn zero 
+2cda 20402cdd call le_att_contr_add_len 
+2cdb 20402cdd call le_att_contr_add_len 
+2cdc 20202cd5 branch le_att_get_handle_loop1 
+
+le_att_get_handle_ptr_found:
+
+le_att_contr_add_len:
+2cdd efe08006 ifetch 1 ,contr 
+2cde 98c08c00 iadd contr ,contr 
+2cdf 20600000 rtn 
+
+le_att_get_uuid_ptr:
+2ce0 472c402b bpatchx patch2b_0 ,mem_patch2b 
+2ce1 6fe142f7 fetch 2 ,mem_ui_le_uuid_table 
+2ce2 98000c00 iforce contr 
+
+le_att_get_uuid_loop:
+2ce3 efe10006 ifetch 2 ,contr 
+2ce4 1fe17eff and_into 0xff ,pdata 
+2ce5 207a0000 rtn blank 
+2ce6 67e106de store 2 ,mem_le_cur_handle 
+2ce7 efe08006 ifetch 1 ,contr 
+2ce8 18c20a00 copy contr ,contw 
+2ce9 98c08c00 iadd contr ,contr 
+2cea 684886b5 fetcht 1 ,mem_le_search_att_type_length 
+2ceb 98467c00 isub temp ,null 
+2cec 2422acf3 nbranch le_att_get_uuid_ptr_next ,zero 
+2ced 1fe27200 copy pdata ,loopcnt 
+2cee 18a22400 copy contw ,regb 
+2cef da2006b6 arg mem_le_search_att_type ,rega 
+2cf0 20407d64 call string_compare 
+2cf1 20628000 rtn zero 
+2cf2 6fe086b5 fetch 1 ,mem_le_search_att_type_length 
+
+le_att_get_uuid_ptr_next:
+2cf3 98a08c00 iadd contw ,contr 
+2cf4 20402cdd call le_att_contr_add_len 
+2cf5 20202ce3 branch le_att_get_uuid_loop 
+
+le_att_get_last_handle:
+2cf6 d8400001 arg 0x01 ,temp 
+2cf7 6fe142f7 fetch 2 ,mem_ui_le_uuid_table 
+2cf8 98000c00 iforce contr 
+2cf9 18c20a00 copy contr ,contw 
+
+le_att_get_last_handle_loop:
+2cfa efe10006 ifetch 2 ,contr 
+2cfb 1fe17eff and_into 0xff ,pdata 
+2cfc 207a0000 rtn blank 
+2cfd 1fe08401 add pdata ,1 ,temp 
+2cfe 20402cdd call le_att_contr_add_len 
+2cff 20402cdd call le_att_contr_add_len 
+2d00 18c20a00 copy contr ,contw 
+2d01 20202cfa branch le_att_get_last_handle_loop 
+
+le_att_get_handle_info_from_ptr:
+2d02 6fe106c7 fetch 2 ,mem_le_cur_attlist_start_ptr 
+2d03 20202d06 branch le_att_get_handle_info_fast 
+
+le_att_get_handle_info:
+2d04 472cc02b bpatchx patch2b_1 ,mem_patch2b 
+2d05 6fe142f7 fetch 2 ,mem_ui_le_uuid_table 
+
+le_att_get_handle_info_fast:
+2d06 98000c00 iforce contr 
+
+le_att_get_handle_loop:
+2d07 efe10006 ifetch 2 ,contr 
+2d08 1fe17eff and_into 0xff ,pdata 
+2d09 203a2d0f branch le_att_unfind_handle ,blank 
+2d0a 98467c00 isub temp ,null 
+2d0b 2022ad10 branch le_att_finded_handle ,zero 
+2d0c 20402cdd call le_att_contr_add_len 
+2d0d 20402cdd call le_att_contr_add_len 
+2d0e 20202d07 branch le_att_get_handle_loop 
+
+le_att_unfind_handle:
+2d0f 20207dc8 branch disable_blank 
+
+le_att_finded_handle:
+2d10 efe08006 ifetch 1 ,contr 
+2d11 67e086cd store 1 ,mem_le_cur_uuid_length 
+2d12 1fe27200 copy pdata ,loopcnt 
+2d13 d8a006ce arg mem_le_cur_uuid ,contw 
+2d14 20407ccc call memcpy_fast 
+2d15 efe08006 ifetch 1 ,contr 
+2d16 67e086c6 store 1 ,mem_le_curr_att_len 
+2d17 20407c6d call store_contr 
+2d18 20207dca branch enable_blank 
+
+le_parse_att_read_request:
+2d19 20402dc7 call le_check_encrypt_state 
+2d1a 68494398 fetcht 2 ,mem_le_att_handle 
+2d1b 6fe0c321 fetch 1 ,mem_le_configuration 
+2d1c c281ad42 bbit1 bit_ble_read_auth ,le_send_att_read_response_check_auth 
+
+le_send_att_read_response:
+2d1d 20402cd2 call le_att_get_handle_ptr2 
+2d1e 2422ae03 nbranch le_send_att_error_response_notfound ,zero 
+2d1f 20542d48 call le_send_att_read_response_check_handle ,user 
+2d20 20740000 rtn user 
+2d21 20402cdd call le_att_get_handle_ptr_found 
+2d22 18c08dfe increase -2 ,contr 
+2d23 efe10006 ifetch 2 ,contr 
+2d24 d8402a00 arg uuid_chrctr_device_name ,temp 
+2d25 98467c00 isub temp ,null 
+2d26 2022ad36 branch le_send_device_name ,zero 
+2d27 18c22600 copy contr ,regc 
+2d28 20402e46 call le_get_search_max_mtu_data 
+2d29 1a620c00 copy regc ,contr 
+2d2a e8408006 ifetcht 1 ,contr 
+2d2b 18408401 increase 1 ,temp 
+2d2c 20407db0 call not_greater_than 
+
+le_send_att_read_response_less:
+2d2d 1fe22600 copy pdata ,regc 
+2d2e 1fe22200 copy pdata ,rega 
+2d2f 20407c6d call store_contr 
+2d30 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2d31 5800000b setarg attop_read_response 
+2d32 e7e08005 istore 1 ,contw 
+2d33 1a60f3ff add regc ,-1 ,loopcnt 
+2d34 20407c67 call get_contr 
+2d35 20207cda branch memcpy 
+
+le_send_device_name:
+2d36 20402e46 call le_get_search_max_mtu_data 
+2d37 6848c26b fetcht 1 ,mem_le_name_len 
+2d38 18408401 increase 1 ,temp 
+2d39 20407db0 call not_greater_than 
+2d3a 1fe22600 copy pdata ,regc 
+2d3b 1fe22200 copy pdata ,rega 
+2d3c 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2d3d 5800000b setarg attop_read_response 
+2d3e e7e08005 istore 1 ,contw 
+2d3f 1a60f3ff add regc ,-1 ,loopcnt 
+2d40 d8c0426c arg mem_le_name ,contr 
+2d41 20207cda branch memcpy 
+
+le_send_att_read_response_check_auth:
+2d42 6fe14332 fetch 2 ,mem_le_pairing_handle 
+2d43 98467c00 isub temp ,null 
+2d44 2422ad1d nbranch le_send_att_read_response ,zero 
+2d45 24342d1d nbranch le_send_att_read_response ,user 
+
+le_send_att_read_response_error_insufficient_auth:
+2d46 7001b905 jam att_err_insufficient_authentication ,mem_le_err_code 
+2d47 20202e05 branch le_send_att_error_response 
+
+le_send_att_read_response_check_handle:
+2d48 18c08dfe increase -2 ,contr 
+2d49 efe10006 ifetch 2 ,contr 
+2d4a c2872d46 bbit1 bit_of_att_handle_read_authenticated ,le_send_att_read_response_error_insufficient_auth 
+2d4b 20207dbc branch disable_user 
+
+le_parse_att_read_blob_request:
+2d4c efe10006 ifetch 2 ,contr 
+2d4d 67e106b5 store 2 ,mem_le_att_offset 
+2d4e 98002200 iforce rega 
+2d4f 68494398 fetcht 2 ,mem_le_att_handle 
+
+le_send_att_read_blob_response:
+2d50 20402ccf call le_att_get_handle_ptr 
+2d51 203a2e03 branch le_send_att_error_response_notfound ,blank 
+2d52 efe08006 ifetch 1 ,contr 
+2d53 9a267200 isub rega ,loopcnt 
+2d54 24212e03 nbranch le_send_att_error_response_notfound ,positive 
+2d55 20407c6d call store_contr 
+2d56 20402e46 call le_get_search_max_mtu_data 
+2d57 1f208401 add loopcnt ,1 ,temp 
+2d58 20407db0 call not_greater_than 
+
+le_send_att_read_blob_response_less:
+2d59 1fe22200 copy pdata ,rega 
+2d5a 1fe22600 copy pdata ,regc 
+2d5b 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2d5c 5800000d setarg attop_read_blob_response 
+2d5d e7e08005 istore 1 ,contw 
+2d5e 1a60f3ff add regc ,-1 ,loopcnt 
+2d5f 684906b5 fetcht 2 ,mem_le_att_offset 
+2d60 20407c67 call get_contr 
+2d61 98408c00 iadd temp ,contr 
+2d62 20207ccc branch memcpy_fast 
+
+le_parse_att_read_by_group_type_request:
+2d63 20402e41 call le_get_search_handle_start_end_common 
+2d64 20402e4a call le_get_search_att_type 
+2d65 20202d66 branch le_send_att_read_by_group_type_response 
+
+le_send_att_read_by_group_type_response:
+2d66 d9600002 arg 2 ,timeup 
+2d67 684906b1 fetcht 2 ,mem_le_search_handle_start 
+2d68 60490678 storet 2 ,mem_temp 
+2d69 20402cd2 call le_att_get_handle_ptr2 
+2d6a 18c08dfe increase -2 ,contr 
+2d6b 18c27e00 copy contr ,pdata 
+2d6c 67e106c7 store 2 ,mem_le_cur_attlist_start_ptr 
+
+le_send_att_read_by_group_type_response_loop:
+2d6d 20402e17 call le_att_check_handle_end 
+2d6e 24212d9e nbranch le_send_att_read_by_group_type_end0 ,positive 
+2d6f 68490678 fetcht 2 ,mem_temp 
+2d70 20402d02 call le_att_get_handle_info_from_ptr 
+2d71 243a2da1 nbranch le_send_att_read_by_group_type_end1 ,blank 
+2d72 20402e1b call le_att_same_type 
+2d73 2422ad94 nbranch le_send_att_read_by_group_type_next_handle ,zero 
+2d74 19627e00 copy timeup ,pdata 
+2d75 c0002da1 beq 0 ,le_send_att_read_by_group_type_end1 
+2d76 24342d8a nbranch le_send_att_read_by_group_type_store_write_record ,user 
+2d77 78547c00 disable user 
+2d78 20402e46 call le_get_search_max_mtu_data 
+2d79 1fe22200 copy pdata ,rega 
+2d7a 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2d7b 58000011 setarg attop_read_by_group_type_response 
+2d7c e7e08005 istore 1 ,contw 
+2d7d 6fe086c6 fetch 1 ,mem_le_curr_att_len 
+2d7e 1fe0a204 add pdata ,4 ,rega 
+2d7f e2208005 istorer rega ,1 ,contw 
+2d80 20407c6a call store_contw 
+2d81 1a267c06 sub rega ,6 ,null 
+2d82 2442fdbe ncall enable_user2 ,zero 
+2d83 2042fdc0 call disable_user2 ,zero 
+2d84 20402e46 call le_get_search_max_mtu_data 
+2d85 1fe0fffe increase -2 ,pdata 
+2d86 9a26fc00 idiv rega 
+2d87 20407d62 call wait_div_end 
+2d88 18079600 quotient timeup 
+2d89 20202d90 branch le_send_att_read_by_group_type_store_record 
+
+le_send_att_read_by_group_type_store_write_record:
+2d8a 20402d98 call le_send_att_read_by_group_type_check_pair_length_type 
+2d8b 243a2da1 nbranch le_send_att_read_by_group_type_end1 ,blank 
+2d8c 6fe10678 fetch 2 ,mem_temp 
+2d8d 1fe0ffff increase -1 ,pdata 
+2d8e 67e106cb store 2 ,mem_le_cur_handle_end 
+2d8f 20402e2a call le_write_att_record 
+
+le_send_att_read_by_group_type_store_record:
+2d90 6fe10678 fetch 2 ,mem_temp 
+2d91 67e106c9 store 2 ,mem_le_cur_handle_start 
+2d92 20402e24 call le_store_att_record 
+2d93 196097ff increase -1 ,timeup 
+
+le_send_att_read_by_group_type_next_handle:
+2d94 20402e13 call le_att_next_handle 
+2d95 20202d6d branch le_send_att_read_by_group_type_response_loop 
+
+le_send_att_read_by_type_res_check_pair_length_type:
+2d96 6fe086cd fetch 1 ,mem_le_cur_uuid_length 
+2d97 20202d99 branch le_send_att_read_by_group_type_check_pair_length_type + 1 
+
+le_send_att_read_by_group_type_check_pair_length_type:
+2d98 6fe086c6 fetch 1 ,mem_le_curr_att_len 
+2d99 20362d9c branch le_send_att_read_by_group_type_check_pair_length_type_16byte ,user2 
+2d9a 1fe0fffe increase -2 ,pdata 
+2d9b 20600000 rtn 
+
+le_send_att_read_by_group_type_check_pair_length_type_16byte:
+2d9c 1fe0fff0 increase -16 ,pdata 
+2d9d 20600000 rtn 
+
+le_send_att_read_by_group_type_end0:
+2d9e 6fe10678 fetch 2 ,mem_temp 
+2d9f 67e106cb store 2 ,mem_le_cur_handle_end 
+2da0 20202da5 branch le_send_att_read_by_group_type_end_common 
+
+le_send_att_read_by_group_type_end1:
+2da1 6fe10678 fetch 2 ,mem_temp 
+2da2 1fe0ffff increase -1 ,pdata 
+2da3 67e106cb store 2 ,mem_le_cur_handle_end 
+2da4 20202da5 branch le_send_att_read_by_group_type_end_common 
+
+le_send_att_read_by_group_type_end_common:
+2da5 20342e03 branch le_send_att_error_response_notfound ,user 
+2da6 20402e2a call le_write_att_record 
+2da7 20202e34 branch le_send_auto_len_by_mem 
+
+le_parse_att_write_request:
+2da8 18c22200 copy contr ,rega 
+2da9 6fe14335 fetch 2 ,mem_le_l2cap_size 
+2daa 1fe0a5fd add pdata ,-3 ,regb 
+2dab 20402929 call le_writeatt_cb 
+
+le_send_att_write_response_check_auth:
+2dac 472d402b bpatchx patch2b_2 ,mem_patch2b 
+2dad 20402dc7 call le_check_encrypt_state 
+2dae 68494398 fetcht 2 ,mem_le_att_handle 
+2daf 20402cd2 call le_att_get_handle_ptr2 
+2db0 2422adc5 nbranch le_send_att_write_response_error_invalid_handle ,zero 
+2db1 20542dc1 call le_send_att_write_response_check_handle ,user 
+2db2 20740000 rtn user 
+2db3 6fe0c321 fetch 1 ,mem_le_configuration 
+2db4 c3022dbc bbit0 bit_ble_write_auth ,le_send_att_write_response 
+2db5 68494398 fetcht 2 ,mem_le_att_handle 
+2db6 6fe14332 fetch 2 ,mem_le_pairing_handle 
+2db7 98467c00 isub temp ,null 
+2db8 2422adbc nbranch le_send_att_write_response ,zero 
+2db9 20402dc7 call le_check_encrypt_state 
+2dba 24342dbc nbranch le_send_att_write_response ,user 
+2dbb 20202d46 branch le_send_att_read_response_error_insufficient_auth 
+
+le_send_att_write_response:
+2dbc 18002201 force 1 ,rega 
+2dbd 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2dbe 58000013 setarg attop_write_response 
+2dbf e7e08005 istore 1 ,contw 
+2dc0 20600000 rtn 
+
+le_send_att_write_response_check_handle:
+2dc1 18c08dfe increase -2 ,contr 
+2dc2 efe10006 ifetch 2 ,contr 
+2dc3 c287ad46 bbit1 bit_of_att_handle_write_authenticated ,le_send_att_read_response_error_insufficient_auth 
+2dc4 20207dbc branch disable_user 
+
+le_send_att_write_response_error_invalid_handle:
+2dc5 7001b901 jam att_err_invalid_handle ,mem_le_err_code 
+2dc6 20202e05 branch le_send_att_error_response 
+
+le_check_encrypt_state:
+2dc7 472dc02b bpatchx patch2b_3 ,mem_patch2b 
+2dc8 20407dbc call disable_user 
+2dc9 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+2dca c1000000 rtneq le_pairing_mode_none 
+2dcb 6fe0c040 fetch 1 ,mem_context 
+2dcc c3820000 rtnbit1 lestate_encryption 
+2dcd 20207dba branch enable_user 
+
+le_parse_att_prepare_write_request:
+2dce 18c0a202 add contr ,2 ,rega 
+2dcf 6fe14335 fetch 2 ,mem_le_l2cap_size 
+2dd0 1fe0a5fb add pdata ,-5 ,regb 
+2dd1 20402929 call le_writeatt_cb 
+2dd2 20202dd3 branch le_send_att_prepare_write_response 
+
+le_send_att_prepare_write_response:
+2dd3 6fe14335 fetch 2 ,mem_le_l2cap_size 
+2dd4 1fe22200 copy pdata ,rega 
+2dd5 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2dd6 58000017 setarg attop_prepare_write_response 
+2dd7 e7e08005 istore 1 ,contw 
+2dd8 6fe14398 fetch 2 ,mem_le_att_handle 
+2dd9 e7e10005 istore 2 ,contw 
+2dda 6fe14335 fetch 2 ,mem_le_l2cap_size 
+2ddb 1fe0f3fb add pdata ,-5 ,loopcnt 
+2ddc 6fe14339 fetch 2 ,mem_le_payload_ptr 
+2ddd 1fe08c07 add pdata ,7 ,contr 
+2dde efe10006 ifetch 2 ,contr 
+2ddf e7e10005 istore 2 ,contw 
+2de0 20207ccc branch memcpy_fast 
+
+le_parse_att_execute_write_request:
+
+le_send_att_execute_write_response:
+2de1 18002201 force 1 ,rega 
+2de2 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2de3 58000019 setarg attop_execute_write_response 
+2de4 e7e08005 istore 1 ,contw 
+2de5 20600000 rtn 
+
+le_parse_handle_value_confirmation:
+2de6 6fe0c396 fetch 1 ,mem_le_l2cap_att_states 
+2de7 793ffe00 set0 ble_l2cap_recv_confirmation_packet ,pdata 
+2de8 67e0c396 store 1 ,mem_le_l2cap_att_states 
+2de9 20600000 rtn 
+
+le_parse_att_write_command:
+2dea 18c22200 copy contr ,rega 
+2deb 6fe14335 fetch 2 ,mem_le_l2cap_size 
+2dec 1fe0a5fd add pdata ,-3 ,regb 
+2ded 20202929 branch le_writeatt_cb 
+
+le_att_malloc_tx_notify:
+2dee 18422600 copy temp ,regc 
+2def 1a20a203 increase 3 ,rega 
+2df0 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2df1 1a20a3fd increase -3 ,rega 
+2df2 5800001b setarg attop_handle_value_notification 
+2df3 e7e08005 istore 1 ,contw 
+2df4 1a620400 copy regc ,temp 
+2df5 e0410005 istoret 2 ,contw 
+2df6 20600000 rtn 
+
+le_att_malloc_tx_indication:
+2df7 6fe0c396 fetch 1 ,mem_le_l2cap_att_states 
+2df8 79207e00 set1 ble_l2cap_send_indication_packet ,pdata 
+2df9 67e0c396 store 1 ,mem_le_l2cap_att_states 
+2dfa 18422600 copy temp ,regc 
+2dfb 1a20a203 increase 3 ,rega 
+2dfc 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2dfd 1a20a3fd increase -3 ,rega 
+2dfe 5800001d setarg attop_handle_value_indication 
+2dff e7e08005 istore 1 ,contw 
+2e00 1a620400 copy regc ,temp 
+2e01 e0410005 istoret 2 ,contw 
+2e02 20600000 rtn 
+
+le_send_att_error_response_notfound:
+2e03 472e402b bpatchx patch2b_4 ,mem_patch2b 
+2e04 7001b90a jam att_err_attribute_not_found ,mem_le_err_code 
+
+le_send_att_error_response:
+2e05 18002205 force 5 ,rega 
+2e06 20402e10 call le_fifo_malloc_tx_l2cap_gatt 
+2e07 58000001 setarg attop_error_response 
+2e08 e7e08005 istore 1 ,contw 
+2e09 6fe0c397 fetch 1 ,mem_le_att_opcode 
+2e0a e7e08005 istore 1 ,contw 
+2e0b 6fe14398 fetch 2 ,mem_le_att_handle 
+2e0c e7e10005 istore 2 ,contw 
+2e0d 6fe081b9 fetch 1 ,mem_le_err_code 
+2e0e e7e08005 istore 1 ,contw 
+2e0f 20600000 rtn 
+
+le_fifo_malloc_tx_l2cap_gatt:
+2e10 472ec02b bpatchx patch2b_5 ,mem_patch2b 
+2e11 18002404 force le_l2cap_cid_att ,regb 
+2e12 202029fb branch le_fifo_malloc_tx_l2cap 
+
+le_att_next_handle:
+2e13 68490678 fetcht 2 ,mem_temp 
+2e14 18408401 increase 1 ,temp 
+2e15 60490678 storet 2 ,mem_temp 
+2e16 20600000 rtn 
+
+le_att_check_handle_end:
+2e17 68490678 fetcht 2 ,mem_temp 
+2e18 6fe106b3 fetch 2 ,mem_le_search_handle_end 
+2e19 98467c00 isub temp ,null 
+2e1a 20600000 rtn 
+
+le_att_same_type:
+2e1b 472f402b bpatchx patch2b_6 ,mem_patch2b 
+2e1c 684886b5 fetcht 1 ,mem_le_search_att_type_length 
+2e1d da2006b6 arg mem_le_search_att_type ,rega 
+
+le_att_check_same_common:
+2e1e 6fe086cd fetch 1 ,mem_le_cur_uuid_length 
+2e1f 1fe27200 copy pdata ,loopcnt 
+2e20 98467c00 isub temp ,null 
+2e21 24628000 nrtn zero 
+2e22 da4006ce arg mem_le_cur_uuid ,regb 
+2e23 20207d64 branch string_compare 
+
+le_store_att_record:
+2e24 472fc02b bpatchx patch2b_7 ,mem_patch2b 
+2e25 6fe086c6 fetch 1 ,mem_le_curr_att_len 
+2e26 67e086a1 store 1 ,mem_temp_block0 
+2e27 1fe27200 copy pdata ,loopcnt 
+2e28 20407c67 call get_contr 
+2e29 20207ccc branch memcpy_fast 
+
+le_write_att_record:
+2e2a 4730402c bpatchx patch2c_0 ,mem_patch2c 
+2e2b 20407c64 call get_contw 
+2e2c 6fe106c9 fetch 2 ,mem_le_cur_handle_start 
+2e2d e7e10005 istore 2 ,contw 
+2e2e 6fe106cb fetch 2 ,mem_le_cur_handle_end 
+2e2f e7e10005 istore 2 ,contw 
+
+le_write_att_record_common:
+2e30 6fe086a1 fetch 1 ,mem_temp_block0 
+2e31 1fe27200 copy pdata ,loopcnt 
+2e32 20407ccc call memcpy_fast 
+2e33 20207c6a branch store_contw 
+
+le_send_auto_len_by_mem:
+2e34 4730c02c bpatchx patch2c_1 ,mem_patch2c 
+2e35 20407c64 call get_contw 
+2e36 20402a21 call le_fifo_get_last_att_ptr 
+2e37 18a27e00 copy contw ,pdata 
+2e38 98c62200 isub contr ,rega 
+2e39 20402a24 call le_fifo_get_last_l2cap_ptr 
+2e3a 1a227e00 copy rega ,pdata 
+2e3b e7e10006 istore 2 ,contr 
+2e3c 1a20a204 increase 4 ,rega 
+2e3d 20402a16 call le_fifo_get_last_tx_ptr 
+2e3e 1a227e00 copy rega ,pdata 
+2e3f e7e08006 istore 1 ,contr 
+2e40 20600000 rtn 
+
+le_get_search_handle_start_end_common:
+2e41 1fecfe00 rshift8 pdata ,pdata 
+2e42 67e106b1 store 2 ,mem_le_search_handle_start 
+2e43 efe10006 ifetch 2 ,contr 
+2e44 67e106b3 store 2 ,mem_le_search_handle_end 
+2e45 20600000 rtn 
+
+le_get_search_max_mtu_data:
+2e46 4731402c bpatchx patch2c_2 ,mem_patch2c 
+2e47 6fe142e3 fetch 2 ,mem_le_remote_mtu 
+2e48 684942e1 fetcht 2 ,mem_le_local_mtu 
+2e49 20207db0 branch not_greater_than 
+
+le_get_search_att_type:
+2e4a 4731c02c bpatchx patch2c_3 ,mem_patch2c 
+2e4b 20407c6d call store_contr 
+2e4c d8a006b5 arg mem_le_search_att_type_length ,contw 
+
+le_get_search_common:
+2e4d 6fe14335 fetch 2 ,mem_le_l2cap_size 
+2e4e 1fe0fffb increase -5 ,pdata 
+
+le_get_search_common2:
+2e4f e7e08005 istore 1 ,contw 
+2e50 1fe27200 copy pdata ,loopcnt 
+2e51 20407c67 call get_contr 
+2e52 20207ccc branch memcpy_fast 
+
+le_parse_writing_attribute_start:
+2e53 6fe10050 fetch 2 ,mem_le_rxbuf_data_att_cid 
+2e54 c1820000 rtnne le_l2cap_cid_att 
+2e55 6fe0c396 fetch 1 ,mem_le_l2cap_att_states 
+2e56 79207e01 set1 ble_l2cap_deal_with_continue_packet ,pdata 
+2e57 67e0c396 store 1 ,mem_le_l2cap_att_states 
+2e58 6fe18052 fetch 3 ,mem_le_rxbuf_data_att_opcode 
+2e59 67e1c397 store 3 ,mem_le_att_opcode 
+2e5a 7920000f set1 mark_old_packet ,mark 
+2e5b c0092e6e beq attop_write_request ,le_parse_attribute_write_request 
+2e5c c0292e73 beq attop_write_command ,le_parse_attribute_write_command 
+2e5d c00c2de1 beq attop_execute_write_request ,le_parse_att_execute_write_request 
+2e5e c0012bab beq attop_exchange_mtu_request ,le_parse_att_exchange_mtu_request 
+2e5f c00f2de6 beq attop_handle_value_confirmation ,le_parse_handle_value_confirmation 
+2e60 793f800f set0 mark_old_packet ,mark 
+
+le_clear_l2cap_att_states_deal_with_contiune_packet:
+2e61 6fe0c396 fetch 1 ,mem_le_l2cap_att_states 
+2e62 793ffe01 set0 ble_l2cap_deal_with_continue_packet ,pdata 
+2e63 67e0c396 store 1 ,mem_le_l2cap_att_states 
+2e64 20600000 rtn 
+
+le_parse_writing_attribute_continue:
+2e65 6fe0c396 fetch 1 ,mem_le_l2cap_att_states 
+2e66 c4008000 rtnbit0 ble_l2cap_deal_with_continue_packet 
+2e67 7920000f set1 mark_old_packet ,mark 
+2e68 20402e7e call le_parse_l2cap_continue_common 
+2e69 20402e84 call le_parse_attribute_check_complete_packet 
+2e6a 20542e61 call le_clear_l2cap_att_states_deal_with_contiune_packet ,user 
+2e6b 6fe0c397 fetch 1 ,mem_le_att_opcode 
+2e6c c0092dac beq attop_write_request ,le_send_att_write_response_check_auth 
+2e6d 20600000 rtn 
+
+le_parse_attribute_write_request:
+2e6e 20402e73 call le_parse_attribute_write_command 
+2e6f 20202e70 branch le_send_attribute_write_response_check_auth 
+
+le_send_attribute_write_response_check_auth:
+2e70 20402e84 call le_parse_attribute_check_complete_packet 
+2e71 24740000 nrtn user 
+2e72 20202dac branch le_send_att_write_response_check_auth 
+
+le_parse_attribute_write_command:
+2e73 4732402c bpatchx patch2c_4 ,mem_patch2c 
+2e74 20402e77 call le_parse_attribute_check_complete_packet_init 
+2e75 da200055 arg mem_le_rxbuf_data_att_write_payload ,rega 
+2e76 20202929 branch le_writeatt_cb 
+
+le_parse_attribute_check_complete_packet_init:
+2e77 6fe0804d fetch 1 ,mem_le_rxbuf_data_att_write_length 
+2e78 1fe0a5f9 add pdata ,-7 ,regb 
+2e79 1fe0fffc increase -4 ,pdata 
+2e7a 67e14337 store 2 ,mem_le_packet_len_recved 
+2e7b 6849004e fetcht 2 ,mem_le_rxbuf_data_att_write_l2cap_length 
+2e7c 60494335 storet 2 ,mem_le_l2cap_size 
+2e7d 20600000 rtn 
+
+le_parse_l2cap_continue_common:
+2e7e 6a40804d fetchr regb ,1 ,mem_le_rxbuf_data_continue_length 
+2e7f 6fe14337 fetch 2 ,mem_le_packet_len_recved 
+2e80 9a408400 iadd regb ,temp 
+2e81 60494337 storet 2 ,mem_le_packet_len_recved 
+2e82 da20004e arg mem_le_rxbuf_data_continue_payload ,rega 
+2e83 20202929 branch le_writeatt_cb 
+
+le_parse_attribute_check_complete_packet:
+2e84 20407dbc call disable_user 
+2e85 6fe14337 fetch 2 ,mem_le_packet_len_recved 
+2e86 68494335 fetcht 2 ,mem_le_l2cap_size 
+2e87 98467c00 isub temp ,null 
+2e88 24628000 nrtn zero 
+2e89 20207dba branch enable_user 
+
+le_parse_signaling:
+2e8a efe08006 ifetch 1 ,contr 
+2e8b e8408006 ifetcht 1 ,contr 
+2e8c e8410006 ifetcht 2 ,contr 
+2e8d c009ae8f beq l2cap_connection_parameter_update_response ,le_l2cap_parse_conn_parameter_update_rsp 
+2e8e 20600000 rtn 
+
+le_l2cap_parse_conn_parameter_update_rsp:
+2e8f efe10006 ifetch 2 ,contr 
+2e90 67e1433c store 2 ,mem_le_l2cap_signaling_conn_param_update_rsp_result 
+2e91 70066f40 jam bt_evt_le_parse_conn_papa_update_rsp ,mem_fifo_temp 
+2e92 2020782b branch ui_ipc_send_event 
+
+le_l2cap_tx_update_req:
+2e93 da20000c arg 0x0c ,rega 
+2e94 da600012 arg l2cap_connection_parameter_update_request ,regc 
+2e95 20402e9b call le_fifo_malloc_tx_l2cap_signaling 
+2e96 58000008 setarg 0x08 
+2e97 e7e10005 istore 2 ,contw 
+2e98 6fe442d3 fetch 8 ,mem_le_interval_min 
+2e99 e7e40005 istore 8 ,contw 
+2e9a 20600000 rtn 
+
+le_fifo_malloc_tx_l2cap_signaling:
+2e9b 20402ea3 call le_l2cap_update_signaling_identifier 
+2e9c da400005 arg le_l2cap_cid_signal ,regb 
+2e9d 204029fb call le_fifo_malloc_tx_l2cap 
+2e9e 1a627e00 copy regc ,pdata 
+2e9f e7e08005 istore 1 ,contw 
+2ea0 6fe0c33b fetch 1 ,mem_le_signaling_identifier 
+2ea1 e7e08005 istore 1 ,contw 
+2ea2 20600000 rtn 
+
+le_l2cap_update_signaling_identifier:
+2ea3 6fe0c33b fetch 1 ,mem_le_signaling_identifier 
+2ea4 1fe0fe01 pincrease 1 
+2ea5 67e0c33b store 1 ,mem_le_signaling_identifier 
+2ea6 c1800000 rtnne 0 
+
+le_l2cap_reset_signaling_identifier:
+2ea7 70433b01 jam 1 ,mem_le_signaling_identifier 
+2ea8 20600000 rtn 
+
+le_pairing_mode_init:
+2ea9 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+2eaa c0002eb8 beq le_pairing_mode_none ,le_set_no_pairing 
+2eab c000aebb beq le_pairing_mode_lagacy_justwork ,le_set_pairing_mode_lagacy_just_work 
+2eac c0012ebd beq le_pairing_mode_lagacy_passkey ,le_set_pairing_mode_lagacy_passkey 
+2ead c040aeb1 beq le_pairing_mode_secure_connect_justwork ,le_set_pairing_mode_secure_justwork 
+2eae c0412eb3 beq le_pairing_mode_secure_connect_numeric ,le_set_pairing_mode_secure_numeric 
+2eaf c041aeb6 beq le_pairing_mode_secure_connect_passkey ,le_set_pairing_mode_secure_passkey 
+2eb0 20600000 rtn 
+
+le_set_pairing_mode_secure_justwork:
+2eb1 7042c70d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+2eb2 20202eb9 branch le_set_noinputnooutput 
+
+le_set_pairing_mode_secure_numeric:
+2eb3 7042c70d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+2eb4 7042c501 jam flag_iocap_displayyesno ,mem_le_pres_iocap 
+2eb5 20600000 rtn 
+
+le_set_pairing_mode_secure_passkey:
+2eb6 7042c70d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+2eb7 20202ebe branch le_set_displayonly 
+
+le_set_no_pairing:
+2eb8 7042c700 jam flag_le_no_bonding_no_mitm ,mem_le_pres_auth 
+
+le_set_noinputnooutput:
+2eb9 7042c503 jam flag_iocap_noinputnooutput ,mem_le_pres_iocap 
+2eba 20600000 rtn 
+
+le_set_pairing_mode_lagacy_just_work:
+2ebb 7042c705 jam flag_le_bonding_mitm ,mem_le_pres_auth 
+2ebc 20202eb9 branch le_set_noinputnooutput 
+
+le_set_pairing_mode_lagacy_passkey:
+2ebd 7042c705 jam flag_le_bonding_mitm ,mem_le_pres_auth 
+
+le_set_displayonly:
+2ebe 7042c500 jam flag_iocap_displayonly ,mem_le_pres_iocap 
+2ebf 20600000 rtn 
+
+le_secure_connection_enable:
+2ec0 6fe0c46c fetch 1 ,mem_secure_connections_enable 
+2ec1 79207e00 set1 secure_connections_le_bit ,pdata 
+2ec2 67e0c46c store 1 ,mem_secure_connections_enable 
+2ec3 20600000 rtn 
+
+le_secure_connection_disable:
+2ec4 6fe0c46c fetch 1 ,mem_secure_connections_enable 
+2ec5 793ffe00 set0 secure_connections_le_bit ,pdata 
+2ec6 67e0c46c store 1 ,mem_secure_connections_enable 
+2ec7 20600000 rtn 
+
+le_parse_smp:
+2ec8 efe08006 ifetch 1 ,contr 
+2ec9 c000aedc beq smp_pairing_request ,le_parse_smp_pairing_request 
+2eca c001af03 beq smp_pairing_confirm ,le_parse_smp_pairing_confirm 
+2ecb c0022f24 beq smp_pairing_random ,le_parse_smp_pairing_random 
+2ecc c002af31 beq smp_pairing_failed ,le_parse_smp_pairing_failed 
+2ecd c003af9a beq smp_master_identification ,le_parse_smp_master_identification 
+2ece c0042f86 beq smp_identity_information ,le_parse_smp_identity_information 
+2ecf c004af96 beq smp_identity_address_information ,le_parse_smp_identity_address_information 
+2ed0 c0052f9a beq smp_signing_information ,le_parse_smp_signing_information 
+2ed1 c005af9a beq smp_security_request ,le_parse_smp_security_request 
+2ed2 c0062f9b beq smp_pairing_public_key ,le_parse_smp_public_key 
+2ed3 c006afa0 beq smp_pairing_dhkey_check ,le_parse_smp_dhkey_check 
+2ed4 20600000 rtn 
+
+le_send_smp_security_request:
+2ed5 18002202 force 2 ,rega 
+2ed6 20403047 call le_fifo_malloc_tx_l2cap_smp 
+2ed7 5800000b setarg smp_security_request 
+2ed8 e7e08005 istore 1 ,contw 
+2ed9 6fe0c2c7 fetch 1 ,mem_le_pres_auth 
+2eda e7e08005 istore 1 ,contw 
+2edb 20600000 rtn 
+
+le_parse_smp_pairing_request:
+2edc 67e0c2bd store 1 ,mem_le_preq 
+2edd efe30006 ifetch 6 ,contr 
+2ede e7e30005 istore 6 ,contw 
+2edf 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+2ee0 c0002f37 beq le_pairing_mode_none ,le_smp_pairing_fail_reason_not_support_pairing 
+2ee1 20402efe call le_send_smp_pairing_response 
+2ee2 6fe0c46a fetch 1 ,mem_sc_only_mode 
+2ee3 203a2ee8 branch le_parse_smp_pairing_request2 ,blank 
+2ee4 6fe0c2c0 fetch 1 ,mem_le_preq_auth 
+2ee5 c301c31f bbit0 le_auth_secure_connection_pairing_bit ,app_ble_disconnect 
+2ee6 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+2ee7 c303c31f bbit0 le_pairing_mode_secure_connect_bit ,app_ble_disconnect 
+
+le_parse_smp_pairing_request2:
+2ee8 7042fc03 jam flag_le_pairing_rcv_pairing_req ,mem_le_pairing_state 
+2ee9 6fe0c2be fetch 1 ,mem_le_preq_iocap 
+2eea c0002ef0 beq flag_iocap_displayonly ,le_set_tk_0 
+2eeb c000aef0 beq flag_iocap_displayyesno ,le_set_tk_0 
+2eec c001aef0 beq flag_iocap_noinputnooutput ,le_set_tk_0 
+2eed 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+2eee c0012ef3 beq le_pairing_mode_lagacy_passkey ,le_parse_smp_pairing_req_passkey 
+2eef c1418000 rtneq le_pairing_mode_secure_connect_passkey 
+
+le_set_tk_0:
+2ef0 dfe00000 arg 0 ,pdata 
+2ef1 67e242ff store 4 ,mem_le_tk 
+2ef2 20600000 rtn 
+
+le_parse_smp_pairing_req_passkey:
+2ef3 6fe0c321 fetch 1 ,mem_le_configuration 
+2ef4 c2802efc bbit1 bit_ble_passkey_fixed_key ,le_parse_smp_pairing_req_fixed_passkey 
+
+le_genernate_tk:
+2ef5 da2042ff arg mem_le_tk ,rega 
+2ef6 1a220a00 copy rega ,contw 
+2ef7 df200003 arg 3 ,loopcnt 
+2ef8 20407de8 call generate_random_loop 
+2ef9 6fe14301 fetch 2 ,mem_le_tk + 2 
+2efa 1fe17e07 and_into 0x7 ,pdata 
+2efb 67e14301 store 2 ,mem_le_tk + 2 
+
+le_parse_smp_pairing_req_fixed_passkey:
+2efc 70066f34 jam bt_evt_le_tk_generate ,mem_fifo_temp 
+2efd 2020782b branch ui_ipc_send_event 
+
+le_send_smp_pairing_response:
+2efe 18002207 force 7 ,rega 
+2eff 20403047 call le_fifo_malloc_tx_l2cap_smp 
+2f00 6fe3c2c4 fetch 7 ,mem_le_pres 
+2f01 e7e38005 istore 7 ,contw 
+2f02 20600000 rtn 
+
+le_parse_smp_pairing_confirm:
+2f03 7042fc05 jam flag_le_pairing_receive_pairing_confirm ,mem_le_pairing_state 
+2f04 d8a0429b arg mem_le_rconfirm ,contw 
+2f05 20407c8f call memcpy16 
+2f06 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+2f07 c0022f0b beq le_pairing_mode_lagacy_passkey_res_input ,le_parse_smp_pairing_confirm_passkey_res_input 
+2f08 c041af0d beq le_pairing_mode_secure_connect_passkey ,le_parse_smp_pairing_confirm_secure_passkey 
+2f09 c0422f10 beq le_pairing_mode_secure_connect_passkey_res_input ,le_parse_smp_pairing_confirm_sc_passkey_res_input 
+2f0a 20202f13 branch le_send_smp_pairing_confirm 
+
+le_parse_smp_pairing_confirm_passkey_res_input:
+2f0b 70066f43 jam bt_evt_le_get_passkey ,mem_fifo_temp 
+2f0c 2020782b branch ui_ipc_send_event 
+
+le_parse_smp_pairing_confirm_secure_passkey:
+2f0d 7042f902 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+2f0e 7042fa08 jam le_sc_stat_passkey_wait_confirm ,mem_le_secure_connect_state 
+2f0f 20600000 rtn 
+
+le_parse_smp_pairing_confirm_sc_passkey_res_input:
+2f10 6fe242ff fetch 4 ,mem_le_tk 
+2f11 203a2f0b branch le_parse_smp_pairing_confirm_passkey_res_input ,blank 
+2f12 20202f0d branch le_parse_smp_pairing_confirm_secure_passkey 
+
+le_send_smp_pairing_confirm:
+2f13 7042fc06 jam flag_le_pairing_send_pairing_confirm ,mem_le_pairing_state 
+2f14 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+2f15 c283af1c bbit1 le_pairing_mode_secure_connect_bit ,le_send_smp_pairing_confirm_sc 
+2f16 20407256 call generate_confirm 
+2f17 18002211 force 17 ,rega 
+2f18 20403047 call le_fifo_malloc_tx_l2cap_smp 
+2f19 58000003 setarg smp_pairing_confirm 
+2f1a e7e08005 istore 1 ,contw 
+2f1b 20207375 branch store_aes_result 
+
+le_send_smp_pairing_confirm_sc:
+2f1c d8a042ab arg mem_le_srand ,contw 
+2f1d 20407de7 call generate_random 
+2f1e 204071b6 call function_f4_cb 
+2f1f 18002211 force 17 ,rega 
+2f20 20403047 call le_fifo_malloc_tx_l2cap_smp 
+2f21 58000003 setarg smp_pairing_confirm 
+2f22 e7e08005 istore 1 ,contw 
+2f23 202071f2 branch load_inverse_result 
+
+le_parse_smp_pairing_random:
+2f24 18c22200 copy contr ,rega 
+2f25 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+2f26 c283af39 bbit1 le_pairing_mode_secure_connect_bit ,le_parse_smp_pairing_random_sc 
+2f27 1a220c00 copy rega ,contr 
+2f28 2040724e call authenticate_rconfirm 
+2f29 2022af4e branch le_parse_smp_pairing_random_success ,zero 
+
+le_send_pairing_confirm_value_failed:
+2f2a 7001ba04 jam pairing_failed_confirm_value_failed ,mem_le_ll_pairing_fail_reason 
+
+le_send_pairing_failed:
+2f2b 18002202 force 2 ,rega 
+2f2c 20403047 call le_fifo_malloc_tx_l2cap_smp 
+2f2d 58000005 setarg smp_pairing_failed 
+2f2e e7e08005 istore 1 ,contw 
+2f2f 6fe081ba fetch 1 ,mem_le_ll_pairing_fail_reason 
+2f30 e7e08005 istore 1 ,contw 
+
+le_parse_smp_pairing_failed:
+2f31 4732c02c bpatchx patch2c_5 ,mem_patch2c 
+2f32 18000e07 force smp_pairing_timer ,queue 
+2f33 20407ce0 call timer_stop 
+2f34 7042fc00 jam flag_le_pairing_null ,mem_le_pairing_state 
+2f35 70066f30 jam bt_evt_le_pairing_fail ,mem_fifo_temp 
+2f36 2020782b branch ui_ipc_send_event 
+
+le_smp_pairing_fail_reason_not_support_pairing:
+2f37 7001ba05 jam pairing_failed_pairing_not_supported ,mem_le_ll_pairing_fail_reason 
+2f38 20202f2b branch le_send_pairing_failed 
+
+le_parse_smp_pairing_random_sc:
+2f39 d8a00158 arg mem_le_mrand ,contw 
+2f3a 1a220c00 copy rega ,contr 
+2f3b 20407c8f call memcpy16 
+2f3c 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+2f3d c041af45 beq le_pairing_mode_secure_connect_passkey ,le_parse_smp_pairing_random_sc_passkey 
+2f3e c0422f45 beq le_pairing_mode_secure_connect_passkey_res_input ,le_parse_smp_pairing_random_sc_passkey 
+2f3f 20407140 call function_g2 
+2f40 20402f53 call le_send_smp_pairing_random 
+2f41 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+2f42 c1c10000 rtnne le_pairing_mode_secure_connect_numeric 
+2f43 70066f3b jam bt_evt_le_gkey_generate ,mem_fifo_temp 
+2f44 2020782b branch ui_ipc_send_event 
+
+le_parse_smp_pairing_random_sc_passkey:
+2f45 204071ab call function_f4_ca 
+2f46 d8a006d1 arg mem_aes_cmac_temp ,contw 
+2f47 204071f2 call load_inverse_result 
+2f48 da2006d1 arg mem_aes_cmac_temp ,rega 
+2f49 da40429b arg mem_le_rconfirm ,regb 
+2f4a df200010 arg 16 ,loopcnt 
+2f4b 20407d64 call string_compare 
+2f4c 2422af2a nbranch le_send_pairing_confirm_value_failed ,zero 
+2f4d 20202f53 branch le_send_smp_pairing_random 
+
+le_parse_smp_pairing_random_success:
+2f4e 2040724a call generate_stk 
+2f4f 70066f31 jam bt_evt_le_pairing_success ,mem_fifo_temp 
+2f50 2040782b call ui_ipc_send_event 
+2f51 70429a01 jam 1 ,mem_ltk_exists 
+2f52 7042fc09 jam flag_le_pairing_after_auth ,mem_le_pairing_state 
+
+le_send_smp_pairing_random:
+2f53 18002211 force 17 ,rega 
+2f54 20403047 call le_fifo_malloc_tx_l2cap_smp 
+2f55 58000004 setarg smp_pairing_random 
+2f56 e7e08005 istore 1 ,contw 
+2f57 d8c042ab arg mem_le_srand ,contr 
+2f58 20207c8f branch memcpy16 
+
+le_send_smp_encryption_information:
+2f59 18002211 force 17 ,rega 
+2f5a 20403047 call le_fifo_malloc_tx_l2cap_smp 
+2f5b 58000006 setarg smp_encryption_information 
+2f5c e7e08005 istore 1 ,contw 
+2f5d 6fe0c321 fetch 1 ,mem_le_configuration 
+2f5e c280af61 bbit1 bit_ble_pairing_fixed_ltk ,le_send_fixed_ltk 
+2f5f d8c0428a arg mem_le_ltk ,contr 
+2f60 20207c8f branch memcpy16 
+
+le_send_fixed_ltk:
+2f61 d8c04322 arg mem_le_fixed_ltk ,contr 
+2f62 20207c8f branch memcpy16 
+
+le_send_smp_master_identification:
+2f63 d8a04303 arg mem_le_ediv ,contw 
+2f64 1800720a force 10 ,loopcnt 
+2f65 20407de8 call generate_random_loop 
+2f66 1800220b force 11 ,rega 
+2f67 20403047 call le_fifo_malloc_tx_l2cap_smp 
+2f68 58000007 setarg smp_master_identification 
+2f69 e7e08005 istore 1 ,contw 
+2f6a 6fe14303 fetch 2 ,mem_le_ediv 
+2f6b e7e10005 istore 2 ,contw 
+2f6c 6fe44305 fetch 8 ,mem_le_rand 
+2f6d e7e40005 istore 8 ,contw 
+2f6e 20600000 rtn 
+
+le_send_smp_identity_information:
+2f6f 18002211 force 17 ,rega 
+2f70 20403047 call le_fifo_malloc_tx_l2cap_smp 
+2f71 58000008 setarg smp_identity_information 
+2f72 e7e08005 istore 1 ,contw 
+2f73 58000000 setarg 0 
+2f74 e7e40005 istore 8 ,contw 
+2f75 e7e40005 istore 8 ,contw 
+2f76 20600000 rtn 
+
+le_send_smp_identity_address_information:
+2f77 18002208 force 8 ,rega 
+2f78 20403047 call le_fifo_malloc_tx_l2cap_smp 
+2f79 58000009 setarg smp_identity_address_information 
+2f7a e7e08005 istore 1 ,contw 
+2f7b 6fe0c2d2 fetch 1 ,mem_le_conn_own_addr_type 
+2f7c e7e08005 istore 1 ,contw 
+2f7d 6fe342db fetch 6 ,mem_le_lap 
+2f7e e7e30005 istore 6 ,contw 
+2f7f 20600000 rtn 
+
+le_send_pairing_fail_unspecified_reason:
+2f80 7001ba08 jam pairing_failed_unspecified_reason ,mem_le_ll_pairing_fail_reason 
+2f81 20202f2b branch le_send_pairing_failed 
+
+le_check_init_key_distribution:
+2f82 6fe0c2c9 fetch 1 ,mem_le_pres_init_key_distribution 
+2f83 6848c2c9 fetcht 1 ,mem_le_pres_init_key_distribution 
+2f84 98417e00 iand temp ,pdata 
+2f85 20600000 rtn 
+
+le_parse_smp_identity_information:
+2f86 d8a0430d arg mem_le_irk ,contw 
+2f87 20407c8f call memcpy16 
+2f88 20402f82 call le_check_init_key_distribution 
+2f89 2fec0001 isolate0 le_initator_irk_bit ,pdata 
+2f8a 2020af80 branch le_send_pairing_fail_unspecified_reason ,true 
+2f8b 6fe0c3cb fetch 1 ,mem_device_option 
+2f8c c1850000 rtnne dvc_op_module 
+2f8d 20402f90 call le_check_master_addr_type 
+2f8e 24740000 nrtn user 
+2f8f 20204329 branch app_ble_store_reconn_info 
+
+le_check_master_addr_type:
+2f90 20407dbc call disable_user 
+2f91 6fe0c2cb fetch 1 ,mem_le_conn_peer_addr_type 
+2f92 c1000000 rtneq master_public_addr 
+2f93 6fe0c2c2 fetch 1 ,mem_le_preq_init_key_distribution 
+2f94 c4008000 rtnbit0 le_initator_irk_bit 
+2f95 20207dba branch enable_user 
+
+le_parse_smp_identity_address_information:
+2f96 20402f82 call le_check_init_key_distribution 
+2f97 2fec0001 isolate0 le_initator_irk_bit ,pdata 
+2f98 2020af80 branch le_send_pairing_fail_unspecified_reason ,true 
+2f99 20600000 rtn 
+
+le_parse_smp_master_identification:
+
+le_parse_smp_signing_information:
+
+le_parse_smp_security_request:
+2f9a 20600000 rtn 
+
+le_parse_smp_public_key:
+2f9b d8a005fe arg mem_le_pubkey_remote_x_256 ,contw 
+2f9c 20407c81 call memcpy64 
+2f9d 7042f902 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+2f9e 7042fa01 jam le_sc_stat_receive_public_key ,mem_le_secure_connect_state 
+2f9f 20600000 rtn 
+
+le_parse_smp_dhkey_check:
+2fa0 d8a0065e arg mem_sp_confirm_remote ,contw 
+2fa1 20407c8f call memcpy16 
+2fa2 7042fa06 jam le_sc_stat_receive_dhkey ,mem_le_secure_connect_state 
+2fa3 7042f902 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+2fa4 20600000 rtn 
+
+le_send_smp_pairing_public_key:
+2fa5 18002241 force 65 ,rega 
+2fa6 20403047 call le_fifo_malloc_tx_l2cap_smp 
+2fa7 5800000c setarg smp_pairing_public_key 
+2fa8 e7e08005 istore 1 ,contw 
+2fa9 d8c0448f arg mem_sc_pubkey_local_x_256 ,contr 
+2faa 20207c81 branch memcpy64 
+
+le_send_smp_pairing_dhkey_check:
+2fab 20407157 call function_f6_eb 
+2fac 18002211 force 17 ,rega 
+2fad 20403047 call le_fifo_malloc_tx_l2cap_smp 
+2fae 5800000d setarg smp_pairing_dhkey_check 
+2faf e7e08005 istore 1 ,contw 
+2fb0 202071f2 branch load_inverse_result 
+
+le_check_paring_time:
+2fb1 6fe0c2fc fetch 1 ,mem_le_pairing_state 
+2fb2 c17f8000 rtneq flag_le_pairing_end 
+2fb3 d8400003 arg flag_le_pairing_rcv_pairing_req ,temp 
+2fb4 98467c00 isub temp ,null 
+2fb5 24610000 nrtn positive 
+2fb6 d8e00007 arg smp_pairing_timer ,queue 
+2fb7 20407cef call timer_check 
+2fb8 247a0000 nrtn blank 
+2fb9 20202f80 branch le_send_pairing_fail_unspecified_reason 
+
+le_pairing_sm:
+2fba 4733402c bpatchx patch2c_6 ,mem_patch2c 
+2fbb 20402a28 call le_fifo_check_nearly_full 
+2fbc 247a0000 nrtn blank 
+2fbd 6fe0c2fc fetch 1 ,mem_le_pairing_state 
+2fbe c0002fc7 beq flag_le_pairing_null ,le_pairing_sm_null 
+2fbf c000afcd beq flag_le_pairing_start ,le_pairing_sm_start 
+2fc0 c0012fc7 beq flag_le_pairing_send_recurity_req ,le_pairing_sm_send_sec_req 
+2fc1 c001afcf beq flag_le_pairing_rcv_pairing_req ,le_pairing_sm_rcv_pairing_req 
+2fc2 c004afd3 beq flag_le_pairing_after_auth ,le_pairing_sm_after_auth 
+2fc3 c005afe3 beq flag_le_paring_send_enc_information ,le_pairng_sm_send_enc_information 
+2fc4 c0062fe5 beq flag_le_paring_send_master_identification ,le_pairng_sm_send_master_indentification 
+2fc5 c006afec beq flag_le_paring_send_indentity_information ,le_pairng_sm_send_indentity_information 
+2fc6 20600000 rtn 
+
+le_pairing_sm_null:
+
+le_pairing_sm_send_sec_req:
+2fc7 6fe0c2fd fetch 1 ,mem_le_enc_state 
+2fc8 c1820000 rtnne flag_le_send_start_enc_rsp 
+2fc9 7042fdff jam flag_le_enc_end ,mem_le_enc_state 
+2fca 7042fcff jam flag_le_pairing_end ,mem_le_pairing_state 
+2fcb 70066f3f jam bt_evt_le_reconnect_complete ,mem_fifo_temp 
+2fcc 2020782b branch ui_ipc_send_event 
+
+le_pairing_sm_start:
+2fcd 7042fc02 jam flag_le_pairing_send_recurity_req ,mem_le_pairing_state 
+2fce 20202ed5 branch le_send_smp_security_request 
+
+le_pairing_sm_rcv_pairing_req:
+2fcf 7042fc04 jam flag_le_pairing_wait_stk_generation ,mem_le_pairing_state 
+2fd0 58017700 setarg timer_smp_pairing_timeout 
+2fd1 d8e00007 arg smp_pairing_timer ,queue 
+2fd2 20207ce1 branch timer_init 
+
+le_pairing_sm_after_auth:
+2fd3 6fe0c2fd fetch 1 ,mem_le_enc_state 
+2fd4 c0022fd6 beq flag_le_send_start_enc_rsp ,le_pairing_sm_after_auth_start_enc 
+2fd5 20600000 rtn 
+
+le_pairing_sm_after_auth_start_enc:
+2fd6 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+2fd7 c283afe1 bbit1 le_pairing_mode_secure_connect_bit ,le_pairing_sm_after_auth_start_enc_sc 
+2fd8 7042fc0b jam flag_le_paring_send_enc_information ,mem_le_pairing_state 
+2fd9 20402f59 call le_send_smp_encryption_information 
+
+le_pairing_sm_after_auth_start_enc_common:
+2fda 70066f29 jam bt_evt_le_enc_info ,mem_fifo_temp 
+2fdb 2040782b call ui_ipc_send_event 
+2fdc 6fe0c3cb fetch 1 ,mem_device_option 
+2fdd c1850000 rtnne dvc_op_module 
+2fde 20402f90 call le_check_master_addr_type 
+2fdf 20740000 rtn user 
+2fe0 20204329 branch app_ble_store_reconn_info 
+
+le_pairing_sm_after_auth_start_enc_sc:
+2fe1 7042fc0c jam flag_le_paring_send_master_identification ,mem_le_pairing_state 
+2fe2 20202fda branch le_pairing_sm_after_auth_start_enc_common 
+
+le_pairng_sm_send_enc_information:
+2fe3 7042fc0c jam flag_le_paring_send_master_identification ,mem_le_pairing_state 
+2fe4 20202f63 branch le_send_smp_master_identification 
+
+le_pairng_sm_send_master_indentification:
+2fe5 6fe0c2c3 fetch 1 ,mem_le_preq_resp_key_distribution 
+2fe6 6848c2ca fetcht 1 ,mem_le_pres_resp_key_distribution 
+2fe7 98417e00 iand temp ,pdata 
+2fe8 2fec0001 isolate0 le_initator_irk_bit ,pdata 
+2fe9 2020afee branch le_parse_start_enc_rsp_after_auth_end ,true 
+2fea 7042fc0d jam flag_le_paring_send_indentity_information ,mem_le_pairing_state 
+2feb 20202f6f branch le_send_smp_identity_information 
+
+le_pairng_sm_send_indentity_information:
+2fec 20402f77 call le_send_smp_identity_address_information 
+2fed 20202fee branch le_parse_start_enc_rsp_after_auth_end 
+
+le_parse_start_enc_rsp_after_auth_end:
+2fee 4733c02c bpatchx patch2c_7 ,mem_patch2c 
+2fef 18000e07 force smp_pairing_timer ,queue 
+2ff0 20407ce0 call timer_stop 
+2ff1 7042fdff jam flag_le_enc_end ,mem_le_enc_state 
+2ff2 7042fcff jam flag_le_pairing_end ,mem_le_pairing_state 
+2ff3 70066f3e jam bt_evt_le_pairing_complete ,mem_fifo_temp 
+2ff4 2020782b branch ui_ipc_send_event 
+
+le_secure_connect_sm:
+2ff5 4734402d bpatchx patch2d_0 ,mem_patch2d 
+2ff6 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+2ff7 c4038000 rtnbit0 le_pairing_mode_secure_connect_bit 
+2ff8 6fe0c2f9 fetch 1 ,mem_le_secure_connect_flag 
+2ff9 c1810000 rtnne le_sp_flag_commit_256 
+2ffa 7042f900 jam sp_flag_standby ,mem_le_secure_connect_flag 
+2ffb 6fe0c2fa fetch 1 ,mem_le_secure_connect_state 
+2ffc c000b03d beq le_sc_stat_receive_public_key ,le_sc_sm_receive_public_key 
+2ffd c0013044 beq le_sc_stat_wait_send_public_key ,le_sc_sm_wait_send_public_key 
+2ffe c001b035 beq le_sc_stat_send_public_key ,le_sc_sm_send_public_key 
+2fff c003301a beq le_sc_stat_receive_dhkey ,le_sc_sm_receive_dhkey 
+3000 c003b011 beq le_sc_stat_wait_confirm_gkey ,le_sc_sm_wait_confirm_gkey 
+3001 c0043007 beq le_sc_stat_passkey_wait_confirm ,le_sc_sm_passkey_wait_confirm 
+3002 20600000 rtn 
+
+le_sc_state_clear:
+3003 7042f900 jam sp_flag_standby ,mem_le_secure_connect_flag 
+3004 7042fa00 jam le_sc_stat_null ,mem_le_secure_connect_state 
+3005 7042fb00 jam flag_le_sc_confrim_null ,mem_le_sc_confirm_gkey_flag 
+3006 20600000 rtn 
+
+le_sc_sm_passkey_wait_confirm:
+3007 6fe0c4cf fetch 1 ,mem_authentication_passkey_times 
+3008 1fe20e00 copy pdata ,queue 
+3009 1fe0fe01 increase 1 ,pdata 
+300a 67e0c4cf store 1 ,mem_authentication_passkey_times 
+300b 6fe242ff fetch 4 ,mem_le_tk 
+300c afefffff qisolate1 pdata 
+300d 58000080 setarg 0x80 
+300e 7920fe00 setflag true ,0 ,pdata 
+300f 67e0c4d0 store 1 ,mem_passkey_1bit 
+3010 20203039 branch le_sc_sm_ready_send_pairing_confirm 
+
+le_sc_sm_wait_confirm_gkey:
+3011 6fe0c2fb fetch 1 ,mem_le_sc_confirm_gkey_flag 
+3012 7042fb00 jam flag_le_sc_confrim_null ,mem_le_sc_confirm_gkey_flag 
+3013 c000b016 beq flag_le_sc_confrim_gkey_ok ,le_sc_confirm_gkey_ok 
+3014 7042f902 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+3015 20600000 rtn 
+
+le_sc_confirm_gkey_ok:
+3016 70066f31 jam bt_evt_le_pairing_success ,mem_fifo_temp 
+3017 2040782b call ui_ipc_send_event 
+3018 7042fc09 jam flag_le_pairing_after_auth ,mem_le_pairing_state 
+3019 20202fab branch le_send_smp_pairing_dhkey_check 
+
+le_sc_sm_receive_dhkey:
+301a 6fe085f9 fetch 1 ,mem_sp_dhkey_invalid 
+301b c001b01e beq sp_key_valid_256 ,le_dhkey_ready 
+301c 7042f902 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+301d 20600000 rtn 
+
+le_dhkey_ready:
+301e 2040717e call function_f5 
+301f 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+3020 c041b023 beq le_pairing_mode_secure_connect_passkey ,le_dhkey_ready_common 
+3021 c0423023 beq le_pairing_mode_secure_connect_passkey_res_input ,le_dhkey_ready_common 
+3022 20402ef0 call le_set_tk_0 
+
+le_dhkey_ready_common:
+3023 2040716b call function_f6_ea 
+3024 da2006d1 arg mem_aes_cmac_temp ,rega 
+3025 da40065e arg mem_sp_confirm_remote ,regb 
+3026 df200010 arg 16 ,loopcnt 
+3027 20407d64 call string_compare 
+3028 2022b02b branch le_dhkey_check_ok ,zero 
+
+le_dhkey_check_fail:
+3029 7001ba0b jam pairing_failed_dhkey_check_failed ,mem_le_ll_pairing_fail_reason 
+302a 20202f2b branch le_send_pairing_failed 
+
+le_dhkey_check_ok:
+302b 2040745b call sp_calc_check_publickey_256 
+302c 2422b029 nbranch le_dhkey_check_fail ,zero 
+302d 70429a01 jam 1 ,mem_ltk_exists 
+302e 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+302f c040b016 beq le_pairing_mode_secure_connect_justwork ,le_sc_confirm_gkey_ok 
+3030 c041b016 beq le_pairing_mode_secure_connect_passkey ,le_sc_confirm_gkey_ok 
+3031 c0423016 beq le_pairing_mode_secure_connect_passkey_res_input ,le_sc_confirm_gkey_ok 
+3032 7042f902 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+3033 7042fa07 jam le_sc_stat_wait_confirm_gkey ,mem_le_secure_connect_state 
+3034 20600000 rtn 
+
+le_sc_sm_send_public_key:
+3035 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+3036 c041b03a beq le_pairing_mode_secure_connect_passkey ,le_sc_sm_send_public_key_passkey 
+3037 c042303a beq le_pairing_mode_secure_connect_passkey_res_input ,le_sc_sm_send_public_key_passkey 
+3038 7044d000 jam 0 ,mem_passkey_1bit 
+
+le_sc_sm_ready_send_pairing_confirm:
+3039 20202f13 branch le_send_smp_pairing_confirm 
+
+le_sc_sm_send_public_key_passkey:
+303a 7044cf00 jam 0 ,mem_authentication_passkey_times 
+303b c1420000 rtneq le_pairing_mode_secure_connect_passkey_res_input 
+303c 20202ef3 branch le_parse_smp_pairing_req_passkey 
+
+le_sc_sm_receive_public_key:
+303d 7042f902 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+303e 6fe0c46e fetch 1 ,mem_sc_local_key_invalid 
+303f c001b041 beq sp_key_valid_256 ,le_public_key_ready 
+3040 20600000 rtn 
+
+le_public_key_ready:
+3041 7042fa02 jam le_sc_stat_wait_send_public_key ,mem_le_secure_connect_state 
+3042 7005f900 jam sp_key_invalid ,mem_sp_dhkey_invalid 
+3043 2020753c branch sp_dhkey_calc_256 
+
+le_sc_sm_wait_send_public_key:
+3044 7042f902 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+3045 7042fa03 jam le_sc_stat_send_public_key ,mem_le_secure_connect_state 
+3046 20202fa5 branch le_send_smp_pairing_public_key 
+
+le_fifo_malloc_tx_l2cap_smp:
+3047 4734c02d bpatchx patch2d_1 ,mem_patch2d 
+3048 18002406 force le_l2cap_cid_smp ,regb 
+3049 202029fb branch le_fifo_malloc_tx_l2cap 
+
+le_parse_ll:
+304a 6fe0804e fetch 1 ,mem_le_rxbuf_data_ll_opcode 
+304b c0003061 beq ll_connection_update_ind ,le_parse_connection_update_ind 
+304c c000b069 beq ll_channel_map_ind ,le_parse_channel_map_ind 
+304d c0013071 beq ll_terminate_ind ,le_parse_terminate_ind 
+304e c001b075 beq ll_enc_req ,le_parse_enc_req 
+304f c0023093 beq ll_enc_rsp ,le_parse_enc_rsp 
+3050 c002b098 beq ll_start_enc_req ,le_parse_start_enc_req 
+3051 c003309c beq ll_start_enc_rsp ,le_parse_start_enc_rsp 
+3052 c003b0a1 beq ll_unknown_rsp ,le_parse_unknown_rsp 
+3053 c00430a2 beq ll_feature_req ,le_parse_feature_req 
+3054 c004b0a3 beq ll_feature_rsp ,le_parse_feature_rsp 
+3055 c00530a4 beq ll_pause_enc_req ,le_parse_pause_enc_req 
+3056 c005b0a8 beq ll_pause_enc_rsp ,le_parse_pause_enc_rsp 
+3057 c00630a9 beq ll_version_ind ,le_parse_version_ind 
+3058 c006b0ab beq ll_reject_ind ,le_parse_reject_ind 
+3059 c00930ac beq ll_ping_req ,le_parse_ping_req 
+305a c009b0ad beq ll_ping_rsp ,le_parse_ping_rsp 
+305b c00a30ae beq ll_length_req ,le_parse_length_req 
+305c c00ab0b0 beq ll_length_rsp ,le_parse_length_rsp 
+305d c00b30bb beq ll_phy_req ,le_parse_phy_req 
+305e c00c30bc beq ll_phy_update_ind ,le_parse_phy_update_ind 
+305f 6a60804e fetchr regc ,1 ,mem_le_rxbuf_data_ll_opcode 
+3060 202030df branch le_send_unknown_rsp 
+
+le_parse_connection_update_ind:
+3061 efe48006 ifetch 9 ,contr 
+3062 67e4819f store 9 ,mem_le_new_param 
+3063 efe10006 ifetch 2 ,contr 
+3064 67e10188 store 2 ,mem_le_instant 
+3065 6fe08168 fetch 1 ,mem_le_state 
+3066 79207e05 set1 lestate_update_param ,pdata 
+3067 67e08168 store 1 ,mem_le_state 
+3068 20600000 rtn 
+
+le_parse_channel_map_ind:
+3069 efe28006 ifetch 5 ,contr 
+306a 67e2819f store 5 ,mem_le_new_map 
+306b efe10006 ifetch 2 ,contr 
+306c 67e10188 store 2 ,mem_le_instant 
+
+le_update_map_enable:
+306d 6fe08168 fetch 1 ,mem_le_state 
+306e 79207e06 set1 lestate_update_map ,pdata 
+306f 67e08168 store 1 ,mem_le_state 
+3070 20600000 rtn 
+
+le_parse_terminate_ind:
+3071 58000014 setarg 20 
+3072 67e10196 store 2 ,mem_le_superto 
+3073 67e142f5 store 2 ,mem_le_init_superto 
+3074 20600000 rtn 
+
+le_parse_enc_req:
+3075 efe40006 ifetch 8 ,contr 
+3076 67e44305 store 8 ,mem_le_rand 
+3077 efe10006 ifetch 2 ,contr 
+3078 67e14303 store 2 ,mem_le_ediv 
+3079 efe40006 ifetch 8 ,contr 
+307a 67e442e5 store 8 ,mem_le_skdm 
+307b efe20006 ifetch 4 ,contr 
+307c 67e2445e store 4 ,mem_ccm_ivm 
+307d 204030cc call le_send_enc_rsp 
+307e 4735402d bpatchx patch2d_2 ,mem_patch2d 
+307f 6fe0c2fc fetch 1 ,mem_le_pairing_state 
+3080 c004b087 beq flag_le_pairing_after_auth ,le_parse_enc_req_after_auth 
+3081 6fe0c321 fetch 1 ,mem_le_configuration 
+3082 c280b08a bbit1 bit_ble_pairing_fixed_ltk ,le_parse_enc_req_fixed_ltk 
+3083 6fe0c3fa fetch 1 ,mem_nv_data_number 
+3084 245a6e96 ncall load_device_list_mode_4 ,blank 
+3085 6fe0c29a fetch 1 ,mem_ltk_exists 
+3086 c000308f beq 0 ,le_ltk_lost 
+
+le_parse_enc_req_after_auth:
+3087 7042fd01 jam flag_le_rcv_enc_start ,mem_le_enc_state 
+3088 204030da call le_send_start_enc_req 
+3089 2020725c branch generate_sk 
+
+le_parse_enc_req_fixed_ltk:
+308a 70429a01 jam 1 ,mem_ltk_exists 
+308b d8c04322 arg mem_le_fixed_ltk ,contr 
+308c d8a0428a arg mem_le_ltk ,contw 
+308d 20407c8f call memcpy16 
+308e 20203087 branch le_parse_enc_req_after_auth 
+
+le_ltk_lost:
+308f 7042fd00 jam flag_le_enc_null ,mem_le_enc_state 
+3090 7042fc00 jam flag_le_enc_null ,mem_le_pairing_state 
+3091 70066f41 jam bt_evt_le_ltk_lost ,mem_fifo_temp 
+3092 2020782b branch ui_ipc_send_event 
+
+le_parse_enc_rsp:
+3093 efe40006 ifetch 8 ,contr 
+3094 67e442ed store 8 ,mem_le_skds 
+3095 efe20006 ifetch 4 ,contr 
+3096 67e24462 store 4 ,mem_ccm_ivs 
+3097 2020725c branch generate_sk 
+
+le_parse_start_enc_req:
+3098 6fe08168 fetch 1 ,mem_le_state 
+3099 79207e04 set1 lestate_encryption ,pdata 
+309a 67e08168 store 1 ,mem_le_state 
+309b 20600000 rtn 
+
+le_parse_start_enc_rsp:
+309c 20748000 rtn master 
+309d 70066f32 jam bt_evt_le_start_enc ,mem_fifo_temp 
+309e 2040782b call ui_ipc_send_event 
+309f 7042fd04 jam flag_le_send_start_enc_rsp ,mem_le_enc_state 
+30a0 202030dd branch le_send_start_enc_rsp 
+
+le_parse_unknown_rsp:
+30a1 20600000 rtn 
+
+le_parse_feature_req:
+30a2 202030e4 branch le_send_feature_rsp 
+
+le_parse_feature_rsp:
+30a3 20600000 rtn 
+
+le_parse_pause_enc_req:
+30a4 7042fd02 jam flag_le_enc_pause ,mem_le_enc_state 
+30a5 204030eb call le_send_pause_enc_rsp 
+30a6 70066f33 jam bt_evt_le_pause_enc ,mem_fifo_temp 
+30a7 2020782b branch ui_ipc_send_event 
+
+le_parse_pause_enc_rsp:
+30a8 20600000 rtn 
+
+le_parse_version_ind:
+30a9 20748000 rtn master 
+30aa 202030ed branch le_send_version_ind 
+
+le_parse_reject_ind:
+30ab 20600000 rtn 
+
+le_parse_ping_req:
+30ac 202030f9 branch le_send_ping_rsp 
+
+le_parse_ping_rsp:
+30ad 20600000 rtn 
+
+le_parse_length_req:
+30ae 204030b0 call le_parse_length_rsp 
+30af 202030fd branch le_send_data_length_res 
+
+le_parse_length_rsp:
+30b0 efe40006 ifetch 8 ,contr 
+30b1 67e443b8 store 8 ,mem_remote_rx_max_octets 
+30b2 6fe143b8 fetch 2 ,mem_remote_rx_max_octets 
+30b3 684943c4 fetcht 2 ,mem_local_tx_max_octets 
+30b4 20407db0 call not_greater_than 
+30b5 67e143b8 store 2 ,mem_remote_rx_max_octets 
+30b6 6fe143bc fetch 2 ,mem_remote_tx_max_octets 
+30b7 684943c0 fetcht 2 ,mem_local_rx_max_octets 
+30b8 20407db0 call not_greater_than 
+30b9 67e143bc store 2 ,mem_remote_tx_max_octets 
+30ba 20600000 rtn 
+
+le_parse_phy_req:
+30bb 20203103 branch le_send_phy_rsp 
+
+le_parse_phy_update_ind:
+30bc efe10006 ifetch 2 ,contr 
+30bd 67e1019f store 2 ,mem_le_new_m2s_phy 
+30be efe10006 ifetch 2 ,contr 
+30bf 67e10188 store 2 ,mem_le_instant 
+30c0 207a0000 rtn blank 
+30c1 6fe08168 fetch 1 ,mem_le_state 
+30c2 79207e07 set1 lestate_update_phy ,pdata 
+30c3 67e08168 store 1 ,mem_le_state 
+30c4 20600000 rtn 
+
+le_send_terminate_ind_user_terminated:
+30c5 da600013 arg error_remote_user_terminated_connection ,regc 
+
+le_send_terminate_ind:
+30c6 da200002 arg 2 ,rega 
+30c7 da400002 arg ll_terminate_ind ,regb 
+30c8 204029f5 call le_fifo_malloc_tx_ll 
+30c9 1a627e00 copy regc ,pdata 
+30ca e7e08005 istore 1 ,contw 
+30cb 20600000 rtn 
+
+le_send_enc_rsp:
+30cc d8a042ed arg mem_le_skds ,contw 
+30cd 18007208 force 8 ,loopcnt 
+30ce 20407de8 call generate_random_loop 
+30cf d8a04462 arg mem_ccm_ivs ,contw 
+30d0 18007204 force 4 ,loopcnt 
+30d1 20407de8 call generate_random_loop 
+30d2 da20000d arg 13 ,rega 
+30d3 da400004 arg ll_enc_rsp ,regb 
+30d4 204029f5 call le_fifo_malloc_tx_ll 
+30d5 6fe442ed fetch 8 ,mem_le_skds 
+30d6 e7e40005 istore 8 ,contw 
+30d7 6fe24462 fetch 4 ,mem_ccm_ivs 
+30d8 e7e20005 istore 4 ,contw 
+30d9 20600000 rtn 
+
+le_send_start_enc_req:
+30da 7042fd05 jam flag_le_send_start_enc_req ,mem_le_enc_state 
+30db da400005 arg ll_start_enc_req ,regb 
+30dc 2020310d branch le_send_ll_one_lenth 
+
+le_send_start_enc_rsp:
+30dd da400006 arg ll_start_enc_rsp ,regb 
+30de 2020310d branch le_send_ll_one_lenth 
+
+le_send_unknown_rsp:
+30df da200002 arg 2 ,rega 
+30e0 da400007 arg ll_unknown_rsp ,regb 
+30e1 204029f5 call le_fifo_malloc_tx_ll 
+30e2 e2608005 istorer regc ,1 ,contw 
+30e3 20600000 rtn 
+
+le_send_feature_rsp:
+30e4 da200009 arg 9 ,rega 
+30e5 da400009 arg ll_feature_rsp ,regb 
+30e6 204029f5 call le_fifo_malloc_tx_ll 
+30e7 6fe443ae fetch 8 ,mem_le_local_feature 
+30e8 1fe1fe01 or pdata ,fun_ll_feature_le_encryption ,pdata 
+30e9 e7e40005 istore 8 ,contw 
+30ea 20600000 rtn 
+
+le_send_pause_enc_rsp:
+30eb da40000b arg ll_pause_enc_rsp ,regb 
+30ec 2020310d branch le_send_ll_one_lenth 
+
+le_send_version_ind:
+30ed da200006 arg 6 ,rega 
+30ee da40000c arg ll_version_ind ,regb 
+30ef 204029f5 call le_fifo_malloc_tx_ll 
+30f0 6fe2c15e fetch 5 ,mem_version 
+30f1 e7e28005 istore 5 ,contw 
+30f2 20600000 rtn 
+
+le_send_reject_ind:
+30f3 da200002 arg 2 ,rega 
+30f4 da40000d arg ll_reject_ind ,regb 
+30f5 204029f5 call le_fifo_malloc_tx_ll 
+30f6 58000006 setarg le_err_pin_or_key_missing 
+30f7 e7e08005 istore 1 ,contw 
+30f8 20600000 rtn 
+
+le_send_ping_rsp:
+30f9 da400013 arg ll_ping_rsp ,regb 
+30fa 2020310d branch le_send_ll_one_lenth 
+
+le_send_data_length_req:
+30fb da400014 arg ll_length_req ,regb 
+30fc 202030fe branch le_send_data_length 
+
+le_send_data_length_res:
+30fd da400015 arg ll_length_rsp ,regb 
+
+le_send_data_length:
+30fe da200009 arg 9 ,rega 
+30ff 204029f5 call le_fifo_malloc_tx_ll 
+3100 6fe443c0 fetch 8 ,mem_local_rx_max_octets 
+3101 e7e40005 istore 8 ,contw 
+3102 20600000 rtn 
+
+le_send_phy_rsp:
+3103 da200003 arg 3 ,rega 
+3104 da400017 arg ll_phy_rsp ,regb 
+3105 204029f5 call le_fifo_malloc_tx_ll 
+3106 6fe0c3b6 fetch 1 ,mem_le_tx_phys 
+3107 1fe17e07 and pdata ,0x07 ,pdata 
+3108 e7e08005 istore 1 ,contw 
+3109 6fe0c3b7 fetch 1 ,mem_le_rx_phys 
+310a 1fe17e07 and pdata ,0x07 ,pdata 
+310b e7e08005 istore 1 ,contw 
+310c 20600000 rtn 
+
+le_send_ll_one_lenth:
+310d da200001 arg 1 ,rega 
+310e 202029f5 branch le_fifo_malloc_tx_ll 
+
+g24_dispatch:
+310f 4735c02d bpatchx patch2d_3 ,mem_patch2d 
+3110 c513b3a3 bmark1 mark_24g_rxmode ,g24_receive_dispatch 
+3111 20203603 branch g24_transmit_dispatch 
+
+g24_prep:
+3112 4736402d bpatchx patch2d_4 ,mem_patch2d 
+3113 7844fc00 disable enable_crc 
+3114 7843fc00 disable enable_white 
+3115 58555555 setarg 0x555555 
+3116 98001e00 iforce crc24_init 
+3117 6fe0c58d fetch 1 ,mem_24g_ch 
+3118 202025c8 branch le_prep_next 
+
+g24_receive_packet:
+3119 4736c02d bpatchx patch2d_5 ,mem_patch2d 
+311a 6fe0c5b7 fetch 1 ,mem_24g_rx_phy 
+311b 204025a4 call le_enable_phy_by_pdata 
+311c 6fe2458f fetch 4 ,mem_24g_addr 
+311d 98001200 iforce access 
+311e 20402160 call set_sync_on 
+311f 6848c58d fetcht 1 ,mem_24g_ch 
+3120 204025cd call le_rf_rx_enable 
+
+g24_receive_rxon:
+3121 20403112 call g24_prep 
+3122 c597b126 bmark0 mark_ble_lr ,g24_receive_nolr 
+3123 783cfc00 pulse dewhiten_code_calc 
+3124 2000001e nop 30 
+3125 20403112 call g24_prep 
+
+g24_receive_nolr:
+3126 7857fc00 disable user3 
+3127 7826fc00 enable decode_fec0 
+3128 7830fc00 enable is_rx 
+3129 78507c00 disable is_tx 
+312a 78287c00 enable swfine 
+312b 6fe1458b fetch 2 ,mem_24g_rx_window 
+312c 98003600 iforce stop_watch 
+312d 37c18400 correlate null ,timeout 
+312e 242c3180 nbranch g24_sync_timeout ,sync 
+312f 20406877 call rf_debug_rx_sync_line 
+3130 c517b135 bmark1 mark_ble_lr ,g24_receive_skip_fec1 
+3131 6fe0c5ca fetch 1 ,mem_24g_disable_fec1 
+3132 243a3135 nbranch g24_receive_skip_fec1 ,blank 
+3133 7846fc00 disable decode_fec0 
+3134 7825fc00 enable decode_fec1 
+
+g24_receive_skip_fec1:
+3135 7823fc00 enable enable_white 
+3136 7824fc00 enable enable_crc 
+3137 2040317d call g24_receive_byte 
+3138 67e0c5ad store 1 ,mem_24g_get_syncword_crc8 
+3139 6848c5ac fetcht 1 ,mem_24g_syncword_crc8 
+313a 98467c00 isub temp ,null 
+313b 2422b188 nbranch g24_hec_error ,zero 
+313c 4737402d bpatchx patch2d_6 ,mem_patch2d 
+313d 7858fc00 disable user7 
+313e 280ffe2f isolate1 mark_ble_lr ,mark 
+313f 2040b16f call g24_lr_receive_pdu_len ,true 
+3140 2038b18a branch g24_lr_len_error ,user7 
+3141 2040317d call g24_receive_byte 
+3142 67e0c4f7 store 1 ,mem_24g_rxbuf 
+3143 c513b148 bmark1 mark_24g_rxmode ,g24_receive_skip 
+3144 6fe0c4f7 fetch 1 ,mem_24g_rxbuf 
+3145 6848c589 fetcht 1 ,mem_24g_data_type 
+3146 a8400e00 icompare bits_data ,temp 
+3147 2420b18c nbranch g24_type_error ,true 
+
+g24_receive_skip:
+3148 2040317d call g24_receive_byte 
+3149 280ffe2f isolate1 mark_ble_lr ,mark 
+314a 2040b178 call g24_lr_receive_payload_len ,true 
+314b e7e08005 istore 1 ,contw 
+314c 1fe97e00 rshift3 pdata ,pdata 
+314d 1fe67c1f sub pdata ,0x1f ,null 
+314e 2421318e nbranch g24_len_over_error ,positive 
+314f 1fe27200 copy pdata ,loopcnt 
+3150 2022b154 branch g24rx_nopayload ,zero 
+
+g24rx_loop:
+3151 2040317d call g24_receive_byte 
+3152 e7e08005 istore 1 ,contw 
+3153 c2003151 loop g24rx_loop 
+
+g24rx_nopayload:
+3154 c513b159 bmark1 mark_24g_rxmode ,g24_receive_skip_rssi 
+3155 18a22200 copy contw ,rega 
+3156 2040317d call g24_receive_byte 
+3157 67e0c5d3 store 1 ,mem_rssi_hex_received 
+3158 1a220a00 copy rega ,contw 
+
+g24_receive_skip_rssi:
+3159 09800018 parse demod ,bucket ,24 
+315a 1fef7e00 rshift32 pdata ,pdata 
+315b 1ff17e00 rshift16 pdata ,pdata 
+315c e7e18005 istore 3 ,contw 
+315d 6fe0c5ca fetch 1 ,mem_24g_disable_fec1 
+315e 243a316d nbranch g24_receive_skip_disable_fec1 ,blank 
+315f 7845fc00 disable decode_fec1 
+
+g24_receive_skip_next:
+3160 280ffe27 isolate1 mark_24g_rxmode ,mark 
+3161 2040b5c8 call save_rssi_dec ,true 
+3162 20233190 branch g24_crc_error ,crc_failed 
+3163 20406876 call rf_debug_rx_crc_line 
+
+g24_receive_skip_end:
+3164 4737c02d bpatchx patch2d_7 ,mem_patch2d 
+3165 7837fc00 enable user3 
+3166 204026bb call le_match_set_txfreq 
+3167 c6138000 rtnmark1 mark_24g_rxmode 
+3168 6fe0c5d3 fetch 1 ,mem_rssi_hex_received 
+3169 6848c62a fetcht 1 ,mem_rssi_hex_received_max_value 
+316a 98467c00 isub temp ,null 
+316b 20417db2 call copy_temp2pdata ,positive 
+316c 202035cb branch rssi_signal 
+
+g24_receive_skip_disable_fec1:
+316d 7846fc00 disable decode_fec0 
+316e 20203160 branch g24_receive_skip_next 
+
+g24_lr_receive_pdu_len:
+316f 2040317d call g24_receive_byte 
+3170 1fe67c01 sub pdata ,1 ,null 
+3171 20217dc2 branch enable_user7 ,positive 
+3172 1fe0fffe increase -2 ,pdata 
+3173 c513b176 bmark1 mark_24g_rxmode ,g24_lr_receive_pdu_norssi 
+3174 203a7dc2 branch enable_user7 ,blank 
+3175 1fe0ffff increase -1 ,pdata 
+
+g24_lr_receive_pdu_norssi:
+3176 67e08678 store 1 ,mem_temp 
+3177 20600000 rtn 
+
+g24_lr_receive_payload_len:
+3178 1fe17e07 and_into 0x07 ,pdata 
+3179 68488678 fetcht 1 ,mem_temp 
+317a 18498400 lshift3 temp ,temp 
+317b 9841fe00 ior temp ,pdata 
+317c 20600000 rtn 
+
+g24_receive_byte:
+317d 09800008 parse demod ,bucket ,8 
+317e 19897e00 rshift3 pwindow ,pdata 
+317f 20600000 rtn 
+
+g24_sync_timeout:
+3180 7045cb01 jam err_sync_to ,mem_24g_off_type 
+3181 280ffe27 isolate1 mark_24g_rxmode ,mark 
+3182 2040b5e3 call rssi_noise ,true 
+
+g24_end_of_packet:
+3183 4738402e bpatchx patch2e_0 ,mem_patch2e 
+3184 204025bc call le_disable 
+3185 784dfc00 disable encode_fec1 
+3186 7845fc00 disable decode_fec1 
+3187 202020cf branch end_of_packet 
+
+g24_hec_error:
+3188 7045cb02 jam err_hec ,mem_24g_off_type 
+3189 20203183 branch g24_end_of_packet 
+
+g24_lr_len_error:
+318a 7045cb03 jam err_lr_len ,mem_24g_off_type 
+318b 20203183 branch g24_end_of_packet 
+
+g24_type_error:
+318c 7045cb04 jam err_type ,mem_24g_off_type 
+318d 20203183 branch g24_end_of_packet 
+
+g24_len_over_error:
+318e 7045cb05 jam err_len_over ,mem_24g_off_type 
+318f 20203183 branch g24_end_of_packet 
+
+g24_crc_error:
+3190 7045cb06 jam err_crc ,mem_24g_off_type 
+3191 20203183 branch g24_end_of_packet 
+
+g24_set_freq_tx:
+3192 20402160 call set_sync_on 
+3193 6848c58d fetcht 1 ,mem_24g_ch 
+3194 202021f9 branch set_freq_tx 
+
+g24_transmit:
+3195 4738c02e bpatchx patch2e_1 ,mem_patch2e 
+3196 6fe0c5b8 fetch 1 ,mem_24g_tx_phy 
+3197 204025a4 call le_enable_phy_by_pdata 
+3198 6fe2458f fetch 4 ,mem_24g_addr 
+3199 98001200 iforce access 
+319a 20403112 call g24_prep 
+319b 20403192 call g24_set_freq_tx 
+319c 79202a00 set1 txgfsk ,radio_ctrl 
+319d 782efc00 enable encode_fec0 
+319e 78307c00 enable is_tx 
+319f 7850fc00 disable is_rx 
+31a0 2040687d call rf_debug_tx_on_line 
+31a1 785d7c00 disable lr_s2en 
+31a2 c517b1c7 bmark1 mark_ble_lr ,g24_transmit_lr 
+31a3 c516b1d9 bmark1 mark_ble_2m ,g24_transmit_2m 
+31a4 19317e00 rshift16 access ,pdata 
+31a5 1fecfe00 rshift8 pdata ,pdata 
+31a6 1ff1fe00 rshift4 pdata ,pdata 
+31a7 08008628 inject mod ,40 
+
+g24_transmit_packet:
+31a8 4739402e bpatchx patch2e_2 ,mem_patch2e 
+31a9 c517b1ae bmark1 mark_ble_lr ,g24_transmit_nolr 
+31aa 6fe0c5ca fetch 1 ,mem_24g_disable_fec1 
+31ab 243a31ae nbranch g24_transmit_nolr ,blank 
+31ac 784efc00 disable encode_fec0 
+31ad 782dfc00 enable encode_fec1 
+
+g24_transmit_nolr:
+31ae 7823fc00 enable enable_white 
+31af 7824fc00 enable enable_crc 
+31b0 6fe0c58a fetch 1 ,mem_24g_txlen 
+31b1 98007200 iforce loopcnt 
+31b2 d8c04539 arg mem_24g_txpayload ,contr 
+
+g24tr_loop:
+31b3 efe08006 ifetch 1 ,contr 
+31b4 08008608 inject mod ,8 
+31b5 c20031b3 loop g24tr_loop 
+31b6 78247c00 enable enable_parity 
+31b7 08008618 inject mod ,24 
+31b8 78447c00 disable enable_parity 
+31b9 c597b1bd bmark0 mark_ble_lr ,g24_transmit_skip 
+31ba 7843fc00 disable enable_white 
+31bb 58000000 setarg 0 
+31bc 08008603 inject mod ,3 
+
+g24_transmit_skip:
+31bd 37d38200 until null ,tx_clear 
+31be 20000064 nop 100 
+31bf 785d7c00 disable lr_s2en 
+31c0 784efc00 disable encode_fec0 
+31c1 6fe0c5ca fetch 1 ,mem_24g_disable_fec1 
+31c2 243a31c4 nbranch g24_transmit_skip_disable_fec1 ,blank 
+31c3 784dfc00 disable encode_fec1 
+
+g24_transmit_skip_disable_fec1:
+31c4 785c7c00 disable encode_fec3 
+31c5 20402160 call set_sync_on 
+31c6 2020687b branch rf_debug_tx_off_line 
+
+g24_transmit_lr:
+31c7 df20000a arg 10 ,loopcnt 
+
+g24_transmit_lr_preamble_loop:
+31c8 5800003c setarg 0x3c 
+31c9 08008608 inject mod ,8 
+31ca c20031c8 loop g24_transmit_lr_preamble_loop 
+31cb 784efc00 disable encode_fec0 
+31cc 783c7c00 enable encode_fec3 
+31cd 19317e00 rshift16 access ,pdata 
+31ce 1ff17e00 rshift16 pdata ,pdata 
+31cf 1ff1fe00 rshift4 pdata ,pdata 
+31d0 08008620 inject mod ,32 
+31d1 c51731d6 bmark1 mark_ble_lr_s8 ,g24_transmit_lr_s8 
+
+g24_transmit_lr_s2:
+31d2 58000001 setarg 1 
+31d3 08008605 inject mod ,5 
+31d4 783d7c00 enable lr_s2en 
+31d5 202031a8 branch g24_transmit_packet 
+
+g24_transmit_lr_s8:
+31d6 58000000 setarg 0 
+31d7 08008605 inject mod ,5 
+31d8 202031a8 branch g24_transmit_packet 
+
+g24_transmit_2m:
+31d9 6fe0c148 fetch 1 ,mem_system_clk 
+31da 1fe37200 rshift pdata ,loopcnt 
+
+g24_transmit_2m_dealy:
+31db 20000002 nop 2 
+31dc c20031db loop g24_transmit_2m_dealy 
+31dd 19317e00 rshift16 access ,pdata 
+31de 1fecfe00 rshift8 pdata ,pdata 
+31df 1ff18400 rshift4 pdata ,temp 
+31e0 18427e00 copy temp ,pdata 
+31e1 08008608 inject mod ,8 
+31e2 18427e00 copy temp ,pdata 
+31e3 08008628 inject mod ,40 
+31e4 202031a8 branch g24_transmit_packet 
+
+g24_transmit_prep:
+31e5 4739c02e bpatchx patch2e_3 ,mem_patch2e 
+31e6 6fe0c5b8 fetch 1 ,mem_24g_tx_phy 
+31e7 c2813206 bbit1 bit_le_coded_phy ,g24_lr_transmit_prep 
+31e8 6fe0c588 fetch 1 ,mem_24g_datalen 
+31e9 1fe0fe03 increase 3 ,pdata 
+31ea 67e0c58a store 1 ,mem_24g_txlen 
+31eb 6fe0c5ac fetch 1 ,mem_24g_syncword_crc8 
+31ec 67e0c539 store 1 ,mem_24g_txpayload 
+31ed 6fe0c589 fetch 1 ,mem_24g_data_type 
+31ee e7e08005 istore 1 ,contw 
+31ef 6fe0c588 fetch 1 ,mem_24g_datalen 
+
+g24_transmit_prep_pdu:
+31f0 1fe9fe00 lshift3 pdata ,pdata 
+31f1 6848c57e fetcht 1 ,mem_24g_pid 
+31f2 18410403 and temp ,0x03 ,temp 
+31f3 18438400 lshift temp ,temp 
+31f4 9841fe00 ior temp ,pdata 
+31f5 6848c57f fetcht 1 ,mem_24g_no_ack 
+31f6 9840fe00 iadd temp ,pdata 
+31f7 e7e08005 istore 1 ,contw 
+31f8 6fe0c588 fetch 1 ,mem_24g_datalen 
+31f9 98007200 iforce loopcnt 
+31fa d8c04519 arg mem_24g_txbuf ,contr 
+31fb 20407cda call memcpy 
+
+g24_transmit_prep_pdu_end:
+31fc 473a402e bpatchx patch2e_4 ,mem_patch2e 
+31fd c6938000 rtnmark0 mark_24g_rxmode 
+31fe 6fe08035 fetch 1 ,mem_rssi_hex 
+31ff e7e08005 istore 1 ,contw 
+3200 6fe0c5b8 fetch 1 ,mem_24g_tx_phy 
+3201 c3810000 rtnbit1 bit_le_coded_phy 
+3202 6fe0c58a fetch 1 ,mem_24g_txlen 
+3203 1fe0fe01 increase 1 ,pdata 
+3204 67e0c58a store 1 ,mem_24g_txlen 
+3205 20600000 rtn 
+
+g24_lr_transmit_prep:
+3206 6fe0c588 fetch 1 ,mem_24g_datalen 
+3207 1fe0fe04 increase 4 ,pdata 
+3208 c593b20a bmark0 mark_24g_rxmode ,g24_lr_transmit_prep_skip 
+3209 1fe0fe01 increase 1 ,pdata 
+
+g24_lr_transmit_prep_skip:
+320a 67e0c58a store 1 ,mem_24g_txlen 
+320b 6fe0c5ac fetch 1 ,mem_24g_syncword_crc8 
+320c 67e0c539 store 1 ,mem_24g_txpayload 
+320d 6fe0c58a fetch 1 ,mem_24g_txlen 
+320e 1fe0fffe increase -2 ,pdata 
+320f e7e08005 istore 1 ,contw 
+3210 6fe0c589 fetch 1 ,mem_24g_data_type 
+3211 e7e08005 istore 1 ,contw 
+3212 58000000 setarg 0 
+3213 202031f0 branch g24_transmit_prep_pdu 
+
+g24_read_len_pid_crc:
+3214 473ac02e bpatchx patch2e_5 ,mem_patch2e 
+3215 6fe0c4f8 fetch 1 ,mem_24g_rxbuf + 1 
+3216 1fe97e00 rshift3 pdata ,pdata 
+3217 67e0c57d store 1 ,mem_24g_rxdata_length 
+3218 1fe0fe01 increase 1 ,pdata 
+3219 d8c044f8 arg mem_24g_rxbuf + 1 ,contr 
+321a 98c08c00 iadd contr ,contr 
+321b efe18006 ifetch 3 ,contr 
+321c 67e1c580 store 3 ,mem_24g_sta_crc 
+321d 6fe0c4f8 fetch 1 ,mem_24g_rxbuf + 1 
+321e 1fe37e00 rshift pdata ,pdata 
+321f 1fe17e03 and pdata ,0x03 ,pdata 
+3220 67e0c586 store 1 ,mem_24g_sta_pid 
+3221 20600000 rtn 
+
+g24_ch:
+3222 473b402e bpatchx patch2e_6 ,mem_patch2e 
+3223 6848c58e fetcht 1 ,mem_24g_current_ch_number 
+3224 20403227 call g24_ch_map_size 
+3225 6048c58e storet 1 ,mem_24g_current_ch_number 
+3226 20600000 rtn 
+
+g24_ch_map_size:
+3227 473bc02e bpatchx patch2e_7 ,mem_patch2e 
+3228 2040322c call g24_ch_calc 
+3229 18408401 increase 1 ,temp 
+322a 18410403 and_into 3 ,temp 
+322b 20600000 rtn 
+
+g24_ch_calc:
+322c 473c402f bpatchx patch2f_0 ,mem_patch2f 
+322d 6fe0c58f fetch 1 ,mem_24g_addr 
+322e 1fe17e03 and_into 0x03 ,pdata 
+322f 1fefa204 mul32 pdata ,4 ,rega 
+3230 58004593 setarg mem_24g_ch_map1 
+3231 9a20fe00 iadd rega ,pdata 
+3232 98408c00 iadd temp ,contr 
+3233 efe08006 ifetch 1 ,contr 
+3234 67e0c58d store 1 ,mem_24g_ch 
+3235 20600000 rtn 
+
+g24_update_addr_and_synccrc8:
+3236 67e2458f store 4 ,mem_24g_addr 
+3237 473cc02f bpatchx patch2f_1 ,mem_patch2f 
+
+g24_syncword_crc8:
+3238 da200000 arg 0 ,rega 
+3239 df200004 arg 4 ,loopcnt 
+323a d8c0458f arg mem_24g_addr ,contr 
+
+g24_syncword_crc8_loop:
+323b efe08006 ifetch 1 ,contr 
+323c 9a20a200 iadd rega ,rega 
+323d c200323b loop g24_syncword_crc8_loop 
+323e 1a227e00 copy rega ,pdata 
+323f 67e145aa store 2 ,mem_24g_syncword 
+3240 6fe0c5aa fetch 1 ,mem_24g_syncword 
+3241 6848c5ab fetcht 1 ,mem_24g_syncword + 1 
+3242 9840fe00 iadd temp ,pdata 
+3243 67e0c5ac store 1 ,mem_24g_syncword_crc8 
+3244 20600000 rtn 
+
+g24_timer_check:
+3245 473d402f bpatchx patch2f_2 ,mem_patch2f 
+3246 20407dbc call disable_user 
+3247 684a45a3 fetcht 4 ,mem_24g_tx_btclk 
+3248 1c427e00 copy clkn_bt ,pdata 
+3249 98467c00 isub temp ,null 
+324a 24413255 ncall g24_timer_timeout ,positive 
+324b 1fe22400 copy pdata ,regb 
+324c 6fe245a3 fetch 4 ,mem_24g_tx_btclk 
+324d 6848c5a7 fetcht 1 ,mem_24g_interval 
+324e 98408400 iadd temp ,temp 
+324f 1a427e00 copy regb ,pdata 
+3250 98467c00 isub temp ,null 
+3251 24610000 nrtn positive 
+3252 793ffe1c set0 28 ,pdata 
+3253 67e245a3 store 4 ,mem_24g_tx_btclk 
+3254 20207dba branch enable_user 
+
+g24_timer_timeout:
+3255 20628000 rtn zero 
+3256 79207e1c set1 28 ,pdata 
+3257 20600000 rtn 
+
+g24_timer_init:
+3258 58000000 setarg 0 
+3259 67e245a3 store 4 ,mem_24g_tx_btclk 
+325a 20600000 rtn 
+
+g24_chmap_param_init:
+325b 473dc02f bpatchx patch2f_3 ,mem_patch2f 
+325c 38001300 setsect 0 ,0x1300 
+325d 3805908b setsect 1 ,0x1908b 
+325e 380b6150 setsect 2 ,0x36150 
+325f 380c3d20 setsect 3 ,0x3d20 
+3260 67e4c593 store 9 ,mem_24g_ch_map1 
+3261 38003a1a setsect 0 ,0x3a1a 
+3262 3804c453 setsect 1 ,0xc453 
+3263 3808d312 setsect 2 ,0xd312 
+3264 380c0001 setsect 3 ,0x1 
+3265 e7e38005 istore 7 ,contw 
+3266 6fe0c5b9 fetch 1 ,mem_24g_ch_map_update 
+3267 207a0000 rtn blank 
+3268 d8c045ba arg mem_24g_ch_update_map1 ,contr 
+3269 d8a04593 arg mem_24g_ch_map1 ,contw 
+326a 20207c8f branch memcpy16 
+
+g24_chamap_param_update:
+326b 473e402f bpatchx patch2f_4 ,mem_patch2f 
+326c 584e001e setarg 0x4e001e 
+326d 67e1c5bb store 3 ,mem_24g_ch_update_map1 + 1 
+326e 58032303 setarg 0x032303 
+326f e7e18005 istore 3 ,contw 
+3270 58250642 setarg 0x250642 
+3271 e7e18005 istore 3 ,contw 
+3272 58094c06 setarg 0x094c06 
+3273 e7e18005 istore 3 ,contw 
+3274 583c0927 setarg 0x3c0927 
+3275 e7e18005 istore 3 ,contw 
+3276 7045b901 jam 1 ,mem_24g_ch_map_update 
+3277 20600000 rtn 
+
+g24_rx_window_init:
+3278 473ec02f bpatchx patch2f_5 ,mem_patch2f 
+3279 d8406978 arg 0x6978 ,temp 
+327a c513b27f bmark1 mark_24g_rxmode ,g24_rx_window_store 
+327b d84012c0 arg 0x12c0 ,temp 
+327c 6fe0c5b7 fetch 1 ,mem_24g_rx_phy 
+327d c301327f bbit0 2 ,g24_rx_window_store 
+327e d8402ee0 arg 0x2ee0 ,temp 
+
+g24_rx_window_store:
+327f 6049458b storet 2 ,mem_24g_rx_window 
+3280 20600000 rtn 
+
+g24_enable_1m:
+3281 7045b701 jam 0x01 ,mem_24g_rx_phy 
+3282 7045b801 jam 0x01 ,mem_24g_tx_phy 
+3283 20600000 rtn 
+
+g24_enable_2m:
+3284 7045b702 jam 0x02 ,mem_24g_rx_phy 
+3285 7045b802 jam 0x02 ,mem_24g_tx_phy 
+3286 20600000 rtn 
+
+g24_pair_param_init:
+3287 473f402f bpatchx patch2f_6 ,mem_patch2f 
+3288 7045d04e jam 0x4e ,mem_24g_pair_ch 
+3289 58101520 setarg 0x101520 
+328a 67e1c5cc store 3 ,mem_24g_pair_addr 
+328b 58000005 setarg 0x05 
+328c e7e08005 istore 1 ,contw 
+328d 20600000 rtn 
+
+g24_pair_timeout_timer:
+328e da6045d8 arg mem_24g_pair_timeout ,regc 
+328f da40367a arg g24_stop_24g_mode ,regb 
+3290 202042e7 branch timer_single_step_2b 
+
+g24_pair_start:
+3291 79200026 set1 mark_24g ,mark 
+3292 6fe0c5fc fetch 1 ,mem_24g_conn_sm 
+3293 793ffe02 set0 state_24g_reconn ,pdata 
+3294 79207e01 set1 state_24g_pair ,pdata 
+3295 67e0c5fc store 1 ,mem_24g_conn_sm 
+3296 58000000 setarg 0 
+3297 67e145de store 2 ,mem_24g_reconn_timeout 
+3298 6fe145d6 fetch 2 ,mem_24g_pair_timeout_init 
+3299 67e145d8 store 2 ,mem_24g_pair_timeout 
+329a 7045d500 jam 0 ,mem_24g_pair_no_ack 
+329b 204032d6 call g24_pair_sm_reinit 
+
+g24_pair_init_param:
+329c 70457e00 jam 0 ,mem_24g_pid 
+329d 6fe0c5d0 fetch 1 ,mem_24g_pair_ch 
+329e 67e0c58d store 1 ,mem_24g_ch 
+329f 6fe0c5d1 fetch 1 ,mem_24g_pair_tx_power 
+32a0 67e0c141 store 1 ,mem_tx_power 
+32a1 6fe245cc fetch 4 ,mem_24g_pair_addr 
+32a2 20203236 branch g24_update_addr_and_synccrc8 
+
+g24_pair_dispatch:
+32a3 473fc02f bpatchx patch2f_7 ,mem_patch2f 
+32a4 7045e200 jam default_24g_device ,mem_24g_reconn_type 
+32a5 6fe145da fetch 2 ,mem_24g_pair_count 
+32a6 1fe0fe01 increase 1 ,pdata 
+32a7 67e145da store 2 ,mem_24g_pair_count 
+32a8 6fe0c5da fetch 1 ,mem_24g_pair_count 
+32a9 1fe17eff and pdata ,0xff ,pdata 
+32aa 247a0000 nrtn blank 
+32ab 6fe0c5d4 fetch 1 ,mem_24g_pair_sm 
+32ac c07fb2f8 beq state_24g_pairing_success ,g24_pair_exit 
+32ad c000b2b2 beq state_24g_pairing_1 ,g24_pair_sm_1 
+32ae c00132b4 beq state_24g_pairing_2 ,g24_pair_sm_2 
+32af c001b2ba beq state_24g_pairing_3 ,g24_pair_sm_3 
+32b0 c00232c0 beq state_24g_pairing_4 ,g24_pair_sm_4 
+32b1 20600000 rtn 
+
+g24_pair_sm_1:
+32b2 704519ff jam datatype_attemp ,mem_24g_txbuf 
+32b3 202032c1 branch g24_pair_sm_prep 
+
+g24_pair_sm_2:
+32b4 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+32b5 203a32b8 branch g24_pair_sm_2_skip ,blank 
+32b6 6fe24604 fetch 4 ,mem_24g_device_addr 
+32b7 20403236 call g24_update_addr_and_synccrc8 
+
+g24_pair_sm_2_skip:
+32b8 704519aa jam datatype_bind ,mem_24g_txbuf 
+32b9 202032c1 branch g24_pair_sm_prep 
+
+g24_pair_sm_3:
+32ba 70451955 jam datatype_config ,mem_24g_txbuf 
+32bb 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+32bc 203a32c1 branch g24_pair_sm_prep ,blank 
+32bd 6fe245e8 fetch 4 ,mem_24g_receiver_addr 
+32be 67e2451b store 4 ,mem_24g_txbuf + 2 
+32bf 202032c3 branch g24_pair_sm_common 
+
+g24_pair_sm_4:
+32c0 70451922 jam datatype_ok ,mem_24g_txbuf 
+
+g24_pair_sm_prep:
+32c1 6fe24604 fetch 4 ,mem_24g_device_addr 
+32c2 67e2451b store 4 ,mem_24g_txbuf + 2 
+
+g24_pair_sm_common:
+32c3 6fe0c589 fetch 1 ,mem_24g_data_type 
+32c4 1fe17e07 and_into bits_data ,pdata 
+32c5 67e0c51a store 1 ,mem_24g_txbuf + 1 
+32c6 70451f00 jam 0 ,mem_24g_txbuf + 6 
+32c7 70458807 jam 7 ,mem_24g_datalen 
+32c8 204031e5 call g24_transmit_prep 
+32c9 20403651 call g24_transmit_receive_ack 
+32ca 246c0000 nrtn sync 
+32cb 24778000 nrtn user3 
+32cc 2040357b call g24_txbuf_clear 
+32cd 2040366e call g24_ackpayload_parse 
+32ce 47404030 bpatchx patch30_0 ,mem_patch30 
+32cf 6fe0c5d4 fetch 1 ,mem_24g_pair_sm 
+32d0 c17f8000 rtneq state_24g_pairing_success 
+32d1 c000b2db beq state_24g_pairing_1 ,g24_pair_sm_1_waiting_ack 
+32d2 c00132dd beq state_24g_pairing_2 ,g24_pair_sm_2_waiting_ack 
+32d3 c001b2e3 beq state_24g_pairing_3 ,g24_pair_sm_3_waiting_ack 
+32d4 c00232eb beq state_24g_pairing_4 ,g24_pair_sm_4_waiting_ack 
+32d5 20600000 rtn 
+
+g24_pair_sm_reinit:
+32d6 7045d402 jam state_24g_pairing_2 ,mem_24g_pair_sm 
+32d7 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+32d8 207a0000 rtn blank 
+32d9 7045d401 jam state_24g_pairing_1 ,mem_24g_pair_sm 
+32da 20600000 rtn 
+
+g24_pair_sm_1_waiting_ack:
+32db 7045d402 jam state_24g_pairing_2 ,mem_24g_pair_sm 
+32dc 2020364c branch g24_transmit_abandon 
+
+g24_pair_sm_2_waiting_ack:
+32dd 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+32de 203a32e1 branch g24_pair_sm_2_waiting_ack_skip ,blank 
+32df 6fe2455f fetch 4 ,mem_24g_rxpayload + 2 
+32e0 67e245e8 store 4 ,mem_24g_receiver_addr 
+
+g24_pair_sm_2_waiting_ack_skip:
+32e1 7045d403 jam state_24g_pairing_3 ,mem_24g_pair_sm 
+32e2 2020364c branch g24_transmit_abandon 
+
+g24_pair_sm_3_waiting_ack:
+32e3 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+32e4 203a32e9 branch g24_pair_sm_3_waiting_ack_skip ,blank 
+32e5 6fe2455f fetch 4 ,mem_24g_rxpayload + 2 
+32e6 684a4604 fetcht 4 ,mem_24g_device_addr 
+32e7 98467c00 isub temp ,null 
+32e8 24628000 nrtn zero 
+
+g24_pair_sm_3_waiting_ack_skip:
+32e9 7045d404 jam state_24g_pairing_4 ,mem_24g_pair_sm 
+32ea 2020364c branch g24_transmit_abandon 
+
+g24_pair_sm_4_waiting_ack:
+32eb 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+32ec 203a32f1 branch g24_pair_sm_4_waiting_ack_skip ,blank 
+32ed 6fe2455f fetch 4 ,mem_24g_rxpayload + 2 
+32ee 684a45e8 fetcht 4 ,mem_24g_receiver_addr 
+32ef 98467c00 isub temp ,null 
+32f0 24628000 nrtn zero 
+
+g24_pair_sm_4_waiting_ack_skip:
+32f1 7045d4ff jam state_24g_pairing_success ,mem_24g_pair_sm 
+32f2 70066f39 jam bt_evt_24g_pairing_complete ,mem_fifo_temp 
+32f3 2040782b call ui_ipc_send_event 
+32f4 58000000 setarg 0 
+32f5 67e145d8 store 2 ,mem_24g_pair_timeout 
+32f6 6fe2455f fetch 4 ,mem_24g_rxpayload + 2 
+32f7 20403236 call g24_update_addr_and_synccrc8 
+
+g24_pair_exit:
+32f8 6fe0c5fc fetch 1 ,mem_24g_conn_sm 
+32f9 793ffe01 set0 state_24g_pair ,pdata 
+32fa 67e0c5fc store 1 ,mem_24g_conn_sm 
+32fb 2020364c branch g24_transmit_abandon 
+
+g24_bind_mode_enable:
+32fc 70461601 jam dongle_bind ,mem_24g_work_mode 
+32fd 70461500 jam clear_init ,mem_24g_mode_init 
+32fe 20600000 rtn 
+
+g24_bind_init:
+32ff 6fe0c615 fetch 1 ,mem_24g_mode_init 
+3300 c3808000 rtnbit1 dongle_bind 
+3301 79207e01 set1 dongle_bind ,pdata 
+3302 67e0c615 store 1 ,mem_24g_mode_init 
+3303 58000000 setarg 0 
+3304 67e1c5d3 store 3 ,mem_24g_device1_bind_step 
+3305 67e0c5de store 1 ,mem_24g_device1_bind_disable 
+3306 67e0c5df store 1 ,mem_24g_device2_bind_disable 
+3307 67e2462c store 4 ,mem_24g_transmitter_addr 
+3308 70461101 jam 1 ,mem_24g_ackpayload_enable 
+3309 2020329c branch g24_pair_init_param 
+
+g24_bind_ackpayload_prep:
+330a 70461101 jam 1 ,mem_24g_ackpayload_enable 
+330b 70458808 jam 0x08 ,mem_24g_datalen 
+330c d8c045d6 arg mem_24g_bind_payload ,contr 
+330d d8a04519 arg mem_24g_txbuf ,contw 
+330e 20207c89 branch memcpy8 
+
+g24_bind_data_process:
+330f 4740c030 bpatchx patch30_1 ,mem_patch30 
+3310 204033be call g24_rx_interrupt_clear 
+3311 20403119 call g24_receive_packet 
+3312 2437b3be nbranch g24_rx_interrupt_clear ,user3 
+3313 2040331e call g24_bind_data_parse 
+3314 204033f4 call g24_transmit_ack 
+3315 20403399 call g24_bind_device_status_check 
+3316 2040493d call dongle_kb_bind_soft_reset 
+3317 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+3318 207a0000 rtn blank 
+3319 6fe2462c fetch 4 ,mem_24g_transmitter_addr 
+331a 207a0000 rtn blank 
+331b 20203236 branch g24_update_addr_and_synccrc8 
+
+g24_bind_data_error:
+331c 204033be call g24_rx_interrupt_clear 
+331d 20203183 branch g24_end_of_packet 
+
+g24_bind_data_parse:
+331e 70462205 jam bind_mode_continue ,mem_24g_bind_mode_continue 
+331f d8c044f7 arg mem_24g_rxbuf ,contr 
+3320 d8a045e8 arg mem_24g_rxdata_temp ,contw 
+3321 20407c89 call memcpy8 
+
+g24_bind_data_parse_next:
+3322 47414030 bpatchx patch30_2 ,mem_patch30 
+3323 6fe0c5ea fetch 1 ,mem_24g_rxdata_temp + 2 
+3324 c0553329 beq datatype_bind ,g24_bind_first_step 
+3325 c02ab33a beq datatype_config ,g24_bind_second_step 
+3326 c011335b beq datatype_ok ,g24_bind_third_step 
+3327 c07fb59b beq datatype_attemp ,g24_data_attemp 
+3328 20600000 rtn 
+
+g24_bind_first_step:
+3329 6fe0c5eb fetch 1 ,mem_24g_rxdata_temp + 3 
+332a c000b32d beq datatype_device1 ,g24_bind_first_step_device1 
+332b c0013335 beq datatype_device2 ,g24_bind_first_step_device2 
+332c 20600000 rtn 
+
+g24_bind_first_step_device1:
+332d 6fe0c5de fetch 1 ,mem_24g_device1_bind_disable 
+332e 247a0000 nrtn blank 
+332f 7045d301 jam 1 ,mem_24g_device1_bind_step 
+
+g24_bind_dvc1_payload_cfg:
+3330 7045d601 jam datatype_device1 ,mem_24g_bind_payload 
+
+g24_bind_payload_cfg:
+3331 7045d780 jam 0x80 ,mem_24g_bind_payload + 1 
+3332 6fe344f1 fetch 6 ,mem_24g_lap 
+3333 67e345d8 store 6 ,mem_24g_bind_payload + 2 
+3334 20600000 rtn 
+
+g24_bind_first_step_device2:
+3335 6fe0c5df fetch 1 ,mem_24g_device2_bind_disable 
+3336 247a0000 nrtn blank 
+3337 7045d401 jam 1 ,mem_24g_device2_bind_step 
+
+g24_bind_dvc2_payload_cfg:
+3338 7045d602 jam datatype_device2 ,mem_24g_bind_payload 
+3339 20203331 branch g24_bind_payload_cfg 
+
+g24_bind_second_step:
+333a 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+333b 203a3340 branch g24_bind_second_step_skip ,blank 
+333c 6fe245ec fetch 4 ,mem_24g_rxdata_temp + 4 
+333d 684a44f1 fetcht 4 ,mem_24g_lap 
+333e 98467c00 isub temp ,null 
+333f 24628000 nrtn zero 
+
+g24_bind_second_step_skip:
+3340 6fe0c5eb fetch 1 ,mem_24g_rxdata_temp + 3 
+3341 c000b344 beq datatype_device1 ,g24_bind_second_step_device1 
+3342 c0013351 beq datatype_device2 ,g24_bind_second_step_device2 
+3343 20600000 rtn 
+
+g24_bind_second_step_device1:
+3344 6fe0c5de fetch 1 ,mem_24g_device1_bind_disable 
+3345 247a0000 nrtn blank 
+3346 6fe0c5d3 fetch 1 ,mem_24g_device1_bind_step 
+3347 c000b349 beq 1 ,g24_bind_dvc1_step_set2 
+3348 20600000 rtn 
+
+g24_bind_dvc1_step_set2:
+3349 7045d302 jam 2 ,mem_24g_device1_bind_step 
+334a 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+334b 203a3330 branch g24_bind_dvc1_payload_cfg ,blank 
+
+g24_bind_dvc1_payload_cfg_transmitter_addr:
+334c 7045d601 jam datatype_device1 ,mem_24g_bind_payload 
+
+g24_bind_payload_cfg_transmitter_addr:
+334d 7045d780 jam 0x80 ,mem_24g_bind_payload + 1 
+334e 6fe2462c fetch 4 ,mem_24g_transmitter_addr 
+334f 67e245d8 store 4 ,mem_24g_bind_payload + 2 
+3350 20207dba branch enable_user 
+
+g24_bind_second_step_device2:
+3351 6fe0c5df fetch 1 ,mem_24g_device2_bind_disable 
+3352 247a0000 nrtn blank 
+3353 6fe0c5d4 fetch 1 ,mem_24g_device2_bind_step 
+3354 c000b356 beq 1 ,g24_bind_dvc2_step_set2 
+3355 20600000 rtn 
+
+g24_bind_dvc2_step_set2:
+3356 7045d402 jam 2 ,mem_24g_device2_bind_step 
+3357 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+3358 203a3338 branch g24_bind_dvc2_payload_cfg ,blank 
+3359 7045d602 jam datatype_device2 ,mem_24g_bind_payload 
+335a 2020334d branch g24_bind_payload_cfg_transmitter_addr 
+
+g24_bind_third_step:
+335b 6fe0c5ae fetch 1 ,mem_24g_pair_switch 
+335c 203a3361 branch g24_bind_third_step_skip ,blank 
+335d 6fe245ec fetch 4 ,mem_24g_rxdata_temp + 4 
+335e 684a462c fetcht 4 ,mem_24g_transmitter_addr 
+335f 98467c00 isub temp ,null 
+3360 24628000 nrtn zero 
+
+g24_bind_third_step_skip:
+3361 6fe0c5eb fetch 1 ,mem_24g_rxdata_temp + 3 
+3362 c000b365 beq datatype_device1 ,g24_bind_third_step_device1 
+3363 c0013372 beq datatype_device2 ,g24_bind_third_step_device2 
+3364 20600000 rtn 
+
+g24_bind_third_step_device1:
+3365 6fe0c5de fetch 1 ,mem_24g_device1_bind_disable 
+3366 247a0000 nrtn blank 
+3367 6fe0c5d3 fetch 1 ,mem_24g_device1_bind_step 
+3368 c001336a beq 2 ,g24_bind_dvc1_step_success 
+3369 20600000 rtn 
+
+g24_bind_dvc1_step_success:
+336a 7045de01 jam 1 ,mem_24g_device1_bind_disable 
+336b 20403330 call g24_bind_dvc1_payload_cfg 
+336c 6fe0c5d5 fetch 1 ,mem_24g_bind_device_status 
+336d 1fe1fe01 or_into 0x01 ,pdata 
+336e 67e0c5d5 store 1 ,mem_24g_bind_device_status 
+
+g24_bind_exit:
+336f 58000000 setarg 0 
+3370 67e145d3 store 2 ,mem_24g_device1_bind_step 
+3371 20600000 rtn 
+
+g24_bind_third_step_device2:
+3372 6fe0c5df fetch 1 ,mem_24g_device2_bind_disable 
+3373 247a0000 nrtn blank 
+3374 6fe0c5d4 fetch 1 ,mem_24g_device2_bind_step 
+3375 c0803377 bne 0 ,g24_bind_dvc2_step_success 
+3376 20600000 rtn 
+
+g24_bind_dvc2_step_success:
+3377 7045df01 jam 1 ,mem_24g_device2_bind_disable 
+3378 20403338 call g24_bind_dvc2_payload_cfg 
+3379 6fe0c5d5 fetch 1 ,mem_24g_bind_device_status 
+337a 1fe1fe02 or_into 0x02 ,pdata 
+337b 67e0c5d5 store 1 ,mem_24g_bind_device_status 
+337c 2040336f call g24_bind_exit 
+337d 20204937 branch dongle_g24_store_dvc2_bind_flag 
+
+g24_binding_device_check:
+337e 6fe0c616 fetch 1 ,mem_24g_work_mode 
+337f c1808000 rtnne dongle_bind 
+3380 6fe0c610 fetch 1 ,mem_24g_pair_mode 
+3381 247a0000 nrtn blank 
+3382 6fe0c4fa fetch 1 ,mem_24g_rxbuf + 3 
+3383 c000b386 beq datatype_device1 ,g24_binding_dvc1_status 
+3384 c001338a beq datatype_device2 ,g24_binding_dvc2_status 
+3385 20600000 rtn 
+
+g24_binding_dvc1_status:
+3386 6fe0c62b fetch 1 ,mem_24g_bind_device_living 
+3387 c4000000 rtnbit0 0 
+
+disable_user3:
+3388 7857fc00 disable user3 
+3389 20600000 rtn 
+
+g24_binding_dvc2_status:
+338a 6fe0c62b fetch 1 ,mem_24g_bind_device_living 
+338b c4008000 rtnbit0 1 
+338c 20203388 branch disable_user3 
+
+g24_binding_dvc1_living:
+338d 6fe0c610 fetch 1 ,mem_24g_pair_mode 
+338e 247a0000 nrtn blank 
+338f 6fe0c62b fetch 1 ,mem_24g_bind_device_living 
+3390 1fe1fe01 or_into 0x01 ,pdata 
+3391 67e0c62b store 1 ,mem_24g_bind_device_living 
+3392 20600000 rtn 
+
+g24_binding_dvc2_living:
+3393 6fe0c610 fetch 1 ,mem_24g_pair_mode 
+3394 247a0000 nrtn blank 
+3395 6fe0c62b fetch 1 ,mem_24g_bind_device_living 
+3396 1fe1fe02 or_into 0x02 ,pdata 
+3397 67e0c62b store 1 ,mem_24g_bind_device_living 
+3398 20600000 rtn 
+
+g24_bind_device_status_check:
+3399 6fe0c5d5 fetch 1 ,mem_24g_bind_device_status 
+339a 207a0000 rtn blank 
+
+g24_bind_device_status:
+339b 6fe0c5eb fetch 1 ,mem_24g_rxdata_temp + 3 
+339c c000b38d beq datatype_device1 ,g24_binding_dvc1_living 
+339d c0013393 beq datatype_device2 ,g24_binding_dvc2_living 
+339e 20600000 rtn 
+
+g24_receive_init:
+339f 79200027 set1 mark_24g_rxmode ,mark 
+33a0 6fe0c141 fetch 1 ,mem_tx_power 
+33a1 67e0c623 store 1 ,mem_tx_power_temp 
+33a2 202035d6 branch rssi_receiver_buff_init 
+
+g24_receive_dispatch:
+33a3 6fe145e0 fetch 2 ,mem_cb_24g_receive_process 
+33a4 20207d79 branch callback_func 
+
+g24_ackpayload_prep:
+33a5 4741c030 bpatchx patch30_3 ,mem_patch30 
+33a6 70458800 jam 0 ,mem_24g_datalen 
+33a7 6fe0c611 fetch 1 ,mem_24g_ackpayload_enable 
+33a8 207a0000 rtn blank 
+33a9 6fe145e2 fetch 2 ,mem_cb_24g_ackpayload 
+33aa 20207d79 branch callback_func 
+
+g24_receive_packet_start:
+33ab 204033f1 call g24_receive_transmit_ack 
+33ac 2437b3be nbranch g24_rx_interrupt_clear ,user3 
+
+g24_receive_packet_parse:
+33ad 204033e3 call g24_receive_packet_parse_pid_crc 
+33ae 243433be nbranch g24_rx_interrupt_clear ,user 
+33af 6fe0c57d fetch 1 ,mem_24g_rxdata_length 
+33b0 203a33be branch g24_rx_interrupt_clear ,blank 
+33b1 1fe0fe02 increase 2 ,pdata 
+33b2 98007200 iforce loopcnt 
+33b3 d8c044f7 arg mem_24g_rxbuf ,contr 
+33b4 d8a045e8 arg mem_24g_rxdata_temp ,contw 
+33b5 20407cda call memcpy 
+33b6 70461300 jam 0 ,mem_24g_mode_switch 
+33b7 6fe0c610 fetch 1 ,mem_24g_pair_mode 
+33b8 205a33fe call g24_enable_nodata_timer ,blank 
+33b9 47424030 bpatchx patch30_4 ,mem_patch30 
+33ba 6fe0c5ea fetch 1 ,mem_24g_rxdata_temp + 2 
+33bb c000b3c4 beq datatype_device1 ,g24_data_device1 
+33bc c00133d3 beq datatype_device2 ,g24_data_device2 
+33bd c07fb3c2 beq datatype_attemp ,g24_data_receive_attemp 
+
+g24_rx_interrupt_clear:
+33be 4742c030 bpatchx patch30_5 ,mem_patch30 
+33bf d8a044f7 arg mem_24g_rxbuf ,contw 
+33c0 df200042 arg 66 ,loopcnt 
+33c1 20207ca1 branch clear_mem 
+
+g24_data_receive_attemp:
+33c2 2040339b call g24_bind_device_status 
+33c3 2020359b branch g24_data_attemp 
+
+g24_data_device1:
+33c4 2040338d call g24_binding_dvc1_living 
+33c5 2040352e call g24_ch_timer_reinit 
+33c6 6fe0c60a fetch 1 ,mem_24g_abort_packet 
+33c7 6848c5e8 fetcht 1 ,mem_24g_rxdata_temp 
+33c8 284ffe03 isolate1 bit_abort ,temp 
+33c9 7920fe00 setflag true ,0 ,pdata 
+33ca 67e0c60a store 1 ,mem_24g_abort_packet 
+33cb c000b3d9 beq 1 ,g24_data_attemp_device1_abort 
+33cc 6fe0c612 fetch 1 ,mem_24g_hop_packet 
+33cd 6848c5e8 fetcht 1 ,mem_24g_rxdata_temp 
+
+g24_data_device1_next:
+33ce 284ffe04 isolate1 bit_hop ,temp 
+33cf 7920fe00 setflag true ,0 ,pdata 
+33d0 67e0c612 store 1 ,mem_24g_hop_packet 
+33d1 6fe145e4 fetch 2 ,mem_cb_24g_data_device1 
+33d2 20207d79 branch callback_func 
+
+g24_data_device2:
+33d3 20403393 call g24_binding_dvc2_living 
+33d4 6848c5e8 fetcht 1 ,mem_24g_rxdata_temp 
+33d5 284ffe03 isolate1 bit_abort ,temp 
+33d6 2020b3e1 branch g24_data_attemp_device2_abort ,true 
+33d7 6fe145e6 fetch 2 ,mem_cb_24g_data_device2 
+33d8 20207d79 branch callback_func 
+
+g24_data_attemp_device1_abort:
+33d9 6fe0c3cb fetch 1 ,mem_device_option 
+33da 1fe67c0e sub pdata ,dvc_op_car ,null 
+33db 2042c469 call car_stop_blink ,zero 
+33dc 6fe0c5de fetch 1 ,mem_24g_device1_bind_disable 
+33dd 247a0000 nrtn blank 
+33de 7045de01 jam 1 ,mem_24g_device1_bind_disable 
+33df 6fe245f2 fetch 4 ,mem_24g_rxdata_temp + 10 
+33e0 202035a3 branch g24_store_device1_addr 
+
+g24_data_attemp_device2_abort:
+33e1 6fe245f2 fetch 4 ,mem_24g_rxdata_temp + 10 
+33e2 202035a9 branch g24_store_device2_addr 
+
+g24_receive_packet_parse_pid_crc:
+33e3 20407dbc call disable_user 
+33e4 6fe0c586 fetch 1 ,mem_24g_sta_pid 
+33e5 6848c587 fetcht 1 ,mem_24g_last_pid 
+33e6 98467c00 isub temp ,null 
+33e7 2442fdba ncall enable_user ,zero 
+33e8 6fe0c586 fetch 1 ,mem_24g_sta_pid 
+33e9 67e0c587 store 1 ,mem_24g_last_pid 
+33ea 6fe1c580 fetch 3 ,mem_24g_sta_crc 
+33eb 6849c583 fetcht 3 ,mem_24g_last_crc 
+33ec 98467c00 isub temp ,null 
+33ed 2442fdba ncall enable_user ,zero 
+33ee 6fe1c580 fetch 3 ,mem_24g_sta_crc 
+33ef 67e1c583 store 3 ,mem_24g_last_crc 
+33f0 20600000 rtn 
+
+g24_receive_transmit_ack:
+33f1 204033be call g24_rx_interrupt_clear 
+33f2 20403119 call g24_receive_packet 
+33f3 24778000 nrtn user3 
+
+g24_transmit_ack:
+33f4 6fe0c4f7 fetch 1 ,mem_24g_rxbuf 
+33f5 67e0c589 store 1 ,mem_24g_data_type 
+33f6 20403214 call g24_read_len_pid_crc 
+33f7 6fe0c4f8 fetch 1 ,mem_24g_rxbuf + 1 
+33f8 2feffe00 isolate1 bit_ack_24g ,pdata 
+33f9 2020b3fd branch g24tx_no_ack ,true 
+
+g24tx_with_ack:
+33fa 204033a5 call g24_ackpayload_prep 
+33fb 204031e5 call g24_transmit_prep 
+33fc 20403195 call g24_transmit 
+
+g24tx_no_ack:
+33fd 20203183 branch g24_end_of_packet 
+
+g24_enable_nodata_timer:
+33fe 70461401 jam 1 ,mem_24g_nodata_timer_enable 
+
+g24_enable_nodata_timer_init:
+33ff 58000280 setarg timer_nodata_delay 
+3400 d8e00008 arg g24_timer_nodata ,queue 
+3401 20207ce1 branch timer_init 
+
+g24_mode_switch_init:
+3402 47434030 bpatchx patch30_6 ,mem_patch30 
+3403 70461301 jam 1 ,mem_24g_mode_switch 
+3404 70461700 jam 0 ,mem_24g_time_slice 
+3405 7045a7ff jam 0xff ,mem_24g_interval 
+3406 20203258 branch g24_timer_init 
+
+g24_mode_switch_bind_work:
+3407 4743c030 bpatchx patch30_7 ,mem_patch30 
+3408 6fe0c613 fetch 1 ,mem_24g_mode_switch 
+3409 207a0000 rtn blank 
+340a 20403245 call g24_timer_check 
+340b 24740000 nrtn user 
+340c 20403414 call g24_bind_mode_continue 
+340d 6fe0c617 fetch 1 ,mem_24g_time_slice 
+340e 1fe0fe01 increase 1 ,pdata 
+340f 1fe17e01 and_into 1 ,pdata 
+3410 67e0c617 store 1 ,mem_24g_time_slice 
+3411 c0003419 beq 0 ,g24_work_mode_switch 
+3412 c000b41c beq 1 ,g24_bind_mode_switch 
+3413 20600000 rtn 
+
+g24_bind_mode_continue:
+3414 6fe0c622 fetch 1 ,mem_24g_bind_mode_continue 
+3415 207a0000 rtn blank 
+3416 1fe0ffff increase -1 ,pdata 
+3417 67e0c622 store 1 ,mem_24g_bind_mode_continue 
+3418 20600000 rtn 
+
+g24_work_mode_switch:
+3419 6fe0c622 fetch 1 ,mem_24g_bind_mode_continue 
+341a 247a0000 nrtn blank 
+341b 20203460 branch g24_switch_work_mode 
+
+g24_bind_mode_switch:
+341c 6fe0c622 fetch 1 ,mem_24g_bind_mode_continue 
+341d 247a0000 nrtn blank 
+341e 202032fc branch g24_bind_mode_enable 
+
+g24_mode_b_s_switch_init:
+341f 6fe0c62a fetch 1 ,mem_24g_b_s_mode_switch_disable 
+3420 247a0000 nrtn blank 
+3421 6fe0c628 fetch 1 ,mem_24g_mode_b_s_switch_exit 
+3422 205a344f call g24_mode_b_s_switch_start ,blank 
+3423 6fe0c625 fetch 1 ,mem_24g_mode_b_s_switch_init 
+3424 c3800000 rtnbit1 0 
+3425 79207e00 set1 0 ,pdata 
+3426 67e0c625 store 1 ,mem_24g_mode_b_s_switch_init 
+3427 70462401 jam 1 ,mem_24g_mode_b_s_switch 
+3428 70462900 jam 0 ,mem_24g_b_s_time_slice 
+3429 58000000 setarg 0 
+342a 67e14626 store 2 ,mem_24g_mode_b_s_switch_cnt 
+342b 7045a760 jam 0x60 ,mem_24g_interval 
+342c 20203258 branch g24_timer_init 
+
+g24_mode_switch_bind_search:
+342d 47444031 bpatchx patch31_0 ,mem_patch31 
+342e 6fe0c616 fetch 1 ,mem_24g_work_mode 
+342f c1000000 rtneq dongle_work 
+3430 6fe0c62a fetch 1 ,mem_24g_b_s_mode_switch_disable 
+3431 247a0000 nrtn blank 
+3432 6fe0c628 fetch 1 ,mem_24g_mode_b_s_switch_exit 
+3433 247a0000 nrtn blank 
+3434 6fe0c624 fetch 1 ,mem_24g_mode_b_s_switch 
+3435 207a0000 rtn blank 
+3436 6fe0c62b fetch 1 ,mem_24g_bind_device_living 
+3437 2fe00603 compare 3 ,pdata ,3 
+3438 2020b44b branch g24_mode_b_s_switch_exit ,true 
+3439 20403245 call g24_timer_check 
+343a 24740000 nrtn user 
+343b 6fe14626 fetch 2 ,mem_24g_mode_b_s_switch_cnt 
+343c 1fe0fe01 increase 1 ,pdata 
+343d 67e14626 store 2 ,mem_24g_mode_b_s_switch_cnt 
+343e d84007d0 arg 0x7d0 ,temp 
+343f 98467c00 isub temp ,null 
+3440 2021344b branch g24_mode_b_s_switch_exit ,positive 
+3441 6fe0c629 fetch 1 ,mem_24g_b_s_time_slice 
+3442 1fe0fe01 increase 1 ,pdata 
+3443 1fe17e01 and_into 1 ,pdata 
+3444 67e0c629 store 1 ,mem_24g_b_s_time_slice 
+3445 c0003514 beq 0 ,g24_search_mode_enable 
+3446 c000b2fc beq 1 ,g24_bind_mode_enable 
+3447 20600000 rtn 
+
+g24_mode_switch_search:
+3448 6fe0c622 fetch 1 ,mem_24g_bind_mode_continue 
+3449 243a32fc nbranch g24_bind_mode_enable ,blank 
+344a 20203514 branch g24_search_mode_enable 
+
+g24_mode_b_s_switch_exit:
+344b 70462801 jam 1 ,mem_24g_mode_b_s_switch_exit 
+344c 20203514 branch g24_search_mode_enable 
+
+g24_mode_b_s_switch_stop:
+344d 70462400 jam 0 ,mem_24g_mode_b_s_switch 
+344e 20600000 rtn 
+
+g24_mode_b_s_switch_start:
+344f 70462401 jam 1 ,mem_24g_mode_b_s_switch 
+3450 20600000 rtn 
+
+g24_work_init:
+3451 4744c031 bpatchx patch31_1 ,mem_patch31 
+3452 6fe0c615 fetch 1 ,mem_24g_mode_init 
+3453 c3800000 rtnbit1 dongle_work 
+3454 79207e00 set1 dongle_work ,pdata 
+3455 67e0c615 store 1 ,mem_24g_mode_init 
+3456 6fe0c623 fetch 1 ,mem_tx_power_temp 
+3457 67e0c141 store 1 ,mem_tx_power 
+3458 70461100 jam 0 ,mem_24g_ackpayload_enable 
+3459 70090d00 jam 0 ,mem_usb_tx_enable 
+345a 70460a01 jam 1 ,mem_24g_abort_packet 
+345b 70457e00 jam 0 ,mem_24g_pid 
+345c 6fe244f1 fetch 4 ,mem_24g_lap 
+345d 20403236 call g24_update_addr_and_synccrc8 
+345e 20403222 call g24_ch 
+345f 202033be branch g24_rx_interrupt_clear 
+
+g24_switch_work_mode:
+3460 70461100 jam 0 ,mem_24g_ackpayload_enable 
+
+g24_work_mode_enable:
+3461 70461600 jam dongle_work ,mem_24g_work_mode 
+3462 70461500 jam clear_init ,mem_24g_mode_init 
+3463 20600000 rtn 
+
+g24_work_mode_start:
+3464 6fe0c616 fetch 1 ,mem_24g_work_mode 
+3465 c1800000 rtnne dongle_work 
+3466 20403451 call g24_work_init 
+3467 20403518 call g24_ch_process 
+3468 202033ab branch g24_receive_packet_start 
+
+g24_bind_mode_auto:
+3469 47454031 bpatchx patch31_2 ,mem_patch31 
+346a 6fe0c616 fetch 1 ,mem_24g_work_mode 
+346b c1808000 rtnne dongle_bind 
+346c 204032ff call g24_bind_init 
+346d 2040330f call g24_bind_data_process 
+346e 6fe0c610 fetch 1 ,mem_24g_pair_mode 
+346f 247a0000 nrtn blank 
+3470 6fe0c5d5 fetch 1 ,mem_24g_bind_device_status 
+3471 207a0000 rtn blank 
+3472 70461300 jam 0 ,mem_24g_mode_switch 
+3473 20403460 call g24_switch_work_mode 
+3474 204033fe call g24_enable_nodata_timer 
+3475 20203258 branch g24_timer_init 
+
+g24_search_mode_init:
+3476 6fe0c615 fetch 1 ,mem_24g_mode_init 
+3477 c3838000 rtnbit1 dongle_search 
+3478 79207e07 set1 dongle_search ,pdata 
+3479 67e0c615 store 1 ,mem_24g_mode_init 
+347a 6fe0c623 fetch 1 ,mem_tx_power_temp 
+347b 67e0c141 store 1 ,mem_tx_power 
+347c 70461700 jam 0 ,mem_24g_time_slice 
+347d 70461101 jam 1 ,mem_24g_ackpayload_enable 
+347e 58000000 setarg 0 
+347f 67e1c63d store 3 ,mem_rssi_noise_self_index 
+3480 67e3c61a store 7 ,mem_24g_self_config_ch_once 
+3481 20403506 call g24_receiver_addr_check 
+3482 24628000 nrtn zero 
+3483 6fe0c58e fetch 1 ,mem_24g_current_ch_number 
+3484 67e0c619 store 1 ,mem_24g_self_ch_number 
+3485 6fe0c58d fetch 1 ,mem_24g_ch 
+3486 67e0c618 store 1 ,mem_24g_self_last_ch 
+3487 20600000 rtn 
+
+g24_search_mode_auto:
+3488 4745c031 bpatchx patch31_3 ,mem_patch31 
+3489 6fe0c616 fetch 1 ,mem_24g_work_mode 
+348a c1838000 rtnne dongle_search 
+348b 20403476 call g24_search_mode_init 
+348c 204034ae call g24_auto_addr_ch_search 
+348d 204033f1 call g24_receive_transmit_ack 
+348e 2437b3be nbranch g24_rx_interrupt_clear ,user3 
+348f 20403506 call g24_receiver_addr_check 
+3490 2042b3ad call g24_receive_packet_parse ,zero 
+3491 6fe0c60a fetch 1 ,mem_24g_abort_packet 
+3492 205a344d call g24_mode_b_s_switch_stop ,blank 
+3493 70461600 jam dongle_work ,mem_24g_work_mode 
+3494 6fe0c615 fetch 1 ,mem_24g_mode_init 
+3495 79207e00 set1 dongle_work ,pdata 
+3496 67e0c615 store 1 ,mem_24g_mode_init 
+3497 6fe0c611 fetch 1 ,mem_24g_ackpayload_enable 
+3498 1fe67c02 sub pdata ,2 ,null 
+3499 2442b504 ncall g24_ackpayload_disable ,zero 
+349a 204033be call g24_rx_interrupt_clear 
+349b 204033fe call g24_enable_nodata_timer 
+349c 20403506 call g24_receiver_addr_check 
+349d 2022b4a7 branch g24_self_ch_num_reinit ,zero 
+349e 6fe2458f fetch 4 ,mem_24g_addr 
+349f 684a4634 fetcht 4 ,mem_24g_device2_addr 
+34a0 98467c00 isub temp ,null 
+34a1 2022b4aa branch g24_device2_ch_num_reinit ,zero 
+34a2 6fe2458f fetch 4 ,mem_24g_addr 
+34a3 684a4630 fetcht 4 ,mem_24g_device1_addr 
+34a4 98467c00 isub temp ,null 
+34a5 2022b4ac branch g24_device1_ch_num_reinit ,zero 
+34a6 20600000 rtn 
+
+g24_self_ch_num_reinit:
+34a7 6fe0c619 fetch 1 ,mem_24g_self_ch_number 
+
+g24_current_ch_num_reinit:
+34a8 67e0c58e store 1 ,mem_24g_current_ch_number 
+34a9 20600000 rtn 
+
+g24_device2_ch_num_reinit:
+34aa 6fe0c61f fetch 1 ,mem_24g_device2_ch_number 
+34ab 202034a8 branch g24_current_ch_num_reinit 
+
+g24_device1_ch_num_reinit:
+34ac 6fe0c61c fetch 1 ,mem_24g_device1_ch_number 
+34ad 202034a8 branch g24_current_ch_num_reinit 
+
+g24_auto_addr_ch_search:
+34ae 47464031 bpatchx patch31_4 ,mem_patch31 
+34af 6fe0c617 fetch 1 ,mem_24g_time_slice 
+34b0 1fe0fe01 increase 1 ,pdata 
+34b1 1fe17e03 and_into 3 ,pdata 
+34b2 67e0c617 store 1 ,mem_24g_time_slice 
+34b3 c00034d2 beq 0 ,g24_auto_bind_config_device2 
+34b4 c000b4ec beq 1 ,g24_auto_bind_config_self 
+34b5 c00134b8 beq 2 ,g24_auto_bind_config_device1 
+34b6 c001b4ec beq 3 ,g24_auto_bind_config_self 
+34b7 20600000 rtn 
+
+g24_auto_bind_config_device1:
+34b8 20403330 call g24_bind_dvc1_payload_cfg 
+34b9 6fe24630 fetch 4 ,mem_24g_device1_addr 
+34ba 203a34ae branch g24_auto_addr_ch_search ,blank 
+34bb 20403236 call g24_update_addr_and_synccrc8 
+34bc 6fe0c61d fetch 1 ,mem_24g_device1_config_ch_once 
+34bd 205a34cd call g24_device1_config_ch_once ,blank 
+34be 6fe0c61b fetch 1 ,mem_24g_device1_last_ch 
+34bf 67e0c58d store 1 ,mem_24g_ch 
+34c0 6848c63e fetcht 1 ,mem_rssi_noise_device1_index 
+34c1 6a214644 fetchr rega ,2 ,mem_rssi_noise_device1_buffer_ptr 
+34c2 204035ab call rssi_store 
+34c3 6048c63e storet 1 ,mem_rssi_noise_device1_index 
+34c4 204035b4 call rssi_average 
+34c5 6048c63b storet 1 ,mem_rssi_noise_device1_avg 
+34c6 18467c50 sub temp ,rssi_thresh_noise ,null 
+34c7 24610000 nrtn positive 
+34c8 6848c61c fetcht 1 ,mem_24g_device1_ch_number 
+34c9 20403227 call g24_ch_map_size 
+34ca 6048c61c storet 1 ,mem_24g_device1_ch_number 
+34cb 67e0c61b store 1 ,mem_24g_device1_last_ch 
+34cc 20600000 rtn 
+
+g24_device1_config_ch_once:
+34cd 70461d01 jam 1 ,mem_24g_device1_config_ch_once 
+34ce d8400000 arg 0 ,temp 
+34cf 2040322c call g24_ch_calc 
+34d0 67e0c61b store 1 ,mem_24g_device1_last_ch 
+34d1 20600000 rtn 
+
+g24_auto_bind_config_device2:
+34d2 20403338 call g24_bind_dvc2_payload_cfg 
+34d3 6fe24634 fetch 4 ,mem_24g_device2_addr 
+34d4 203a34ae branch g24_auto_addr_ch_search ,blank 
+34d5 20403236 call g24_update_addr_and_synccrc8 
+34d6 6fe0c620 fetch 1 ,mem_24g_device2_config_ch_once 
+34d7 205a34e7 call g24_device2_config_ch_once ,blank 
+34d8 6fe0c61e fetch 1 ,mem_24g_device2_last_ch 
+34d9 67e0c58d store 1 ,mem_24g_ch 
+34da 6848c63f fetcht 1 ,mem_rssi_noise_device2_index 
+34db 6a214646 fetchr rega ,2 ,mem_rssi_noise_device2_buffer_ptr 
+34dc 204035ab call rssi_store 
+34dd 6048c63f storet 1 ,mem_rssi_noise_device2_index 
+34de 204035b4 call rssi_average 
+34df 6048c63c storet 1 ,mem_rssi_noise_device2_avg 
+34e0 18467c50 sub temp ,rssi_thresh_noise ,null 
+34e1 24610000 nrtn positive 
+34e2 6848c61f fetcht 1 ,mem_24g_device2_ch_number 
+34e3 20403227 call g24_ch_map_size 
+34e4 6048c61f storet 1 ,mem_24g_device2_ch_number 
+34e5 67e0c61e store 1 ,mem_24g_device2_last_ch 
+34e6 20600000 rtn 
+
+g24_device2_config_ch_once:
+34e7 70462001 jam 1 ,mem_24g_device2_config_ch_once 
+34e8 d8400000 arg 0 ,temp 
+34e9 2040322c call g24_ch_calc 
+34ea 67e0c61e store 1 ,mem_24g_device2_last_ch 
+34eb 20600000 rtn 
+
+g24_auto_bind_config_self:
+34ec 20403330 call g24_bind_dvc1_payload_cfg 
+34ed 6fe244f1 fetch 4 ,mem_24g_lap 
+34ee 20403236 call g24_update_addr_and_synccrc8 
+34ef 6fe0c61a fetch 1 ,mem_24g_self_config_ch_once 
+34f0 205a3500 call g24_self_config_ch_once ,blank 
+34f1 6fe0c618 fetch 1 ,mem_24g_self_last_ch 
+34f2 67e0c58d store 1 ,mem_24g_ch 
+34f3 6848c63d fetcht 1 ,mem_rssi_noise_self_index 
+34f4 6a214642 fetchr rega ,2 ,mem_rssi_noise_self_buffer_ptr 
+34f5 204035ab call rssi_store 
+34f6 6048c63d storet 1 ,mem_rssi_noise_self_index 
+34f7 204035b4 call rssi_average 
+34f8 6048c63a storet 1 ,mem_rssi_noise_self_avg 
+34f9 18467c50 sub temp ,rssi_thresh_noise ,null 
+34fa 24610000 nrtn positive 
+34fb 6848c619 fetcht 1 ,mem_24g_self_ch_number 
+34fc 20403227 call g24_ch_map_size 
+34fd 6048c619 storet 1 ,mem_24g_self_ch_number 
+34fe 67e0c618 store 1 ,mem_24g_self_last_ch 
+34ff 20600000 rtn 
+
+g24_self_config_ch_once:
+3500 70461a01 jam 1 ,mem_24g_self_config_ch_once 
+3501 6fe0c618 fetch 1 ,mem_24g_self_last_ch 
+3502 67e0c58d store 1 ,mem_24g_ch 
+3503 20600000 rtn 
+
+g24_ackpayload_disable:
+3504 70461100 jam 0 ,mem_24g_ackpayload_enable 
+3505 20600000 rtn 
+
+g24_receiver_addr_check:
+3506 6fe2458f fetch 4 ,mem_24g_addr 
+3507 684a44f1 fetcht 4 ,mem_24g_lap 
+3508 98467c00 isub temp ,null 
+3509 20600000 rtn 
+
+g24_nodata_process:
+350a 6fe0c611 fetch 1 ,mem_24g_ackpayload_enable 
+350b c1010000 rtneq 2 
+350c 6fe0c614 fetch 1 ,mem_24g_nodata_timer_enable 
+350d 207a0000 rtn blank 
+350e d8e00008 arg g24_timer_nodata ,queue 
+350f 20407cef call timer_check 
+3510 247a0000 nrtn blank 
+
+g24_nodata_timer_over:
+3511 70461400 jam 0 ,mem_24g_nodata_timer_enable 
+3512 70462200 jam 0 ,mem_24g_bind_mode_continue 
+3513 2040341f call g24_mode_b_s_switch_init 
+
+g24_search_mode_enable:
+3514 4746c031 bpatchx patch31_5 ,mem_patch31 
+3515 70461607 jam dongle_search ,mem_24g_work_mode 
+3516 70461500 jam clear_init ,mem_24g_mode_init 
+3517 202033be branch g24_rx_interrupt_clear 
+
+g24_ch_process:
+3518 47474031 bpatchx patch31_6 ,mem_patch31 
+3519 6fe0c60a fetch 1 ,mem_24g_abort_packet 
+351a c000b5ea beq 1 ,rssi_noise_monitor 
+351b 6fe0c612 fetch 1 ,mem_24g_hop_packet 
+351c c000b52c beq 1 ,g24_ch_receive_hop_pac 
+351d 684a460b fetcht 4 ,mem_24g_hop_btclk 
+351e 1c427e00 copy clkn_bt ,pdata 
+351f 98467c00 isub temp ,null 
+3520 24413255 ncall g24_timer_timeout ,positive 
+3521 1fe22400 copy pdata ,regb 
+3522 6fe2460b fetch 4 ,mem_24g_hop_btclk 
+3523 6848c60f fetcht 1 ,mem_24g_hop_interval 
+3524 98408400 iadd temp ,temp 
+3525 1a427e00 copy regb ,pdata 
+3526 98467c00 isub temp ,null 
+3527 24610000 nrtn positive 
+3528 793ffe1c set0 28 ,pdata 
+3529 67e2460b store 4 ,mem_24g_hop_btclk 
+352a 70460a01 jam 1 ,mem_24g_abort_packet 
+352b 20203222 branch g24_ch 
+
+g24_ch_receive_hop_pac:
+352c 70461200 jam 0 ,mem_24g_hop_packet 
+352d 20203222 branch g24_ch 
+
+g24_ch_timer_reinit:
+352e 1c427e00 copy clkn_bt ,pdata 
+352f 67e2460b store 4 ,mem_24g_hop_btclk 
+3530 20600000 rtn 
+
+g24_reconn_timeout_timer:
+3531 da6045de arg mem_24g_reconn_timeout ,regc 
+3532 da40367a arg g24_stop_24g_mode ,regb 
+3533 202042e7 branch timer_single_step_2b 
+
+g24_reconn_start:
+3534 4747c031 bpatchx patch31_7 ,mem_patch31 
+3535 79200026 set1 mark_24g ,mark 
+3536 6fe0c5fc fetch 1 ,mem_24g_conn_sm 
+3537 793ffe01 set0 state_24g_pair ,pdata 
+3538 79207e02 set1 state_24g_reconn ,pdata 
+3539 67e0c5fc store 1 ,mem_24g_conn_sm 
+353a 6fe0c5e3 fetch 1 ,mem_24g_fast_conn_enable 
+353b 203a3549 branch g24_reconn_receiver_addr ,blank 
+353c 6fe0c5e2 fetch 1 ,mem_24g_reconn_type 
+353d c000b541 beq fast_conn_and_receiver ,g24_reconn_fast_conn 
+353e c0013541 beq fast_conn_and_3_0_addr ,g24_reconn_fast_conn 
+353f c001b550 beq receiver_and_3_0_addr ,g24_reconn_device_3_0_addr 
+3540 c0023550 beq pair_and_3_0_addr ,g24_reconn_device_3_0_addr 
+
+g24_reconn_fast_conn:
+3541 6fe0c5d1 fetch 1 ,mem_24g_pair_tx_power 
+3542 67e0c141 store 1 ,mem_tx_power 
+3543 6848c5ec fetcht 1 ,mem_24g_fast_conn_temp_ch 
+3544 6048c58e storet 1 ,mem_24g_current_ch_number 
+3545 6fe245e4 fetch 4 ,mem_24g_fast_conn_addr 
+3546 2040355a call g24_ch_syncword_crc8_init 
+3547 6048c5ec storet 1 ,mem_24g_fast_conn_temp_ch 
+3548 20600000 rtn 
+
+g24_reconn_receiver_addr:
+3549 70414103 jam tx_power_3db ,mem_tx_power 
+354a 6848c5ed fetcht 1 ,mem_24g_receiver_temp_ch 
+354b 6048c58e storet 1 ,mem_24g_current_ch_number 
+354c 6fe245e8 fetch 4 ,mem_24g_receiver_addr 
+354d 2040355a call g24_ch_syncword_crc8_init 
+354e 6048c5ed storet 1 ,mem_24g_receiver_temp_ch 
+354f 20600000 rtn 
+
+g24_reconn_device_3_0_addr:
+3550 70414103 jam tx_power_3db ,mem_tx_power 
+3551 6848c5ee fetcht 1 ,mem_24g_device_temp_ch 
+3552 6048c58e storet 1 ,mem_24g_current_ch_number 
+3553 6fe24604 fetch 4 ,mem_24g_device_addr 
+3554 2040355a call g24_ch_syncword_crc8_init 
+3555 6048c5ee storet 1 ,mem_24g_device_temp_ch 
+3556 20600000 rtn 
+
+g24_store_receiver_addr:
+3557 6fe2455f fetch 4 ,mem_24g_rxpayload + 2 
+3558 207a0000 rtn blank 
+3559 67e245e8 store 4 ,mem_24g_receiver_addr 
+
+g24_ch_syncword_crc8_init:
+355a 20403236 call g24_update_addr_and_synccrc8 
+355b 20203222 branch g24_ch 
+
+g24_reconn_dispatch:
+355c 47484032 bpatchx patch32_0 ,mem_patch32 
+355d 6fe145e0 fetch 2 ,mem_24g_reconn_count 
+355e d84001f8 arg 0x01f8 ,temp 
+355f 98417e00 iand temp ,pdata 
+3560 203a3565 branch g24_reconn_dispatch_next ,blank 
+3561 6fe145e0 fetch 2 ,mem_24g_reconn_count 
+3562 1fe0fe01 increase 1 ,pdata 
+3563 67e145e0 store 2 ,mem_24g_reconn_count 
+3564 20600000 rtn 
+
+g24_reconn_dispatch_next:
+3565 2040357f call g24_reconn_data_prep 
+3566 20403651 call g24_transmit_receive_ack 
+3567 242c3586 nbranch g24_reconn_device_fail ,sync 
+3568 2437b586 nbranch g24_reconn_device_fail ,user3 
+3569 2040366e call g24_ackpayload_parse 
+356a 6fe245cc fetch 4 ,mem_24g_pair_addr 
+356b 684a458f fetcht 4 ,mem_24g_addr 
+356c 98467c00 isub temp ,null 
+356d 2022b291 branch g24_pair_start ,zero 
+356e 6fe24604 fetch 4 ,mem_24g_device_addr 
+356f 684a458f fetcht 4 ,mem_24g_addr 
+3570 98467c00 isub temp ,null 
+3571 2042b557 call g24_store_receiver_addr ,zero 
+3572 6fe0c5fc fetch 1 ,mem_24g_conn_sm 
+3573 793ffe02 set0 state_24g_reconn ,pdata 
+3574 67e0c5fc store 1 ,mem_24g_conn_sm 
+3575 58000000 setarg 0 
+3576 67e145d8 store 2 ,mem_24g_pair_timeout 
+3577 67e145e0 store 2 ,mem_24g_reconn_count 
+3578 67e145de store 2 ,mem_24g_reconn_timeout 
+3579 70066f3c jam bt_evt_24g_attempt_success ,mem_fifo_temp 
+357a 2040782b call ui_ipc_send_event 
+
+g24_txbuf_clear:
+357b 4748c032 bpatchx patch32_1 ,mem_patch32 
+357c df200020 arg 32 ,loopcnt 
+357d d8a04519 arg mem_24g_txbuf ,contw 
+357e 20207ca3 branch memset0 
+
+g24_reconn_data_prep:
+357f 704519ff jam datatype_attemp ,mem_24g_txbuf 
+3580 6fe0c589 fetch 1 ,mem_24g_data_type 
+3581 67e0c51a store 1 ,mem_24g_txbuf + 1 
+3582 6fe24604 fetch 4 ,mem_24g_device_addr 
+3583 67e2451b store 4 ,mem_24g_txbuf + 2 
+3584 70458806 jam 6 ,mem_24g_datalen 
+3585 202031e5 branch g24_transmit_prep 
+
+g24_reconn_device_fail:
+3586 47494032 bpatchx patch32_2 ,mem_patch32 
+3587 6fe0c5e3 fetch 1 ,mem_24g_fast_conn_enable 
+3588 203a3222 branch g24_ch ,blank 
+3589 6fe145e0 fetch 2 ,mem_24g_reconn_count 
+358a 1fe0fe01 increase 1 ,pdata 
+358b 67e145e0 store 2 ,mem_24g_reconn_count 
+358c 2feffe09 isolate1 9 ,pdata 
+358d 6fe0c5e2 fetch 1 ,mem_24g_reconn_type 
+358e c000b593 beq fast_conn_and_receiver ,g24_reconn_fast_conn_and_receiver 
+358f c0013595 beq fast_conn_and_3_0_addr ,g24_reconn_fast_conn_and_3_0 
+3590 c001b597 beq receiver_and_3_0_addr ,g24_reconn_receiver_and_3_0 
+3591 c0023599 beq pair_and_3_0_addr ,g24_reconn_pair_and_3_0 
+3592 20203549 branch g24_reconn_receiver_addr 
+
+g24_reconn_fast_conn_and_receiver:
+3593 2020b549 branch g24_reconn_receiver_addr ,true 
+3594 20203541 branch g24_reconn_fast_conn 
+
+g24_reconn_fast_conn_and_3_0:
+3595 2020b550 branch g24_reconn_device_3_0_addr ,true 
+3596 20203541 branch g24_reconn_fast_conn 
+
+g24_reconn_receiver_and_3_0:
+3597 2020b550 branch g24_reconn_device_3_0_addr ,true 
+3598 20203549 branch g24_reconn_receiver_addr 
+
+g24_reconn_pair_and_3_0:
+3599 2020b550 branch g24_reconn_device_3_0_addr ,true 
+359a 2020329c branch g24_pair_init_param 
+
+g24_data_attemp:
+359b 6fe0c5eb fetch 1 ,mem_24g_rxdata_temp + 3 
+359c c000b59f beq datatype_device1 ,g24_data_attemp_device1 
+359d c00135a5 beq datatype_device2 ,g24_data_attemp_device2 
+359e 20600000 rtn 
+
+g24_data_attemp_device1:
+359f 6fe0c5de fetch 1 ,mem_24g_device1_bind_disable 
+35a0 247a0000 nrtn blank 
+35a1 6fe245ec fetch 4 ,mem_24g_rxdata_temp + 4 
+35a2 67e2462c store 4 ,mem_24g_transmitter_addr 
+
+g24_store_device1_addr:
+35a3 67e24630 store 4 ,mem_24g_device1_addr 
+35a4 20600000 rtn 
+
+g24_data_attemp_device2:
+35a5 6fe0c5df fetch 1 ,mem_24g_device2_bind_disable 
+35a6 247a0000 nrtn blank 
+35a7 6fe245ec fetch 4 ,mem_24g_rxdata_temp + 4 
+35a8 67e2462c store 4 ,mem_24g_transmitter_addr 
+
+g24_store_device2_addr:
+35a9 67e24634 store 4 ,mem_24g_device2_addr 
+35aa 20600000 rtn 
+
+rssi_store:
+35ab 4749c032 bpatchx patch32_3 ,mem_patch32 
+35ac 1a227e00 copy rega ,pdata 
+35ad 98408a00 iadd temp ,contw 
+35ae 6fe08009 fetch 1 ,mem_rssi 
+35af e7e08005 istore 1 ,contw 
+35b0 18408401 increase 1 ,temp 
+35b1 6fe0c5d2 fetch 1 ,mem_rssi_buff_index 
+35b2 98410400 iand temp ,temp 
+35b3 20600000 rtn 
+
+rssi_average:
+35b4 474a4032 bpatchx patch32_4 ,mem_patch32 
+35b5 6fe0c5d2 fetch 1 ,mem_rssi_buff_index 
+35b6 1fe0fe01 increase 1 ,pdata 
+35b7 67e1069b store 2 ,mem_loopcnt 
+35b8 1fe27200 copy pdata ,loopcnt 
+35b9 1a220c00 copy rega ,contr 
+35ba dfe00000 arg 0 ,pdata 
+
+rssi_average_loop:
+35bb e8408006 ifetcht 1 ,contr 
+35bc 9840fe00 iadd temp ,pdata 
+35bd c20035bb loop rssi_average_loop 
+35be 6849069b fetcht 2 ,mem_loopcnt 
+35bf 9846fc00 idiv temp 
+35c0 20407d62 call wait_div_end 
+35c1 18078400 quotient temp 
+35c2 c6138000 rtnmark1 mark_24g_rxmode 
+35c3 18427e00 copy temp ,pdata 
+35c4 c6930000 rtnmark0 mark_24g 
+35c5 20402308 call bcd 
+35c6 1fe20400 copy pdata ,temp 
+35c7 20600000 rtn 
+
+save_rssi_dec:
+35c8 202022e9 branch save_rssi 
+
+rssi_transmitter_buff_init:
+35c9 6fe145f0 fetch 2 ,mem_rssi_signal_buf_ptr 
+35ca 202035dd branch rssi_buff_clear 
+
+rssi_signal:
+35cb 1fe22200 copy pdata ,rega 
+35cc 6848c5ef fetcht 1 ,mem_rssi_signal_index 
+35cd 6fe145f0 fetch 2 ,mem_rssi_signal_buf_ptr 
+35ce 98408a00 iadd temp ,contw 
+35cf 1a227e00 copy rega ,pdata 
+35d0 e7e08005 istore 1 ,contw 
+35d1 18408401 increase 1 ,temp 
+35d2 6fe0c5d2 fetch 1 ,mem_rssi_buff_index 
+35d3 98410400 iand temp ,temp 
+35d4 6048c5ef storet 1 ,mem_rssi_signal_index 
+35d5 20600000 rtn 
+
+rssi_receiver_buff_init:
+35d6 6fe14640 fetch 2 ,mem_rssi_noise_buffer_ptr 
+35d7 204035dd call rssi_buff_clear 
+35d8 6fe14642 fetch 2 ,mem_rssi_noise_self_buffer_ptr 
+35d9 204035dd call rssi_buff_clear 
+35da 6fe14644 fetch 2 ,mem_rssi_noise_device1_buffer_ptr 
+35db 204035dd call rssi_buff_clear 
+35dc 6fe14646 fetch 2 ,mem_rssi_noise_device2_buffer_ptr 
+
+rssi_buff_clear:
+35dd 207a0000 rtn blank 
+35de 1fe20a00 copy pdata ,contw 
+35df 6fe0c5d2 fetch 1 ,mem_rssi_buff_index 
+35e0 1fe0fe01 increase 1 ,pdata 
+35e1 1fe27200 copy pdata ,loopcnt 
+35e2 20207ca1 branch clear_mem 
+
+rssi_noise:
+35e3 204035c8 call save_rssi_dec 
+35e4 207a0000 rtn blank 
+35e5 6848c639 fetcht 1 ,mem_rssi_noise_index 
+35e6 6a214640 fetchr rega ,2 ,mem_rssi_noise_buffer_ptr 
+35e7 204035ab call rssi_store 
+35e8 6048c639 storet 1 ,mem_rssi_noise_index 
+35e9 20600000 rtn 
+
+rssi_noise_monitor:
+35ea 6a214640 fetchr rega ,2 ,mem_rssi_noise_buffer_ptr 
+35eb 204035b4 call rssi_average 
+35ec 6048c638 storet 1 ,mem_rssi_noise_avg 
+35ed 18467c50 sub temp ,rssi_thresh_noise ,null 
+35ee 24610000 nrtn positive 
+35ef 20203222 branch g24_ch 
+
+g24_transmit_init:
+35f0 6fe244f1 fetch 4 ,mem_24g_lap 
+35f1 67e24604 store 4 ,mem_24g_device_addr 
+35f2 202035c9 branch rssi_transmitter_buff_init 
+
+g24_interval_param_4ms:
+35f3 58002fb2 setarg g24_4ms_interval_param 
+35f4 67e1c608 store 3 ,mem_24g_short_sleep_set 
+35f5 58100c0c setarg 0x100c0c 
+35f6 67e1c5a7 store 3 ,mem_24g_interval 
+35f7 5800bb80 setarg 0x00bb80 
+35f8 67e1c60b store 3 ,mem_24g_long_sleep_set 
+35f9 70462105 jam 5 ,mem_24g_fast_hop_count 
+35fa 20600000 rtn 
+
+g24_interval_param_8ms:
+35fb 5800f80c setarg g24_8ms_interval_param 
+35fc 67e1c608 store 3 ,mem_24g_short_sleep_set 
+35fd 581c1919 setarg 0x1c1919 
+35fe 67e1c5a7 store 3 ,mem_24g_interval 
+35ff 58017700 setarg 0x017700 
+3600 67e1c60b store 3 ,mem_24g_long_sleep_set 
+3601 7046210b jam 11 ,mem_24g_fast_hop_count 
+3602 20600000 rtn 
+
+g24_transmit_dispatch:
+3603 c6930000 rtnmark0 mark_24g 
+3604 6fe0c5fc fetch 1 ,mem_24g_conn_sm 
+3605 c280b2a3 bbit1 state_24g_pair ,g24_pair_dispatch 
+3606 c281355c bbit1 state_24g_reconn ,g24_reconn_dispatch 
+3607 6fe0c618 fetch 1 ,mem_24g_transmit_by_interrupt 
+3608 c000b6c0 beq g24_tx_timer_int_enable ,g24_transmit_by_interrupt 
+
+g24_transmit_no_interrupt:
+3609 474ac032 bpatchx patch32_5 ,mem_patch32 
+360a 20403625 call g24_txdata_prep 
+360b 2434369f nbranch g24_nodata_transmit ,user 
+
+g24_transmit_start:
+360c 2040363a call g24_transmit_process 
+360d 204036e8 call power_ctrl_start 
+360e 6fe0c3cb fetch 1 ,mem_device_option 
+360f c004600a beq dvc_op_mouse ,mouse_24g_transmit_start 
+
+g24_transmit_start_next:
+3610 6fe4460b fetch 8 ,mem_24g_long_sleep_set 
+3611 67e445af store 8 ,mem_24g_enter_hibernate 
+3612 6fe1461d fetch 2 ,mem_24g_long_sleep_param_update_timer_init 
+3613 67e1461f store 2 ,mem_24g_long_sleep_param_update_timer 
+3614 6fe145f8 fetch 2 ,mem_cb_24g_transmit_short_sleep 
+3615 20207d79 branch callback_func 
+
+g24_short_sleep:
+3616 474b4032 bpatchx patch32_6 ,mem_patch32 
+3617 204036b4 call g24_lpm_wait 
+3618 24740000 nrtn user 
+3619 204036be call g24_setgpio_lpm_before 
+361a 20407de2 call clear_wake 
+361b 6fe1c608 fetch 3 ,mem_24g_short_sleep_set 
+361c 20203622 branch g24_long_seep2 
+
+g24_long_sleep:
+361d 474bc032 bpatchx patch32_7 ,mem_patch32 
+361e 204036b4 call g24_lpm_wait 
+361f 24740000 nrtn user 
+3620 204036be call g24_setgpio_lpm_before 
+3621 6fe445af fetch 8 ,mem_24g_enter_hibernate 
+
+g24_long_seep2:
+3622 20407d25 call clk2lpo 
+3623 604a40a9 storet 4 ,mem_sleep_counter 
+3624 2020241e branch lpm_sleep 
+
+g24_txdata_prep:
+3625 20403628 call g24_package_data 
+3626 24740000 nrtn user 
+3627 202031e5 branch g24_transmit_prep 
+
+g24_package_data:
+3628 6fe145f2 fetch 2 ,mem_cb_24g_transmit_data 
+3629 20407d79 call callback_func 
+362a 2034362e branch g24_accumulate_data ,user 
+362b 6fe3c51a fetch 7 ,mem_24g_txbuf + 1 
+362c 207a0000 rtn blank 
+362d 20207dba branch enable_user 
+
+g24_accumulate_data:
+362e 70460200 jam 0 ,mem_24g_abort_pac 
+362f 1a20fe01 add rega ,1 ,pdata 
+3630 67e0c588 store 1 ,mem_24g_datalen 
+3631 20403636 call g24_transmit_rf_ctrl_clear 
+3632 67e0c519 store 1 ,mem_24g_txbuf 
+3633 1a420c00 copy regb ,contr 
+3634 1a227200 copy rega ,loopcnt 
+3635 20207cda branch memcpy 
+
+g24_transmit_rf_ctrl_clear:
+3636 6fe0c589 fetch 1 ,mem_24g_data_type 
+3637 1fe17e07 and_into bits_data ,pdata 
+3638 67e0c589 store 1 ,mem_24g_data_type 
+3639 20600000 rtn 
+
+g24_transmit_process:
+363a 58000000 setarg 0 
+363b 67e0c601 store 1 ,mem_24g_retry 
+363c 67e14622 store 2 ,mem_24g_retransmit 
+
+g24_transmit_loop:
+363d 20403651 call g24_transmit_receive_ack 
+363e 6fe0c57f fetch 1 ,mem_24g_no_ack 
+363f c000b646 beq no_ack_24g ,g24_transmit_no_ack 
+3640 242c365f nbranch g24_retransmit ,sync 
+3641 2437b65f nbranch g24_retransmit ,user3 
+3642 2040366e call g24_ackpayload_parse 
+3643 6fe0c3cb fetch 1 ,mem_device_option 
+3644 1fe67c08 sub pdata ,dvc_op_mouse ,null 
+3645 2042e262 call mouse_24g_transmit_callback ,zero 
+
+g24_transmit_no_ack:
+3646 2040371a call power_ctrl_pac_succ_incrs 
+
+g24_transmit_next_packet:
+3647 2040357b call g24_txbuf_clear 
+3648 6fe0c57e fetch 1 ,mem_24g_pid 
+3649 1fe0fe01 increase 1 ,pdata 
+364a 67e0c57e store 1 ,mem_24g_pid 
+364b 20403692 call g24_hop_enable_packet 
+
+g24_transmit_abandon:
+364c 474c4033 bpatchx patch33_0 ,mem_patch33 
+364d 58000000 setarg 0 
+364e 67e0c5fd store 1 ,mem_24g_ensure 
+364f 67e145fe store 2 ,mem_24g_txfail_cnt 
+3650 20600000 rtn 
+
+g24_transmit_receive_ack:
+3651 474cc033 bpatchx patch33_1 ,mem_patch33 
+3652 7857fc00 disable user3 
+3653 20403195 call g24_transmit 
+3654 6fe0c57f fetch 1 ,mem_24g_no_ack 
+3655 c000b183 beq no_ack_24g ,g24_end_of_packet 
+3656 18002a00 force 0 ,radio_ctrl 
+3657 6fe2458f fetch 4 ,mem_24g_addr 
+3658 98001200 iforce access 
+3659 68488008 fetcht 1 ,mem_last_freq 
+365a 2040216f call set_freq_rx 
+365b 204021a6 call rf_rx_enable 
+365c 20403121 call g24_receive_rxon 
+365d 2057b183 call g24_end_of_packet ,user3 
+365e 20600000 rtn 
+
+g24_retransmit:
+365f 474d4033 bpatchx patch33_2 ,mem_patch33 
+3660 6fe0c3cb fetch 1 ,mem_device_option 
+3661 c00460f9 beq dvc_op_mouse ,mouse_g24_retransmit 
+
+g24_retransmit0:
+3662 6fe0c602 fetch 1 ,mem_24g_abort_pac 
+3663 247a0000 nrtn blank 
+3664 6fe145fe fetch 2 ,mem_24g_txfail_cnt 
+3665 1fe0fe01 increase 1 ,pdata 
+3666 67e145fe store 2 ,mem_24g_txfail_cnt 
+3667 6fe0c5ff fetch 1 ,mem_24g_txfail_cnt + 1 
+3668 c2823676 bbit1 4 ,g24_tx_attempt_fail 
+3669 2040367c call g24_transmit_hop_process 
+366a 6fe14622 fetch 2 ,mem_24g_retransmit 
+366b 1fe0fe01 increase 1 ,pdata 
+366c 67e14622 store 2 ,mem_24g_retransmit 
+366d 2020363d branch g24_transmit_loop 
+
+g24_ackpayload_parse:
+366e 474dc033 bpatchx patch33_3 ,mem_patch33 
+366f 20403214 call g24_read_len_pid_crc 
+3670 6fe0c57d fetch 1 ,mem_24g_rxdata_length 
+3671 207a0000 rtn blank 
+3672 98007200 iforce loopcnt 
+3673 d8c044f9 arg mem_24g_rxbuf + 2 ,contr 
+3674 d8a0455d arg mem_24g_rxpayload ,contw 
+3675 20207cda branch memcpy 
+
+g24_tx_attempt_fail:
+3676 474e4033 bpatchx patch33_4 ,mem_patch33 
+3677 58000000 setarg 0 
+3678 67e145fe store 2 ,mem_24g_txfail_cnt 
+3679 70460001 jam 1 ,mem_24g_attempt_fail_flag 
+
+g24_stop_24g_mode:
+367a 70066f3a jam bt_evt_24g_attempt_fail ,mem_fifo_temp 
+367b 2020782b branch ui_ipc_send_event 
+
+g24_transmit_hop_process:
+367c 474ec033 bpatchx patch33_5 ,mem_patch33 
+367d 6848c601 fetcht 1 ,mem_24g_retry 
+367e 6fe0c621 fetch 1 ,mem_24g_fast_hop_count 
+367f 98467c00 isub temp ,null 
+3680 2421369a nbranch g24_tx_fast_hop ,positive 
+3681 18408401 increase 1 ,temp 
+3682 6048c601 storet 1 ,mem_24g_retry 
+3683 6fe0c621 fetch 1 ,mem_24g_fast_hop_count 
+3684 c002b689 beq 5 ,g24_transmit_hop_process_4ms 
+3685 6fe0c601 fetch 1 ,mem_24g_retry 
+3686 c0033694 beq 6 ,g24_hop_ch_disable 
+3687 c0063694 beq 12 ,g24_hop_ch_disable 
+3688 20600000 rtn 
+
+g24_transmit_hop_process_4ms:
+3689 6fe0c601 fetch 1 ,mem_24g_retry 
+368a c001b694 beq 3 ,g24_hop_ch_disable 
+368b c0033694 beq 6 ,g24_hop_ch_disable 
+368c 20600000 rtn 
+
+g24_hop_ch_enable:
+
+g24_txpayload_type_update:
+368d c517b690 bmark1 mark_ble_lr ,g24_lr_type_update 
+368e 67e0c53a store 1 ,mem_24g_txpayload + offset_data_type 
+368f 20600000 rtn 
+
+g24_lr_type_update:
+3690 67e0c53b store 1 ,mem_24g_txpayload + offset_lr_data_type 
+3691 20600000 rtn 
+
+g24_hop_enable_packet:
+3692 6fe0c589 fetch 1 ,mem_24g_data_type 
+3693 c4020000 rtnbit0 bit_hop 
+
+g24_hop_ch_disable:
+3694 6fe0c589 fetch 1 ,mem_24g_data_type 
+3695 793ffe04 set0 bit_hop ,pdata 
+3696 67e0c589 store 1 ,mem_24g_data_type 
+3697 2040368d call g24_txpayload_type_update 
+3698 2040371e call power_ctrl_pac_succ_decrs 
+3699 20203222 branch g24_ch 
+
+g24_tx_fast_hop:
+369a 2040370e call power_ctrl_txpower_incrs 
+369b 2040371e call power_ctrl_pac_succ_decrs 
+369c 20203222 branch g24_ch 
+
+g24_search_receiver:
+369d 6fe145f4 fetch 2 ,mem_cb_24g_search_receiver 
+369e 20207d79 branch callback_func 
+
+g24_nodata_transmit:
+369f 6fe0c602 fetch 1 ,mem_24g_abort_pac 
+36a0 205a36a6 call g24_send_abort_packet ,blank 
+36a1 6fe0c618 fetch 1 ,mem_24g_transmit_by_interrupt 
+36a2 c1008000 rtneq g24_tx_timer_int_enable 
+36a3 2040369d call g24_search_receiver 
+36a4 6fe145fa fetch 2 ,mem_cb_24g_transmit_long_sleep 
+36a5 20207d79 branch callback_func 
+
+g24_send_abort_packet:
+36a6 70458901 jam type_ms ,mem_24g_data_type 
+36a7 70460201 jam 1 ,mem_24g_abort_pac 
+36a8 20403636 call g24_transmit_rf_ctrl_clear 
+36a9 67e0c519 store 1 ,mem_24g_txbuf 
+36aa 58000000 setarg 0 
+36ab 67e3c51a store 7 ,mem_24g_txbuf + 1 
+36ac 6fe24604 fetch 4 ,mem_24g_device_addr 
+36ad 67e24521 store 4 ,mem_24g_txbuf + 8 
+36ae 7045880c jam 12 ,mem_24g_datalen 
+36af 6fe0c589 fetch 1 ,mem_24g_data_type 
+36b0 79207e03 set1 bit_abort ,pdata 
+36b1 67e0c589 store 1 ,mem_24g_data_type 
+36b2 204031e5 call g24_transmit_prep 
+36b3 2020360c branch g24_transmit_start 
+
+g24_lpm_wait:
+36b4 474f4033 bpatchx patch33_6 ,mem_patch33 
+36b5 78347c00 enable user 
+36b6 20402408 call lpo_calibration 
+36b7 6fe1c0bd fetch 3 ,mem_clks_per_lpo 
+36b8 203a7dbc branch disable_user ,blank 
+36b9 6fe0c094 fetch 1 ,mem_lpm_mode 
+36ba 203a7dbc branch disable_user ,blank 
+36bb 6fe0c618 fetch 1 ,mem_24g_transmit_by_interrupt 
+36bc c000fdbc beq g24_tx_timer_int_enable ,disable_user 
+36bd 20600000 rtn 
+
+g24_setgpio_lpm_before:
+36be 6fe145f6 fetch 2 ,mem_cb_24g_lpm_before 
+36bf 20207d79 branch callback_func 
+
+g24_transmit_by_interrupt:
+36c0 20403245 call g24_timer_check 
+36c1 24740000 nrtn user 
+36c2 204036d5 call g24_interval_calibrate 
+36c3 6fe14619 fetch 2 ,mem_24g_transmit_by_interrupt_exit_count 
+36c4 1fe0fe01 increase 1 ,pdata 
+36c5 67e14619 store 2 ,mem_24g_transmit_by_interrupt_exit_count 
+36c6 6849461b fetcht 2 ,mem_24g_transmit_by_interrupt_exit_count_init 
+36c7 98467c00 isub temp ,null 
+36c8 2042b6ca call g24_transmit_by_interrupt_exit ,zero 
+36c9 20203609 branch g24_transmit_no_interrupt 
+
+g24_transmit_by_interrupt_exit:
+36ca 70461800 jam g24_tx_timer_int_disable ,mem_24g_transmit_by_interrupt 
+36cb 58000000 setarg 0 
+36cc 67e14619 store 2 ,mem_24g_transmit_by_interrupt_exit_count 
+36cd 58000064 setarg 100 
+36ce 67e1461b store 2 ,mem_24g_transmit_by_interrupt_exit_count_init 
+
+g24_interval_min:
+36cf 70461700 jam 0 ,mem_24g_pac_index 
+36d0 6fe0c5a8 fetch 1 ,mem_24g_interval_min 
+
+g24_interval_store:
+36d1 67e0c5a7 store 1 ,mem_24g_interval 
+36d2 20600000 rtn 
+
+g24_interval_max:
+36d3 6fe0c5a9 fetch 1 ,mem_24g_interval_max 
+36d4 202036d1 branch g24_interval_store 
+
+g24_interval_calibrate:
+36d5 6fe0c617 fetch 1 ,mem_24g_pac_index 
+36d6 1fe0fe01 increase 1 ,pdata 
+36d7 67e0c617 store 1 ,mem_24g_pac_index 
+36d8 c00236d3 beq 4 ,g24_interval_max 
+36d9 c002b6cf beq 5 ,g24_interval_min 
+36da 20600000 rtn 
+
+g24_transmit_by_interrupt_enable:
+36db 70461801 jam g24_tx_timer_int_enable ,mem_24g_transmit_by_interrupt 
+36dc 58000000 setarg 0 
+36dd 67e14619 store 2 ,mem_24g_transmit_by_interrupt_exit_count 
+36de 20600000 rtn 
+
+g24_factory_check:
+36df df200002 arg 2 ,loopcnt 
+36e0 d8c0458f arg mem_24g_addr ,contr 
+
+pdata_0xff_check:
+36e1 20407dba call enable_user 
+36e2 5800ffff setarg 0xffff 
+
+pdata_0xff_check_loop:
+36e3 e8410006 ifetcht 2 ,contr 
+36e4 98467c00 isub temp ,null 
+36e5 2442fdbc ncall disable_user ,zero 
+36e6 c20036e3 loop pdata_0xff_check_loop 
+36e7 20600000 rtn 
+
+power_ctrl_start:
+36e8 474fc033 bpatchx patch33_7 ,mem_patch33 
+36e9 6fe0c437 fetch 1 ,mem_power_ctrl_disable 
+36ea 247a0000 nrtn blank 
+36eb 6fe144e9 fetch 2 ,mem_ui_state_map 
+36ec c3858000 rtnbit1 ui_state_ble_adv 
+36ed 6a2145f0 fetchr rega ,2 ,mem_rssi_signal_buf_ptr 
+36ee 204035b4 call rssi_average 
+36ef 6048c624 storet 1 ,mem_rssi_avg_received 
+36f0 6fe0c629 fetch 1 ,mem_rssi_dis_max_24g 
+36f1 c51336f3 bmark1 mark_24g ,power_ctrl_start_next 
+36f2 6fe0c62c fetch 1 ,mem_rssi_dis_max_ble 
+
+power_ctrl_start_next:
+36f3 98467c00 isub temp ,null 
+36f4 2421370d nbranch power_ctrl_txpower_incrs_force ,positive 
+36f5 6fe0c626 fetch 1 ,mem_power_ctrl_pac_succ_cnt 
+36f6 1fe67c02 sub pdata ,2 ,null 
+36f7 242136fb nbranch power_ctrl_txpower_decrs_check ,positive 
+36f8 6fe0c626 fetch 1 ,mem_power_ctrl_pac_succ_cnt 
+36f9 c000370e beq 0 ,power_ctrl_txpower_incrs 
+36fa 20600000 rtn 
+
+power_ctrl_txpower_decrs_check:
+36fb 6fe0c626 fetch 1 ,mem_power_ctrl_pac_succ_cnt 
+36fc 6848c627 fetcht 1 ,mem_power_ctrl_pac_succ_cnt_init 
+36fd 98467c00 isub temp ,null 
+36fe 24628000 nrtn zero 
+36ff 70462600 jam 0 ,mem_power_ctrl_pac_succ_cnt 
+
+power_ctrl_txpower_decrs:
+3700 6848c624 fetcht 1 ,mem_rssi_avg_received 
+3701 6fe0c628 fetch 1 ,mem_rssi_dis_min_24g 
+3702 c5133704 bmark1 mark_24g ,power_ctrl_txpower_decrs_next 
+3703 6fe0c62b fetch 1 ,mem_rssi_dis_min_ble 
+
+power_ctrl_txpower_decrs_next:
+3704 98467c00 isub temp ,null 
+3705 24610000 nrtn positive 
+3706 6fe0c625 fetch 1 ,mem_power_ctrl_level 
+3707 c0003715 beq 0 ,power_ctrl_decrs_level0 
+3708 1fe0ffff increase -1 ,pdata 
+3709 67e0c625 store 1 ,mem_power_ctrl_level 
+370a c0003715 beq 0 ,power_ctrl_decrs_level0 
+
+power_ctrl_decrs_level1:
+
+power_ctrl_incrs_level1:
+370b 70414100 jam tx_power_0db ,mem_tx_power 
+370c 20600000 rtn 
+
+power_ctrl_txpower_incrs_force:
+370d 70462600 jam 0 ,mem_power_ctrl_pac_succ_cnt 
+
+power_ctrl_txpower_incrs:
+370e 6fe0c625 fetch 1 ,mem_power_ctrl_level 
+370f c0013713 beq 2 ,power_ctrl_incrs_level2 
+3710 1fe0fe01 increase 1 ,pdata 
+3711 67e0c625 store 1 ,mem_power_ctrl_level 
+3712 c000b70b beq 1 ,power_ctrl_incrs_level1 
+
+power_ctrl_incrs_level2:
+3713 70414106 jam tx_power_6db ,mem_tx_power 
+3714 20600000 rtn 
+
+power_ctrl_decrs_level0:
+3715 70414185 jam tx_power_f5db ,mem_tx_power 
+3716 20600000 rtn 
+
+power_ctrl_pac_succ_cnt_init:
+3717 70462501 jam 1 ,mem_power_ctrl_level 
+3718 70462600 jam 0 ,mem_power_ctrl_pac_succ_cnt 
+3719 20600000 rtn 
+
+power_ctrl_pac_succ_incrs:
+371a 6fe0c626 fetch 1 ,mem_power_ctrl_pac_succ_cnt 
+371b 1fe0fe01 increase 1 ,pdata 
+371c 67e0c626 store 1 ,mem_power_ctrl_pac_succ_cnt 
+371d 20600000 rtn 
+
+power_ctrl_pac_succ_decrs:
+371e 6fe0c626 fetch 1 ,mem_power_ctrl_pac_succ_cnt 
+371f 1fe67c02 sub pdata ,2 ,null 
+3720 24413726 ncall power_ctrl_pac_succ_cnt_reinit ,positive 
+3721 6fe0c626 fetch 1 ,mem_power_ctrl_pac_succ_cnt 
+3722 c1000000 rtneq 0 
+3723 1fe0ffff increase -1 ,pdata 
+3724 67e0c626 store 1 ,mem_power_ctrl_pac_succ_cnt 
+3725 20600000 rtn 
+
+power_ctrl_pac_succ_cnt_reinit:
+3726 70462603 jam 3 ,mem_power_ctrl_pac_succ_cnt 
+3727 20600000 rtn 
+
+ali_mesh_access_layer_resolve_message:
+3728 6fe088f3 fetch 1 ,mem_ccm_data_len 
+3729 67e08709 store 1 ,mem_mesh_receive_model_message_payload_len 
+372a 1e020c00 copy alarm ,contr 
+372b 20407c8e call memcpy24 
+372c 6fe14826 fetch 2 ,mem_mesh_cb_receive_access_message 
+372d 20207d79 branch callback_func 
+
+ali_mesh_access_layer_check_access_message_opcode:
+372e 7049b81e jam mesh_receive_new_message_timer ,mem_mesh_upper_receive_new_message_timer 
+372f 2040378c call ali_mesh_app_recv_new_mesh_pkt 
+3730 6fe0870a fetch 1 ,mem_mesh_receive_model_message_payload_opcode 
+3731 c0003739 beq mesh_message_opcode_config_appkey_add ,ali_mesh_access_layer_message_opcode_config_appkey_add 
+3732 c0403d67 beq mesh_configuration_and_health_message_opcode_header ,ali_mesh_access_layer_config_or_health_message_opcode 
+3733 c0413ed4 beq mesh_module_message_opcode_header ,ali_mesh_model_layer_check_model_message_opcode 
+3734 c068b799 beq vendor_message_attr_set ,ali_mesh_ali_vendor_message_attribute_set 
+3735 c06837ba beq vendor_message_attr_get ,ali_mesh_ali_vendor_message_opcode_attr_get 
+3736 c0693799 beq vendor_message_attr_set_unacknowledged ,ali_mesh_ali_vendor_message_attribute_set 
+3737 c06ab7bb beq vendor_message_attr_confirmation ,ali_mesh_ali_vendor_message_opcode_attr_confrimation 
+3738 20600000 rtn 
+
+ali_mesh_access_layer_message_opcode_config_appkey_add:
+3739 d8c0070e arg mem_mesh_receive_application_key ,contr 
+373a d8a04959 arg mem_mesh_application_key ,contw 
+373b 20407c8f call memcpy16 
+373c 7047e400 jam paired_status ,mem_mesh_provisioned_flag 
+373d 20403bbf call ali_mesh_encrypt_base_function_k3 
+373e 20403bb1 call ali_mesh_encrypt_base_function_k4 
+373f 2040375e call ali_mesh_access_layer_finish_pairing_init_subscription_list 
+3740 2040374f call ali_mesh_accesss_layer_check_message_type 
+3741 20403754 call ali_mesh_access_layer_send_config_appkey_status 
+3742 7047e400 jam paired_status ,mem_mesh_provisioned_flag 
+3743 6fe14828 fetch 2 ,mem_mesh_cb_receive_config_appkey_add 
+3744 20207d79 branch callback_func 
+
+ali_mesh_access_layer_recv_cfg_appkey_add_cb:
+3745 58000000 setarg 0 
+3746 67e14806 store 2 ,mem_mesh_fast_pairing_timer 
+3747 180a7e00 random pdata 
+3748 1fe17e1f and pdata ,0x1f ,pdata 
+3749 1fe0fe1e add pdata ,30 ,pdata 
+374a 67e0c804 store 1 ,mem_mesh_report_full_attribute_timer 
+374b 1fe0fe05 add pdata ,5 ,pdata 
+374c 67e0c803 store 1 ,mem_mesh_report_power_on_timer 
+374d 20403e53 call mesh_clear_timer_data 
+374e 20203a71 branch mesh_receive_config_appkey_add_cb 
+
+ali_mesh_accesss_layer_check_message_type:
+374f 6fe08951 fetch 1 ,mem_mesh_network_packet_type 
+3750 7047e404 jam received_config_appkey_add ,mem_mesh_provisioned_flag 
+3751 c1008000 rtneq mesh_message_app 
+3752 7047e400 jam paired_status ,mem_mesh_provisioned_flag 
+3753 20600000 rtn 
+
+ali_mesh_access_layer_send_config_appkey_status:
+3754 58000080 setarg mesh_configuration_and_health_message_opcode_header 
+3755 67e08723 store 1 ,mem_mesh_access_layer_payload 
+3756 58000003 setarg mesh_message_opcode_config_config_model_publication_set 
+3757 e7e08005 istore 1 ,contw 
+3758 58000000 setarg status_code_success 
+3759 e7e08005 istore 1 ,contw 
+375a 6fe1870b fetch 3 ,mem_mesh_netkeyindex_and_appkeyindex 
+375b e7e18005 istore 3 ,contw 
+375c 70072206 jam 6 ,mem_mesh_access_layer_payload_len 
+375d 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_access_layer_finish_pairing_init_subscription_list:
+375e 6fe1484c fetch 2 ,mem_mesh_core_feature 
+375f c3810000 rtnbit1 mesh_feature_disable_subscription 
+3760 20403e3e call mesh_get_element_info_config 
+
+ali_mesh_access_layer_finish_pairing_init_subscription_list_loop:
+3761 1a20a606 add rega ,element_device_subscription_label ,regc 
+3762 5fffffff setarg -1 
+3763 e7e40013 istore subscription_max_count ,regc 
+3764 e7e40005 istore subscription_max_count ,contw 
+3765 efe10011 ifetch 2 ,rega 
+3766 e7e10013 istore 2 ,regc 
+3767 1a427e00 copy regb ,pdata 
+3768 9a20a200 iadd rega ,rega 
+3769 c2003761 loop ali_mesh_access_layer_finish_pairing_init_subscription_list_loop 
+376a 6fe14848 fetch 2 ,mem_mesh_cb_subscriptuion_list_changed 
+376b 20207d79 branch callback_func 
+
+ali_mesh_access_layer_send_generic_onoff_status:
+376c 58000082 setarg mesh_module_message_opcode_header 
+376d 67e08723 store 1 ,mem_mesh_access_layer_payload 
+376e 58000004 setarg mesh_module_message_opcode_generic_onoff_status_no_head 
+376f e7e08005 istore 1 ,contw 
+3770 6fe0870c fetch 1 ,mem_mesh_generic_onoff_set_payload_onoff 
+3771 e7e08005 istore 1 ,contw 
+3772 70072203 jam 3 ,mem_mesh_access_layer_payload_len 
+3773 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_access_layer_send_light_lightness_status:
+3774 58000082 setarg mesh_module_message_opcode_header 
+3775 67e08723 store 1 ,mem_mesh_access_layer_payload 
+3776 5800004e setarg mesh_module_message_opcode_light_lightness_status_no_head 
+3777 e7e08005 istore 1 ,contw 
+3778 6fe1070c fetch 2 ,mem_mesh_light_lightness_set_payload_lightness 
+3779 e7e10005 istore 2 ,contw 
+377a 70072204 jam 4 ,mem_mesh_access_layer_payload_len 
+377b 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_access_layer_send_light_ctl_stauts:
+377c 58000082 setarg mesh_module_message_opcode_header 
+377d 67e08723 store 1 ,mem_mesh_access_layer_payload 
+377e 58000060 setarg mesh_module_message_opcode_light_ctl_status_no_head 
+377f e7e08005 istore 1 ,contw 
+3780 6fe2070c fetch 4 ,mem_mesh_ctl_lightness 
+3781 e7e20005 istore 4 ,contw 
+3782 70072206 jam 6 ,mem_mesh_access_layer_payload_len 
+3783 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_access_layer_send_scene_status:
+3784 5800005e setarg mesh_module_message_opcode_scene_status 
+3785 67e08723 store 1 ,mem_mesh_access_layer_payload 
+3786 58000000 setarg mesh_success 
+3787 e7e08005 istore 1 ,contw 
+3788 6fe1070c fetch 2 ,mem_mesh_scene_recall_payload_scene_number 
+3789 e7e10005 istore 2 ,contw 
+378a 70072204 jam 4 ,mem_mesh_access_layer_payload_len 
+378b 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_app_recv_new_mesh_pkt:
+378c 6fe0c804 fetch 1 ,mem_mesh_report_full_attribute_timer 
+378d 207a0000 rtn blank 
+378e 1fe0fe1e pincrease 30 
+378f 67e0c804 store 1 ,mem_mesh_report_full_attribute_timer 
+3790 20600000 rtn 
+
+ali_mesh_report_power_on_timer:
+3791 da604803 arg mem_mesh_report_power_on_timer ,regc 
+3792 da4037e4 arg ali_mesh_ali_vendor_message_opcode_device_power_on ,regb 
+3793 202042e0 branch timer_single_step 
+
+ali_mesh_report_full_attribute_timer:
+3794 da604804 arg mem_mesh_report_full_attribute_timer ,regc 
+3795 da403797 arg ali_mesh_app_report_device_state ,regb 
+3796 202042e0 branch timer_single_step 
+
+ali_mesh_app_report_device_state:
+3797 6fe14855 fetch 2 ,mem_mesh_app_deport_device_state 
+3798 20207d79 branch callback_func 
+
+ali_mesh_ali_vendor_message_attribute_set:
+3799 204037c4 call ali_mesh_ali_vendor_message_attrbute_check_company_id_and_tid 
+379a 24740000 nrtn user 
+379b 47504034 bpatchx patch34_0 ,mem_patch34 
+379c 6fe1070e fetch 2 ,mem_mesh_vendor_message_attr_type 
+379d d840f01f arg vendor_message_attr_type_time ,temp 
+379e 98467c00 isub temp ,null 
+379f 2022b7d8 branch ali_mesh_ali_vendor_message_opcode_timer_set_curr_time ,zero 
+37a0 d840f014 arg vendor_mseeage_attr_type_set_time_repeat ,temp 
+37a1 98467c00 isub temp ,null 
+37a2 2022b91c branch ali_mesh_ali_vendor_message_opcode_timer_set_timing_cyclically ,zero 
+37a3 d840f013 arg vendor_mseeage_attr_type_set_time_single ,temp 
+37a4 98467c00 isub temp ,null 
+37a5 2022b907 branch ali_mesh_ali_vendor_message_opcode_timer_set_timing ,zero 
+37a6 d840f017 arg vendor_message_attr_type_timer_deleate ,temp 
+37a7 98467c00 isub temp ,null 
+37a8 2022b819 branch ali_mesh_ali_vendor_message_opcode_delete_timer ,zero 
+37a9 d840f018 arg vendor_message_attr_type_timer_inquire ,temp 
+37aa 98467c00 isub temp ,null 
+37ab 2022b845 branch ali_mesh_ali_vendor_message_opcode_timer_inquire ,zero 
+37ac d840f016 arg vendor_mseeage_attr_type_timer_enable ,temp 
+37ad 98467c00 isub temp ,null 
+37ae 2022b86a branch ali_mesh_ali_vendor_message_opcode_timer_set_state ,zero 
+37af d8400534 arg vendor_message_attr_type_main_light ,temp 
+37b0 98467c00 isub temp ,null 
+37b1 2022b7cf branch ali_mesh_ali_vendor_message_attribute_set_main_light ,zero 
+37b2 d8400533 arg vendor_message_attr_type_background_light ,temp 
+37b3 98467c00 isub temp ,null 
+37b4 2022b7d2 branch ali_mesh_ali_vendor_message_attribute_set_background_light ,zero 
+37b5 d8400123 arg vendor_message_attr_type_color ,temp 
+37b6 98467c00 isub temp ,null 
+37b7 2022b7d5 branch ali_mesh_ali_vendor_message_attribute_set_color ,zero 
+37b8 6fe1482c fetch 2 ,mem_mesh_cb_recv_vendor 
+37b9 20207d79 branch callback_func 
+
+ali_mesh_ali_vendor_message_opcode_attr_get:
+37ba 20600000 rtn 
+
+ali_mesh_ali_vendor_message_opcode_attr_confrimation:
+37bb efe10006 ifetch 2 ,contr 
+37bc d84001a8 arg vendor_message_opcode_company_id ,temp 
+37bd 98467c00 isub temp ,null 
+37be 24628000 nrtn zero 
+37bf efe08006 ifetch 1 ,contr 
+37c0 6848c9b6 fetcht 1 ,mem_mesh_upper_tran_layer_packet_tid 
+37c1 98467c00 isub temp ,null 
+37c2 24628000 nrtn zero 
+37c3 20203b2a branch ali_mesh_stop_send_indication_packet 
+
+ali_mesh_ali_vendor_message_attrbute_check_company_id_and_tid:
+37c4 20407dbc call disable_user 
+37c5 6fe1070b fetch 2 ,mem_mesh_vendor_message_cid 
+37c6 d84001a8 arg vendor_message_opcode_company_id ,temp 
+37c7 98467c00 isub temp ,null 
+37c8 24628000 nrtn zero 
+37c9 6848c4f1 fetcht 1 ,mem_mesh_vendor_mesh_receive_tid 
+37ca 6fe0870d fetch 1 ,mem_mesh_vendor_message_tid 
+37cb 98467c00 isub temp ,null 
+37cc 20628000 rtn zero 
+37cd 67e0c4f1 store 1 ,mem_mesh_vendor_mesh_receive_tid 
+37ce 20207dba branch enable_user 
+
+ali_mesh_ali_vendor_message_attribute_set_main_light:
+37cf 204037f4 call ali_mesh_ali_vendor_message_ack_attr_status_uint8 
+37d0 6fe1483c fetch 2 ,mem_mesh_cb_main_light_onoff_set 
+37d1 20207d79 branch callback_func 
+
+ali_mesh_ali_vendor_message_attribute_set_background_light:
+37d2 204037f4 call ali_mesh_ali_vendor_message_ack_attr_status_uint8 
+37d3 6fe1483e fetch 2 ,mem_mesh_cb_background_onoff_set 
+37d4 20207d79 branch callback_func 
+
+ali_mesh_ali_vendor_message_attribute_set_color:
+37d5 204037ee call ali_mesh_ali_vendor_message_ack_attr_status_uint48 
+37d6 6fe14840 fetch 2 ,mem_mesh_cb_color_set 
+37d7 20207d79 branch callback_func 
+
+ali_mesh_ali_vendor_message_opcode_timer_set_curr_time:
+37d8 204037f0 call ali_mesh_ali_vendor_message_ack_attr_status_uint32 
+37d9 6fe20710 fetch 4 ,mem_mesh_vendor_message_current_time 
+37da 67e244f3 store 4 ,mem_mesh_vendor_timer_current_time 
+37db 20203889 branch ali_mesh_time_init_system_time 
+
+ali_mesh_ali_vendor_message_status_add_head:
+37dc 580000d3 setarg vendor_message_attr_status 
+37dd 67e08723 store 1 ,mem_mesh_access_layer_payload 
+37de 580001a8 setarg vendor_message_opcode_company_id 
+37df e7e10005 istore 2 ,contw 
+37e0 6fe0c4f1 fetch 1 ,mem_mesh_vendor_mesh_receive_tid 
+37e1 e7e08005 istore 1 ,contw 
+37e2 e0410005 istoret 2 ,contw 
+37e3 20600000 rtn 
+
+ali_mesh_ali_vendor_message_opcode_device_power_on:
+37e4 d8e00000 arg 0 ,queue 
+37e5 d8400003 arg vendor_message_event_device_power_on ,temp 
+37e6 da20f009 arg vendor_attr_type_event_trigger ,rega 
+37e7 202037fc branch ali_mesh_ali_vendor_message_opcode_para_uint8 
+
+ali_mesh_ali_vendor_message_opcode_generic_onoff:
+37e8 da200100 arg vendor_attr_generic_onoff_server ,rega 
+37e9 202037fc branch ali_mesh_ali_vendor_message_opcode_para_uint8 
+
+ali_mesh_ali_vendor_message_ack_attr_status_uint64:
+37ea df200008 arg 8 ,loopcnt 
+37eb 202037f6 branch ali_mesh_ali_vendor_message_ack_attr_status 
+
+ali_mesh_ali_vendor_message_ack_attr_status_uint56:
+37ec df200008 arg 8 ,loopcnt 
+37ed 202037f6 branch ali_mesh_ali_vendor_message_ack_attr_status 
+
+ali_mesh_ali_vendor_message_ack_attr_status_uint48:
+37ee df200006 arg 6 ,loopcnt 
+37ef 202037f6 branch ali_mesh_ali_vendor_message_ack_attr_status 
+
+ali_mesh_ali_vendor_message_ack_attr_status_uint32:
+37f0 df200004 arg 4 ,loopcnt 
+37f1 202037f6 branch ali_mesh_ali_vendor_message_ack_attr_status 
+
+ali_mesh_ali_vendor_message_ack_attr_status_uint16:
+37f2 df200002 arg 2 ,loopcnt 
+37f3 202037f6 branch ali_mesh_ali_vendor_message_ack_attr_status 
+
+ali_mesh_ali_vendor_message_ack_attr_status_uint8:
+37f4 df200001 arg 1 ,loopcnt 
+37f5 202037f6 branch ali_mesh_ali_vendor_message_ack_attr_status 
+
+ali_mesh_ali_vendor_message_ack_attr_status:
+37f6 1f20fe06 add loopcnt ,6 ,pdata 
+37f7 67e08722 store 1 ,mem_mesh_access_layer_payload_len 
+37f8 204037dc call ali_mesh_ali_vendor_message_status_add_head 
+37f9 d8c00710 arg mem_mesh_vendor_attr_parameter ,contr 
+37fa 20407cda call memcpy 
+37fb 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_ali_vendor_message_opcode_para_uint8:
+37fc 20403808 call ali_mesh_ali_vendor_message_indication_info_add_head 
+37fd e2210005 istorer rega ,2 ,contw 
+37fe e0408005 istoret 1 ,contw 
+37ff 70072207 jam 7 ,mem_mesh_access_layer_payload_len 
+3800 20203806 branch ali_mesh_ali_vendor_message_send_message 
+
+ali_mesh_ali_vendor_message_opcode_para_uint16:
+3801 20403808 call ali_mesh_ali_vendor_message_indication_info_add_head 
+3802 e2210005 istorer rega ,2 ,contw 
+3803 e0410005 istoret 2 ,contw 
+3804 70072208 jam 8 ,mem_mesh_access_layer_payload_len 
+3805 20203806 branch ali_mesh_ali_vendor_message_send_message 
+
+ali_mesh_ali_vendor_message_send_message:
+3806 20403f6e call ali_mesh_more_element_calc_queue_address 
+3807 202041b5 branch ali_mesh_upper_transport_layer_send_access_message_without_cleat_tx_buffer 
+
+ali_mesh_ali_vendor_message_indication_info_add_head:
+3808 6fe0c7ae fetch 1 ,mem_mesh_transport_aid 
+3809 67e0892b store 1 ,mem_mesh_message_transport_head 
+380a 580000f0 setarg vendor_message_tmall_dst 
+380b 67e1094c store 2 ,mem_mesh_send_message_dst 
+380c 6fe0c4f2 fetch 1 ,mem_mesh_vendor_mesh_send_tid 
+380d 1fe0fe01 pincrease 1 
+380e 67e0c4f2 store 1 ,mem_mesh_vendor_mesh_send_tid 
+380f c0603817 beq vendor_message_send_tid_max ,ali_mesh_ali_vendor_message_indication_info_reset_tid 
+3810 580000d4 setarg vendor_message_attr_indication 
+3811 67e08723 store 1 ,mem_mesh_access_layer_payload 
+3812 580001a8 setarg vendor_message_opcode_company_id 
+3813 e7e10005 istore 2 ,contw 
+3814 6fe0c4f2 fetch 1 ,mem_mesh_vendor_mesh_send_tid 
+3815 e7e08005 istore 1 ,contw 
+3816 20600000 rtn 
+
+ali_mesh_ali_vendor_message_indication_info_reset_tid:
+3817 7044f280 jam vendor_message_send_tid_min ,mem_mesh_vendor_mesh_send_tid 
+3818 20600000 rtn 
+
+ali_mesh_ali_vendor_message_opcode_delete_timer:
+3819 18c22200 copy contr ,rega 
+381a 6fe08709 fetch 1 ,mem_mesh_receive_model_message_payload_len 
+381b d8400006 arg 6 ,temp 
+381c 98467e00 isub temp ,pdata 
+381d 67e0c608 store 1 ,mem_mesh_timer_index_buffer_len 
+381e 1fe27200 copy pdata ,loopcnt 
+381f 1a220c00 copy rega ,contr 
+3820 d8a04609 arg mem_mesh_timer_index_buffer ,contw 
+3821 20407cda call memcpy 
+3822 da400000 arg 0 ,regb 
+
+ali_mesh_ali_vendor_message_opcode_delete_timer_loop:
+3823 dfe04609 arg mem_mesh_timer_index_buffer ,pdata 
+3824 9a408400 iadd regb ,temp 
+3825 efe08002 ifetch 1 ,temp 
+3826 c07fb83f beq 0xff ,ali_mesh_ali_vendor_aim_timer_buffer_clear_all 
+3827 1fe17e7f and pdata ,0x7f ,pdata 
+3828 20403837 call ali_mesh_ali_vendor_aim_timer_buffer_clear 
+3829 1a40a401 increase 1 ,regb 
+382a 6fe0c608 fetch 1 ,mem_mesh_timer_index_buffer_len 
+382b 9a467c00 isub regb ,null 
+382c 20213823 branch ali_mesh_ali_vendor_message_opcode_delete_timer_loop ,positive 
+382d 2040394a call peripherals_write_mesh_timer_infmatn 
+
+ali_mesh_access_layer_send_ali_vendor_message_delete_timer:
+382e d840f017 arg vendor_message_attr_type_timer_deleate ,temp 
+382f 204037dc call ali_mesh_ali_vendor_message_status_add_head 
+3830 d8400000 arg 0 ,temp 
+3831 e0408005 istoret 1 ,contw 
+3832 18a20400 copy contw ,temp 
+3833 2040393b call ali_mesh_get_all_timer_index_timer 
+3834 1fe0fe07 pincrease 7 
+3835 67e08722 store 1 ,mem_mesh_access_layer_payload_len 
+3836 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_ali_vendor_aim_timer_buffer_clear:
+3837 207a0000 rtn blank 
+3838 1fe0ffff pincrease -1 
+3839 1feffe12 mul32 pdata ,18 ,pdata 
+383a da204503 arg mem_mesh_vendor_timer_timing_buffer ,rega 
+383b 9a20a200 iadd rega ,rega 
+383c 58000000 setarg 0 
+383d e7e08011 istore 1 ,rega 
+383e 20600000 rtn 
+
+ali_mesh_ali_vendor_aim_timer_buffer_clear_all:
+383f df200012 arg 18 ,loopcnt 
+3840 1f2ff20d mul32 loopcnt ,mesh_x_timers ,loopcnt 
+3841 d8a04503 arg mem_mesh_vendor_timer_timing_buffer ,contw 
+3842 20407ca1 call clear_mem 
+3843 2040394a call peripherals_write_mesh_timer_infmatn 
+3844 2020382e branch ali_mesh_access_layer_send_ali_vendor_message_delete_timer 
+
+ali_mesh_ali_vendor_message_opcode_timer_inquire:
+3845 efe08006 ifetch 1 ,contr 
+3846 c07fb85e beq 0xff ,ali_mesh_ali_vendor_message_opcode_timer_inquire_all_timer 
+3847 67e0c5ff store 1 ,mem_mesh_vendor_timer_timing_temp 
+3848 efe08006 ifetch 1 ,contr 
+3849 1fe0ffff pincrease -1 
+384a 1feffe12 mul32 pdata ,18 ,pdata 
+384b d8c04503 arg mem_mesh_vendor_timer_timing_buffer ,contr 
+384c 98c08c00 iadd contr ,contr 
+384d d8a045ed arg mem_mesh_vendor_timer_timing_palyload ,contw 
+384e df200012 arg 18 ,loopcnt 
+384f 20407cda call memcpy 
+3850 d840f018 arg vendor_message_attr_type_timer_inquire ,temp 
+3851 204037dc call ali_mesh_ali_vendor_message_status_add_head 
+3852 6fe0c5ed fetch 1 ,mem_mesh_vendor_timer_timing_index 
+3853 203a3867 branch ali_mesh_ali_vendor_message_opcode_timer_inquire_time_error ,blank 
+3854 d8400000 arg 0 ,temp 
+3855 e0408005 istoret 1 ,contw 
+
+ali_mesh_ali_vendor_message_opcode_timer_inquire_time:
+3856 6fe0c5ff fetch 1 ,mem_mesh_vendor_timer_timing_temp 
+3857 e7e08005 istore 1 ,contw 
+3858 6fe0c5ed fetch 1 ,mem_mesh_vendor_timer_timing_index 
+3859 e7e08005 istore 1 ,contw 
+385a 6fe445ee fetch 8 ,mem_mesh_vendor_timer_timing_time 
+385b e7e40005 istore 8 ,contw 
+385c 70072211 jam 17 ,mem_mesh_access_layer_payload_len 
+385d 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_ali_vendor_message_opcode_timer_inquire_all_timer:
+385e d840f018 arg vendor_message_attr_type_timer_inquire ,temp 
+385f 204037dc call ali_mesh_ali_vendor_message_status_add_head 
+3860 d84000ff arg 0xff ,temp 
+3861 e0410005 istoret 2 ,contw 
+3862 18a20400 copy contw ,temp 
+3863 2040393b call ali_mesh_get_all_timer_index_timer 
+3864 1fe0fe08 pincrease 8 
+3865 67e08722 store 1 ,mem_mesh_access_layer_payload_len 
+3866 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_ali_vendor_message_opcode_timer_inquire_time_error:
+3867 d8400080 arg 0x80 ,temp 
+3868 e7e08005 istore 1 ,contw 
+3869 20203856 branch ali_mesh_ali_vendor_message_opcode_timer_inquire_time 
+
+ali_mesh_ali_vendor_message_opcode_timer_set_state:
+386a efe08006 ifetch 1 ,contr 
+386b 67e0c5ff store 1 ,mem_mesh_vendor_timer_timing_temp 
+386c 1fe17e7f and pdata ,0x7f ,pdata 
+386d 1fe0ffff pincrease -1 
+386e 1feffe12 mul32 pdata ,18 ,pdata 
+386f d8a04503 arg mem_mesh_vendor_timer_timing_buffer ,contw 
+3870 98a08a00 iadd contw ,contw 
+3871 6fe0c5ff fetch 1 ,mem_mesh_vendor_timer_timing_temp 
+3872 e7e08005 istore 1 ,contw 
+3873 2040394a call peripherals_write_mesh_timer_infmatn 
+3874 d840f016 arg vendor_mseeage_attr_type_timer_enable ,temp 
+3875 204037dc call ali_mesh_ali_vendor_message_status_add_head 
+3876 58000000 setarg 0 
+3877 e7e08005 istore 1 ,contw 
+3878 18a20400 copy contw ,temp 
+3879 2040393b call ali_mesh_get_all_timer_index_timer 
+387a 1fe0fe07 pincrease 7 
+387b 67e08722 store 1 ,mem_mesh_access_layer_payload_len 
+387c 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_time_function:
+387d 1c420400 copy clkn_bt ,temp 
+387e 6fe244f7 fetch 4 ,mem_system_time 
+387f 98467c00 isub temp ,null 
+3880 2041388f call ali_mesh_timer_timeout ,positive 
+3881 20403896 call ali_mesh_clkn_bt_add_1s 
+3882 98467c00 isub temp ,null 
+3883 20610000 rtn positive 
+3884 2040388a call ali_mesh_time_init_system_time_without_clk 
+3885 6fe244f3 fetch 4 ,mem_mesh_vendor_timer_current_time 
+3886 1fe0fe01 pincrease 1 
+3887 67e244f3 store 4 ,mem_mesh_vendor_timer_current_time 
+3888 2020389a branch ali_mesh_ali_vendor_check_time 
+
+ali_mesh_time_init_system_time:
+3889 1c427e00 copy clkn_bt ,pdata 
+
+ali_mesh_time_init_system_time_without_clk:
+388a 67e244f7 store 4 ,mem_system_time 
+388b 6fe0c4fa fetch 1 ,mem_system_time + 3 
+388c 1fe17e0f and_into 0x0f ,pdata 
+388d 67e0c4fa store 1 ,mem_system_time + 3 
+388e 20600000 rtn 
+
+ali_mesh_timer_timeout:
+388f 20628000 rtn zero 
+3890 1fe22400 copy pdata ,regb 
+3891 58100000 setarg 0x100000 
+3892 1fed7e00 lshift8 pdata ,pdata 
+3893 98408400 iadd temp ,temp 
+3894 1a427e00 copy regb ,pdata 
+3895 20600000 rtn 
+
+ali_mesh_clkn_bt_add_1s:
+3896 df200014 arg 20 ,loopcnt 
+
+ali_mesh_time_loop:
+3897 1fe0fea0 pincrease 160 
+3898 c2003897 loop ali_mesh_time_loop 
+3899 20600000 rtn 
+
+ali_mesh_ali_vendor_check_time:
+389a 5800000d setarg mesh_x_timers 
+389b 67e0c602 store 1 ,mem_mesh_vendor_timer_check_loop 
+389c 1fe0ffff pincrease -1 
+389d 1feffe12 mul32 pdata ,18 ,pdata 
+389e de004503 arg mem_mesh_vendor_timer_timing_buffer ,alarm 
+389f 9e00e000 iadd alarm ,alarm 
+
+ali_mesh_ali_vendor_check_time_loop:
+38a0 efe08030 ifetch 1 ,alarm 
+38a1 245a38a8 ncall ali_mesh_ali_vendor_had_timing ,blank 
+38a2 1e00e1ee increase -18 ,alarm 
+38a3 6fe0c602 fetch 1 ,mem_mesh_vendor_timer_check_loop 
+38a4 1fe0ffff pincrease -1 
+38a5 207a0000 rtn blank 
+38a6 67e0c602 store 1 ,mem_mesh_vendor_timer_check_loop 
+38a7 202038a0 branch ali_mesh_ali_vendor_check_time_loop 
+
+ali_mesh_ali_vendor_had_timing:
+38a8 d8e00007 arg 7 ,queue 
+38a9 afec0000 qisolate0 pdata 
+38aa 20608000 rtn true 
+38ab 1fe17e7f and pdata ,0x7f ,pdata 
+38ac d840000d arg mesh_x_timers ,temp 
+38ad 98467c00 isub temp ,null 
+38ae 20610000 rtn positive 
+38af 1e020c00 copy alarm ,contr 
+38b0 d8a045ed arg mem_mesh_vendor_timer_timing_palyload ,contw 
+38b1 df200012 arg 18 ,loopcnt 
+38b2 20407cda call memcpy 
+38b3 6fe0c5fe fetch 1 ,mem_mesh_vendor_timer_timing_palyload + 17 
+38b4 c02cb8bf beq 0x59 ,ali_mesh_ali_vendor_had_timing_cyclically 
+
+ali_mesh_ali_vendor_had_timing_single_time:
+38b5 684a44f3 fetcht 4 ,mem_mesh_vendor_timer_current_time 
+38b6 6fe245ee fetch 4 ,mem_mesh_vendor_timer_timing_time 
+38b7 98467c00 isub temp ,null 
+38b8 6fe0c5f5 fetch 1 ,mem_mesh_vendor_timer_timing_attr_para 
+38b9 2022b8e3 branch ali_mesh_ali_vendor_time_timeout ,zero 
+38ba 242138bc nbranch ali_mesh_ali_vendor_time_out_of_date ,positive 
+38bb 20600000 rtn 
+
+ali_mesh_ali_vendor_time_out_of_date:
+38bc 58000000 setarg 0 
+38bd e7e08030 istore 1 ,alarm 
+38be 20600000 rtn 
+
+ali_mesh_ali_vendor_had_timing_cyclically:
+38bf 6fe244f3 fetch 4 ,mem_mesh_vendor_timer_current_time 
+38c0 d840003c arg seconds_of_min ,temp 
+38c1 9846fc00 idiv temp 
+38c2 20407d62 call wait_div_end 
+38c3 18077e00 remainder pdata 
+38c4 247a0000 nrtn blank 
+38c5 6fe244f3 fetch 4 ,mem_mesh_vendor_timer_current_time 
+38c6 d8454600 arg seconds_of_four_days ,temp 
+38c7 98467e00 isub temp ,pdata 
+38c8 d8493a80 arg seconds_of_week ,temp 
+38c9 9846fc00 idiv temp 
+38ca 20407d62 call wait_div_end 
+38cb 18077e00 remainder pdata 
+38cc d8415180 arg seconds_of_day ,temp 
+38cd 9846fc00 idiv temp 
+38ce 20407d62 call wait_div_end 
+38cf 18072200 remainder rega 
+38d0 18078e00 quotient queue 
+38d1 6fe0c5f2 fetch 1 ,mem_mesh_vendor_timer_timing_weekdays_cyclic 
+38d2 203a38d5 branch ali_mesh_ali_vendor_had_timing_cyclically_continue ,blank 
+38d3 afefffff qisolate1 pdata 
+38d4 24608000 nrtn true 
+
+ali_mesh_ali_vendor_had_timing_cyclically_continue:
+38d5 1a227e00 deposit rega 
+38d6 d840003c arg seconds_of_min ,temp 
+38d7 9846fc00 idiv temp 
+38d8 20407d62 call wait_div_end 
+38d9 18078400 quotient temp 
+38da 580001e0 setarg eight_hours_time_zone_offset 
+38db 98408400 iadd temp ,temp 
+38dc 6fe145ee fetch 2 ,mem_mesh_vendor_timer_timing_time_cyclic 
+38dd da200fff arg 0xfff ,rega 
+38de 9a217e00 iand rega ,pdata 
+38df 98467c00 isub temp ,null 
+38e0 24628000 nrtn zero 
+38e1 6fe0c5f6 fetch 1 ,mem_mesh_vendor_timer_timing_attr_para_cyclic 
+38e2 202038e3 branch ali_mesh_ali_vendor_time_timeout 
+
+ali_mesh_ali_vendor_time_timeout:
+38e3 67e0870c store 1 ,mem_mesh_generic_onoff_set_payload_onoff 
+38e4 70460201 jam 1 ,mem_mesh_vendor_timer_check_loop 
+38e5 1e027e00 copy alarm ,pdata 
+38e6 67e1091f store 2 ,mem_mesh_alarm_temp 
+38e7 6848870c fetcht 1 ,mem_mesh_generic_onoff_set_payload_onoff 
+38e8 68e0c869 fetchr queue ,1 ,mem_mesh_receive_element_number 
+38e9 204037e8 call ali_mesh_ali_vendor_message_opcode_generic_onoff 
+38ea 6fe1091f fetch 2 ,mem_mesh_alarm_temp 
+38eb 1fe26000 copy pdata ,alarm 
+38ec 1e008c11 add alarm ,17 ,contr 
+38ed efe08006 ifetch 1 ,contr 
+38ee c02cb8f4 beq timer_cyclical_falg ,ali_mesh_ali_vendor_time_timeout_cyclic 
+
+ali_mesh_ali_vendor_time_timeout_continue:
+38ef 58000000 setarg 0 
+38f0 e7e08030 istore 1 ,alarm 
+38f1 68e0c869 fetchr queue ,1 ,mem_mesh_receive_element_number 
+38f2 204038ff call ali_mesh_ali_vendor_message_opcode_timing_finish 
+38f3 2020394a branch peripherals_write_mesh_timer_infmatn 
+
+ali_mesh_ali_vendor_time_timeout_cyclic:
+38f4 6fe0c5f2 fetch 1 ,mem_mesh_vendor_timer_timing_weekdays_cyclic 
+38f5 203a38ef branch ali_mesh_ali_vendor_time_timeout_continue ,blank 
+38f6 d840f009 arg vendor_attr_type_event_trigger ,temp 
+38f7 204037dc call ali_mesh_ali_vendor_message_status_add_head 
+38f8 58000011 setarg 0x11 
+38f9 e7e08005 istore 1 ,contw 
+38fa efe08030 ifetch 1 ,alarm 
+38fb 1fe1fe80 or pdata ,0x80 ,pdata 
+38fc e7e08005 istore 1 ,contw 
+38fd 70072308 jam 8 ,mem_mesh_access_layer_payload 
+38fe 20203806 branch ali_mesh_ali_vendor_message_send_message 
+
+ali_mesh_ali_vendor_message_opcode_timing_finish:
+38ff d840f020 arg vendor_attr_type_event_index_report ,temp 
+3900 204037dc call ali_mesh_ali_vendor_message_status_add_head 
+3901 18a20400 copy contw ,temp 
+3902 2040393b call ali_mesh_get_all_timer_index_timer 
+3903 1fe0fe06 pincrease 6 
+3904 67e08722 store 1 ,mem_mesh_access_layer_payload_len 
+3905 700723d3 jam vendor_message_attr_status ,mem_mesh_access_layer_payload 
+3906 20203806 branch ali_mesh_ali_vendor_message_send_message 
+
+ali_mesh_ali_vendor_message_opcode_timer_set_timing:
+3907 d8a045ed arg mem_mesh_vendor_timer_timing_index ,contw 
+3908 df200010 arg 16 ,loopcnt 
+3909 20407cda call memcpy 
+390a 6fe0c5ed fetch 1 ,mem_mesh_vendor_timer_timing_index 
+390b 1fe17e7f and pdata ,0x7f ,pdata 
+390c 67e0c5ff store 1 ,mem_mesh_vendor_timer_timing_temp 
+390d 1fe67c0d sub pdata ,mesh_x_timers ,null 
+390e 24610000 nrtn positive 
+390f 6fe245ee fetch 4 ,mem_mesh_vendor_timer_timing_time 
+3910 d840003c arg 60 ,temp 
+3911 9846fc00 idiv temp 
+3912 20407d62 call wait_div_end 
+3913 18070400 remainder temp 
+3914 98467e00 isub temp ,pdata 
+3915 67e245ee store 4 ,mem_mesh_vendor_timer_timing_time 
+3916 58000000 setarg 0 
+3917 67e145fd store 2 ,mem_mesh_vendor_timer_timing_flag 
+3918 da2045ed arg mem_mesh_vendor_timer_timing_index ,rega 
+3919 20403930 call ali_mesh_ali_vendor_store_mesh_timer_infmatn 
+391a d840f013 arg vendor_mseeage_attr_type_set_time_single ,temp 
+391b 20203928 branch ali_mesh_access_layer_send_ali_vendor_message_current_timing 
+
+ali_mesh_ali_vendor_message_opcode_timer_set_timing_cyclically:
+391c d8a045ed arg mem_mesh_vendor_timer_timing_index_cyclic ,contw 
+391d df200011 arg 17 ,loopcnt 
+391e 20407cda call memcpy 
+391f 6fe0c5ed fetch 1 ,mem_mesh_vendor_timer_timing_index_cyclic 
+3920 1fe17e7f and pdata ,0x7f ,pdata 
+3921 67e0c5ff store 1 ,mem_mesh_vendor_timer_timing_temp 
+3922 1fe67c0d sub pdata ,mesh_x_timers ,null 
+3923 24610000 nrtn positive 
+3924 7045fe59 jam 0x59 ,mem_mesh_vendor_timer_timing_cyclic_flag 
+3925 da2045ed arg mem_mesh_vendor_timer_timing_index_cyclic ,rega 
+3926 20403930 call ali_mesh_ali_vendor_store_mesh_timer_infmatn 
+3927 d840f014 arg vendor_mseeage_attr_type_set_time_repeat ,temp 
+
+ali_mesh_access_layer_send_ali_vendor_message_current_timing:
+3928 204037dc call ali_mesh_ali_vendor_message_status_add_head 
+3929 58000000 setarg 0 
+392a 67e08729 store 1 ,mem_mesh_access_layer_payload + 6 
+392b 18a20400 copy contw ,temp 
+392c 2040393b call ali_mesh_get_all_timer_index_timer 
+392d 1fe0fe07 pincrease 7 
+392e 67e08722 store 1 ,mem_mesh_access_layer_payload_len 
+392f 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_ali_vendor_store_mesh_timer_infmatn:
+3930 20403937 call ali_mesh_vendor_timer_buffer_offset_cal 
+3931 1a220c00 copy rega ,contr 
+3932 d8a04503 arg mem_mesh_vendor_timer_timing_buffer ,contw 
+3933 98a08a00 iadd contw ,contw 
+3934 df200012 arg 18 ,loopcnt 
+3935 20407cda call memcpy 
+3936 2020394a branch peripherals_write_mesh_timer_infmatn 
+
+ali_mesh_vendor_timer_buffer_offset_cal:
+3937 6fe0c5ff fetch 1 ,mem_mesh_vendor_timer_timing_temp 
+3938 1fe0ffff pincrease -1 
+3939 1feffe12 mul32 pdata ,18 ,pdata 
+393a 20600000 rtn 
+
+ali_mesh_get_all_timer_index_timer:
+393b da204503 arg mem_mesh_vendor_timer_timing_buffer ,rega 
+393c da400000 arg 0 ,regb 
+393d 18420a00 copy temp ,contw 
+393e df20000d arg mesh_x_timers ,loopcnt 
+393f 1f20f3ff increase -1 ,loopcnt 
+
+ali_mesh_get_all_timer_index_timer_loop:
+3940 efe08011 ifetch 1 ,rega 
+3941 c07fb945 beq 0xff ,ali_mesh_get_all_timer_index_timer_loop_end 
+3942 203a3945 branch ali_mesh_get_all_timer_index_timer_loop_end ,blank 
+3943 1a40a401 increase 1 ,regb 
+3944 e7e08005 istore 1 ,contw 
+
+ali_mesh_get_all_timer_index_timer_loop_end:
+3945 58000012 setarg 18 
+3946 9a20a200 iadd rega ,rega 
+3947 c2003940 loop ali_mesh_get_all_timer_index_timer_loop 
+3948 1a427e00 copy regb ,pdata 
+3949 20600000 rtn 
+
+peripherals_write_mesh_timer_infmatn:
+394a 6fe1484a fetch 2 ,mem_mesh_cb_vendor_timing_changed 
+394b 20207d79 branch callback_func 
+
+ali_mesh_bearer_layer_send_packet_by_network_layer:
+394c 4750c034 bpatchx patch34_1 ,mem_patch34 
+394d 58004a5e setarg mem_mesh_queue_each_size 
+394e 67e14aed store 2 ,mem_mesh_element_device_queue_buffer_ptr 
+394f 58004aeb setarg mem_mesh_element_device 
+3950 67e10919 store 2 ,mem_mesh_rega_temp 
+3951 70078714 jam adv_pairing_mesh_message_duration ,mem_mesh_queue_ele_duration 
+3952 6fe0c808 fetch 1 ,mem_mesh_gatt_package_send_msg_id 
+3953 67e08788 store 1 ,mem_mesh_queue_ele_gatt_msg_id 
+3954 6fe08916 fetch 1 ,mem_mesh_lower_transport_layer_payload_len 
+3955 1fe0fe0b pincrease 11 
+3956 1fe0f3fe add pdata ,-2 ,loopcnt 
+3957 67e08789 store 1 ,mem_mesh_queue_ele_len 
+3958 1fe0ffff pincrease -1 
+3959 e7e08005 istore 1 ,contw 
+395a 5800002a setarg gap_adtype_mesh_message 
+395b e7e08005 istore 1 ,contw 
+395c d8c04998 arg mem_mesh_send_upper_layer_ivi_and_nid ,contr 
+395d 20407ccc call memcpy_fast 
+395e 6a210919 fetchr rega ,2 ,mem_mesh_rega_temp 
+395f 20403967 call ali_mesh_advertising_bearer_layer_init_queue 
+3960 204078b2 call queue_push 
+
+ali_mesh_bearer_layer_gatt_send_packet_by_network_layer:
+3961 6fe144e9 fetch 2 ,mem_ui_state_map 
+3962 2feffe09 isolate1 ui_state_ble_connected ,pdata 
+3963 24608000 nrtn true 
+
+ali_mesh_send_ble_data_control_package:
+3964 20403e5e call ali_mesh_network_layer_init_gatt_queue_param 
+3965 da200787 arg mem_mesh_queue_ele_temp ,rega 
+3966 202078b2 branch queue_push 
+
+ali_mesh_advertising_bearer_layer_init_queue:
+3967 1a208c02 add rega ,element_device_queue_buffer_ptr ,contr 
+3968 efe10006 ifetch 2 ,contr 
+3969 67e143fb store 2 ,mem_queue_ptr 
+396a da200787 arg mem_mesh_queue_ele_temp ,rega 
+396b 20600000 rtn 
+
+ali_mesh_advertising_bearer_layer_init_queue_param:
+396c 58004a5e setarg mem_mesh_queue_each_size 
+396d 67e143fb store 2 ,mem_queue_ptr 
+396e 20600000 rtn 
+
+ali_mesh_advertising_bearer_layer_load_packet_from_advertising_queue:
+
+ali_mesh_advertising_bearer_layer_load_packet_from_advertising_queue_deal:
+396f 6fe0c9b5 fetch 1 ,mem_mesh_upper_tran_layer_packet_advertising 
+3970 c1808000 rtnne packet_in_bearer 
+3971 7049b502 jam packet_in_adverting ,mem_mesh_upper_tran_layer_packet_advertising 
+3972 20203ace branch ali_mesh_control_ble_advertising_on_advertising 
+
+ali_mesh_advertising_bearer_layer_send_packet_by_app_bearer_calc_param:
+3973 da20078c arg mem_mesh_queue_ele_payload + 2 ,rega 
+3974 d8400012 arg max_app_mssage_payload_length ,temp 
+3975 58000021 setarg 0x21 
+3976 24608000 nrtn true 
+3977 da20079e arg mem_mesh_queue_ele_payload + 20 ,rega 
+3978 68488789 fetcht 1 ,mem_mesh_queue_ele_len 
+3979 184085ee increase -18 ,temp 
+397a 58000022 setarg 0x22 
+397b 20600000 rtn 
+
+ali_mesh_advertising_add_adtype_flags:
+397c d8a0462b arg mem_mesh_adv_data ,contw 
+397d 58000002 setarg 0x02 
+397e e7e08005 istore 1 ,contw 
+397f 58000001 setarg gap_adtype_flags 
+3980 e7e08005 istore 1 ,contw 
+3981 58000002 setarg 0x02 
+3982 e7e08005 istore 1 ,contw 
+3983 20600000 rtn 
+
+ali_mesh_advertising_add_adtype_16bit_complete:
+3984 d8401827 arg mesh_provisioning_uuid ,temp 
+3985 58000003 setarg 0x03 
+3986 e7e08005 istore 1 ,contw 
+3987 58000003 setarg gap_adtype_16bit_complete 
+3988 e7e08005 istore 1 ,contw 
+3989 e0410005 istoret 2 ,contw 
+398a 20600000 rtn 
+
+mesh_ble_rx_packet_only:
+398b 204025b8 call le_enable 
+398c 20402af5 call le_init_adv 
+398d 2040264e call le_receive_adv 
+398e 24768000 nrtn match 
+398f 6fe08002 fetch 1 ,mem_le_adv_rcv 
+3990 1fe0fe01 pincrease 1 
+3991 67e08002 store 1 ,mem_le_adv_rcv 
+3992 6fe14824 fetch 2 ,mem_mesh_cb_receive_advertising 
+3993 20407d79 call callback_func 
+3994 202025bc branch le_disable 
+
+mesh_ble_rx_packet:
+3995 204039a1 call mesh_ble_rx_packet_check_and_init 
+3996 20740000 rtn user 
+
+mesh_ble_rx_packet_check_timer:
+3997 2040398b call mesh_ble_rx_packet_only 
+3998 20402018 call connection_dispatch 
+3999 68494344 fetcht 2 ,mem_le_scan_interval 
+399a d8e0000a arg 10 ,queue 
+399b 204020dc call sniff_check_window 
+399c 20740000 rtn user 
+399d d8e0000d arg mesh_ble_rx_timer ,queue 
+399e 20407cef call timer_check 
+399f 243a3997 nbranch mesh_ble_rx_packet_check_timer ,blank 
+39a0 20600000 rtn 
+
+mesh_ble_rx_packet_check_and_init:
+39a1 68494344 fetcht 2 ,mem_le_scan_interval 
+39a2 d8e00004 arg 4 ,queue 
+39a3 204020dc call sniff_check_window 
+39a4 20740000 rtn user 
+39a5 204039a9 call mesh_le_calc_next_scan_channel 
+39a6 6fe14344 fetch 2 ,mem_le_scan_interval 
+39a7 d8e0000d arg mesh_ble_rx_timer ,queue 
+39a8 20207ce1 branch timer_init 
+
+mesh_le_calc_next_scan_channel:
+39a9 6fe0c64a fetch 1 ,mem_mesh_adv_scan_channel 
+39aa 1fe0fe01 pincrease 1 
+39ab 67e0c64a store 1 ,mem_mesh_adv_scan_channel 
+39ac 67e08007 store 1 ,mem_le_ch_mapped 
+39ad c1940000 rtnne 40 
+39ae 70464a25 jam 37 ,mem_mesh_adv_scan_channel 
+39af 70000725 jam 37 ,mem_le_ch_mapped 
+39b0 20600000 rtn 
+
+mesh_check_ble_rx_packet:
+39b1 6fe0804c fetch 1 ,mem_le_rxbuf 
+39b2 1fe17e0f and pdata ,0x0f ,pdata 
+39b3 c00039b6 beq adv_ind ,ali_mesh_match_advertising_packet 
+39b4 c00139b6 beq adv_nonconn_ind ,ali_mesh_match_advertising_packet 
+39b5 20600000 rtn 
+
+ali_mesh_match_advertising_packet:
+39b6 e8408006 ifetcht 1 ,contr 
+39b7 18467c06 sub temp ,adv_packet_min_length ,null 
+39b8 20610000 rtn positive 
+39b9 18467c25 sub temp ,adv_packet_max_length ,null 
+39ba 24610000 nrtn positive 
+39bb 1840a3fa add temp ,-6 ,rega 
+39bc 18c0a406 add contr ,6 ,regb 
+
+ali_mesh_find_adv_ind_packet:
+39bd e8408012 ifetcht 1 ,regb 
+39be 18467c01 sub temp ,ad_type_min_length ,null 
+39bf 20610000 rtn positive 
+39c0 18467c1e sub temp ,ad_type_max_length ,null 
+39c1 24610000 nrtn positive 
+39c2 18427e00 copy temp ,pdata 
+39c3 207a0000 rtn blank 
+39c4 47514034 bpatchx patch34_2 ,mem_patch34 
+39c5 efe08006 ifetch 1 ,contr 
+39c6 c07fb9d1 beq gap_adtype_manufacturer_specific ,ali_mesh_receive_adtype_manufacturer_specific_tmall_control 
+39c7 c0153f7c beq gap_adtype_mesh_message ,ali_mesh_receive_adtype_mesh_message 
+39c8 1840fe01 add temp ,1 ,pdata 
+39c9 9a267c00 isub rega ,null 
+39ca 20610000 rtn positive 
+39cb 9a40a400 iadd regb ,regb 
+39cc 18467fff sub temp ,-1 ,pdata 
+39cd 9a20a200 iadd rega ,rega 
+39ce 1a227e00 copy rega ,pdata 
+39cf 207a0000 rtn blank 
+39d0 202039bd branch ali_mesh_find_adv_ind_packet 
+
+ali_mesh_receive_adtype_manufacturer_specific_tmall_control:
+39d1 7007aa00 jam mesh_message_tmall ,mem_mesh_fast_pair_packet_type 
+39d2 20203cfa branch ali_mesh_receive_adtype_manufacturer_specific 
+
+mesh_le_send_adv:
+39d3 6fe08000 fetch 1 ,mem_le_adv_transmit 
+39d4 1fe0fe01 pincrease 1 
+39d5 67e08000 store 1 ,mem_le_adv_transmit 
+39d6 4751c034 bpatchx patch34_3 ,mem_patch34 
+39d7 204025b8 call le_enable 
+39d8 df200027 arg 39 ,loopcnt 
+39d9 d8c04169 arg mem_le_txheader ,contr 
+39da d8a007aa arg mem_le_txheader_mesh_temp ,contw 
+39db 20407ccc call memcpy_fast 
+39dc 70000725 jam 37 ,mem_le_ch_mapped 
+39dd db600708 arg 1800 ,stop_watch 
+39de 78287c00 enable swfine 
+39df 7856fc00 disable match 
+
+mesh_le_send_adv_loop:
+39e0 20402af5 call le_init_adv 
+39e1 204039f0 call mesh_le_send_adv_nonconn_ind 
+39e2 180a7e00 random pdata 
+39e3 d84001ff arg 0x1ff ,temp 
+39e4 98417e00 iand temp ,pdata 
+39e5 1fe0fe64 add pdata ,100 ,pdata 
+39e6 20407c91 call delay 
+39e7 6fe08007 fetch 1 ,mem_le_ch_mapped 
+39e8 1fe0fe01 pincrease 1 
+39e9 67e08007 store 1 ,mem_le_ch_mapped 
+39ea c09439e0 bne 40 ,mesh_le_send_adv_loop 
+39eb df200027 arg 39 ,loopcnt 
+39ec d8a04169 arg mem_le_txheader ,contw 
+39ed d8c007aa arg mem_le_txheader_mesh_temp ,contr 
+39ee 20407ccc call memcpy_fast 
+39ef 202025bc branch le_disable 
+
+mesh_le_send_adv_nonconn_ind:
+39f0 d8400002 arg adv_nonconn_ind ,temp 
+39f1 6048c169 storet 1 ,mem_le_txheader 
+39f2 6848c62a fetcht 1 ,mem_mesh_adv_data_len 
+39f3 1840fe06 add temp ,6 ,pdata 
+39f4 67e0c16a store 1 ,mem_le_txlen 
+39f5 6fe342db fetch 6 ,mem_le_lap 
+39f6 67e3416b store 6 ,mem_le_txpayload 
+39f7 18427200 copy temp ,loopcnt 
+39f8 d8c0462b arg mem_mesh_adv_data ,contr 
+39f9 20407ccc call memcpy_fast 
+39fa 2020273e branch le_transmit_norx 
+
+ali_mesh_base_adt_cache:
+39fb 47524034 bpatchx patch34_4 ,mem_patch34 
+39fc 684908f4 fetcht 2 ,mem_ccm_data_ptr 
+39fd 6fe088f3 fetch 1 ,mem_ccm_data_len 
+39fe 18420c00 copy temp ,contr 
+39ff da20476e arg mem_k4_salt ,rega 
+3a00 de00477e arg mem_k4_t ,alarm 
+3a01 20403c5a call ali_mesh_encrypt_base_function_aes_cmac 
+3a02 20407dbc call disable_user 
+3a03 1a627e00 copy regc ,pdata 
+3a04 9e008c00 iadd alarm ,contr 
+3a05 684a477e fetcht 4 ,mem_k4_t 
+3a06 6fe10910 fetch 2 ,mem_mesh_mic_cache_ptr 
+3a07 1fe22200 copy pdata ,rega 
+3a08 df20000a arg transport_mic_cache_space_num ,loopcnt 
+
+ali_mesh_base_adt_cache_loop:
+3a09 efe20011 ifetch 4 ,rega 
+3a0a 203a3a16 branch ali_mesh_base_adt_cache_empty_space ,blank 
+3a0b 98467c00 isub temp ,null 
+3a0c 20628000 rtn zero 
+3a0d 1a20a204 increase transport_mic_cache_space_size ,rega 
+3a0e c2003a09 loop ali_mesh_base_adt_cache_loop 
+3a0f 6fe10910 fetch 2 ,mem_mesh_mic_cache_ptr 
+3a10 1fe20a00 copy pdata ,contw 
+3a11 1fe08c04 add pdata ,transport_mic_cache_space_size ,contr 
+3a12 df200024 arg transport_mic_cache_total_size ,loopcnt 
+3a13 20407ccc call memcpy_fast 
+3a14 e0420005 istoret 4 ,contw 
+3a15 20207dba branch enable_user 
+
+ali_mesh_base_adt_cache_empty_space:
+3a16 e0420011 istoret 4 ,rega 
+3a17 20207dba branch enable_user 
+
+ali_mesh_chip_peripherals_load_data:
+3a18 6fe0c857 fetch 1 ,mem_mesh_chip_select 
+3a19 c000ba43 beq mesh_chip_from_eeprom ,ali_mesh_chip_peripherals_load_data_from_eep 
+
+ali_mesh_chip_peripherals_load_data_from_flash:
+3a1a 20403a21 call ali_mesh_chip_peripherals_load_three_tuple_from_flash 
+3a1b 20403a25 call ali_mesh_chip_peripherals_load_network_key_from_flash 
+3a1c 20403a2c call ali_mesh_chip_peripherals_load_application_key_from_flash 
+3a1d 20403a30 call ali_mesh_chip_peripherals_load_device_key_from_flash 
+3a1e 20403a34 call ali_mesh_chip_peripherals_load_reset_count_from_flash 
+3a1f 20403a35 call ali_mesh_chip_peripherals_load_seq_from_flash 
+3a20 20203a39 branch ali_mesh_chip_peripherals_load_subscription_from_flash 
+
+ali_mesh_chip_peripherals_load_three_tuple_from_flash:
+3a21 d840001a arg mesh_eep_three_tuple_length ,temp 
+3a22 da20480a arg mem_mesh_three_tuple_productid ,rega 
+3a23 5801ffa0 setarg 0x1ffa0 
+3a24 20206c4d branch spid_read_flash 
+
+ali_mesh_chip_peripherals_load_network_key_from_flash:
+3a25 d8400013 arg mesh_eep_network_key_length ,temp 
+3a26 da2047ef arg mem_mesh_network_key ,rega 
+3a27 5801e000 setarg mesh_flash_network_key_addr 
+3a28 20406c4d call spid_read_flash 
+3a29 6fe0c7ff fetch 1 ,mem_mesh_last_iv_index_byte 
+3a2a 67e0c871 store 1 ,mem_mesh_iv_index + 3 
+3a2b 20600000 rtn 
+
+ali_mesh_chip_peripherals_load_application_key_from_flash:
+3a2c d8400010 arg mesh_eep_application_key_length ,temp 
+3a2d da204959 arg mem_mesh_application_key ,rega 
+3a2e 5801e100 setarg mesh_flash_application_key_addr 
+3a2f 20206c4d branch spid_read_flash 
+
+ali_mesh_chip_peripherals_load_device_key_from_flash:
+3a30 d8400010 arg mesh_eep_device_key_length ,temp 
+3a31 da2046a0 arg mem_mesh_device_key ,rega 
+3a32 5801e200 setarg mesh_flash_device_key_addr 
+3a33 20206c4d branch spid_read_flash 
+
+ali_mesh_chip_peripherals_load_reset_count_from_flash:
+3a34 20600000 rtn 
+
+ali_mesh_chip_peripherals_load_seq_from_flash:
+3a35 d8400003 arg mesh_eep_seq_length ,temp 
+3a36 da204992 arg mem_mesh_send_message_seq ,rega 
+3a37 5801f000 setarg mesh_flash_message_seq_addr 
+3a38 20206c4d branch spid_read_flash 
+
+ali_mesh_chip_peripherals_load_subscription_from_flash:
+3a39 6fe1484c fetch 2 ,mem_mesh_core_feature 
+3a3a c3810000 rtnbit1 mesh_feature_disable_subscription 
+3a3b d8400040 arg mesh_eep_subscription_total_length ,temp 
+3a3c da2006a1 arg mem_mesh_subscription_eep_temp ,rega 
+3a3d 5801e400 setarg mesh_flash_subscription_addr 
+3a3e 20406c4d call spid_read_flash 
+3a3f 20403e3e call mesh_get_element_info_config 
+3a40 d8c006a1 arg mem_mesh_subscription_eep_temp ,contr 
+3a41 1a20a206 add rega ,element_device_subscription_label ,rega 
+3a42 20203a6b branch ali_mesh_chip_peripherals_load_subscription_loop 
+
+ali_mesh_chip_peripherals_load_data_from_eep:
+3a43 20403a4a call ali_mesh_chip_peripherals_load_three_tuple_from_eep 
+3a44 20403a4e call ali_mesh_chip_peripherals_load_network_key_from_eep 
+3a45 20403a55 call ali_mesh_chip_peripherals_load_application_key_from_eep 
+3a46 20403a59 call ali_mesh_chip_peripherals_load_device_key_from_eep 
+3a47 20403a5d call ali_mesh_chip_peripherals_load_reset_count_from_eep 
+3a48 20403a5e call ali_mesh_chip_peripherals_load_seq_from_eep 
+3a49 20203a62 branch ali_mesh_chip_peripherals_load_subscription_from_eep 
+
+ali_mesh_chip_peripherals_load_three_tuple_from_eep:
+3a4a d840001a arg mesh_eep_three_tuple_length ,temp 
+3a4b da20480a arg mem_mesh_three_tuple_productid ,rega 
+3a4c da400000 arg mesh_eep_three_tuple_offset ,regb 
+3a4d 20206ce1 branch iicd_read_eep_data 
+
+ali_mesh_chip_peripherals_load_network_key_from_eep:
+3a4e d8400013 arg mesh_eep_network_key_length ,temp 
+3a4f da2047ef arg mem_mesh_network_key ,rega 
+3a50 da40001a arg mesh_eep_network_key_offset ,regb 
+3a51 20406ce1 call iicd_read_eep_data 
+3a52 6fe0c7ff fetch 1 ,mem_mesh_last_iv_index_byte 
+3a53 67e0c871 store 1 ,mem_mesh_iv_index + 3 
+3a54 20600000 rtn 
+
+ali_mesh_chip_peripherals_load_application_key_from_eep:
+3a55 d8400010 arg mesh_eep_application_key_length ,temp 
+3a56 da204959 arg mem_mesh_application_key ,rega 
+3a57 da40002d arg mesh_eep_application_key_offset ,regb 
+3a58 20206ce1 branch iicd_read_eep_data 
+
+ali_mesh_chip_peripherals_load_device_key_from_eep:
+3a59 d8400010 arg mesh_eep_device_key_length ,temp 
+3a5a da2046a0 arg mem_mesh_device_key ,rega 
+3a5b da40003d arg mesh_eep_device_key_offset ,regb 
+3a5c 20206ce1 branch iicd_read_eep_data 
+
+ali_mesh_chip_peripherals_load_reset_count_from_eep:
+3a5d 20600000 rtn 
+
+ali_mesh_chip_peripherals_load_seq_from_eep:
+3a5e d8400003 arg mesh_eep_seq_length ,temp 
+3a5f da204992 arg mem_mesh_send_message_seq ,rega 
+3a60 da40004e arg mesh_eep_seq_offset ,regb 
+3a61 20206ce1 branch iicd_read_eep_data 
+
+ali_mesh_chip_peripherals_load_subscription_from_eep:
+3a62 6fe1484c fetch 2 ,mem_mesh_core_feature 
+3a63 c3810000 rtnbit1 mesh_feature_disable_subscription 
+3a64 d8400040 arg mesh_eep_subscription_total_length ,temp 
+3a65 da2006a1 arg mem_mesh_subscription_eep_temp ,rega 
+3a66 da400051 arg mesh_eep_subscription_offset ,regb 
+3a67 20406ce1 call iicd_read_eep_data 
+3a68 20403e3e call mesh_get_element_info_config 
+3a69 d8c006a1 arg mem_mesh_subscription_eep_temp ,contr 
+3a6a 1a20a206 add rega ,element_device_subscription_label ,rega 
+
+ali_mesh_chip_peripherals_load_subscription_loop:
+3a6b 1a220a00 copy rega ,contw 
+3a6c 20407c8f call memcpy16 
+3a6d 1a427e00 copy regb ,pdata 
+3a6e 9a20a200 iadd rega ,rega 
+3a6f c2003a6b loop ali_mesh_chip_peripherals_load_subscription_loop 
+3a70 20600000 rtn 
+
+mesh_receive_config_appkey_add_cb:
+3a71 6fe0c857 fetch 1 ,mem_mesh_chip_select 
+3a72 c000ba83 beq mesh_chip_from_eeprom ,mesh_receive_config_appkey_add_eeprom_cb 
+3a73 c0013a74 beq mesh_chip_from_flash ,mesh_receive_config_appkey_add_flash_cb 
+
+mesh_receive_config_appkey_add_flash_cb:
+3a74 20403a77 call ali_mesh_chip_peripherals_save_network_key_from_flash 
+3a75 20403a7b call ali_mesh_chip_peripherals_save_application_key_from_flash 
+3a76 20203a7f branch ali_mesh_chip_peripherals_save_device_key_from_flash 
+
+ali_mesh_chip_peripherals_save_network_key_from_flash:
+3a77 d8400013 arg mesh_eep_network_key_length ,temp 
+3a78 da2047ef arg mem_mesh_network_key ,rega 
+3a79 5801e000 setarg mesh_flash_network_key_addr 
+3a7a 20206c33 branch spid_write_flash_data 
+
+ali_mesh_chip_peripherals_save_application_key_from_flash:
+3a7b d8400010 arg mesh_eep_application_key_length ,temp 
+3a7c da204959 arg mem_mesh_application_key ,rega 
+3a7d 5801e100 setarg mesh_flash_application_key_addr 
+3a7e 20206c33 branch spid_write_flash_data 
+
+ali_mesh_chip_peripherals_save_device_key_from_flash:
+3a7f d8400010 arg mesh_eep_device_key_length ,temp 
+3a80 da2046a0 arg mem_mesh_device_key ,rega 
+3a81 5801e200 setarg mesh_flash_device_key_addr 
+3a82 20206c33 branch spid_write_flash_data 
+
+mesh_receive_config_appkey_add_eeprom_cb:
+3a83 20403a86 call ali_mesh_chip_peripherals_save_network_key_from_eep 
+3a84 20403a8a call ali_mesh_chip_peripherals_save_application_key_from_eep 
+3a85 20203a8e branch ali_mesh_chip_peripherals_save_device_key_from_eep 
+
+ali_mesh_chip_peripherals_save_network_key_from_eep:
+3a86 d8400013 arg mesh_eep_network_key_length ,temp 
+3a87 da2047ef arg mem_mesh_network_key ,rega 
+3a88 da40001a arg mesh_eep_network_key_offset ,regb 
+3a89 20206cd3 branch iicd_write_protect_eep_data 
+
+ali_mesh_chip_peripherals_save_application_key_from_eep:
+3a8a d8400010 arg mesh_eep_application_key_length ,temp 
+3a8b da204959 arg mem_mesh_application_key ,rega 
+3a8c da40002d arg mesh_eep_application_key_offset ,regb 
+3a8d 20206cd3 branch iicd_write_protect_eep_data 
+
+ali_mesh_chip_peripherals_save_device_key_from_eep:
+3a8e d8400010 arg mesh_eep_device_key_length ,temp 
+3a8f da2046a0 arg mem_mesh_device_key ,rega 
+3a90 da40003d arg mesh_eep_device_key_offset ,regb 
+3a91 20206cd3 branch iicd_write_protect_eep_data 
+
+mesh_store_new_seq_data:
+3a92 6fe1c992 fetch 3 ,mem_mesh_send_message_seq 
+3a93 6849cc24 fetcht 3 ,mem_mesh_send_message_seq_temp 
+3a94 98467c00 isub temp ,null 
+3a95 24610000 nrtn positive 
+3a96 1fe0fe80 add pdata ,128 ,pdata 
+3a97 67e1cc24 store 3 ,mem_mesh_send_message_seq_temp 
+3a98 6fe0c857 fetch 1 ,mem_mesh_chip_select 
+3a99 c000ba9e beq 1 ,ali_mesh_chip_peripherals_save_seq_from_eep 
+
+ali_mesh_chip_peripherals_save_seq_from_flash:
+3a9a d8400003 arg mesh_eep_seq_length ,temp 
+3a9b da204c24 arg mem_mesh_send_message_seq_temp ,rega 
+3a9c 5801f000 setarg mesh_flash_message_seq_addr 
+3a9d 20206c33 branch spid_write_flash_data 
+
+ali_mesh_chip_peripherals_save_seq_from_eep:
+3a9e d8400003 arg mesh_eep_seq_length ,temp 
+3a9f da204c24 arg mem_mesh_send_message_seq_temp ,rega 
+3aa0 da40004e arg mesh_eep_seq_offset ,regb 
+3aa1 20206cd3 branch iicd_write_protect_eep_data 
+
+mesh_store_new_subscriptuion_list_data:
+3aa2 20403aad call ali_mesh_chip_peripherals_save_subscriptuion_list_from_eep 
+3aa3 6fe0c857 fetch 1 ,mem_mesh_chip_select 
+3aa4 c0013aa9 beq 2 ,mesh_store_new_subscriptuion_list_data_from_flash 
+3aa5 d8400040 arg mesh_eep_subscription_total_length ,temp 
+3aa6 da2006a1 arg mem_mesh_subscription_eep_temp ,rega 
+3aa7 da400051 arg mesh_eep_subscription_offset ,regb 
+3aa8 20206cd3 branch iicd_write_protect_eep_data 
+
+mesh_store_new_subscriptuion_list_data_from_flash:
+3aa9 d8400040 arg mesh_eep_subscription_total_length ,temp 
+3aaa da2006a1 arg mem_mesh_subscription_eep_temp ,rega 
+3aab 5801e400 setarg mesh_flash_subscription_addr 
+3aac 20206c33 branch spid_write_flash_data 
+
+ali_mesh_chip_peripherals_save_subscriptuion_list_from_eep:
+3aad 20403e3e call mesh_get_element_info_config 
+3aae d8a006a1 arg mem_mesh_subscription_eep_temp ,contw 
+3aaf 1a20a206 add rega ,element_device_subscription_label ,rega 
+
+ali_mesh_chip_peripherals_save_subscriptuion_list_from_eep_loop:
+3ab0 1a220c00 copy rega ,contr 
+3ab1 20407c8f call memcpy16 
+3ab2 1a427e00 copy regb ,pdata 
+3ab3 9a20a200 iadd rega ,rega 
+3ab4 c2003ab0 loop ali_mesh_chip_peripherals_save_subscriptuion_list_from_eep_loop 
+3ab5 20600000 rtn 
+
+mesh_clear_pairing_key:
+3ab6 6fe0c857 fetch 1 ,mem_mesh_chip_select 
+3ab7 c000babb beq 1 ,ali_mesh_chip_clear_pairing_key_from_eeprom 
+
+ali_mesh_chip_clear_pairing_key_from_flash:
+3ab8 5801e000 setarg 0x1e000 
+3ab9 67e1c419 store 3 ,mem_spi_write_addr 
+3aba 20206bfa branch spid_flash_erase_sector + 2 
+
+ali_mesh_chip_clear_pairing_key_from_eeprom:
+3abb 20600000 rtn 
+
+mesh_vendor_timming_chage_cb:
+3abc 6fe0c857 fetch 1 ,mem_mesh_chip_select 
+3abd c1810000 rtnne 2 
+3abe 5801d000 setarg 0x1d000 
+3abf da204503 arg mem_mesh_vendor_timer_timing_buffer ,rega 
+3ac0 d840000d arg mesh_x_timers ,temp 
+3ac1 184f8412 mul32 temp ,18 ,temp 
+3ac2 20206c33 branch spid_write_flash_data 
+
+ali_mesh_vendor_timer_message_read:
+3ac3 6fe0c857 fetch 1 ,mem_mesh_chip_select 
+3ac4 c1810000 rtnne 2 
+3ac5 da204503 arg mem_mesh_vendor_timer_timing_buffer ,rega 
+3ac6 d840000d arg mesh_x_timers ,temp 
+3ac7 184f8412 mul32 temp ,18 ,temp 
+3ac8 5801d000 setarg 0x1d000 
+3ac9 20206c4d branch spid_read_flash 
+
+ali_mesh_control_ble_adv_process:
+3aca 20404073 call ali_mesh_ble_adv 
+3acb 20203ad2 branch ali_mesh_control_ble_adv_tmall_packet 
+
+ali_mesh_control_ble_adv_timer_process:
+3acc 20403b23 call ali_mesh_advertising_unprovisioned_timer_interval_timer 
+3acd 20203b19 branch ali_mesh_advertising_unprovisioned_timer 
+
+ali_mesh_control_ble_advertising_on_advertising:
+3ace 70464b01 jam device_beacon_on ,mem_mesh_advertising_unprovisioned_device_beacon_switch 
+3acf 20600000 rtn 
+
+ali_mesh_control_ble_advertising_off_advertising:
+3ad0 70464b00 jam device_beacon_off ,mem_mesh_advertising_unprovisioned_device_beacon_switch 
+3ad1 20600000 rtn 
+
+ali_mesh_control_ble_adv_tmall_packet:
+3ad2 da403ad6 arg ali_mesh_control_ble_adv_tmall_packet_send_package ,regb 
+3ad3 da20001d arg mesh_adv_tmall_message_interval ,rega 
+3ad4 d8e0000e arg mesh_ble_adv_tmall ,queue 
+3ad5 20203b0e branch ali_mesh_chip_timer_check_with_random_timer 
+
+ali_mesh_control_ble_adv_tmall_packet_send_package:
+3ad6 6fe0c7e4 fetch 1 ,mem_mesh_provisioned_flag 
+3ad7 c000bafd beq unprovisioned_beacon_status ,ali_mesh_control_ble_advertising_send_device_beacon_packet 
+3ad8 c001badc beq silence_beacon_status ,ali_mesh_control_ble_advertising_send_device_silence_beacon_packet 
+3ad9 c0013b0d beq pairing_status ,ali_mesh_control_ble_advertising_send_pairing_packet 
+3ada c0003ade beq paired_status ,ali_mesh_control_ble_advertising_send_paired_packet 
+3adb 20203ade branch ali_mesh_control_ble_advertising_send_paired_packet 
+
+ali_mesh_control_ble_advertising_send_device_silence_beacon_packet:
+3adc 70438800 jam 0 ,mem_le_adv_enable 
+3add 20203ad0 branch ali_mesh_control_ble_advertising_off_advertising 
+
+ali_mesh_control_ble_advertising_send_paired_packet:
+3ade 2040396c call ali_mesh_advertising_bearer_layer_init_queue_param 
+3adf da200787 arg mem_mesh_queue_ele_temp ,rega 
+3ae0 204078dc call queue_get_new_ele 
+3ae1 24740000 nrtn user 
+3ae2 6fe0c9b7 fetch 1 ,mem_mesh_upper_tran_layer_packet_type 
+3ae3 c2813aef bbit1 bit_uuper_tran_proxy_message ,ali_mesh_control_ble_advertising_send_paired_packet_end_duration_proxy 
+3ae4 6fe08787 fetch 1 ,mem_mesh_queue_ele_duration 
+3ae5 1fe0ffff pincrease -1 
+3ae6 e7e08012 istore 1 ,regb 
+3ae7 1fe17e7f and pdata ,0x7f ,pdata 
+3ae8 205a3af5 call ali_mesh_control_ble_advertising_send_paired_packet_end_duration ,blank 
+3ae9 6fe0c9b7 fetch 1 ,mem_mesh_upper_tran_layer_packet_type 
+3aea c4000000 rtnbit0 bit_upper_tran_tmall_message 
+3aeb d8a0462a arg mem_mesh_adv_data_len ,contw 
+3aec d8c00789 arg mem_mesh_queue_ele_len ,contr 
+3aed 20407c8d call memcpy32 
+3aee 202039d3 branch mesh_le_send_adv 
+
+ali_mesh_control_ble_advertising_send_paired_packet_end_duration_proxy:
+3aef da200787 arg mem_mesh_queue_ele_duration ,rega 
+3af0 204078ca call queue_pop 
+3af1 204078fa call queue_empty 
+3af2 247a0000 nrtn blank 
+3af3 20403afb call ali_mesh_send_paired_packet_init_advertising 
+3af4 20203ad0 branch ali_mesh_control_ble_advertising_off_advertising 
+
+ali_mesh_control_ble_advertising_send_paired_packet_end_duration:
+3af5 da200787 arg mem_mesh_queue_ele_duration ,rega 
+3af6 204078ca call queue_pop 
+3af7 204078fa call queue_empty 
+3af8 247a0000 nrtn blank 
+3af9 70464f04 jam adv_pairing_mesh_message_interval ,mem_mesh_advertising_unprovisioned_device_beacon_interval 
+3afa 20203ad0 branch ali_mesh_control_ble_advertising_off_advertising 
+
+ali_mesh_send_paired_packet_init_advertising:
+3afb 7049b500 jam null_packet_advertising ,mem_mesh_upper_tran_layer_packet_advertising 
+3afc 20600000 rtn 
+
+ali_mesh_control_ble_advertising_send_device_beacon_packet:
+3afd 20403ce0 call ali_mesh_config_device_uuid_by_three_tuple 
+3afe 20403cec call ali_mesh_send_unprovisioned_beacons_tmall 
+3aff 20403b05 call ali_mesh_control_ble_advertising_device_beacon_check_duration 
+3b00 24628000 nrtn zero 
+3b01 6fe0c7e4 fetch 1 ,mem_mesh_provisioned_flag 
+3b02 c001bb09 beq silence_beacon_status ,ali_mesh_end_advertising_silence_device_beacon_packet 
+3b03 c000bb0b beq unprovisioned_beacon_status ,ali_mesh_end_advertising_unprovisioned_device_beacon_packet 
+3b04 20600000 rtn 
+
+ali_mesh_control_ble_advertising_device_beacon_check_duration:
+3b05 6fe0c64e fetch 1 ,mem_mesh_advertising_unprovisioned_device_beacon_duration 
+3b06 1fe0ffff add pdata ,-1 ,pdata 
+3b07 67e0c64e store 1 ,mem_mesh_advertising_unprovisioned_device_beacon_duration 
+3b08 20600000 rtn 
+
+ali_mesh_end_advertising_silence_device_beacon_packet:
+3b09 70464f58 jam adv_silence_device_beacon_interval ,mem_mesh_advertising_unprovisioned_device_beacon_interval 
+3b0a 20203ad0 branch ali_mesh_control_ble_advertising_off_advertising 
+
+ali_mesh_end_advertising_unprovisioned_device_beacon_packet:
+3b0b 70464f06 jam adv_unprovisioned_device_beacon_duration ,mem_mesh_advertising_unprovisioned_device_beacon_interval 
+3b0c 20203ad0 branch ali_mesh_control_ble_advertising_off_advertising 
+
+ali_mesh_control_ble_advertising_send_pairing_packet:
+3b0d 202039d3 branch mesh_le_send_adv 
+
+ali_mesh_chip_timer_check_with_random_timer:
+3b0e 6fe0c64b fetch 1 ,mem_mesh_advertising_unprovisioned_device_beacon_switch 
+3b0f c1808000 rtnne device_beacon_on 
+
+ali_mesh_chip_timer_check_with_random_timer_continue:
+3b10 180a7e00 random pdata 
+3b11 1fe17e07 and pdata ,0x07 ,pdata 
+3b12 9a20a200 iadd rega ,rega 
+
+ali_mesh_chip_timer_check:
+3b13 20407cef call timer_check 
+3b14 247a0000 nrtn blank 
+3b15 1a227e00 copy rega ,pdata 
+3b16 20407ce1 call timer_init 
+3b17 1a427e00 copy regb ,pdata 
+3b18 20207d79 branch callback_func 
+
+ali_mesh_advertising_unprovisioned_timer:
+3b19 da60464c arg mem_mesh_advertising_unprovisioned_device_beacon_timer ,regc 
+3b1a da403b1c arg ali_mesh_advertising_unprovisioned_timeout ,regb 
+3b1b 202042e7 branch timer_single_step_2b 
+
+ali_mesh_advertising_unprovisioned_timeout:
+3b1c 6fe0c7e4 fetch 1 ,mem_mesh_provisioned_flag 
+3b1d c1808000 rtnne unprovisioned_beacon_status 
+3b1e 6fe0c7e7 fetch 1 ,mem_mesh_uuid_featureflag 
+3b1f 79207e00 set1 bit_silence_adv_flag ,pdata 
+3b20 67e0c7e7 store 1 ,mem_mesh_uuid_featureflag 
+3b21 7047e403 jam silence_beacon_status ,mem_mesh_provisioned_flag 
+3b22 20203b31 branch ali_mesh_send_silence_device_beacon_init_advertising 
+
+ali_mesh_advertising_unprovisioned_timer_interval_timer:
+3b23 da60464f arg mem_mesh_advertising_unprovisioned_device_beacon_interval ,regc 
+3b24 da403b26 arg ali_mesh_advertising_unprovisioned_timer_interval_timeout ,regb 
+3b25 202042e0 branch timer_single_step 
+
+ali_mesh_advertising_unprovisioned_timer_interval_timeout:
+3b26 6fe0c7e4 fetch 1 ,mem_mesh_provisioned_flag 
+3b27 c000bb2f beq unprovisioned_beacon_status ,ali_mesh_send_unprovisioned_device_beacon_init_advertising 
+3b28 c0003afb beq paired_status ,ali_mesh_send_paired_packet_init_advertising 
+3b29 20600000 rtn 
+
+ali_mesh_stop_send_indication_packet:
+3b2a 20403e5a call ali_mesh_advertising_bearer_layer_queue_init 
+3b2b 2040420b call ali_mesh_upper_transport_layer_queue_pop 
+3b2c 70464f00 jam 0 ,mem_mesh_advertising_unprovisioned_device_beacon_interval 
+3b2d 20403ad0 call ali_mesh_control_ble_advertising_off_advertising 
+3b2e 20203afb branch ali_mesh_send_paired_packet_init_advertising 
+
+ali_mesh_send_unprovisioned_device_beacon_init_advertising:
+3b2f 70464e06 jam adv_unprovisioned_device_beacon_duration ,mem_mesh_advertising_unprovisioned_device_beacon_duration 
+3b30 20203ace branch ali_mesh_control_ble_advertising_on_advertising 
+
+ali_mesh_send_silence_device_beacon_init_advertising:
+3b31 70464e06 jam adv_silence_device_beacon_duration ,mem_mesh_advertising_unprovisioned_device_beacon_duration 
+3b32 20203ace branch ali_mesh_control_ble_advertising_on_advertising 
+
+ali_mesh_network_layer_control_relay_packet:
+3b33 da403b37 arg ali_mesh_network_layer_control_send_relay_packet ,regb 
+3b34 da200020 arg mesh_adv_relay_message_interval ,rega 
+3b35 d8e0000f arg mesh_ble_relay_timer ,queue 
+3b36 20203b10 branch ali_mesh_chip_timer_check_with_random_timer_continue 
+
+ali_mesh_network_layer_control_send_relay_packet:
+3b37 6fe0c9b5 fetch 1 ,mem_mesh_upper_tran_layer_packet_advertising 
+3b38 247a0000 nrtn blank 
+3b39 2040406e call ali_mesh_network_layer_init_queue_param 
+3b3a da200787 arg mem_mesh_queue_ele_temp ,rega 
+3b3b 204078dc call queue_get_new_ele 
+3b3c 24740000 nrtn user 
+3b3d 6fe08787 fetch 1 ,mem_mesh_queue_ele_duration 
+3b3e 1fe0ffff pincrease -1 
+3b3f e7e08012 istore 1 ,regb 
+3b40 205a78ca call queue_pop ,blank 
+3b41 d8a0462a arg mem_mesh_adv_data_len ,contw 
+3b42 d8c00789 arg mem_mesh_queue_ele_len ,contr 
+3b43 20407c8d call memcpy32 
+3b44 202039d3 branch mesh_le_send_adv 
+
+ali_mesh_encrypt_calc_random_data:
+3b45 20403b4b call ali_mesh_encrypt_calc_random_data_calc_confirmationkey 
+3b46 20403b53 call ali_mesh_encrypt_calc_random_data_calc_authvalueprov 
+3b47 20403b59 call ali_mesh_encrypt_calc_random_data_calc_authvaluedevice 
+3b48 20403b5f call ali_mesh_encrypt_calc_random_data_calc_confirmationcloud 
+3b49 20403b67 call ali_mesh_encrypt_calc_random_data_calc_confirmationdevice 
+3b4a 20203b6b branch ali_mesh_encrypt_calc_random_data_calc_devicekey 
+
+ali_mesh_encrypt_calc_random_data_calc_confirmationkey:
+3b4b 20403b78 call ali_mesh_encrypt_load_randomab_to_sha256 
+3b4c d8c046c0 arg mem_mesh_sha256_confirmationkey_ascii ,contr 
+3b4d df20000f arg 0xf ,loopcnt 
+3b4e 20403be7 call ali_mesh_encrypt_base_function_sha256_load_data_without_hex2ascii 
+3b4f 20403c01 call ali_mesh_encrypt_base_function_sha256_calc 
+3b50 d8c001bd arg memresult ,contr 
+3b51 d8a046b0 arg mem_mesh_confirmationkey ,contw 
+3b52 20207c8f branch memcpy16 
+
+ali_mesh_encrypt_calc_random_data_calc_authvalueprov:
+3b53 20403b7b call ali_mesh_encrypt_load_three_tuple_to_sha256 
+3b54 20403b75 call ali_mesh_encrypt_load_randomba_to_sha256 
+3b55 20403c01 call ali_mesh_encrypt_base_function_sha256_calc 
+3b56 d8c001bd arg memresult ,contr 
+3b57 d8a04660 arg mem_mesh_authvalueprov ,contw 
+3b58 20207c8f branch memcpy16 
+
+ali_mesh_encrypt_calc_random_data_calc_authvaluedevice:
+3b59 20403b7b call ali_mesh_encrypt_load_three_tuple_to_sha256 
+3b5a 20403b78 call ali_mesh_encrypt_load_randomab_to_sha256 
+3b5b 20403c01 call ali_mesh_encrypt_base_function_sha256_calc 
+3b5c d8c001bd arg memresult ,contr 
+3b5d d8a04690 arg mem_mesh_authvaluedevice ,contw 
+3b5e 20207c8f branch memcpy16 
+
+ali_mesh_encrypt_calc_random_data_calc_confirmationcloud:
+3b5f 6fe44680 fetch 8 ,mem_mesh_provisioning_random_a 
+3b60 67e44658 store 8 ,mem_mesh_confirmationcloud_randoma 
+3b61 6fe44688 fetch 8 ,mem_mesh_provisioning_random_b 
+3b62 67e44650 store 8 ,mem_mesh_confirmationcloud_randomb 
+3b63 d8c04650 arg mem_mesh_calc_confirmationcloud_data ,contr 
+3b64 da2046b0 arg mem_mesh_confirmationkey ,rega 
+3b65 de004670 arg mem_mesh_confirmationcloud ,alarm 
+3b66 20203c48 branch ali_mesh_encrypt_base_function_aes_cmac_32byte 
+
+ali_mesh_encrypt_calc_random_data_calc_confirmationdevice:
+3b67 d8c04680 arg mem_mesh_calc_confirmationdevice_data ,contr 
+3b68 da2046b0 arg mem_mesh_confirmationkey ,rega 
+3b69 de004680 arg mem_mesh_confirmationdevice ,alarm 
+3b6a 20203c48 branch ali_mesh_encrypt_base_function_aes_cmac_32byte 
+
+ali_mesh_encrypt_calc_random_data_calc_devicekey:
+3b6b d8c04670 arg mem_mesh_confirmationcloud ,contr 
+3b6c df200010 arg 0x10 ,loopcnt 
+3b6d 20403be4 call ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii 
+3b6e d8c046d9 arg mem_mesh_sha256_devicekey_ascii ,contr 
+3b6f df200009 arg 9 ,loopcnt 
+3b70 20403be7 call ali_mesh_encrypt_base_function_sha256_load_data_without_hex2ascii 
+3b71 20403c01 call ali_mesh_encrypt_base_function_sha256_calc 
+3b72 d8c001bd arg memresult ,contr 
+3b73 d8a046a0 arg mem_mesh_device_key ,contw 
+3b74 20207c8f branch memcpy16 
+
+ali_mesh_encrypt_load_randomba_to_sha256:
+3b75 20403b79 call ali_mesh_encrypt_load_randomb_to_sha256 
+
+ali_mesh_encrypt_load_randoma_to_sha256:
+3b76 d8c04680 arg mem_mesh_provisioning_random_a ,contr 
+3b77 20203be3 branch ali_mesh_encrypt_base_function_sha256_load_data_64bit 
+
+ali_mesh_encrypt_load_randomab_to_sha256:
+3b78 20403b76 call ali_mesh_encrypt_load_randoma_to_sha256 
+
+ali_mesh_encrypt_load_randomb_to_sha256:
+3b79 d8c04688 arg mem_mesh_provisioning_random_b ,contr 
+3b7a 20203be3 branch ali_mesh_encrypt_base_function_sha256_load_data_64bit 
+
+ali_mesh_encrypt_load_three_tuple_to_sha256:
+3b7b d8c0480a arg mem_mesh_three_tuple_productid ,contr 
+3b7c df200004 arg 4 ,loopcnt 
+3b7d 20403bea call ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii_add_comma 
+3b7e d8c0480e arg mem_mesh_three_tuple_mac ,contr 
+3b7f df200006 arg 6 ,loopcnt 
+3b80 20403bea call ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii_add_comma 
+3b81 d8c04814 arg mem_mesh_three_tuple_secret ,contr 
+3b82 df200010 arg 0x10 ,loopcnt 
+3b83 20403be4 call ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii 
+3b84 20403bf1 call ali_mesh_encrypt_base_function_sha256_check_first_load_data 
+3b85 20203bec branch ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii_add_comma + 2 
+
+ali_mesh_encrypt_calc_provisioning_data:
+3b86 20403b92 call ali_mesh_encrypt_calc_provisioning_data_calc_sessionkey 
+
+ali_mesh_encrypt_calc_provisioning_data_xor_prov_data:
+3b87 da2047ec arg mem_mesh_encrypt_provisioning_data ,rega 
+3b88 da4001bd arg memresult ,regb 
+3b89 df20000b arg 0xb ,loopcnt 
+
+ali_mesh_encrypt_calc_provisioning_data_xor_prov_data_loop:
+3b8a efe10011 ifetch 2 ,rega 
+3b8b e8410012 ifetcht 2 ,regb 
+3b8c 9842fe00 ixor temp ,pdata 
+3b8d e7e10011 istore 2 ,rega 
+3b8e 1a20a202 increase 2 ,rega 
+3b8f 1a40a402 increase 2 ,regb 
+3b90 c2003b8a loop ali_mesh_encrypt_calc_provisioning_data_xor_prov_data_loop 
+3b91 20600000 rtn 
+
+ali_mesh_encrypt_calc_provisioning_data_calc_sessionkey:
+3b92 d8c04670 arg mem_mesh_confirmationcloud ,contr 
+3b93 df200010 arg 0x10 ,loopcnt 
+3b94 20403be4 call ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii 
+3b95 d8c046cf arg mem_mesh_sha256_sessionkey_ascii ,contr 
+3b96 df20000a arg 0xa ,loopcnt 
+3b97 20403be7 call ali_mesh_encrypt_base_function_sha256_load_data_without_hex2ascii 
+3b98 20203c01 branch ali_mesh_encrypt_base_function_sha256_calc 
+
+ali_mesh_encrypt_calc_network_key_by_k2:
+3b99 d8c047ef arg mem_mesh_network_key ,contr 
+3b9a d8a0470d arg mem_k2_n ,contw 
+3b9b 20407c8f call memcpy16 
+
+ali_mesh_encrypt_base_function_k2:
+3b9c d8c0470d arg mem_k2_n ,contr 
+3b9d da20471d arg mem_k2_salt ,rega 
+3b9e de00472d arg mem_k2_t ,alarm 
+3b9f 20403c4a call ali_mesh_encrypt_base_function_aes_cmac_16byte 
+3ba0 de00473d arg mem_k2_t1 ,alarm 
+3ba1 da400001 arg 0x01 ,regb 
+3ba2 58000000 setarg 0 
+3ba3 20403c4c call ali_mesh_encrypt_base_function_k2_aes_cmac_t 
+3ba4 6fe0c74c fetch 1 ,mem_k2_t1 + 15 
+3ba5 1fe17e7f and pdata ,0x7f ,pdata 
+3ba6 67e0c74d store 1 ,mem_k2_nid 
+3ba7 de00475e arg mem_k2_t2 ,alarm 
+3ba8 da400002 arg 0x02 ,regb 
+3ba9 58000010 setarg 0x10 
+3baa da20473d arg mem_k2_t1 ,rega 
+3bab 20403c4c call ali_mesh_encrypt_base_function_k2_aes_cmac_t 
+3bac de00474e arg mem_k2_t3 ,alarm 
+3bad da400003 arg 0x03 ,regb 
+3bae 58000010 setarg 0x10 
+3baf da20475e arg mem_k2_t2 ,rega 
+3bb0 20203c4c branch ali_mesh_encrypt_base_function_k2_aes_cmac_t 
+
+ali_mesh_encrypt_base_function_k4:
+3bb1 d8c04959 arg mem_mesh_application_key ,contr 
+3bb2 da20476e arg mem_k4_salt ,rega 
+3bb3 de00477e arg mem_k4_t ,alarm 
+3bb4 20403c4a call ali_mesh_encrypt_base_function_aes_cmac_16byte 
+3bb5 d8c0478e arg mem_k4_id6_01 ,contr 
+3bb6 da20477e arg mem_k4_t ,rega 
+3bb7 de00479e arg mem_k4_k4n ,alarm 
+3bb8 58000004 setarg 4 
+3bb9 20403c5a call ali_mesh_encrypt_base_function_aes_cmac 
+3bba 6fe0c7ad fetch 1 ,mem_k4_k4n + 15 
+3bbb 1fe17e3f and pdata ,0x3f ,pdata 
+3bbc 79207e06 set1 transport_head_bit_akf ,pdata 
+3bbd 67e0c7ae store 1 ,mem_mesh_transport_aid 
+3bbe 20600000 rtn 
+
+ali_mesh_encrypt_base_function_k3:
+3bbf d8c047ef arg mem_mesh_network_key ,contr 
+3bc0 da2047af arg mem_k3_salt ,rega 
+3bc1 de0047bf arg mem_k3_t ,alarm 
+3bc2 20403c4a call ali_mesh_encrypt_base_function_aes_cmac_16byte 
+3bc3 d8c047cf arg mem_k3_id64_01 ,contr 
+3bc4 da2047bf arg mem_k3_t ,rega 
+3bc5 de0047d4 arg mem_k3_k4n ,alarm 
+3bc6 58000005 setarg 5 
+3bc7 20403c5a call ali_mesh_encrypt_base_function_aes_cmac 
+3bc8 6fe144e9 fetch 2 ,mem_ui_state_map 
+3bc9 c3848000 rtnbit1 ui_state_ble_connected 
+3bca 70438801 jam 1 ,mem_le_adv_enable 
+3bcb 20600000 rtn 
+
+ali_mesh_encrypt_obfuscation_deceypt_send_message:
+3bcc da204999 arg mem_mesh_send_upper_layer_ctl_and_ttl ,rega 
+3bcd 6fe3c99f fetch 7 ,mem_mesh_send_upper_layer_dst 
+3bce 20203bd1 branch ali_mesh_encrypt_obfuscation_deceypt 
+
+ali_mesh_encrypt_obfuscation_deceypt_recevie_message:
+3bcf da200923 arg mem_mesh_message_ttl ,rega 
+3bd0 6fe38929 fetch 7 ,mem_mesh_message_dst 
+
+ali_mesh_encrypt_obfuscation_deceypt:
+3bd1 67e388da store 7 ,mem_mesh_privacy_plaintext_privacy_random 
+3bd2 58000000 setarg 0 
+3bd3 67e288d1 store 5 ,mem_mesh_privacy_plaintext_zero_string 
+3bd4 20403bda call ali_mesh_encrypt_generate_pecb 
+3bd5 6fe308e1 fetch 6 ,mem_mesh_pecb 
+3bd6 e8430011 ifetcht 6 ,rega 
+3bd7 9842fe00 ixor temp ,pdata 
+3bd8 e7e30011 istore 6 ,rega 
+3bd9 20600000 rtn 
+
+ali_mesh_encrypt_generate_pecb:
+
+ali_mesh_encrypt_generate_privacy_random:
+3bda 6fe2486e fetch 4 ,mem_mesh_iv_index 
+3bdb 67e208d6 store 4 ,mem_mesh_privacy_plaintext_iv_index 
+
+ali_mesh_encrypt_base_function_generate_pecb:
+3bdc d8c0474e arg mem_k2_privacykey ,contr 
+3bdd 2040735f call load_key 
+3bde d8c008d1 arg mem_mesh_privacy_plaintext ,contr 
+3bdf 20407361 call load_data128 
+3be0 204072d1 call do_aes_ocb 
+3be1 d8a008e1 arg mem_mesh_pecb ,contw 
+3be2 20207375 branch store_aes_result 
+
+ali_mesh_encrypt_base_function_sha256_load_data_64bit:
+3be3 df200008 arg 8 ,loopcnt 
+
+ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii:
+3be4 20403bf1 call ali_mesh_encrypt_base_function_sha256_check_first_load_data 
+3be5 20403c39 call ali_mesh_encrypt_base_function_hex2ascii 
+3be6 20203bee branch ali_mesh_encrypt_base_function_sha256_store_dataptr 
+
+ali_mesh_encrypt_base_function_sha256_load_data_without_hex2ascii:
+3be7 20403bf1 call ali_mesh_encrypt_base_function_sha256_check_first_load_data 
+3be8 20407cda call memcpy 
+3be9 20203bee branch ali_mesh_encrypt_base_function_sha256_store_dataptr 
+
+ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii_add_comma:
+3bea 20403bf1 call ali_mesh_encrypt_base_function_sha256_check_first_load_data 
+3beb 20403c39 call ali_mesh_encrypt_base_function_hex2ascii 
+3bec 5800002c setarg comma 
+3bed e7e08005 istore 1 ,contw 
+
+ali_mesh_encrypt_base_function_sha256_store_dataptr:
+3bee 18a27e00 copy contw ,pdata 
+3bef 67e146f3 store 2 ,mem_mesh_sha256_data_end_addr 
+3bf0 20600000 rtn 
+
+ali_mesh_encrypt_base_function_sha256_check_first_load_data:
+3bf1 18c20400 copy contr ,temp 
+3bf2 1f222200 copy loopcnt ,rega 
+3bf3 6fe146f3 fetch 2 ,mem_mesh_sha256_data_end_addr 
+3bf4 1fe20a00 copy pdata ,contw 
+3bf5 6fe0c6e2 fetch 1 ,mem_mesh_sha256_load_first_data_flag 
+3bf6 205a3bfa call ali_mesh_encrypt_base_function_sha256_first_load_data ,blank 
+3bf7 18420c00 copy temp ,contr 
+3bf8 1a227200 copy rega ,loopcnt 
+3bf9 20600000 rtn 
+
+ali_mesh_encrypt_base_function_sha256_first_load_data:
+3bfa 7046e201 jam 1 ,mem_mesh_sha256_load_first_data_flag 
+3bfb 20403bfe call ali_mesh_encrypt_base_function_sha256_clear_data_chunk 
+3bfc d8a007d1 arg mem_mesh_sha256_chunk_start ,contw 
+3bfd 20600000 rtn 
+
+ali_mesh_encrypt_base_function_sha256_clear_data_chunk:
+3bfe df200100 arg 0x100 ,loopcnt 
+3bff d8a007d1 arg mem_mesh_sha256_chunk_start ,contw 
+3c00 20207ca3 branch memset0 
+
+ali_mesh_encrypt_base_function_sha256_calc:
+3c01 20403c17 call ali_mesh_encrypt_base_function_sha256_load_data_end 
+3c02 20403c32 call ali_mesh_encrypt_base_function_sha256_input_data_init_inverse 
+3c03 580007d1 setarg mem_mesh_sha256_chunk_start 
+3c04 67e146fa store 2 ,mem_mesh_sha256_chunk_ptr 
+3c05 20404134 call sha_init 
+
+ali_mesh_encrypt_base_function_sha256_calc_loop:
+3c06 6fe146fa fetch 2 ,mem_mesh_sha256_chunk_ptr 
+3c07 1fe20c00 copy pdata ,contr 
+3c08 d8a00231 arg mem_dat ,contw 
+3c09 20407c81 call memcpy64 
+3c0a 2040413b call sha 
+3c0b 6fe146fa fetch 2 ,mem_mesh_sha256_chunk_ptr 
+3c0c 1fe0fe40 pincrease 64 
+3c0d 67e146fa store 2 ,mem_mesh_sha256_chunk_ptr 
+3c0e 6fe0c6f7 fetch 1 ,mem_mesh_sha256_chunk_count 
+3c0f 1fe0ffff pincrease -1 
+3c10 67e0c6f7 store 1 ,mem_mesh_sha256_chunk_count 
+3c11 243a3c06 nbranch ali_mesh_encrypt_base_function_sha256_calc_loop ,blank 
+3c12 20404176 call sha_result 
+3c13 da2001bd arg memresult ,rega 
+3c14 df200020 arg 0x20 ,loopcnt 
+3c15 20407cb1 call inverse_data 
+3c16 20600000 rtn 
+
+ali_mesh_encrypt_base_function_sha256_load_data_end:
+3c17 7046e200 jam 0 ,mem_mesh_sha256_load_first_data_flag 
+3c18 6fe146f3 fetch 2 ,mem_mesh_sha256_data_end_addr 
+3c19 1fe20a00 copy pdata ,contw 
+3c1a d8400080 arg 0x80 ,temp 
+3c1b e0408005 istoret 1 ,contw 
+3c1c d84007d1 arg mem_mesh_sha256_chunk_start ,temp 
+3c1d 98467e00 isub temp ,pdata 
+3c1e 67e446e3 store 8 ,mem_mesh_sha256_data_len_byte 
+3c1f 1fe98400 lshift3 pdata ,temp 
+3c20 604c46eb storet 8 ,mem_mesh_sha256_data_len_bit 
+3c21 1ff1a600 rshift4 pdata ,regc 
+3c22 1a6b2600 rshift2 regc ,regc 
+3c23 1fe17e3f and pdata ,0x3f ,pdata 
+3c24 1fe67c37 sub pdata ,55 ,null 
+3c25 24413c30 ncall ali_mesh_encrypt_base_function_sha256_add_chunk ,positive 
+3c26 1a60fe01 add regc ,1 ,pdata 
+3c27 67e0c6f7 store 1 ,mem_mesh_sha256_chunk_count 
+3c28 1fefa240 mul32 pdata ,64 ,rega 
+3c29 1ff22600 lshift4 pdata ,regc 
+3c2a 1a60a7ff increase -1 ,regc 
+3c2b 580007cd setarg mem_mesh_sha256_chunk_start + decreased_four 
+3c2c 9a20a200 iadd rega ,rega 
+3c2d 6fe246eb fetch 4 ,mem_mesh_sha256_data_len_bit 
+3c2e e7e20011 istore 4 ,rega 
+3c2f 20600000 rtn 
+
+ali_mesh_encrypt_base_function_sha256_add_chunk:
+3c30 1a60a601 increase 1 ,regc 
+3c31 20600000 rtn 
+
+ali_mesh_encrypt_base_function_sha256_input_data_init_inverse:
+3c32 da2007d1 arg mem_mesh_sha256_chunk_start ,rega 
+
+ali_mesh_encrypt_base_function_sha256_data_inverse_4byte:
+3c33 df200004 arg 4 ,loopcnt 
+3c34 20407cb1 call inverse_data 
+3c35 1a20a202 increase 2 ,rega 
+3c36 1a60a7ff add regc ,-1 ,regc 
+3c37 2422bc33 nbranch ali_mesh_encrypt_base_function_sha256_data_inverse_4byte ,zero 
+3c38 20600000 rtn 
+
+ali_mesh_encrypt_base_function_hex2ascii:
+3c39 efe08006 ifetch 1 ,contr 
+3c3a 1ff18400 rshift4 pdata ,temp 
+3c3b 20403c42 call ali_mesh_encrypt_base_function_dialog2uchar 
+3c3c e0408005 istoret 1 ,contw 
+3c3d 1fe1040f and pdata ,0x0f ,temp 
+3c3e 20403c42 call ali_mesh_encrypt_base_function_dialog2uchar 
+3c3f e0408005 istoret 1 ,contw 
+3c40 c2003c39 loop ali_mesh_encrypt_base_function_hex2ascii 
+3c41 20600000 rtn 
+
+ali_mesh_encrypt_base_function_dialog2uchar:
+3c42 18467c09 sub temp ,9 ,null 
+3c43 20213c46 branch ali_mesh_encrypt_base_function_dialog2uchar_num ,positive 
+3c44 18408457 add temp ,87 ,temp 
+3c45 20600000 rtn 
+
+ali_mesh_encrypt_base_function_dialog2uchar_num:
+3c46 18408430 add temp ,48 ,temp 
+3c47 20600000 rtn 
+
+ali_mesh_encrypt_base_function_aes_cmac_32byte:
+3c48 58000020 setarg 0x20 
+3c49 20203c5a branch ali_mesh_encrypt_base_function_aes_cmac 
+
+ali_mesh_encrypt_base_function_aes_cmac_16byte:
+3c4a 58000010 setarg 0x10 
+3c4b 20203c5a branch ali_mesh_encrypt_base_function_aes_cmac 
+
+ali_mesh_encrypt_base_function_k2_aes_cmac_t:
+3c4c 6848c6fc fetcht 1 ,mem_k2_p_len 
+3c4d 18408401 increase 1 ,temp 
+3c4e 98408400 iadd temp ,temp 
+3c4f 60488230 storet 1 ,mem_aes_cmac_data_length 
+3c50 1a220c00 copy rega ,contr 
+3c51 1fe27200 copy pdata ,loopcnt 
+3c52 20407ccc call memcpy_fast 
+3c53 6848c6fc fetcht 1 ,mem_k2_p_len 
+3c54 18427200 copy temp ,loopcnt 
+3c55 20407cda call memcpy 
+3c56 1a427e00 copy regb ,pdata 
+3c57 e7e08005 istore 1 ,contw 
+3c58 da20472d arg mem_k2_t ,rega 
+3c59 20203c5d branch ali_mesh_encrypt_base_function_aes_cmac + 3 
+
+ali_mesh_encrypt_base_function_aes_cmac:
+3c5a 67e08230 store 1 ,mem_aes_cmac_data_length 
+3c5b 1fe27200 copy pdata ,loopcnt 
+3c5c 20407ccc call memcpy_fast 
+3c5d 1a220c00 copy rega ,contr 
+3c5e d8a006a1 arg mem_aes_cmac_k ,contw 
+3c5f 20407c8f call memcpy16 
+3c60 204071c1 call function_aes_cmac 
+3c61 1e020a00 copy alarm ,contw 
+3c62 20407375 call store_aes_result 
+3c63 20600000 rtn 
+
+ali_b0_block_generate:
+3c64 684888fe fetcht 1 ,mem_ccm_type 
+3c65 20203c67 branch ali_block_generate 
+
+ali_a_block_generate:
+3c66 18000401 force 0x01 ,temp 
+
+ali_block_generate:
+3c67 18007000 force regidx_data ,regext_index 
+3c68 6fe108f1 fetch 2 ,mem_nonce_ptr 
+3c69 1fe20c00 copy pdata ,contr 
+3c6a efe18006 ifetch 3 ,contr 
+3c6b 1fed7e00 lshift8 pdata ,pdata 
+3c6c 9841de00 ior temp ,regext 
+3c6d 1f00f001 increase 1 ,regext_index 
+3c6e efe20006 ifetch 4 ,contr 
+3c6f 1fe25e00 copy pdata ,regext 
+3c70 1f00f001 increase 1 ,regext_index 
+3c71 efe20006 ifetch 4 ,contr 
+3c72 1fe25e00 copy pdata ,regext 
+3c73 1f00f001 increase 1 ,regext_index 
+3c74 1a30de00 byteswap rega ,regext 
+3c75 1df05e00 lshift16 regext ,regext 
+3c76 efe10006 ifetch 2 ,contr 
+3c77 9de1de00 ior regext ,regext 
+3c78 20600000 rtn 
+
+ali_generate_mic:
+3c79 6fe088f3 fetch 1 ,mem_ccm_data_len 
+3c7a 1fe22200 copy pdata ,rega 
+3c7b 20403c64 call ali_b0_block_generate 
+3c7c 204072d1 call do_aes_ocb 
+3c7d 1800700c force regidx_result ,regext_index 
+3c7e 1de27e00 deposit regext 
+3c7f 1a227200 copy rega ,loopcnt 
+3c80 684908f4 fetcht 2 ,mem_ccm_data_ptr 
+3c81 18420c00 copy temp ,contr 
+3c82 20407349 call padding_data 
+3c83 2020728c branch generate_mic_loop 
+
+ali_ccm_encrypt_64bit:
+3c84 7008fe19 jam mic_size_64bit ,mem_ccm_type 
+3c85 20203c88 branch ali_ccm_encrypt_function 
+
+ali_ccm_encrypt:
+3c86 7008fe09 jam mic_size_32bit ,mem_ccm_type 
+3c87 20203c88 branch ali_ccm_encrypt_function 
+
+ali_ccm_encrypt_function:
+3c88 67e088f3 store 1 ,mem_ccm_data_len 
+3c89 604908f4 storet 2 ,mem_ccm_data_ptr 
+3c8a 4752c034 bpatchx patch34_5 ,mem_patch34 
+3c8b 20403c79 call ali_generate_mic 
+3c8c 18007008 force regidx_xor ,regext_index 
+3c8d 98005e00 iforce regext 
+3c8e 1800700d force regidx_result + 1 ,regext_index 
+3c8f 1de27e00 copy regext ,pdata 
+3c90 18007009 force regidx_xor + 1 ,regext_index 
+3c91 98005e00 iforce regext 
+3c92 18002200 force 0 ,rega 
+3c93 18422600 copy temp ,regc 
+3c94 20403c66 call ali_a_block_generate 
+3c95 204072d7 call do_aes_ctr 
+3c96 20403cc7 call ali_fetcht_ccm_mic 
+3c97 604c08f6 storet 8 ,mem_ccm_mic 
+3c98 6fe088f3 fetch 1 ,mem_ccm_data_len 
+3c99 1fe22400 copy pdata ,regb 
+3c9a 20403ccf call ali_aes_crypt_data 
+3c9b 684888f3 fetcht 1 ,mem_ccm_data_len 
+3c9c 6fe108f4 fetch 2 ,mem_ccm_data_ptr 
+3c9d 9840a200 iadd temp ,rega 
+3c9e 684c08f6 fetcht 8 ,mem_ccm_mic 
+3c9f e0420011 istoret 4 ,rega 
+3ca0 6fe088fe fetch 1 ,mem_ccm_type 
+3ca1 1fe67e09 sub pdata ,mic_size_32bit ,pdata 
+3ca2 207a0000 rtn blank 
+3ca3 e0440011 istoret 8 ,rega 
+3ca4 20600000 rtn 
+
+ali_ccm_decrypt_64bit:
+3ca5 7008fe19 jam mic_size_64bit ,mem_ccm_type 
+3ca6 20203ca9 branch ali_ccm_decrypt_function 
+
+ali_ccm_decrypt:
+3ca7 7008fe09 jam mic_size_32bit ,mem_ccm_type 
+3ca8 20203ca9 branch ali_ccm_decrypt_function 
+
+ali_ccm_decrypt_function:
+3ca9 67e088f3 store 1 ,mem_ccm_data_len 
+3caa 604908f4 storet 2 ,mem_ccm_data_ptr 
+3cab 18422600 copy temp ,regc 
+3cac 1fe22400 copy pdata ,regb 
+3cad 9a608c00 iadd regc ,contr 
+3cae 47534034 bpatchx patch34_6 ,mem_patch34 
+3caf efe40006 ifetch 8 ,contr 
+3cb0 18007008 force regidx_xor ,regext_index 
+3cb1 98005e00 iforce regext 
+3cb2 18007009 force regidx_xor + 1 ,regext_index 
+3cb3 1fef7e00 rshift32 pdata ,pdata 
+3cb4 98005e00 iforce regext 
+3cb5 18002200 force 0 ,rega 
+3cb6 20403c66 call ali_a_block_generate 
+3cb7 204072d7 call do_aes_ctr 
+3cb8 20403cc7 call ali_fetcht_ccm_mic 
+3cb9 604c08f6 storet 8 ,mem_ccm_mic 
+3cba 20403ccf call ali_aes_crypt_data 
+3cbb 20403c79 call ali_generate_mic 
+3cbc 20403cc7 call ali_fetcht_ccm_mic 
+3cbd 6fe088fe fetch 1 ,mem_ccm_type 
+3cbe c00cbcc4 beq mic_size_64bit ,ali_ccm_decrypt_function_check_mic64 
+3cbf 604a08fa storet 4 ,mem_ccm_mic + 4 
+3cc0 6fe208f6 fetch 4 ,mem_ccm_mic 
+3cc1 684a08fa fetcht 4 ,mem_ccm_mic + 4 
+3cc2 98467e00 isub temp ,pdata 
+3cc3 20600000 rtn 
+
+ali_ccm_decrypt_function_check_mic64:
+3cc4 6fe408f6 fetch 8 ,mem_ccm_mic 
+3cc5 98467e00 isub temp ,pdata 
+3cc6 20600000 rtn 
+
+ali_fetcht_ccm_mic:
+3cc7 1800700c force regidx_result ,regext_index 
+3cc8 1de27e00 deposit regext 
+3cc9 1800700d force regidx_result + 1 ,regext_index 
+3cca 1de20400 copy regext ,temp 
+3ccb 18500400 lshift16 temp ,temp 
+3ccc 18500400 lshift16 temp ,temp 
+3ccd 98418400 ior temp ,temp 
+3cce 20600000 rtn 
+
+ali_aes_crypt_data:
+3ccf 1a20a201 increase 1 ,rega 
+3cd0 20403c66 call ali_a_block_generate 
+3cd1 1a620c00 copy regc ,contr 
+3cd2 2040735d call aes_load_xor 
+3cd3 204072d7 call do_aes_ctr 
+3cd4 2040737c call store_enc_data 
+3cd5 1a60a610 increase 16 ,regc 
+3cd6 1a40a5f0 increase -16 ,regb 
+3cd7 20213ccf branch ali_aes_crypt_data ,positive 
+3cd8 20600000 rtn 
+
+mesh_send_unprovisioned_beacons:
+3cd9 4753c034 bpatchx patch34_7 ,mem_patch34 
+3cda 7047e401 jam unprovisioned_beacon_status ,mem_mesh_provisioned_flag 
+3cdb 7047e500 jam 0x00 ,mem_mesh_provisioning_state_flag 
+3cdc 70464b01 jam 1 ,mem_mesh_advertising_unprovisioned_device_beacon_switch 
+3cdd 58001770 setarg adv_unprovisioned_device_beacon_timeout 
+3cde 67e1464c store 2 ,mem_mesh_advertising_unprovisioned_device_beacon_timer 
+3cdf 20600000 rtn 
+
+ali_mesh_config_device_uuid_by_three_tuple:
+3ce0 580001a8 setarg company_identifiers_alibaba 
+3ce1 67e108ff store 2 ,mem_mesh_device_uuid 
+3ce2 6fe0c7e6 fetch 1 ,mem_mesh_device_pid 
+3ce3 e7e08005 istore 1 ,contw 
+3ce4 6fe2480a fetch 4 ,mem_mesh_three_tuple_productid 
+3ce5 20407cc6 call inverse_data_4byte 
+3ce6 e7e20005 istore 4 ,contw 
+3ce7 6fe342db fetch 6 ,mem_le_lap 
+3ce8 e7e30005 istore 6 ,contw 
+3ce9 6fe1c7e7 fetch 3 ,mem_mesh_uuid_featureflag 
+3cea e7e18005 istore 3 ,contw 
+3ceb 20600000 rtn 
+
+ali_mesh_send_unprovisioned_beacons_tmall:
+3cec 20403cee call ali_mesh_init_adv_data_tmall_unprovisioned_beacons_package 
+3ced 202039d3 branch mesh_le_send_adv 
+
+ali_mesh_init_adv_data_tmall_unprovisioned_beacons_package:
+3cee 70462a15 jam 0x15 ,mem_mesh_adv_data_len 
+3cef 58000014 setarg 0x14 
+3cf0 67e0c62b store 1 ,mem_mesh_adv_data 
+3cf1 5800002b setarg gap_adtype_mesh_beacon 
+3cf2 e7e08005 istore 1 ,contw 
+3cf3 58000000 setarg unprovisioned_device_beacon 
+3cf4 e7e08005 istore 1 ,contw 
+
+ali_mesh_advertising_send_unprovisioned_beacons_store_device_uuid:
+3cf5 d8c008ff arg mem_mesh_device_uuid ,contr 
+3cf6 20407c8f call memcpy16 
+3cf7 6fe147ea fetch 2 ,mem_mesh_oob_information 
+3cf8 e7e10005 istore 2 ,contw 
+3cf9 20600000 rtn 
+
+ali_mesh_receive_adtype_manufacturer_specific:
+3cfa 20403d5a call ali_mesh_receive_provisioning_package_check_header 
+3cfb 24740000 nrtn user 
+3cfc efe08006 ifetch 1 ,contr 
+3cfd c0003d01 beq provisioning_random ,ali_mesh_advertising_receive_privisioning_random 
+3cfe c0013d1c beq provisioning_data ,ali_mesh_decrypt_tmall_privisioning_data_package 
+3cff 47544035 bpatchx patch35_0 ,mem_patch35 
+3d00 20600000 rtn 
+
+ali_mesh_advertising_receive_privisioning_random:
+3d01 20403d0f call ali_mesh_advertising_receive_privisioning_random_check_states 
+3d02 24740000 nrtn user 
+
+ali_mesh_advertising_calc_encrypt_random_data:
+3d03 20403b45 call ali_mesh_encrypt_calc_random_data 
+3d04 20403d07 call ali_mesh_advertising_send_provisioning_confirmation 
+3d05 204040fa call ali_mesh_send_pairing_data 
+3d06 20600000 rtn 
+
+ali_mesh_advertising_send_provisioning_confirmation:
+3d07 d8400012 arg provisioning_packet_confirmation_mac + provisioning_packet_confirmation_device ,temp 
+3d08 20403d46 call ali_mesh_advertising_send_packet_common 
+3d09 58000001 setarg provisioning_confirmation 
+3d0a e7e08005 istore 1 ,contw 
+3d0b 6fe14812 fetch 2 ,mem_mesh_three_tuple_mac + 4 
+3d0c e7e10005 istore 2 ,contw 
+3d0d d8c04680 arg mem_mesh_confirmationdevice ,contr 
+3d0e 20207c8f branch memcpy16 
+
+ali_mesh_advertising_receive_privisioning_random_check_states:
+3d0f 20407dbc call disable_user 
+3d10 e8410006 ifetcht 2 ,contr 
+3d11 d8a04680 arg mem_mesh_provisioning_random_a ,contw 
+3d12 20407c8f call memcpy16 
+3d13 6fe14812 fetch 2 ,mem_mesh_three_tuple_mac + 4 
+3d14 98467c00 isub temp ,null 
+3d15 24628000 nrtn zero 
+3d16 6fe0c7e5 fetch 1 ,mem_mesh_provisioning_state_flag 
+3d17 c3808000 rtnbit1 receive_provisioning_random 
+3d18 79207e01 set1 receive_provisioning_random ,pdata 
+3d19 67e0c7e5 store 1 ,mem_mesh_provisioning_state_flag 
+3d1a 7047e402 jam pairing_status ,mem_mesh_provisioned_flag 
+3d1b 20207dba branch enable_user 
+
+ali_mesh_decrypt_tmall_privisioning_data_package:
+3d1c 20403d27 call ali_mesh_advertising_receive_privisioning_data 
+3d1d 684947ec fetcht 2 ,mem_mesh_provisioning_data_mac_addr 
+3d1e 6fe14812 fetch 2 ,mem_mesh_three_tuple_mac + 4 
+3d1f 98467c00 isub temp ,null 
+3d20 24628000 nrtn zero 
+3d21 20403bbf call ali_mesh_encrypt_base_function_k3 
+3d22 204040fa call ali_mesh_send_pairing_data 
+3d23 6fe087aa fetch 1 ,mem_mesh_fast_pair_packet_type 
+3d24 c1810000 rtnne mesh_message_proxy 
+3d25 7047e405 jam wait_receive_appkey ,mem_mesh_provisioned_flag 
+3d26 20600000 rtn 
+
+ali_mesh_advertising_receive_privisioning_data:
+3d27 4754c035 bpatchx patch35_1 ,mem_patch35 
+3d28 18c22200 copy contr ,rega 
+3d29 6fe0c7e4 fetch 1 ,mem_mesh_provisioned_flag 
+3d2a c1000000 rtneq paired_status 
+3d2b 6fe0c7e5 fetch 1 ,mem_mesh_provisioning_state_flag 
+3d2c c4008000 rtnbit0 receive_provisioning_random 
+3d2d c3810000 rtnbit1 receive_provisioning_data 
+3d2e 1a220c00 copy rega ,contr 
+3d2f df200016 arg 0x16 ,loopcnt 
+3d30 d8a047ec arg mem_mesh_encrypt_provisioning_data ,contw 
+3d31 20407cda call memcpy 
+3d32 20403b86 call ali_mesh_encrypt_calc_provisioning_data 
+3d33 684947ec fetcht 2 ,mem_mesh_provisioning_data_mac_addr 
+3d34 6fe14812 fetch 2 ,mem_mesh_three_tuple_mac + 4 
+3d35 98467c00 isub temp ,null 
+3d36 24628000 nrtn zero 
+
+ali_mesh_resolve_privisioning_data_package:
+3d37 6fe0c7e5 fetch 1 ,mem_mesh_provisioning_state_flag 
+3d38 79207e02 set1 receive_provisioning_data ,pdata 
+3d39 67e0c7e5 store 1 ,mem_mesh_provisioning_state_flag 
+3d3a 20403b99 call ali_mesh_encrypt_calc_network_key_by_k2 
+3d3b 6fe0c7ff fetch 1 ,mem_mesh_last_iv_index_byte 
+3d3c 67e0c871 store 1 ,mem_mesh_iv_index + 3 
+3d3d 20403d3f call ali_mesh_advertising_send_provisioning_complete 
+3d3e 20600000 rtn 
+
+ali_mesh_advertising_send_provisioning_complete:
+3d3f d8400006 arg provisioning_packet_complete_mac ,temp 
+3d40 20403d46 call ali_mesh_advertising_send_packet_common 
+3d41 58000003 setarg provisioning_complete 
+3d42 e7e08005 istore 1 ,contw 
+3d43 6fe3480e fetch 6 ,mem_mesh_three_tuple_mac 
+3d44 e7e30005 istore 6 ,contw 
+3d45 20600000 rtn 
+
+ali_mesh_advertising_send_packet_common:
+3d46 47554035 bpatchx patch35_2 ,mem_patch35 
+3d47 5800012c setarg fast_pairing_timeout_provisioning 
+3d48 67e14806 store 2 ,mem_mesh_fast_pairing_timer 
+3d49 6fe087aa fetch 1 ,mem_mesh_fast_pair_packet_type 
+3d4a 1fe67c00 sub pdata ,mesh_message_tmall ,null 
+3d4b 2042bace call ali_mesh_control_ble_advertising_on_advertising ,zero 
+3d4c 2442bad0 ncall ali_mesh_control_ble_advertising_off_advertising ,zero 
+3d4d 1840fe09 add temp ,provisioning_packet_length_ad_type_company_id_vid_provisioning_type + provisioning_packet_length_flags ,pdata 
+3d4e 67e0c62a store 1 ,mem_mesh_adv_data_len 
+3d4f 2040397c call ali_mesh_advertising_add_adtype_flags 
+3d50 1840fe05 add temp ,provisioning_packet_ad_type_company_id_vid_provisioning_type ,pdata 
+3d51 e7e08005 istore 1 ,contw 
+3d52 580000ff setarg gap_adtype_manufacturer_specific 
+3d53 e7e08005 istore 1 ,contw 
+3d54 580001a8 setarg company_identifiers_alibaba 
+3d55 1ff0fe00 byteswap pdata ,pdata 
+3d56 e7e10005 istore 2 ,contw 
+3d57 6fe0890f fetch 1 ,mem_mesh_receive_vid 
+3d58 e7e08005 istore 1 ,contw 
+3d59 20600000 rtn 
+
+ali_mesh_receive_provisioning_package_check_header:
+3d5a 20407dbc call disable_user 
+3d5b e8410006 ifetcht 2 ,contr 
+3d5c 580001a8 setarg company_identifiers_alibaba 
+3d5d 1ff0fe00 byteswap pdata ,pdata 
+3d5e 98467c00 isub temp ,null 
+3d5f 24628000 nrtn zero 
+3d60 efe08006 ifetch 1 ,contr 
+3d61 67e0890f store 1 ,mem_mesh_receive_vid 
+3d62 20207dba branch enable_user 
+
+ali_mesh_fast_pairing_timer:
+3d63 da604806 arg mem_mesh_fast_pairing_timer ,regc 
+3d64 da403d66 arg ali_mesh_fast_pairing_timeout ,regb 
+3d65 202042e7 branch timer_single_step_2b 
+
+ali_mesh_fast_pairing_timeout:
+
+ali_mesh_fast_pairing_failed:
+3d66 20203e61 branch ali_mesh_advertising_init_send_unprovisioned_device_beacon 
+
+ali_mesh_access_layer_config_or_health_message_opcode:
+3d67 6fe0870b fetch 1 ,mem_mesh_configuration_health_message_opcode 
+3d68 c0043d92 beq mesh_message_opcode_config_composition_data_get_no_head ,ali_mesh_access_layer_config_composition_data 
+3d69 c024bdb1 beq mesh_message_opcode_config_node_reset_no_head ,ali_mesh_access_layer_config_or_health_message_opcode_node_reset 
+3d6a c00dbdbd beq mesh_message_opcode_config_model_subscription_add_no_head ,ali_mesh_message_config_modle_subscription_add 
+3d6b c00e3dc4 beq mesh_message_opcode_config_model_subscription_delete_no_head ,ali_mesh_message_config_modle_subscription_delete 
+3d6c c0793d6e beq mesh_message_opcode_config_model_subscription_add_ow_no_head ,ali_mesh_message_config_modle_subscription_add_overwrite 
+3d6d 20600000 rtn 
+
+ali_mesh_message_config_modle_subscription_add_overwrite:
+3d6e 20403dec call ali_mesh_message_config_modle_subscription_check_element 
+3d6f 20403d83 call ali_mesh_message_config_modle_subscription_add_value_address_ow 
+3d70 20403dc2 call ali_mesh_message_config_modle_subscription_save 
+3d71 58000080 setarg mesh_configuration_and_health_message_opcode_header 
+3d72 67e08723 store 1 ,mem_mesh_access_layer_payload 
+3d73 580000f3 setarg mesh_message_opcode_config_model_subscription_add_ow_status 
+3d74 e7e08005 istore 1 ,contw 
+3d75 58000000 setarg mesh_success 
+3d76 e7e08005 istore 1 ,contw 
+3d77 6fe1070c fetch 2 ,mem_mesh_subscription_element_address_ow 
+3d78 e7e10005 istore 2 ,contw 
+3d79 6fe08709 fetch 1 ,mem_mesh_receive_model_message_payload_len 
+3d7a d8400004 arg 4 ,temp 
+3d7b 98467200 isub temp ,loopcnt 
+3d7c d8c0070e arg mem_mesh_subscription_list_num_ow ,contr 
+3d7d 20407cda call memcpy 
+3d7e 6fe08709 fetch 1 ,mem_mesh_receive_model_message_payload_len 
+3d7f 1fe0fe01 pincrease 1 
+3d80 67e08722 store 1 ,mem_mesh_access_layer_payload_len 
+3d81 d8e00000 arg 0 ,queue 
+3d82 20203806 branch ali_mesh_ali_vendor_message_send_message 
+
+ali_mesh_message_config_modle_subscription_add_value_address_ow:
+3d83 6fe0870e fetch 1 ,mem_mesh_subscription_list_num_ow 
+3d84 207a0000 rtn blank 
+3d85 1fe67c08 sub pdata ,subscription_max_count ,null 
+3d86 24413d90 ncall ali_mesh_message_config_modle_subscription_set_addr_max ,positive 
+3d87 98007200 iforce loopcnt 
+3d88 d8c0070f arg mem_mesh_subscription_value_address_start_ow ,contr 
+3d89 1a208a02 add rega ,2 ,contw 
+3d8a 20203d8b branch ali_mesh_byte_swap 
+
+ali_mesh_byte_swap:
+3d8b efe10006 ifetch 2 ,contr 
+3d8c 1ff0fe00 byteswap pdata ,pdata 
+3d8d e7e10005 istore 2 ,contw 
+3d8e c2003d8b loop ali_mesh_byte_swap 
+3d8f 20600000 rtn 
+
+ali_mesh_message_config_modle_subscription_set_addr_max:
+3d90 58000008 setarg subscription_max_count 
+3d91 20600000 rtn 
+
+ali_mesh_access_layer_config_composition_data:
+3d92 7047e406 jam receive_config_composition_data_get ,mem_mesh_provisioned_flag 
+3d93 58000002 setarg mesh_message_opcode_config_composition_data_status 
+3d94 67e08723 store 1 ,mem_mesh_access_layer_payload 
+3d95 58000000 setarg 0x00 
+3d96 e7e08005 istore 1 ,contw 
+3d97 580001a8 setarg company_identifiers_alibaba 
+3d98 e7e10005 istore 2 ,contw 
+3d99 58000000 setarg 0x0000 
+3d9a e7e10005 istore 2 ,contw 
+3d9b 58000001 setarg 0x0001 
+3d9c e7e10005 istore 2 ,contw 
+3d9d 58000005 setarg 0x0005 
+3d9e e7e10005 istore 2 ,contw 
+3d9f 58000003 setarg 0x0003 
+3da0 e7e10005 istore 2 ,contw 
+3da1 58000000 setarg 0x0000 
+3da2 e7e10005 istore 2 ,contw 
+3da3 58000002 setarg 0x02 
+3da4 e7e08005 istore 1 ,contw 
+3da5 58000002 setarg 0x02 
+3da6 e7e08005 istore 1 ,contw 
+3da7 58000000 setarg 0x0000 
+3da8 e7e10005 istore 2 ,contw 
+3da9 58001000 setarg 0x1000 
+3daa e7e10005 istore 2 ,contw 
+3dab 580001a8 setarg 0x000001a8 
+3dac e7e20005 istore 4 ,contw 
+3dad 580101a8 setarg 0x000101a8 
+3dae e7e20005 istore 4 ,contw 
+3daf 7007221c jam 28 ,mem_mesh_access_layer_payload_len 
+3db0 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_access_layer_config_or_health_message_opcode_node_reset:
+3db1 70480514 jam health_node_reset_timeout ,mem_mesh_health_node_reset_timer 
+
+ali_mesh_access_layer_send_config_node_reset_status:
+3db2 58000080 setarg mesh_configuration_and_health_message_opcode_header 
+3db3 67e08723 store 1 ,mem_mesh_access_layer_payload 
+3db4 5800004a setarg mesh_message_opcode_config_node_reset_status_no_head 
+3db5 e7e08005 istore 1 ,contw 
+3db6 70072202 jam 2 ,mem_mesh_access_layer_payload_len 
+3db7 202041b5 branch ali_mesh_upper_transport_layer_send_access_message 
+
+ali_mesh_access_layer_health_node_reset_timer:
+3db8 da604805 arg mem_mesh_health_node_reset_timer ,regc 
+3db9 da403dbb arg ali_mesh_access_layer_health_node_reset_timeout ,regb 
+3dba 202042e0 branch timer_single_step 
+
+ali_mesh_access_layer_health_node_reset_timeout:
+3dbb 20403e50 call mesh_clear_provisioning_data_only 
+
+ali_mesh_app_delete_paired:
+3dbc 20206ca3 branch soft_reset_chip 
+
+ali_mesh_message_config_modle_subscription_add:
+3dbd 20403de2 call ali_mesh_message_config_modle_subscription_status 
+3dbe 6fe1484c fetch 2 ,mem_mesh_core_feature 
+3dbf c3810000 rtnbit1 mesh_feature_disable_subscription 
+3dc0 20403dec call ali_mesh_message_config_modle_subscription_check_element 
+3dc1 20403df5 call ali_mesh_message_config_modle_subscription_add_value_address 
+
+ali_mesh_message_config_modle_subscription_save:
+3dc2 6fe14848 fetch 2 ,mem_mesh_cb_subscriptuion_list_changed 
+3dc3 20207d79 branch callback_func 
+
+ali_mesh_message_config_modle_subscription_delete:
+3dc4 20403de2 call ali_mesh_message_config_modle_subscription_status 
+3dc5 6fe1484c fetch 2 ,mem_mesh_core_feature 
+3dc6 c3810000 rtnbit1 mesh_feature_disable_subscription 
+3dc7 20403dec call ali_mesh_message_config_modle_subscription_check_element 
+3dc8 6849070e fetcht 2 ,mem_mesh_subscription_value_address 
+3dc9 184cfe00 rshift8 temp ,pdata 
+3dca 1ff1fe00 rshift4 pdata ,pdata 
+3dcb c0063dd3 beq 0x0c ,ali_mesh_message_config_modle_subscription_delete_group_addr 
+3dcc 18508400 byteswap temp ,temp 
+
+ali_mesh_message_config_modle_subscription_delete_next:
+3dcd 20403dd8 call ali_mesh_message_config_modle_subscription_check_value_address 
+3dce 24740000 nrtn user 
+3dcf 58000000 setarg 0 
+3dd0 e7e10011 istore 2 ,rega 
+3dd1 6fe14848 fetch 2 ,mem_mesh_cb_subscriptuion_list_changed 
+3dd2 20207d79 branch callback_func 
+
+ali_mesh_message_config_modle_subscription_delete_group_addr:
+3dd3 5fffffff setarg -1 
+3dd4 e7e40011 istore subscription_max_count ,rega 
+3dd5 e7e40005 istore subscription_max_count ,contw 
+3dd6 6fe14848 fetch 2 ,mem_mesh_cb_subscriptuion_list_changed 
+3dd7 20207d79 branch callback_func 
+
+ali_mesh_message_config_modle_subscription_check_value_address:
+3dd8 df200008 arg subscription_max_count ,loopcnt 
+
+ali_mesh_message_config_modle_subscription_check_value_address_loop:
+3dd9 efe10011 ifetch 2 ,rega 
+3dda da40ffff arg 0xffff ,regb 
+3ddb 9a467c00 isub regb ,null 
+3ddc 2022fdba branch enable_user ,zero 
+3ddd 98467c00 isub temp ,null 
+3dde 2022fdba branch enable_user ,zero 
+
+ali_mesh_message_config_modle_subscription_check_value_address_loop_empty:
+3ddf 1a20a202 increase 2 ,rega 
+3de0 c2003dd9 loop ali_mesh_message_config_modle_subscription_check_value_address_loop 
+3de1 20207dbc branch disable_user 
+
+ali_mesh_message_config_modle_subscription_status:
+3de2 58000080 setarg mesh_configuration_and_health_message_opcode_header 
+3de3 67e08723 store 1 ,mem_mesh_access_layer_payload 
+3de4 5800001f setarg mesh_message_opcode_config_model_subscription_status_no_head 
+3de5 e7e08005 istore 1 ,contw 
+3de6 58000000 setarg mesh_success 
+3de7 e7e08005 istore 1 ,contw 
+3de8 6fe3070c fetch 6 ,mem_mesh_subscription_element_address 
+3de9 e7e30005 istore 6 ,contw 
+3dea 70072209 jam 9 ,mem_mesh_access_layer_payload_len 
+3deb 202041b5 branch ali_mesh_upper_transport_layer_send_access_message_without_cleat_tx_buffer 
+
+ali_mesh_message_config_modle_subscription_check_element:
+3dec 20403e3e call mesh_get_element_info_config 
+3ded 1a20a206 add rega ,element_device_subscription_label ,rega 
+3dee 6fe1070c fetch 2 ,mem_mesh_subscription_element_address 
+3def 68494800 fetcht 2 ,mem_mesh_unicast_address 
+3df0 18508400 byteswap temp ,temp 
+3df1 98467e00 isub temp ,pdata 
+3df2 9a4ffe00 imul32 regb ,pdata 
+3df3 9a20a200 iadd rega ,rega 
+3df4 20600000 rtn 
+
+ali_mesh_message_config_modle_subscription_add_value_address:
+3df5 6849070e fetcht 2 ,mem_mesh_subscription_value_address 
+3df6 df200008 arg subscription_max_count ,loopcnt 
+
+ali_mesh_message_config_modle_subscription_add_value_address_loop:
+3df7 efe10011 ifetch 2 ,rega 
+3df8 203a3dff branch ali_mesh_message_config_modle_subscription_add_value_address_in ,blank 
+3df9 da40ffff arg 0xffff ,regb 
+3dfa 9a467c00 isub regb ,null 
+3dfb 2022bdff branch ali_mesh_message_config_modle_subscription_add_value_address_in ,zero 
+3dfc 1a20a202 increase 2 ,rega 
+3dfd c2003df7 loop ali_mesh_message_config_modle_subscription_add_value_address_loop 
+3dfe 20600000 rtn 
+
+ali_mesh_message_config_modle_subscription_add_value_address_in:
+3dff 18508400 byteswap temp ,temp 
+3e00 e0410011 istoret 2 ,rega 
+3e01 20600000 rtn 
+
+ali_mesh_init:
+3e02 20407396 call enable_authrom 
+3e03 2040739e call init_memp 
+3e04 580039b1 setarg mesh_check_ble_rx_packet 
+3e05 67e14824 store 2 ,mem_mesh_cb_receive_advertising 
+3e06 58003e42 setarg mesh_idle_process 
+3e07 67e143db store 2 ,mem_cb_idle_process 
+3e08 58004016 setarg ali_mesh_network_layer_relay_access_message 
+3e09 67e14842 store 2 ,mem_mesh_cb_network_relay 
+3e0a 58003745 setarg ali_mesh_access_layer_recv_cfg_appkey_add_cb 
+3e0b 67e14828 store 2 ,mem_mesh_cb_receive_config_appkey_add 
+3e0c 58003aa2 setarg mesh_store_new_subscriptuion_list_data 
+3e0d 67e14848 store 2 ,mem_mesh_cb_subscriptuion_list_changed 
+3e0e 58003a92 setarg mesh_store_new_seq_data 
+3e0f 67e14846 store 2 ,mem_mesh_cb_seq_changed 
+3e10 58003e4a setarg mesh_cb_event_timer 
+3e11 67e143e3 store 2 ,mem_cb_event_timer 
+3e12 5800372e setarg ali_mesh_access_layer_check_access_message_opcode 
+3e13 67e14826 store 2 ,mem_mesh_cb_receive_access_message 
+3e14 58004090 setarg mesh_le_receive_data 
+3e15 67e143df store 2 ,mem_cb_att_write 
+3e16 580040e3 setarg ali_mesh_proxy_process_bb_event 
+3e17 67e143dd store 2 ,mem_cb_bb_event_process 
+3e18 58003ab6 setarg mesh_clear_pairing_key 
+3e19 67e14853 store 2 ,mem_mesh_clear_provisioning_data 
+3e1a 58003abc setarg mesh_vendor_timming_chage_cb 
+3e1b 67e1484a store 2 ,mem_mesh_cb_vendor_timing_changed 
+3e1c 20403ac3 call ali_mesh_vendor_timer_message_read 
+3e1d 70464a24 jam 36 ,mem_mesh_adv_scan_channel 
+3e1e 20403817 call ali_mesh_ali_vendor_message_indication_info_reset_tid 
+3e1f 4755c035 bpatchx patch35_3 ,mem_patch35 
+3e20 58000428 setarg 0x0428 
+3e21 67e149b9 store 2 ,mem_mesh_upper_tran_layer_queue_each_size 
+3e22 20403e58 call ali_mesh_upper_transport_layer_queue_init 
+3e23 58000422 setarg 0x0422 
+3e24 67e14a5e store 2 ,mem_mesh_queue_each_size 
+3e25 20403e5a call ali_mesh_advertising_bearer_layer_queue_init 
+3e26 58000a22 setarg 0x0a22 
+3e27 67e10a8d store 2 ,mem_mesh_network_relay_gatt_queue_each_size 
+3e28 20403e5c call ali_mesh_network_layer_gatt_queue_init 
+3e29 20404071 call ali_mesh_network_layer_queue_init 
+3e2a 20404071 call ali_mesh_network_layer_queue_init 
+3e2b 20403a18 call ali_mesh_chip_peripherals_load_data 
+3e2c 20403e3a call mesh_inverse_three_tuple_mac 
+3e2d 6fe0c7ef fetch 1 ,mem_mesh_network_key 
+3e2e c07fbcd9 beq 0xff ,mesh_send_unprovisioned_beacons 
+3e2f 20404291 call ali_mesh_upper_transport_layer_clear_tx_buffer 
+3e30 20403bbf call ali_mesh_encrypt_base_function_k3 
+3e31 20403bb1 call ali_mesh_encrypt_base_function_k4 
+3e32 20403b99 call ali_mesh_encrypt_calc_network_key_by_k2 
+3e33 180a7e00 random pdata 
+3e34 1fe17e1f and pdata ,0x1f ,pdata 
+3e35 1fe0fe32 add pdata ,50 ,pdata 
+3e36 67e14804 store 2 ,mem_mesh_report_full_attribute_timer 
+3e37 1fe0fe05 add pdata ,5 ,pdata 
+3e38 67e0c803 store 1 ,mem_mesh_report_power_on_timer 
+3e39 20600000 rtn 
+
+mesh_inverse_three_tuple_mac:
+3e3a 6fe3480e fetch 6 ,mem_mesh_three_tuple_mac 
+3e3b 20407cc0 call inverse_data_6byte 
+3e3c 67e342db store 6 ,mem_le_lap 
+3e3d 20600000 rtn 
+
+mesh_get_element_info_config:
+3e3e 6f20c84e fetchr loopcnt ,1 ,mem_mesh_element_number 
+3e3f 6a21484f fetchr rega ,2 ,mem_mesh_element_device_ptr 
+3e40 6a414851 fetchr regb ,2 ,mem_mesh_element_device_length 
+3e41 20600000 rtn 
+
+mesh_idle_process:
+3e42 47564035 bpatchx patch35_4 ,mem_patch35 
+3e43 2040387d call ali_mesh_time_function 
+3e44 20403aca call ali_mesh_control_ble_adv_process 
+3e45 204041d8 call ali_mesh_upper_transport_layer_control_packet 
+3e46 2040396f call ali_mesh_advertising_bearer_layer_load_packet_from_advertising_queue 
+3e47 20403b33 call ali_mesh_network_layer_control_relay_packet 
+3e48 20404060 call ali_mesh_network_layer_check_gatt_relay_packet 
+3e49 20203995 branch mesh_ble_rx_packet 
+
+mesh_cb_event_timer:
+3e4a 20403acc call ali_mesh_control_ble_adv_timer_process 
+3e4b 20403db8 call ali_mesh_access_layer_health_node_reset_timer 
+3e4c 20403d63 call ali_mesh_fast_pairing_timer 
+3e4d 20403794 call ali_mesh_report_full_attribute_timer 
+3e4e 20403791 call ali_mesh_report_power_on_timer 
+3e4f 20204289 branch ali_mesh_upper_transport_layer_receive_new_msg_timer 
+
+mesh_clear_provisioning_data_only:
+3e50 20403e53 call mesh_clear_timer_data 
+3e51 6fe14853 fetch 2 ,mem_mesh_clear_provisioning_data 
+3e52 20207d79 branch callback_func 
+
+mesh_clear_timer_data:
+3e53 6fe0c857 fetch 1 ,mem_mesh_chip_select 
+3e54 c1810000 rtnne 2 
+3e55 5801d000 setarg 0x1d000 
+3e56 67e1c419 store 3 ,mem_spi_write_addr 
+3e57 20206bfa branch spid_flash_erase_sector + 2 
+
+ali_mesh_upper_transport_layer_queue_init:
+3e58 20404292 call ali_mesh_upper_transport_layer_init_queue_param 
+3e59 202078ad branch queue_init 
+
+ali_mesh_advertising_bearer_layer_queue_init:
+3e5a 2040396c call ali_mesh_advertising_bearer_layer_init_queue_param 
+3e5b 202078ad branch queue_init 
+
+ali_mesh_network_layer_gatt_queue_init:
+3e5c 20403e5e call ali_mesh_network_layer_init_gatt_queue_param 
+3e5d 202078ad branch queue_init 
+
+ali_mesh_network_layer_init_gatt_queue_param:
+3e5e 58000a8d setarg mem_mesh_network_relay_gatt_queue_each_size 
+3e5f 67e143fb store 2 ,mem_queue_ptr 
+3e60 20600000 rtn 
+
+ali_mesh_advertising_init_send_unprovisioned_device_beacon:
+3e61 70438801 jam 1 ,mem_le_adv_enable 
+3e62 58001770 setarg adv_unprovisioned_device_beacon_timeout 
+3e63 67e1464c store 2 ,mem_mesh_advertising_unprovisioned_device_beacon_timer 
+3e64 6fe0c7e7 fetch 1 ,mem_mesh_uuid_featureflag 
+3e65 793ffe00 set0 bit_silence_adv_flag ,pdata 
+3e66 67e0c7e7 store 1 ,mem_mesh_uuid_featureflag 
+3e67 7047e401 jam unprovisioned_beacon_status ,mem_mesh_provisioned_flag 
+3e68 7047e500 jam 0x00 ,mem_mesh_provisioning_state_flag 
+3e69 70474d00 jam 0x00 ,mem_k2_nid 
+3e6a 20203b2f branch ali_mesh_send_unprovisioned_device_beacon_init_advertising 
+
+ali_mesh_lower_transport_layer_receive_lower_transport_pdu:
+3e6b 4756c035 bpatchx patch35_5 ,mem_patch35 
+3e6c 6fe0892b fetch 1 ,mem_mesh_message_transport_head 
+3e6d c283be70 bbit1 transport_head_bit_seg ,ali_mesh_lower_transport_layer_receive_lower_transport_pdu_segmented_message 
+3e6e 70496900 jam 0 ,mem_mesh_aszmic 
+3e6f 2020417d branch ali_mesh_upper_transport_layer_receive_unsegmented_access_message 
+
+ali_mesh_lower_transport_layer_receive_lower_transport_pdu_segmented_message:
+3e70 20403e76 call ali_mesh_lower_transport_layer_receive_segaccmess_resolve_szmic_seqzero_segon 
+3e71 20740000 rtn user 
+3e72 20403e97 call ali_mesh_lower_transport_layer_receive_segmented_access_message_check_blockack 
+3e73 20740000 rtn user 
+3e74 20403ea7 call ali_mesh_lower_transport_layer_receive_segmented_access_message_store_segment 
+3e75 20203eb4 branch ali_mesh_lower_transport_layer_receive_segmented_access_message_decrypt_segment 
+
+ali_mesh_lower_transport_layer_receive_segaccmess_resolve_szmic_seqzero_segon:
+3e76 20407dbc call disable_user 
+3e77 df200003 arg 3 ,loopcnt 
+3e78 da20092c arg mem_mesh_message_segment_access_szmic_seqzero_sego_segn ,rega 
+3e79 20407cb1 call inverse_data 
+3e7a 6a21892c fetchr rega ,3 ,mem_mesh_message_segment_access_szmic_seqzero_sego_segn 
+3e7b 1a21041f and rega ,0x1f ,temp 
+3e7c 6048c85c storet 1 ,mem_mesh_segmented_access_message_segn 
+3e7d 6fe0c863 fetch 1 ,mem_mesh_segmented_access_message_segn_upper_limit 
+3e7e 98467c00 isub temp ,null 
+3e7f 24217dba nbranch enable_user ,positive 
+3e80 1a31fe00 rshift4 rega ,pdata 
+3e81 1fe37e00 rshift pdata ,pdata 
+3e82 1fe1041f and pdata ,0x1f ,temp 
+3e83 6048c85b storet 1 ,mem_mesh_segmented_access_message_sego 
+3e84 1ff1fe00 rshift4 pdata ,pdata 
+3e85 1fe37e00 rshift pdata ,pdata 
+3e86 da201fff arg 0x1fff ,rega 
+3e87 9a210400 iand rega ,temp 
+3e88 1fe22400 copy pdata ,regb 
+3e89 6fe14859 fetch 2 ,mem_mesh_segmented_access_message_seqzero 
+3e8a 98467c00 isub temp ,null 
+3e8b 2442be93 ncall ali_mesh_lower_transport_layer_receive_segmented_access_message_recover_seqzero ,zero 
+3e8c 60494859 storet 2 ,mem_mesh_segmented_access_message_seqzero 
+3e8d 1a4cfe00 rshift8 regb ,pdata 
+3e8e 1ff1fe00 rshift4 pdata ,pdata 
+3e8f 1fe37e00 rshift pdata ,pdata 
+3e90 67e0c858 store 1 ,mem_mesh_segmented_access_message_szmic 
+3e91 67e0c969 store 1 ,mem_mesh_aszmic 
+3e92 20600000 rtn 
+
+ali_mesh_lower_transport_layer_receive_segmented_access_message_recover_seqzero:
+3e93 58000000 setarg 0 
+3e94 67e2485d store 4 ,mem_mesh_segmented_access_message_blockack 
+3e95 70486200 jam 0 ,mem_mesh_segmented_access_message_current_length 
+3e96 20600000 rtn 
+
+ali_mesh_lower_transport_layer_receive_segmented_access_message_check_blockack:
+3e97 20407dbc call disable_user 
+3e98 6fe0c85b fetch 1 ,mem_mesh_segmented_access_message_sego 
+3e99 1fe20e00 copy pdata ,queue 
+3e9a 6fe2485d fetch 4 ,mem_mesh_segmented_access_message_blockack 
+3e9b afefffff qisolate1 pdata 
+3e9c 2020fdba branch enable_user ,true 
+3e9d f9207e00 qset1 pdata 
+3e9e 67e2485d store 4 ,mem_mesh_segmented_access_message_blockack 
+3e9f 6848c85c fetcht 1 ,mem_mesh_segmented_access_message_segn 
+3ea0 1840f201 add temp ,1 ,loopcnt 
+
+ali_mesh_lower_transport_layer_receive_segmented_access_message_check_blockack_loop:
+3ea1 1f208fff add loopcnt ,-1 ,queue 
+3ea2 afefffff qisolate1 pdata 
+3ea3 24608000 nrtn true 
+3ea4 c2003ea1 loop ali_mesh_lower_transport_layer_receive_segmented_access_message_check_blockack_loop 
+3ea5 70486101 jam 1 ,mem_mesh_segmented_access_message_receive_finish 
+3ea6 20600000 rtn 
+
+ali_mesh_lower_transport_layer_receive_segmented_access_message_store_segment:
+3ea7 6fe08921 fetch 1 ,mem_mesh_message_transport_netmic_length 
+3ea8 1fe0fffa pincrease -6 
+3ea9 1fe27200 copy pdata ,loopcnt 
+3eaa 6848c862 fetcht 1 ,mem_mesh_segmented_access_message_current_length 
+3eab 98408400 iadd temp ,temp 
+3eac 6048c862 storet 1 ,mem_mesh_segmented_access_message_current_length 
+3ead 6fe14864 fetch 2 ,mem_mesh_segmented_access_message_segment_ptr 
+3eae 98000a00 iforce contw 
+3eaf 6fe0c85b fetch 1 ,mem_mesh_segmented_access_message_sego 
+3eb0 1feffe0c mul32 pdata ,12 ,pdata 
+3eb1 98a08a00 iadd contw ,contw 
+3eb2 d8c0092f arg mem_mesh_message_transport_segmented_access_messagepdu_segment ,contr 
+3eb3 20207cda branch memcpy 
+
+ali_mesh_lower_transport_layer_receive_segmented_access_message_decrypt_segment:
+3eb4 6fe0c861 fetch 1 ,mem_mesh_segmented_access_message_receive_finish 
+3eb5 c1000000 rtneq 0 
+3eb6 58000000 setarg 0 
+3eb7 67e2c85d store 5 ,mem_mesh_segmented_access_message_blockack 
+3eb8 68490925 fetcht 2 ,mem_mesh_message_seq + 1 
+3eb9 18508400 byteswap temp ,temp 
+3eba 5800e000 setarg 0xe000 
+3ebb 98410400 iand temp ,temp 
+3ebc 6fe14859 fetch 2 ,mem_mesh_segmented_access_message_seqzero 
+3ebd 9841fe00 ior temp ,pdata 
+3ebe 1ff0fe00 byteswap pdata ,pdata 
+3ebf 67e10925 store 2 ,mem_mesh_message_seq + 1 
+3ec0 20204187 branch ali_mesh_upper_transport_layer_receive_segmented_access_message 
+
+ali_mesh_lower_transport_layer_send_unsegmented_access_message:
+3ec1 6fe08722 fetch 1 ,mem_mesh_upper_transport_layer_payload_len 
+3ec2 1fe08401 add pdata ,1 ,temp 
+3ec3 1fe27200 copy pdata ,loopcnt 
+3ec4 60488916 storet 1 ,mem_mesh_lower_transport_layer_payload_len 
+3ec5 6fe0892b fetch 1 ,mem_mesh_message_transport_head 
+3ec6 793ffe07 set0 transport_head_bit_seg ,pdata 
+3ec7 67e0c9a1 store 1 ,mem_mesh_unsegmented_access_lower_transport_layer_head 
+3ec8 d8c00723 arg mem_mesh_access_layer_payload ,contr 
+3ec9 20407ccc call memcpy_fast 
+3eca 20204052 branch ali_mesh_network_layer_send_access_message 
+
+ali_mesh_lower_transport_layer_send_segmented_access_message:
+3ecb 1a208404 add rega ,4 ,temp 
+3ecc 1a227200 copy rega ,loopcnt 
+3ecd 60488916 storet 1 ,mem_mesh_lower_transport_layer_payload_len 
+3ece d8a049a5 arg mem_mesh_segmented_access_lower_transport_layer_parameters ,contw 
+3ecf 20407ccc call memcpy_fast 
+3ed0 6fe0892b fetch 1 ,mem_mesh_message_transport_head 
+3ed1 79207e07 set1 transport_head_bit_seg ,pdata 
+3ed2 67e0c9a1 store 1 ,mem_mesh_segmented_access_lower_transport_layer_head 
+3ed3 20204052 branch ali_mesh_network_layer_send_access_message 
+
+ali_mesh_model_layer_check_model_message_opcode:
+3ed4 6fe0870b fetch 1 ,mem_mesh_module_message_opcode 
+
+ali_mesh_model_layer_check_generic_onoff_message_opcde:
+3ed5 c000bedb beq mesh_module_message_opcode_generic_onoff_get_no_head ,ali_mesh_model_layer_message_opcode_generic_onoff_get 
+3ed6 c0013ee1 beq mesh_module_message_opcode_generic_onoff_set_no_head ,ali_mesh_model_layer_message_opcde_generic_onoff_set 
+3ed7 c0213ee6 beq mesh_module_message_opcode_scene_recall_no_head ,ali_mesh_model_layer_message_opcde_scene_recall 
+3ed8 c0263ee9 beq mesh_module_message_opcode_light_lightness_set_no_head ,ali_mesh_model_layer_message_opcde_light_lightness_set 
+3ed9 c02f3eef beq mesh_module_message_opcode_light_ctl_set_no_head ,ali_mesh_model_layer_message_opcde_light_ctl_set 
+3eda 20600000 rtn 
+
+ali_mesh_model_layer_message_opcode_generic_onoff_get:
+3edb da603edd arg ali_mesh_model_layer_message_opcode_generic_onoff_get_cb ,regc 
+3edc 20203f53 branch ali_mesh_more_element_check_element_address 
+
+ali_mesh_model_layer_message_opcode_generic_onoff_get_cb:
+3edd 6fe14830 fetch 2 ,mem_mesh_cb_generic_onoff_get 
+3ede 20407d79 call callback_func 
+3edf 67e0870c store 1 ,mem_mesh_generic_onoff_set_payload_onoff 
+3ee0 2020376c branch ali_mesh_access_layer_send_generic_onoff_status 
+
+ali_mesh_model_layer_message_opcde_generic_onoff_set:
+3ee1 da603ee3 arg ali_mesh_model_layer_message_opcde_generic_onoff_set_cb ,regc 
+3ee2 20203f53 branch ali_mesh_more_element_check_element_address 
+
+ali_mesh_model_layer_message_opcde_generic_onoff_set_cb:
+3ee3 2040376c call ali_mesh_access_layer_send_generic_onoff_status 
+3ee4 6fe14832 fetch 2 ,mem_mesh_cb_generic_onoff_set 
+3ee5 20207d79 branch callback_func 
+
+ali_mesh_model_layer_message_opcde_scene_recall:
+3ee6 20403784 call ali_mesh_access_layer_send_scene_status 
+3ee7 6fe14834 fetch 2 ,mem_mesh_cb_scene_recall 
+3ee8 20207d79 branch callback_func 
+
+ali_mesh_model_layer_message_opcde_light_lightness_set:
+3ee9 6fe1070c fetch 2 ,mem_mesh_light_lightness_set_payload_lightness 
+3eea 20403efe call ali_mesh_model_layer_message_calc_lightness 
+3eeb 67e08711 store 1 ,mem_mesh_light_lightness_calc_lightness 
+3eec 20403774 call ali_mesh_access_layer_send_light_lightness_status 
+3eed 6fe14836 fetch 2 ,mem_mesh_cb_light_lightness_set 
+3eee 20207d79 branch callback_func 
+
+ali_mesh_model_layer_message_opcde_light_ctl_set:
+3eef 6fe14866 fetch 2 ,mem_mesh_last_ctl_temperature 
+3ef0 6849070e fetcht 2 ,mem_mesh_ctl_temperature 
+3ef1 98467c00 isub temp ,null 
+3ef2 20628000 rtn zero 
+3ef3 6fe1070e fetch 2 ,mem_mesh_ctl_temperature 
+3ef4 20403f10 call ali_mesh_model_layer_message_calc_temperature 
+3ef5 67e08716 store 1 ,mem_mesh_ctl_calc_temperature 
+3ef6 6fe1070e fetch 2 ,mem_mesh_ctl_temperature 
+3ef7 67e14866 store 2 ,mem_mesh_last_ctl_temperature 
+3ef8 6fe14838 fetch 2 ,mem_mesh_cb_light_lightness_get 
+3ef9 20407d79 call callback_func 
+3efa 6049070c storet 2 ,mem_mesh_ctl_lightness 
+3efb 2040377c call ali_mesh_access_layer_send_light_ctl_stauts 
+3efc 6fe1483a fetch 2 ,mem_mesh_cb_light_ctl_set 
+3efd 20207d79 branch callback_func 
+
+ali_mesh_model_layer_message_calc_lightness:
+3efe 207a0000 rtn blank 
+3eff 1feffe64 mul32 pdata ,ali_mesh_lightness_level ,pdata 
+3f00 d840ffff arg ali_mesh_lightness_max ,temp 
+3f01 9846fc00 idiv temp 
+3f02 20407d62 call wait_div_end 
+3f03 18070400 remainder temp 
+3f04 184c8400 rshift8 temp ,temp 
+3f05 1807fe00 quotient pdata 
+3f06 18467cff sub temp ,0xff ,null 
+3f07 24628000 nrtn zero 
+3f08 1fe0fe01 pincrease 1 
+3f09 20600000 rtn 
+
+ali_mesh_model_layer_message_calc_actual_lightness:
+3f0a dfe0ffff arg ali_mesh_lightness_max ,pdata 
+3f0b 984ffe00 imul32 temp ,pdata 
+3f0c 1fe6fc64 div pdata ,ali_mesh_lightness_level 
+3f0d 20407d62 call wait_div_end 
+3f0e 18078400 quotient temp 
+3f0f 20600000 rtn 
+
+ali_mesh_model_layer_message_calc_temperature:
+3f10 d8400320 arg ali_mesh_temperature_min ,temp 
+3f11 98462200 isub temp ,rega 
+3f12 20403f1f call ali_mesh_model_layer_message_calc_temperature_k 
+3f13 1a227e00 copy rega ,pdata 
+3f14 9846fc00 idiv temp 
+3f15 20407d62 call wait_div_end 
+3f16 1807fe00 quotient pdata 
+3f17 20600000 rtn 
+
+ali_mesh_model_layer_message_calc_actual_temperature:
+3f18 18422200 copy temp ,rega 
+3f19 20403f1f call ali_mesh_model_layer_message_calc_temperature_k 
+3f1a 1a227e00 copy rega ,pdata 
+3f1b 984ffe00 imul32 temp ,pdata 
+3f1c d8400320 arg ali_mesh_temperature_min ,temp 
+3f1d 98408400 iadd temp ,temp 
+3f1e 20600000 rtn 
+
+ali_mesh_model_layer_message_calc_temperature_k:
+3f1f 58004e20 setarg ali_mesh_temperature_max 
+3f20 d8400320 arg ali_mesh_temperature_min ,temp 
+3f21 98467e00 isub temp ,pdata 
+3f22 1fe6fc64 div pdata ,ali_mesh_temperature_level 
+3f23 20407d62 call wait_div_end 
+3f24 18078400 quotient temp 
+3f25 20600000 rtn 
+
+ali_mesh_more_element_check_unicast_address:
+3f26 d8e00000 arg 0 ,queue 
+3f27 6f20c84e fetchr loopcnt ,1 ,mem_mesh_element_number 
+3f28 20407dbc call disable_user 
+3f29 6fe14800 fetch 2 ,mem_mesh_unicast_address 
+
+ali_mesh_more_element_check_unicast_address_loop:
+3f2a 98467c00 isub temp ,null 
+3f2b 2022bf32 branch ali_mesh_more_element_found_unicast_address_element ,zero 
+3f2c 1ff0fe00 byteswap pdata ,pdata 
+3f2d 1fe0fe01 pincrease 1 
+3f2e 1ff0fe00 byteswap pdata ,pdata 
+3f2f 18e08e01 increase 1 ,queue 
+3f30 c2003f2a loop ali_mesh_more_element_check_unicast_address_loop 
+3f31 20600000 rtn 
+
+ali_mesh_more_element_found_unicast_address_element:
+3f32 70486800 jam 0 ,mem_mesh_receive_group_address 
+3f33 60e0c869 storer queue ,1 ,mem_mesh_receive_element_number 
+3f34 20403f6e call ali_mesh_more_element_calc_queue_address 
+3f35 20207dba branch enable_user 
+
+ali_mesh_more_element_check_group_address:
+3f36 d8e00000 arg 0 ,queue 
+3f37 da600000 arg 0 ,regc 
+3f38 20403e3e call mesh_get_element_info_config 
+3f39 20407dbc call disable_user 
+
+ali_mesh_more_element_check_group_address_loop:
+3f3a 6fe1484c fetch 2 ,mem_mesh_core_feature 
+3f3b c3013f49 bbit0 mesh_feature_disable_subscription ,ali_mesh_more_element_check_subscription_address 
+3f3c efe10011 ifetch 2 ,rega 
+3f3d 98467c00 isub temp ,null 
+3f3e 2042bf47 call ali_mesh_more_element_found_group_address_element ,zero 
+
+ali_mesh_more_element_check_address_common:
+3f3f 1a427e00 copy regb ,pdata 
+3f40 9a20a200 iadd rega ,rega 
+3f41 18e08e01 increase 1 ,queue 
+3f42 c2003f3a loop ali_mesh_more_element_check_group_address_loop 
+3f43 1a627e00 copy regc ,pdata 
+3f44 207a0000 rtn blank 
+3f45 67e0c868 store 1 ,mem_mesh_receive_group_address 
+3f46 20207dba branch enable_user 
+
+ali_mesh_more_element_found_group_address_element:
+3f47 f9202600 qset1 regc 
+3f48 20600000 rtn 
+
+ali_mesh_more_element_check_subscription_address:
+3f49 1a208c06 add rega ,element_device_subscription_label ,contr 
+3f4a de000008 arg subscription_max_count ,alarm 
+
+ali_mesh_more_element_check_subscription_address_loop:
+3f4b efe10006 ifetch 2 ,contr 
+3f4c 98467c00 isub temp ,null 
+3f4d 2022bf51 branch ali_mesh_more_element_found_subscription_address_element ,zero 
+3f4e 1e00e1ff increase -1 ,alarm 
+3f4f 2022bf3f branch ali_mesh_more_element_check_address_common ,zero 
+3f50 20203f4b branch ali_mesh_more_element_check_subscription_address_loop 
+
+ali_mesh_more_element_found_subscription_address_element:
+3f51 20403f47 call ali_mesh_more_element_found_group_address_element 
+3f52 20203f3f branch ali_mesh_more_element_check_address_common 
+
+ali_mesh_more_element_check_element_address:
+3f53 d8e00000 arg 0 ,queue 
+3f54 6fe0c868 fetch 1 ,mem_mesh_receive_group_address 
+3f55 203a3f5f branch ali_mesh_more_element_check_element_address_no_group_address ,blank 
+3f56 1fe22400 copy pdata ,regb 
+3f57 6f20c84e fetchr loopcnt ,1 ,mem_mesh_element_number 
+
+ali_mesh_more_element_check_element_address_loop:
+3f58 60e0c869 storer queue ,1 ,mem_mesh_receive_element_number 
+3f59 aa4fffff qisolate1 regb 
+3f5a 2040bf5f call ali_mesh_more_element_check_element_address_no_group_address ,true 
+3f5b 68e0c869 fetchr queue ,1 ,mem_mesh_receive_element_number 
+3f5c 18e08e01 increase 1 ,queue 
+3f5d c2003f58 loop ali_mesh_more_element_check_element_address_loop 
+3f5e 20600000 rtn 
+
+ali_mesh_more_element_check_element_address_no_group_address:
+3f5f 20403f64 call ali_mesh_more_element_push_stack 
+3f60 20403f6e call ali_mesh_more_element_calc_queue_address 
+3f61 1a627e00 copy regc ,pdata 
+3f62 20407d79 call callback_func 
+3f63 20203f69 branch ali_mesh_more_element_pop_stack 
+
+ali_mesh_more_element_push_stack:
+3f64 67210917 storer loopcnt ,2 ,mem_mesh_loopcnt_tmep 
+3f65 62210919 storer rega ,2 ,mem_mesh_rega_temp 
+3f66 6241091b storer regb ,2 ,mem_mesh_regb_temp 
+3f67 6261091d storer regc ,2 ,mem_mesh_regc_temp 
+3f68 20600000 rtn 
+
+ali_mesh_more_element_pop_stack:
+3f69 6f210917 fetchr loopcnt ,2 ,mem_mesh_loopcnt_tmep 
+3f6a 6a210919 fetchr rega ,2 ,mem_mesh_rega_temp 
+3f6b 6a41091b fetchr regb ,2 ,mem_mesh_regb_temp 
+3f6c 6a61091d fetchr regc ,2 ,mem_mesh_regc_temp 
+3f6d 20600000 rtn 
+
+ali_mesh_more_element_calc_queue_address:
+3f6e 47574035 bpatchx patch35_6 ,mem_patch35 
+3f6f 6fe14800 fetch 2 ,mem_mesh_unicast_address 
+3f70 1ff0fe00 byteswap pdata ,pdata 
+3f71 98e0fe00 iadd queue ,pdata 
+3f72 1ff0fe00 byteswap pdata ,pdata 
+3f73 67e14995 store 2 ,mem_mesh_send_message_src 
+3f74 20403e3e call mesh_get_element_info_config 
+3f75 18e27e00 copy queue ,pdata 
+3f76 9a4ffe00 imul32 regb ,pdata 
+3f77 9a20a200 iadd rega ,rega 
+3f78 1a208c17 add rega ,element_device_upper_queue_ptr ,contr 
+3f79 efe10006 ifetch 2 ,contr 
+3f7a 67e143fb store ,2 ,mem_queue_ptr 
+3f7b 20600000 rtn 
+
+ali_mesh_receive_adtype_mesh_message:
+3f7c 70095100 jam mesh_message_tmall ,mem_mesh_network_packet_type 
+
+ali_mesh_network_layer_recevice_network_pdu:
+3f7d 18467c0c sub temp ,mesh_network_packet_min_length ,null 
+3f7e 20610000 rtn positive 
+3f7f 18467c1e sub temp ,mesh_network_packet_max_length ,null 
+3f80 24610000 nrtn positive 
+3f81 4757c035 bpatchx patch35_7 ,mem_patch35 
+3f82 2040400e call ali_mesh_network_store_in_mem 
+3f83 20403f8c call ali_mesh_network_layer_check_dup 
+3f84 24740000 nrtn user 
+3f85 20403fdd call ali_mesh_network_layer_check_nid_ivi 
+3f86 24740000 nrtn user 
+3f87 20403bcf call ali_mesh_encrypt_obfuscation_deceypt_recevie_message 
+3f88 20403fa1 call ali_mesh_network_layer_check_msg 
+3f89 24740000 nrtn user 
+3f8a 20403fb2 call ali_mesh_network_layer_store_proxy_unicast_address 
+3f8b 20203fb7 branch ali_mesh_network_layer_recevice_network_pdu_decrypt_netmic32 
+
+ali_mesh_network_layer_check_dup:
+3f8c 20407dba call enable_user 
+3f8d 6fe08921 fetch 1 ,mem_mesh_message_transport_netmic_length 
+3f8e d8c00925 arg mem_mesh_message_nid + 3 ,contr 
+3f8f 98c08c00 iadd contr ,contr 
+3f90 efe20006 ifetch 4 ,contr 
+3f91 e8420006 ifetcht 4 ,contr 
+3f92 98428400 ixor temp ,temp 
+3f93 df200010 arg 16 ,loopcnt 
+3f94 d8c009fd arg mem_mesh_network_dup_cache ,contr 
+
+ali_mesh_network_layer_check_dup_loop:
+3f95 efe20006 ifetch 4 ,contr 
+3f96 98467c00 isub temp ,null 
+3f97 2022fdbc branch disable_user ,zero 
+3f98 c2003f95 loop ali_mesh_network_layer_check_dup_loop 
+3f99 6fe0c86a fetch 1 ,mem_mesh_network_dup_cache_next 
+3f9a 1fe0fe04 pincrease 4 
+3f9b d8a009fd arg mem_mesh_network_dup_cache ,contw 
+3f9c 98a08a00 iadd contw ,contw 
+3f9d e0420005 istoret 4 ,contw 
+3f9e 1fe17e3f and pdata ,0x3f ,pdata 
+3f9f 67e0c86a store 1 ,mem_mesh_network_dup_cache_next 
+3fa0 20600000 rtn 
+
+ali_mesh_network_layer_check_msg:
+3fa1 20407dba call enable_user 
+3fa2 684a8924 fetcht 5 ,mem_mesh_message_seq 
+3fa3 df200010 arg 16 ,loopcnt 
+3fa4 d8c00a3d arg mem_mesh_network_msg_cache ,contr 
+
+ali_mesh_network_layer_check_msg_loop:
+3fa5 efe28006 ifetch 5 ,contr 
+3fa6 98467c00 isub temp ,null 
+3fa7 2022fdbc branch disable_user ,zero 
+3fa8 c2003fa5 loop ali_mesh_network_layer_check_msg_loop 
+3fa9 6fe0c86b fetch 1 ,mem_mesh_network_msg_cache_next 
+3faa 1fe0fe01 pincrease 1 
+3fab 1fe17e0f and pdata ,0x0f ,pdata 
+3fac 67e0c86b store 1 ,mem_mesh_network_msg_cache_next 
+3fad 1feffe05 mul32 pdata ,5 ,pdata 
+3fae d8a00a3d arg mem_mesh_network_msg_cache ,contw 
+3faf 98a08a00 iadd contw ,contw 
+3fb0 e0428005 istoret 5 ,contw 
+3fb1 20600000 rtn 
+
+ali_mesh_network_layer_store_proxy_unicast_address:
+3fb2 6fe08951 fetch 1 ,mem_mesh_network_packet_type 
+3fb3 c1000000 rtneq mesh_message_tmall 
+3fb4 6fe10927 fetch 2 ,mem_mesh_message_src 
+3fb5 67e1486c store 2 ,mem_mesh_network_proxy_unicast_address 
+3fb6 20600000 rtn 
+
+ali_mesh_network_layer_recevice_network_pdu_decrypt_netmic32:
+3fb7 20404005 call ali_mesh_network_load_network_nonce_and_encryptionkey 
+3fb8 6fe08921 fetch 1 ,mem_mesh_message_transport_netmic_length 
+3fb9 d8400929 arg mem_mesh_message_dst ,temp 
+3fba 20403ca7 call ali_ccm_decrypt 
+3fbb 24628000 nrtn zero 
+
+ali_mesh_network_layer_recevice_network_pdu_check_dst:
+3fbc 47584036 bpatchx patch36_0 ,mem_patch36 
+3fbd 6fe08951 fetch 1 ,mem_mesh_network_packet_type 
+3fbe 1fe67c02 sub pdata ,mesh_message_proxy ,null 
+3fbf 2042c106 call ali_mesh_white_filter_check ,zero 
+3fc0 68490929 fetcht 2 ,mem_mesh_message_dst 
+3fc1 20403f26 call ali_mesh_more_element_check_unicast_address 
+3fc2 20543fcf call ali_mesh_more_found_unicast_address_element ,user 
+3fc3 20343fea branch ali_mesh_network_layer_recevice_network_pdu_check_src_and_seq ,user 
+3fc4 df20001d arg 29 ,loopcnt 
+3fc5 d8a007ab arg mem_mesh_message_nid_temp ,contw 
+3fc6 d8c00922 arg mem_mesh_message_nid ,contr 
+3fc7 20407cda call memcpy 
+3fc8 20403fd3 call ali_mesh_network_layer_recevice_network_pdu_check_dst_group_address 
+3fc9 df20001d arg 29 ,loopcnt 
+3fca d8c007ab arg mem_mesh_message_nid_temp ,contr 
+3fcb d8a00922 arg mem_mesh_message_nid ,contw 
+3fcc 20407cda call memcpy 
+3fcd 6fe14842 fetch 2 ,mem_mesh_cb_network_relay 
+3fce 20207d79 branch callback_func 
+
+ali_mesh_more_found_unicast_address_element:
+3fcf 70095201 jam 1 ,mem_mesh_receive_message_count 
+3fd0 6fe14995 fetch 2 ,mem_mesh_send_message_src 
+3fd1 67e10953 store 2 ,mem_mesh_receive_message_first_unicast_address 
+3fd2 20600000 rtn 
+
+ali_mesh_network_layer_recevice_network_pdu_check_dst_group_address:
+3fd3 20403f36 call ali_mesh_more_element_check_group_address 
+3fd4 20343fea branch ali_mesh_network_layer_recevice_network_pdu_check_src_and_seq ,user 
+3fd5 704868ff jam 0xff ,mem_mesh_receive_group_address 
+3fd6 5800ffcf setarg group_address_0xcfff_little_endian 
+3fd7 98467c00 isub temp ,null 
+3fd8 2022bfea branch ali_mesh_network_layer_recevice_network_pdu_check_src_and_seq ,zero 
+3fd9 5800ffff setarg group_address_0xffff_little_endian 
+3fda 98467c00 isub temp ,null 
+3fdb 2022bfea branch ali_mesh_network_layer_recevice_network_pdu_check_src_and_seq ,zero 
+3fdc 20600000 rtn 
+
+ali_mesh_network_layer_check_nid_ivi:
+3fdd 20407dbc call disable_user 
+3fde 68488922 fetcht 1 ,mem_mesh_message_nid 
+3fdf 1851fe00 rshift4 temp ,pdata 
+3fe0 1fe97e00 rshift3 pdata ,pdata 
+3fe1 6a20c871 fetchr rega ,1 ,mem_mesh_iv_index + 3 
+3fe2 1a212201 and rega ,0x01 ,rega 
+3fe3 9a267c00 isub rega ,null 
+3fe4 24628000 nrtn zero 
+3fe5 1841047f and temp ,0x7f ,temp 
+3fe6 6fe0c74d fetch 1 ,mem_k2_nid 
+3fe7 98467c00 isub temp ,null 
+3fe8 24628000 nrtn zero 
+3fe9 20207dba branch enable_user 
+
+ali_mesh_network_layer_recevice_network_pdu_check_src_and_seq:
+3fea da204872 arg mem_mesh_tmall_cache_start ,rega 
+3feb df20000a arg cache_space_num ,loopcnt 
+
+ali_mesh_network_layer_raverse_src_seq_cache:
+3fec 68490927 fetcht 2 ,mem_mesh_message_src 
+3fed efe10011 ifetch 2 ,rega 
+3fee 203a3ff4 branch ali_mesh_network_layer_find_empty_space ,blank 
+3fef 98467c00 isub temp ,null 
+3ff0 2022bff5 branch ali_mesh_network_layer_find_src_space ,zero 
+3ff1 1a20a205 increase cache_space_size ,rega 
+3ff2 c2003fec loop ali_mesh_network_layer_raverse_src_seq_cache 
+3ff3 da204872 arg mem_mesh_tmall_cache_start ,rega 
+
+ali_mesh_network_layer_find_empty_space:
+3ff4 e0410011 istoret 2 ,rega 
+
+ali_mesh_network_layer_find_src_space:
+3ff5 6049094c storet 2 ,mem_mesh_send_message_dst 
+3ff6 1a20a602 add rega ,2 ,regc 
+3ff7 efe18013 ifetch 3 ,regc 
+3ff8 67e1894e store 3 ,mem_mesh_last_message_seq 
+3ff9 20203ffa branch ali_mesh_network_layer_recevice_network_pdu_check_seq_legal 
+
+ali_mesh_network_layer_recevice_network_pdu_check_seq_legal:
+3ffa 20404002 call ali_mesh_inverse_seq 
+3ffb 6fe1894e fetch 3 ,mem_mesh_last_message_seq 
+3ffc 68498924 fetcht 3 ,mem_mesh_message_seq 
+3ffd 98467c00 isub temp ,null 
+3ffe 20610000 rtn positive 
+3fff e0418013 istoret 3 ,regc 
+4000 20404002 call ali_mesh_inverse_seq 
+4001 20203e6b branch ali_mesh_lower_transport_layer_receive_lower_transport_pdu 
+
+ali_mesh_inverse_seq:
+4002 da200924 arg mem_mesh_message_seq ,rega 
+4003 df200003 arg 3 ,loopcnt 
+4004 20207cb1 branch inverse_data 
+
+ali_mesh_network_load_network_nonce_and_encryptionkey:
+4005 20404008 call ali_mesh_network_layer_load_network_nonce 
+
+ali_mesh_upper_transport_layer_load_encryptionkey:
+4006 d8c0475e arg mem_k2_encryptionkey ,contr 
+4007 2020735f branch load_key 
+
+ali_mesh_network_layer_load_network_nonce:
+4008 d8a0093f arg mem_mesh_network_nonce ,contw 
+4009 58000000 setarg network_nonce 
+400a e7e08005 istore 1 ,contw 
+400b 6fe30923 fetch 6 ,mem_mesh_message_ttl 
+400c e7e40005 istore 8 ,contw 
+400d 20204069 branch mesh_generate_nonce 
+
+ali_mesh_network_store_in_mem:
+400e 1840fff4 add temp ,-12 ,pdata 
+400f 67e08921 store 1 ,mem_mesh_message_transport_netmic_length 
+4010 df20001d arg 29 ,loopcnt 
+4011 d8a00922 arg mem_mesh_message_nid ,contw 
+4012 20407ca1 call clear_mem 
+4013 1840f3ff add temp ,-1 ,loopcnt 
+4014 d8a00922 arg mem_mesh_message_nid ,contw 
+4015 20207ccc branch memcpy_fast 
+
+ali_mesh_network_layer_relay_access_message:
+4016 2040406e call ali_mesh_network_layer_init_queue_param 
+4017 20404036 call ali_mesh_network_layer_check_relay_states 
+4018 24740000 nrtn user 
+4019 2040404a call ali_mesh_network_layer_encrypt_relay_package 
+401a 7007871e jam adv_relay_mesh_message_duration ,mem_mesh_queue_ele_duration 
+401b 6fe08921 fetch 1 ,mem_mesh_message_transport_netmic_length 
+401c 1fe0840d add pdata ,13 ,temp 
+401d 60488789 storet 1 ,mem_mesh_queue_ele_len 
+401e 184085ff increase -1 ,temp 
+401f e0408005 istoret 1 ,contw 
+4020 5800002a setarg gap_adtype_mesh_message 
+4021 e7e08005 istore 1 ,contw 
+4022 1840f3ff add temp ,-1 ,loopcnt 
+4023 6fe38922 fetch 7 ,mem_mesh_message_nid 
+4024 d8c00922 arg mem_mesh_message_nid ,contr 
+4025 20407cda call memcpy 
+4026 da200787 arg mem_mesh_queue_ele_temp ,rega 
+4027 204078b2 call queue_push 
+4028 2040402b call ali_mesh_network_layer_white_list_fliter 
+4029 24740000 nrtn user 
+402a 20203961 branch ali_mesh_bearer_layer_gatt_send_packet_by_network_layer 
+
+ali_mesh_network_layer_white_list_fliter:
+402b 684907b2 fetcht 2 ,mem_mesh_message_dst_temp 
+
+ali_mesh_network_layer_white_list_fliter_check:
+402c 20407dbc call disable_user 
+402d 6fe08978 fetch 1 ,mem_mesh_white_list_num 
+402e 207a0000 rtn blank 
+402f 98007200 iforce loopcnt 
+4030 d8c00968 arg mem_mesh_white_list ,contr 
+
+ali_mesh_network_layer_white_list_fliter_check_loop:
+4031 efe10006 ifetch 2 ,contr 
+4032 98467c00 isub temp ,null 
+4033 2022fdba branch enable_user ,zero 
+4034 c2004031 loop ali_mesh_network_layer_white_list_fliter_check_loop 
+4035 20600000 rtn 
+
+ali_mesh_network_layer_check_relay_states:
+4036 20407dbc call disable_user 
+4037 6fe08951 fetch 1 ,mem_mesh_network_packet_type 
+4038 c1008000 rtneq mesh_message_app 
+4039 6fe1484c fetch 2 ,mem_mesh_core_feature 
+403a c3808000 rtnbit1 mesh_feature_disable_relay 
+403b 6fe0c7e4 fetch 1 ,mem_mesh_provisioned_flag 
+403c c1800000 rtnne paired_status 
+403d 68490927 fetcht 2 ,mem_mesh_message_src 
+403e 20403f26 call ali_mesh_more_element_check_unicast_address 
+403f 20347dbc branch disable_user ,user 
+4040 2040404f call ali_mesh_network_layer_check_network_mic_cache 
+4041 24740000 nrtn user 
+4042 6fe08923 fetch 1 ,mem_mesh_message_ttl 
+4043 203a7dbc branch disable_user ,blank 
+4044 1fe0ffff pincrease -1 
+4045 203a7dbc branch disable_user ,blank 
+4046 67e08923 store 1 ,mem_mesh_message_ttl 
+4047 580048cc setarg mem_mesh_network_relay_queue 
+4048 67e143fb store 2 ,mem_queue_ptr 
+4049 20207dba branch enable_user 
+
+ali_mesh_network_layer_encrypt_relay_package:
+404a 20404005 call ali_mesh_network_load_network_nonce_and_encryptionkey 
+404b 6fe08921 fetch 1 ,mem_mesh_message_transport_netmic_length 
+404c d8400929 arg mem_mesh_message_dst ,temp 
+404d 20403c86 call ali_ccm_encrypt 
+404e 20203bcf branch ali_mesh_encrypt_obfuscation_deceypt_recevie_message 
+
+ali_mesh_network_layer_check_network_mic_cache:
+404f 580048a4 setarg mem_mesh_transport_message_mic_cache 
+4050 67e10910 store 2 ,mem_mesh_mic_cache_ptr 
+4051 202039fb branch ali_mesh_base_adt_cache 
+
+ali_mesh_network_layer_send_access_message:
+4052 4758c036 bpatchx patch36_1 ,mem_patch36 
+4053 20404056 call ali_mesh_network_layer_send_access_message_encrypt_netmic 
+4054 2040405f call ali_mesh_network_layer_send_access_message_encrypt_obfuscation 
+4055 2020394c branch ali_mesh_bearer_layer_send_packet_by_network_layer 
+
+ali_mesh_network_layer_send_access_message_encrypt_netmic:
+4056 6fe08916 fetch 1 ,mem_mesh_lower_transport_layer_payload_len 
+4057 1fe0a202 add pdata ,2 ,rega 
+4058 1fe0fe04 pincrease 4 
+4059 67e08916 store 1 ,mem_mesh_lower_transport_layer_payload_len 
+405a d840499f arg mem_mesh_send_upper_layer_dst ,temp 
+405b 2020405c branch ali_mesh_network_layer_encrypt_by_network_nonce 
+
+ali_mesh_network_layer_encrypt_by_network_nonce:
+405c 20404005 call ali_mesh_network_load_network_nonce_and_encryptionkey 
+405d 1a227e00 copy rega ,pdata 
+405e 20203c86 branch ali_ccm_encrypt 
+
+ali_mesh_network_layer_send_access_message_encrypt_obfuscation:
+405f 20203bcc branch ali_mesh_encrypt_obfuscation_deceypt_send_message 
+
+ali_mesh_network_layer_check_gatt_relay_packet:
+4060 20403e5e call ali_mesh_network_layer_init_gatt_queue_param 
+4061 204078fa call queue_empty 
+4062 207a0000 rtn blank 
+4063 20402a28 call le_fifo_check_nearly_full 
+4064 247a0000 nrtn blank 
+4065 da200787 arg mem_mesh_queue_ele_temp ,rega 
+4066 204078ca call queue_pop 
+4067 24740000 nrtn user 
+4068 202040f0 branch ali_mesh_send_ble_data 
+
+mesh_generate_nonce:
+4069 6fe2486e fetch 4 ,mem_mesh_iv_index 
+406a e7e20005 istore 4 ,contw 
+406b 18a0fff3 add contw ,-13 ,pdata 
+406c 67e108f1 store 2 ,mem_nonce_ptr 
+406d 20600000 rtn 
+
+ali_mesh_network_layer_init_queue_param:
+406e 580048cc setarg mem_mesh_network_relay_queue_each_size 
+406f 67e143fb store 2 ,mem_queue_ptr 
+4070 20600000 rtn 
+
+ali_mesh_network_layer_queue_init:
+4071 2040406e call ali_mesh_network_layer_init_queue_param 
+4072 202078ad branch queue_init 
+
+ali_mesh_ble_adv:
+4073 204029c9 call le_set_config_more_data 
+4074 6fe0c7e4 fetch 1 ,mem_mesh_provisioned_flag 
+4075 c000c083 beq unprovisioned_beacon_status ,ali_mesh_ble_adv_mesh_beacon 
+4076 c0004079 beq paired_status ,ali_mesh_ble_adv_network_id 
+4077 c002c079 beq wait_receive_appkey ,ali_mesh_ble_adv_network_id 
+4078 20600000 rtn 
+
+ali_mesh_ble_adv_network_id:
+4079 38010214 setsect 0 ,0x10214 
+407a 3804c080 setsect 1 ,0xc080 
+407b 380a8030 setsect 2 ,0x28030 
+407c 380c3060 setsect 3 ,0x3060 
+407d 67e4c348 store 9 ,mem_le_adv_data_len 
+407e 58182816 setarg 0x182816 
+407f e7e20005 istore 4 ,contw 
+4080 6fe447dc fetch 8 ,mem_mesh_network_id 
+4081 e7e40005 istore 8 ,contw 
+4082 20600000 rtn 
+
+ali_mesh_ble_adv_mesh_beacon:
+4083 20403ce0 call ali_mesh_config_device_uuid_by_three_tuple 
+4084 3801021d setsect 0 ,0x1021d 
+4085 3804c080 setsect 1 ,0xc080 
+4086 380a7030 setsect 2 ,0x27030 
+4087 380c5460 setsect 3 ,0x5460 
+4088 67e4c348 store 9 ,mem_le_adv_data_len 
+4089 58182716 setarg 0x182716 
+408a e7e18005 istore 3 ,contw 
+408b d8c008ff arg mem_mesh_device_uuid ,contr 
+408c 20407c8f call memcpy16 
+408d 6fe147ea fetch 2 ,mem_mesh_oob_information 
+408e e7e10005 istore 2 ,contw 
+408f 20600000 rtn 
+
+mesh_le_receive_data:
+4090 47594036 bpatchx patch36_2 ,mem_patch36 
+4091 6fe14398 fetch 2 ,mem_le_att_handle 
+4092 c0074095 beq mesh_proxy_data_in_handle ,ali_mesh_receive_ble_data_proxy_data_in 
+4093 c00a40d6 beq mesh_provisioning_data_in_handle ,ali_mesh_receive_ble_data_provisioning_data_in 
+4094 20600000 rtn 
+
+ali_mesh_receive_ble_data_proxy_data_in:
+4095 1a420400 copy regb ,temp 
+4096 efe08011 ifetch 1 ,rega 
+4097 c00040e1 beq mesh_proxy_message_type_network_pdu ,ali_mesh_network_layer_recevice_network_pdu_proxy_control 
+4098 c001409a beq mesh_proxy_message_type_proxy_configuration ,ali_mesh_network_layer_recevice_proxy_configuration_messages 
+4099 20600000 rtn 
+
+ali_mesh_network_layer_recevice_proxy_configuration_messages:
+409a 2040400e call ali_mesh_network_store_in_mem 
+409b 6fe08921 fetch 1 ,mem_mesh_message_transport_netmic_length 
+409c 1fe0fffc pincrease -4 
+409d 67e08921 store 1 ,mem_mesh_message_transport_netmic_length 
+409e 20403fdd call ali_mesh_network_layer_check_nid_ivi 
+409f 24740000 nrtn user 
+40a0 20403bcf call ali_mesh_encrypt_obfuscation_deceypt_recevie_message 
+40a1 6fe08923 fetch 1 ,mem_mesh_message_ttl 
+40a2 c283c0a4 bbit1 bit_ctl ,ali_mesh_recevice_proxy_configuration_messages_decrypt 
+40a3 20600000 rtn 
+
+ali_mesh_recevice_proxy_configuration_messages_decrypt:
+40a4 204040da call ali_mesh_network_load_proxy_nonce_and_encryptionkey 
+40a5 6fe08921 fetch 1 ,mem_mesh_message_transport_netmic_length 
+40a6 d8400929 arg mem_mesh_message_dst ,temp 
+40a7 20403ca5 call ali_ccm_decrypt_64bit 
+40a8 24628000 nrtn zero 
+40a9 20404106 call ali_mesh_white_filter_check 
+40aa 6fe0892b fetch 1 ,mem_mesh_message_proxy_transportpdu_opcode 
+40ab c00040bd beq proxy_opcode_set_filter_type ,ali_mesh_proxy_configuration_message_set_filter_type 
+40ac c000c0ae beq proxy_opcode_add_addr_to_filter ,ali_mesh_proxy_configuration_message_add_addr_to_filter 
+40ad 20600000 rtn 
+
+ali_mesh_proxy_configuration_message_add_addr_to_filter:
+40ae 6f208921 fetchr loopcnt ,1 ,mem_mesh_message_transport_netmic_length 
+40af 1f20f3fd increase -3 ,loopcnt 
+40b0 1f237e00 rshift loopcnt ,pdata 
+40b1 68490978 fetcht 2 ,mem_mesh_white_list_num 
+40b2 9840fe00 iadd temp ,pdata 
+40b3 1fe67c08 sub pdata ,8 ,null 
+40b4 24610000 nrtn positive 
+40b5 67e10978 store 2 ,mem_mesh_white_list_num 
+40b6 d8a00968 arg mem_mesh_white_list ,contw 
+40b7 1843fe00 lshift temp ,pdata 
+40b8 98a08a00 iadd contw ,contw 
+40b9 d8c0092c arg mem_mesh_message_proxy_transportpdu_parameters ,contr 
+40ba 20407cda call memcpy 
+40bb 6fe0897a fetch 1 ,mem_mesh_addressed_filter_type 
+40bc 202040bf branch ali_mesh_proxy_configuration_message_filter_status 
+
+ali_mesh_proxy_configuration_message_set_filter_type:
+40bd efe08006 ifetch 1 ,contr 
+40be 67e0897a store 1 ,mem_mesh_addressed_filter_type 
+
+ali_mesh_proxy_configuration_message_filter_status:
+40bf 67e0c9a2 store 1 ,mem_mesh_filter_status_message_filtertype 
+40c0 6fe10978 fetch 2 ,mem_mesh_white_list_num 
+40c1 1ff0fe00 byteswap pdata ,pdata 
+40c2 67e149a3 store 2 ,mem_mesh_filter_status_message_listsize 
+40c3 7049a103 jam proxy_opcode_filter_status ,mem_mesh_filter_status_message_opcode 
+40c4 6fe48922 fetch 9 ,mem_mesh_message_nid 
+40c5 67e4c998 store 9 ,mem_mesh_send_upper_layer_ivi_and_nid 
+40c6 6fe14995 fetch 2 ,mem_mesh_send_message_src 
+40c7 67e1499d store 2 ,mem_mesh_send_upper_layer_src 
+40c8 20404253 call ali_mesh_upper_transport_layer_send_access_message_calc_seq 
+40c9 20404267 call ali_mesh_upper_transport_layer_send_access_message_add_seq 
+40ca 204040da call ali_mesh_network_load_proxy_nonce_and_encryptionkey 
+40cb 58000006 setarg 6 
+40cc d840499f arg mem_mesh_send_upper_layer_dst ,temp 
+40cd 20403c84 call ali_ccm_encrypt_64bit 
+40ce 2040405f call ali_mesh_network_layer_send_access_message_encrypt_obfuscation 
+40cf da200016 arg 22 ,rega 
+40d0 d8400010 arg mesh_proxy_data_out_handle ,temp 
+40d1 20402dee call le_att_malloc_tx_notify 
+40d2 58000002 setarg mesh_proxy_message_type_proxy_configuration 
+40d3 e7e08005 istore 1 ,contw 
+40d4 d8c04998 arg mem_mesh_send_upper_layer_ivi_and_nid ,contr 
+40d5 20207c8d branch memcpy32 
+
+ali_mesh_receive_ble_data_provisioning_data_in:
+40d6 7007aa02 jam mesh_message_proxy ,mem_mesh_fast_pair_packet_type 
+40d7 1a420400 copy regb ,temp 
+40d8 1a220c00 copy rega ,contr 
+40d9 20203cfa branch ali_mesh_receive_adtype_manufacturer_specific 
+
+ali_mesh_network_load_proxy_nonce_and_encryptionkey:
+40da d8a0095b arg mem_mesh_proxy_nonce ,contw 
+40db 58000003 setarg proxy_nonce 
+40dc e7e10005 istore 2 ,contw 
+40dd 6fe28924 fetch 5 ,mem_mesh_message_seq 
+40de e7e38005 istore 7 ,contw 
+40df 20404069 call mesh_generate_nonce 
+40e0 20204006 branch ali_mesh_upper_transport_layer_load_encryptionkey 
+
+ali_mesh_network_layer_recevice_network_pdu_proxy_control:
+40e1 70095102 jam mesh_message_proxy ,mem_mesh_network_packet_type 
+40e2 20203f7d branch ali_mesh_network_layer_recevice_network_pdu 
+
+ali_mesh_proxy_process_bb_event:
+40e3 1a627e00 copy regc ,pdata 
+40e4 c00ac0e8 beq bt_evt_le_disconnected ,mesh_ble_start_adv 
+40e5 c00a40e7 beq bt_evt_le_connected ,app_ble_conn_event 
+40e6 20600000 rtn 
+
+app_ble_conn_event:
+40e7 202040eb branch ali_mesh_proxy_white_list_clear 
+
+mesh_ble_start_adv:
+40e8 58000000 setarg 0 
+40e9 67e1486c store 2 ,mem_mesh_network_proxy_unicast_address 
+40ea 20204317 branch app_ble_start_adv 
+
+ali_mesh_proxy_white_list_clear:
+40eb 58000000 setarg 0 
+40ec 67e10978 store 2 ,mem_mesh_white_list_num 
+40ed d8a00968 arg mem_mesh_white_list ,contw 
+40ee df200010 arg 16 ,loopcnt 
+40ef 20207ca3 branch memset0 
+
+ali_mesh_send_ble_data:
+40f0 20402a28 call le_fifo_check_nearly_full 
+40f1 247a0000 nrtn blank 
+40f2 6fe08789 fetch 1 ,mem_mesh_queue_ele_len 
+40f3 1fe0a3ff add pdata ,-1 ,rega 
+40f4 d8400010 arg mesh_proxy_data_out_handle ,temp 
+40f5 20402dee call le_att_malloc_tx_notify 
+40f6 58000000 setarg mesh_proxy_message_type_network_pdu 
+40f7 e7e08005 istore 1 ,contw 
+40f8 d8c0078c arg mem_mesh_queue_ele_payload + 2 ,contr 
+40f9 20207c8d branch memcpy32 
+
+ali_mesh_send_pairing_data:
+40fa 6fe087aa fetch 1 ,mem_mesh_fast_pair_packet_type 
+40fb c1000000 rtneq mesh_message_tmall 
+40fc 6fe144e9 fetch 2 ,mem_ui_state_map 
+40fd c4048000 rtnbit0 ui_state_ble_connected 
+40fe 20402a28 call le_fifo_check_nearly_full 
+40ff 247a0000 nrtn blank 
+4100 6fe0c62a fetch 1 ,mem_mesh_adv_data_len 
+4101 1fe0a3fb add pdata ,-5 ,rega 
+4102 d8400016 arg mesh_provisioning_data_out_handle ,temp 
+4103 20402dee call le_att_malloc_tx_notify 
+4104 d8c04630 arg mem_mesh_adv_data + 5 ,contr 
+4105 20207c8d branch memcpy32 
+
+ali_mesh_white_filter_check:
+4106 6fe10968 fetch 2 ,mem_mesh_white_list 
+4107 247a0000 nrtn blank 
+4108 6fe10927 fetch 2 ,mem_mesh_message_src 
+4109 67e10968 store 2 ,mem_mesh_white_list 
+
+ali_mesh_white_list_num_increase:
+410a 6fe10978 fetch 2 ,mem_mesh_white_list_num 
+410b 1fe0fe01 pincrease 1 
+410c 67e10978 store 2 ,mem_mesh_white_list_num 
+410d 20600000 rtn 
+
+sha_endian_swap2:
+410e efe20006 ifetch 4 ,contr 
+410f 18002204 force 4 ,rega 
+4110 18a08a03 increase 3 ,contw 
+
+sha_endian_loop:
+4111 e7e08005 istore 1 ,contw 
+4112 1fecfe00 rshift8 pdata ,pdata 
+4113 18a08bfe increase -2 ,contw 
+4114 1a20a3ff increase -1 ,rega 
+4115 2422c111 nbranch sha_endian_loop ,zero 
+4116 18a08a05 increase 5 ,contw 
+4117 c200410e loop sha_endian_swap2 
+4118 20600000 rtn 
+
+sha_getw:
+4119 18ebfe00 lshift2 queue ,pdata 
+411a 99608c00 iadd timeup ,contr 
+411b efe20006 ifetch 4 ,contr 
+411c 20600000 rtn 
+
+sha_r:
+411d 18006010 force 16 ,alarm 
+411e d9600231 arg mem_dat ,timeup 
+
+sha_r_loop:
+411f 1e008ff9 add alarm ,-7 ,queue 
+4120 20404119 call sha_getw 
+4121 98000400 iforce temp 
+4122 1e008ff0 add alarm ,-16 ,queue 
+4123 20404119 call sha_getw 
+4124 98408400 iadd temp ,temp 
+4125 1e008ffe add alarm ,-2 ,queue 
+4126 20404119 call sha_getw 
+4127 1fee7e01 shasx pdata ,1 ,pdata 
+4128 98408400 iadd temp ,temp 
+4129 1e008ff1 add alarm ,-15 ,queue 
+412a 20404119 call sha_getw 
+412b 1fee7e00 shasx pdata ,0 ,pdata 
+412c 98408400 iadd temp ,temp 
+412d 1e0bfe00 lshift2 alarm ,pdata 
+412e 99608a00 iadd timeup ,contw 
+412f e0420005 istoret 4 ,contw 
+4130 1e00e001 increase 1 ,alarm 
+4131 2e01fe40 compare 64 ,alarm ,0xff 
+4132 2420c11f nbranch sha_r_loop ,true 
+4133 20600000 rtn 
+
+sha_init:
+4134 d8c00549 arg memh0 ,contr 
+4135 18007007 force 7 ,regext_index 
+
+sha_init_0:
+4136 efe20006 ifetch 4 ,contr 
+4137 98005e00 iforce regext 
+4138 1f00f1ff increase -1 ,regext_index 
+4139 20214136 branch sha_init_0 ,positive 
+413a 20600000 rtn 
+
+sha:
+413b 4759c036 bpatchx patch36_3 ,mem_patch36 
+413c 2040411d call sha_r 
+413d d8a00331 arg memahbak ,contw 
+413e 18007000 force 0 ,regext_index 
+
+sha_0:
+413f 1de27e00 deposit regext 
+4140 e7e20005 istore 4 ,contw 
+4141 1f00f001 increase 1 ,regext_index 
+4142 2f01fe08 compare 8 ,regext_index ,0xff 
+4143 2420c13f nbranch sha_0 ,true 
+4144 d96095ed arg ble_mesh_sha256_addr ,timeup 
+4145 de000231 arg mem_dat ,alarm 
+4146 18007240 force 64 ,loopcnt 
+
+sha_loop:
+4147 e8420030 ifetcht 4 ,alarm 
+4148 efe2000b ifetch 4 ,timeup 
+4149 19609604 increase 4 ,timeup 
+414a 1e00e004 increase 4 ,alarm 
+414b 9840fe00 iadd temp ,pdata 
+414c 18007007 force 7 ,regext_index 
+414d 9de08400 iadd regext ,temp 
+414e 18007004 force 4 ,regext_index 
+414f 1dee7e03 shasx regext ,3 ,pdata 
+4150 98408400 iadd temp ,temp 
+4151 18007005 force 5 ,regext_index 
+4152 1de27e00 deposit regext 
+4153 18007006 force 6 ,regext_index 
+4154 9de2fe00 ixor regext ,pdata 
+4155 18007004 force 4 ,regext_index 
+4156 9de17e00 iand regext ,pdata 
+4157 18007006 force 6 ,regext_index 
+4158 9de2fe00 ixor regext ,pdata 
+4159 98408400 iadd temp ,temp 
+415a 18007007 force 7 ,regext_index 
+415b 18425e00 copy temp ,regext 
+415c 18007003 force 3 ,regext_index 
+415d 1de27e00 deposit regext 
+415e 9840de00 iadd temp ,regext 
+415f 18007000 force 0 ,regext_index 
+4160 1de27e00 deposit regext 
+4161 18007001 force 1 ,regext_index 
+4162 9de10400 iand regext ,temp 
+4163 9de1fe00 ior regext ,pdata 
+4164 18007002 force 2 ,regext_index 
+4165 9de17e00 iand regext ,pdata 
+4166 98418400 ior temp ,temp 
+4167 18007000 force 0 ,regext_index 
+4168 1dee7e02 shasx regext ,2 ,pdata 
+4169 9840fe00 iadd temp ,pdata 
+416a 18007007 force 7 ,regext_index 
+416b 9de0de00 iadd regext ,regext 
+416c 980efc00 regexrot 
+416d c2004147 loop sha_loop 
+416e d8c00331 arg memahbak ,contr 
+416f 18007000 force 0 ,regext_index 
+
+sha_1:
+4170 efe20006 ifetch 4 ,contr 
+4171 9de0de00 iadd regext ,regext 
+4172 1f00f001 increase 1 ,regext_index 
+4173 2f01fe08 compare 8 ,regext_index ,0xff 
+4174 2420c170 nbranch sha_1 ,true 
+4175 20600000 rtn 
+
+sha_result:
+4176 d8a001bd arg memresult ,contw 
+4177 18007007 force 7 ,regext_index 
+
+sha_regext_save:
+4178 1de27e00 deposit regext 
+4179 e7e20005 istore 4 ,contw 
+417a 1f00f1ff increase -1 ,regext_index 
+417b 20214178 branch sha_regext_save ,positive 
+417c 20600000 rtn 
+
+ali_mesh_upper_transport_layer_receive_unsegmented_access_message:
+417d c3034180 bbit0 transport_head_bit_akf ,ali_mesh_uuper_transport_layer_decrypt_unsegment_access_by_device_key 
+
+ali_mesh_uuper_transport_layer_decrypt_unsegment_access_by_application_key:
+417e 204041a2 call ali_mesh_upper_transport_layer_load_application_nonce_and_application_key 
+417f 20204182 branch ali_mesh_upper_transport_layer_decrypt_unsegmented_message 
+
+ali_mesh_uuper_transport_layer_decrypt_unsegment_access_by_device_key:
+4180 204041af call ali_mesh_upper_transport_layer_load_device_nonce_and_device_key 
+4181 20204182 branch ali_mesh_upper_transport_layer_decrypt_unsegmented_message 
+
+ali_mesh_upper_transport_layer_decrypt_unsegmented_message:
+4182 6fe08921 fetch 1 ,mem_mesh_message_transport_netmic_length 
+4183 1fe0fff9 pincrease -7 
+4184 de00092c arg mem_mesh_message_transport_unsegmented_access_messagepdu ,alarm 
+4185 20407dbc call disable_user 
+4186 20204194 branch ali_mesh_upper_transport_layer_decrypt_message 
+
+ali_mesh_upper_transport_layer_receive_segmented_access_message:
+4187 6fe0892b fetch 1 ,mem_mesh_message_transport_head 
+4188 c303418b bbit0 transport_head_bit_akf ,ali_mesh_uuper_transport_layer_decrypt_segment_access_by_device_key 
+
+ali_mesh_uuper_transport_layer_decrypt_segment_access_by_application_key:
+4189 204041a2 call ali_mesh_upper_transport_layer_load_application_nonce_and_application_key 
+418a 2020418d branch ali_mesh_upper_transport_layer_decrypt_segmented_message 
+
+ali_mesh_uuper_transport_layer_decrypt_segment_access_by_device_key:
+418b 204041af call ali_mesh_upper_transport_layer_load_device_nonce_and_device_key 
+418c 2020418d branch ali_mesh_upper_transport_layer_decrypt_segmented_message 
+
+ali_mesh_upper_transport_layer_decrypt_segmented_message:
+418d 6fe0c969 fetch 1 ,mem_mesh_aszmic 
+418e 245a7dba ncall enable_user ,blank 
+418f 205a7dbc call disable_user ,blank 
+4190 6fe0c862 fetch 1 ,mem_mesh_segmented_access_message_current_length 
+4191 1fe0fffc pincrease -4 
+4192 70486200 jam 0 ,mem_mesh_segmented_access_message_current_length 
+4193 de004b3c arg mem_mesh_segmented_access_message_segment ,alarm 
+
+ali_mesh_upper_transport_layer_decrypt_message:
+4194 1e020400 copy alarm ,temp 
+4195 2040419c call ali_mesh_upper_transport_layer_decrypt_message_decrypt_transmic 
+4196 24628000 nrtn zero 
+4197 2040419f call ali_mesh_upper_transport_layer_check_transport_mic_cache 
+4198 24740000 nrtn user 
+4199 6fe108f4 fetch 2 ,mem_ccm_data_ptr 
+419a 1fe26000 copy pdata ,alarm 
+419b 20203728 branch ali_mesh_access_layer_resolve_message 
+
+ali_mesh_upper_transport_layer_decrypt_message_decrypt_transmic:
+419c 24343ca7 nbranch ali_ccm_decrypt ,user 
+419d 1fe0fffc pincrease -4 
+419e 20203ca5 branch ali_ccm_decrypt_64bit 
+
+ali_mesh_upper_transport_layer_check_transport_mic_cache:
+419f 5800496a setarg mem_mesh_access_message_mic_cache 
+41a0 67e10910 store 2 ,mem_mesh_mic_cache_ptr 
+41a1 202039fb branch ali_mesh_base_adt_cache 
+
+ali_mesh_upper_transport_layer_load_application_nonce_and_application_key:
+41a2 204041a5 call ali_mesh_upper_transport_layer_load_application_nonce 
+
+ali_mesh_upper_transport_layer_load_application_key:
+41a3 d8c04959 arg mem_mesh_application_key ,contr 
+41a4 2020735f branch load_key 
+
+ali_mesh_upper_transport_layer_load_application_nonce:
+41a5 d8a0093f arg mem_mesh_application_nonce ,contw 
+41a6 58000001 setarg application_nonce 
+41a7 e7e08005 istore 1 ,contw 
+41a8 6fe0c969 fetch 1 ,mem_mesh_aszmic 
+41a9 d8400000 arg 0 ,temp 
+41aa 7d3a0407 nsetflag blank ,7 ,temp 
+41ab e0408005 istoret 1 ,contw 
+41ac 6fe38924 fetch 7 ,mem_mesh_message_seq 
+41ad e7e38005 istore 7 ,contw 
+41ae 20204069 branch mesh_generate_nonce 
+
+ali_mesh_upper_transport_layer_load_device_nonce_and_device_key:
+41af 204041b2 call ali_mesh_upper_transport_layer_load_device_nonce 
+
+ali_mesh_upper_transport_layer_load_device_key:
+41b0 d8c046a0 arg mem_mesh_device_key ,contr 
+41b1 2020735f branch load_key 
+
+ali_mesh_upper_transport_layer_load_device_nonce:
+41b2 d8a0093f arg mem_mesh_device_nonce ,contw 
+41b3 58000002 setarg device_nonce 
+41b4 202041a7 branch ali_mesh_upper_transport_layer_load_application_nonce + 2 
+
+ali_mesh_upper_transport_layer_send_access_message:
+
+ali_mesh_upper_transport_layer_send_access_message_without_cleat_tx_buffer:
+41b5 475a4036 bpatchx patch36_4 ,mem_patch36 
+41b6 2040425b call ali_mesh_upper_transport_layer_send_access_message_add_nid_src_ttl_seq_dst 
+41b7 204041bd call ali_mesh_upper_transport_layer_store_packet_header 
+41b8 20740000 rtn user 
+41b9 204041d0 call ali_mesh_upper_transport_layer_store_unsegment_msg_original_access_pdu 
+41ba 20404292 call ali_mesh_upper_transport_layer_init_queue_param 
+41bb da200983 arg mem_mesh_upper_tran_layer_queue_temp ,rega 
+41bc 202078b2 branch queue_push 
+
+ali_mesh_upper_transport_layer_store_packet_header:
+41bd 20407dbc call disable_user 
+41be d8400001 arg upper_retry_count_status ,temp 
+41bf 6fe08951 fetch 1 ,mem_mesh_network_packet_type 
+41c0 1fe67c02 sub pdata ,mesh_message_proxy ,null 
+41c1 79228407 setflag zero ,bit_upper_flag_proxy_control ,temp 
+41c2 60488983 storet 1 ,mem_mesh_upper_tran_layer_temp_packet_flag 
+41c3 6fe4c998 fetch 9 ,mem_mesh_send_upper_layer_ivi_and_nid 
+41c4 67e48987 store 9 ,mem_mesh_upper_tran_layer_temp_packet_header_ivi_nid 
+41c5 6fe08723 fetch 1 ,mem_mesh_access_layer_payload_vendor_command 
+41c6 c1ea0000 rtnne vendor_message_attr_indication 
+41c7 6fe0c7e4 fetch 1 ,mem_mesh_provisioned_flag 
+41c8 c0807dba bne paired_status ,enable_user 
+41c9 6fe08726 fetch 1 ,mem_mesh_access_layer_payload_vendor_tid 
+41ca 67e08986 store 1 ,mem_mesh_upper_tran_layer_temp_packet_tid 
+41cb 6fe08983 fetch 1 ,mem_mesh_upper_tran_layer_temp_packet_flag 
+41cc 1fe0fe01 pincrease upper_retry_count_indication 
+41cd 79207e05 set1 bit_upper_flag_vendor_indication ,pdata 
+41ce 67e08983 store 1 ,mem_mesh_upper_tran_layer_temp_packet_flag 
+41cf 20600000 rtn 
+
+ali_mesh_upper_transport_layer_store_unsegment_msg_original_access_pdu:
+41d0 6fe08722 fetch 1 ,mem_mesh_access_layer_payload_len 
+41d1 1fe27200 copy pdata ,loopcnt 
+41d2 67e08990 store 1 ,mem_mesh_upper_tran_layer_temp_packet_length 
+41d3 6fe0892b fetch 1 ,mem_mesh_message_transport_head 
+41d4 67e08991 store 1 ,mem_mesh_upper_tran_layer_temp_pakcet_akf_aid 
+41d5 d8a00996 arg mem_mesh_upper_tran_layer_temp_pakcet_upper_tran_access_pdu ,contw 
+41d6 d8c00723 arg mem_mesh_access_layer_payload ,contr 
+41d7 20207cda branch memcpy 
+
+ali_mesh_upper_transport_layer_control_packet:
+
+ali_mesh_upper_transport_layer_control_packet_deal:
+41d8 6fe0c9b5 fetch 1 ,mem_mesh_upper_tran_layer_packet_advertising 
+41d9 247a0000 nrtn blank 
+41da 20404292 call ali_mesh_upper_transport_layer_init_queue_param 
+41db da200983 arg mem_mesh_upper_tran_layer_queue_temp ,rega 
+41dc 204078dc call queue_get_new_ele 
+41dd 24740000 nrtn user 
+41de 68488983 fetcht 1 ,mem_mesh_upper_tran_layer_temp_packet_flag 
+41df 18417e0f and temp ,data_upper_flag_max_retry_count ,pdata 
+41e0 203a420b branch ali_mesh_upper_transport_layer_queue_pop ,blank 
+41e1 7049b501 jam packet_in_bearer ,mem_mesh_upper_tran_layer_packet_advertising 
+41e2 204041fc call ali_mesh_upper_transport_layer_control_packet_load_header 
+41e3 68488983 fetcht 1 ,mem_mesh_upper_tran_layer_temp_packet_flag 
+41e4 20404202 call ali_mesh_upper_transport_layer_control_packet_load_app_control 
+41e5 67e0c9b6 store 1 ,mem_mesh_upper_tran_layer_packet_tid 
+41e6 6fe0c9b7 fetch 1 ,mem_mesh_upper_tran_layer_packet_type 
+41e7 284ffe07 isolate1 bit_upper_flag_proxy_control ,temp 
+41e8 7920fe02 setflag true ,bit_uuper_tran_proxy_message ,pdata 
+41e9 67e0c9b7 store 1 ,mem_mesh_upper_tran_layer_packet_type 
+41ea 79200404 set1 bit_upper_flag_retransmit ,temp 
+41eb 184085ff increase -1 ,temp 
+41ec e0408012 istoret 1 ,regb 
+41ed 68488983 fetcht 1 ,mem_mesh_upper_tran_layer_temp_packet_flag 
+41ee 284ffe04 isolate1 bit_upper_flag_retransmit ,temp 
+41ef 2420c20f nbranch ali_mesh_upper_transport_layer_control_packet_encrypt_access ,true 
+41f0 68488990 fetcht 1 ,mem_mesh_upper_tran_layer_temp_packet_length 
+41f1 60488722 storet 1 ,mem_mesh_upper_transport_layer_payload_len 
+41f2 18427200 copy temp ,loopcnt 
+41f3 d8a00723 arg mem_mesh_access_layer_payload ,contw 
+41f4 d8c00996 arg mem_mesh_upper_tran_layer_temp_pakcet_upper_tran_access_pdu ,contr 
+41f5 20407cda call memcpy 
+41f6 18467c0f sub temp ,unsegmented_access_message_max_upper_transport_access_pdu_len ,null 
+41f7 242141f9 nbranch ali_mesh_upper_transport_layer_control_packet_segment_msg ,positive 
+
+ali_mesh_upper_transport_layer_control_packet_unsegment_msg:
+41f8 20203ec1 branch ali_mesh_lower_transport_layer_send_unsegmented_access_message 
+
+ali_mesh_upper_transport_layer_control_packet_segment_msg:
+41f9 6fe20992 fetch 4 ,mem_mesh_upper_tran_layer_temp_segmented_pakcet_seqzero 
+41fa 67e2097e store 4 ,mem_mesh_segmented_lower_transport_layer_segzero 
+41fb 20204230 branch ali_mesh_upper_transport_layer_split_segmented_msg_to_lower_tran_layer 
+
+ali_mesh_upper_transport_layer_control_packet_load_header:
+41fc 6fe08991 fetch 1 ,mem_mesh_upper_tran_layer_temp_pakcet_akf_aid 
+41fd 67e0892b store 1 ,mem_mesh_message_transport_head 
+41fe 6fe48987 fetch 9 ,mem_mesh_upper_tran_layer_temp_packet_header_ivi_nid 
+41ff 67e4c998 store 9 ,mem_mesh_send_upper_layer_ivi_and_nid 
+4200 67e48922 store 9 ,mem_mesh_message_nid 
+4201 20600000 rtn 
+
+ali_mesh_upper_transport_layer_control_packet_load_app_control:
+4202 7049b701 jam upper_tran_tmall_message ,mem_mesh_upper_tran_layer_packet_type 
+4203 6fe08986 fetch 1 ,mem_mesh_upper_tran_layer_temp_packet_tid 
+4204 284ffe05 isolate1 bit_upper_flag_vendor_indication ,temp 
+4205 20608000 rtn true 
+4206 58000000 setarg 0 
+4207 20600000 rtn 
+
+ali_mesh_store_tran_package_type:
+4208 1a208a1a add rega ,element_device_tran_package_type ,contw 
+4209 e7e08005 istore 1 ,contw 
+420a 20600000 rtn 
+
+ali_mesh_upper_transport_layer_queue_pop:
+420b 7049b600 jam 0 ,mem_mesh_upper_tran_layer_packet_tid 
+420c 20404292 call ali_mesh_upper_transport_layer_init_queue_param 
+420d da200983 arg mem_mesh_upper_tran_layer_queue_temp ,rega 
+420e 202078ca branch queue_pop 
+
+ali_mesh_upper_transport_layer_control_packet_encrypt_access:
+420f 20404253 call ali_mesh_upper_transport_layer_send_access_message_calc_seq 
+4210 20404267 call ali_mesh_upper_transport_layer_send_access_message_add_seq 
+4211 6fe4c998 fetch 9 ,mem_mesh_send_upper_layer_ivi_and_nid 
+4212 67e48987 store 9 ,mem_mesh_upper_tran_layer_temp_packet_header_ivi_nid 
+4213 20404228 call ali_mesh_upper_transport_layer_control_packet_encrypt_access_load_payload 
+4214 58000000 setarg 0 
+4215 67e0c969 store 1 ,mem_mesh_aszmic 
+4216 20404249 call ali_mesh_upper_transport_layer_calc_transport_mic 
+4217 68488722 fetcht 1 ,mem_mesh_upper_transport_layer_payload_len 
+4218 60488990 storet 1 ,mem_mesh_upper_tran_layer_temp_packet_length 
+4219 18427200 copy temp ,loopcnt 
+421a d8c00723 arg mem_mesh_access_layer_payload ,contr 
+421b d8a00996 arg mem_mesh_upper_tran_layer_temp_pakcet_upper_tran_access_pdu ,contw 
+421c 20407cda call memcpy 
+421d 18467c0f sub temp ,unsegmented_access_message_max_upper_transport_access_pdu_len ,null 
+421e 24214222 nbranch ali_mesh_upper_transport_layer_control_packet_encrypt_access_segment_msg ,positive 
+
+ali_mesh_upper_transport_layer_control_packet_encrypt_access_unsegment_msg:
+421f da200984 arg mem_mesh_upper_tran_layer_temp_packet_transmit_delay ,rega 
+4220 204078eb call queue_store_new_ele 
+4221 20203ec1 branch ali_mesh_lower_transport_layer_send_unsegmented_access_message 
+
+ali_mesh_upper_transport_layer_control_packet_encrypt_access_segment_msg:
+4222 2040426f call ali_mesh_upper_transport_layer_send_segmented_access_message_get_seqzero_segon 
+4223 6fe2097e fetch 4 ,mem_mesh_segmented_lower_transport_layer_segzero 
+4224 67e20992 store 4 ,mem_mesh_upper_tran_layer_temp_segmented_pakcet_seqzero 
+4225 da200984 arg mem_mesh_upper_tran_layer_temp_packet_transmit_delay ,rega 
+4226 204078eb call queue_store_new_ele 
+4227 20204230 branch ali_mesh_upper_transport_layer_split_segmented_msg_to_lower_tran_layer 
+
+ali_mesh_upper_transport_layer_control_packet_encrypt_access_load_payload:
+4228 6fe08990 fetch 1 ,mem_mesh_upper_tran_layer_temp_packet_length 
+4229 1fe27200 copy pdata ,loopcnt 
+422a 67e08722 store 1 ,mem_mesh_access_layer_payload_len 
+422b 6fe08991 fetch 1 ,mem_mesh_upper_tran_layer_temp_pakcet_akf_aid 
+422c 67e0892b store 1 ,mem_mesh_message_transport_head 
+422d d8c00996 arg mem_mesh_upper_tran_layer_temp_pakcet_upper_tran_access_pdu ,contr 
+422e d8a00723 arg mem_mesh_access_layer_payload ,contw 
+422f 20207cda branch memcpy 
+
+ali_mesh_upper_transport_layer_split_segmented_msg_to_lower_tran_layer:
+4230 2040427c call ali_mesh_upper_transport_layer_send_segmented_access_message_calc_header 
+4231 58000723 setarg mem_mesh_access_payload 
+4232 67e1097b store 2 ,mem_mesh_upper_transport_layer_payload_ptr 
+
+ali_mesh_upper_transport_layer_send_segmented_access_message_loop:
+4233 204041fc call ali_mesh_upper_transport_layer_control_packet_load_header 
+4234 20404253 call ali_mesh_upper_transport_layer_send_access_message_calc_seq 
+4235 20404267 call ali_mesh_upper_transport_layer_send_access_message_add_seq 
+4236 68488722 fetcht 1 ,mem_mesh_access_layer_payload_len 
+4237 5800000c setarg segmented_access_message_unint_pdu_len 
+4238 20407db0 call not_greater_than 
+4239 1fe22200 copy pdata ,rega 
+423a 18427e00 copy temp ,pdata 
+423b 9a267e00 isub rega ,pdata 
+423c 67e08722 store 1 ,mem_mesh_access_layer_payload_len 
+423d 6fe1097b fetch 2 ,mem_mesh_upper_transport_layer_payload_ptr 
+423e 1fe20c00 copy pdata ,contr 
+423f 9a208400 iadd rega ,temp 
+4240 6049097b storet 2 ,mem_mesh_upper_transport_layer_payload_ptr 
+4241 20403ecb call ali_mesh_lower_transport_layer_send_segmented_access_message 
+4242 6fe08722 fetch 1 ,mem_mesh_access_layer_payload_len 
+4243 207a0000 rtn blank 
+4244 6fe08980 fetch 1 ,mem_mesh_segmented_lower_transport_layer_sego 
+4245 1fe0fe01 pincrease 1 
+4246 67e08980 store 1 ,mem_mesh_segmented_lower_transport_layer_sego 
+4247 2040427c call ali_mesh_upper_transport_layer_send_segmented_access_message_calc_header 
+4248 20204233 branch ali_mesh_upper_transport_layer_send_segmented_access_message_loop 
+
+ali_mesh_upper_transport_layer_calc_transport_mic:
+4249 6fe0892b fetch 1 ,mem_mesh_message_transport_head 
+424a c303424d bbit0 transport_head_bit_akf ,ali_mesh_upper_transport_layer_calc_transport_mic_by_devicekey 
+
+ali_mesh_upper_transport_layer_calc_transport_mic_by_appkey:
+424b 204041a2 call ali_mesh_upper_transport_layer_load_application_nonce_and_application_key 
+424c 2020424e branch ali_mesh_upper_transport_layer_calc_transport_mic_encrypt_aesccm 
+
+ali_mesh_upper_transport_layer_calc_transport_mic_by_devicekey:
+424d 204041af call ali_mesh_upper_transport_layer_load_device_nonce_and_device_key 
+
+ali_mesh_upper_transport_layer_calc_transport_mic_encrypt_aesccm:
+424e 6fe08722 fetch 1 ,mem_mesh_access_layer_payload_len 
+424f 1fe08404 add pdata ,4 ,temp 
+4250 60488722 storet 1 ,mem_mesh_upper_transport_layer_payload_len 
+4251 d8400723 arg mem_mesh_access_layer_payload ,temp 
+4252 20203c86 branch ali_ccm_encrypt 
+
+ali_mesh_upper_transport_layer_send_access_message_calc_seq:
+4253 6fe1c992 fetch 3 ,mem_mesh_send_message_seq 
+4254 1fe0fe01 pincrease 1 
+4255 67e1c992 store 3 ,mem_mesh_send_message_seq 
+4256 6fe0c808 fetch 1 ,mem_mesh_gatt_package_send_msg_id 
+4257 1fe0fe01 pincrease 1 
+4258 67e0c808 store 1 ,mem_mesh_gatt_package_send_msg_id 
+4259 6fe14846 fetch 2 ,mem_mesh_cb_seq_changed 
+425a 20207d79 branch callback_func 
+
+ali_mesh_upper_transport_layer_send_access_message_add_nid_src_ttl_seq_dst:
+425b 6fe0c871 fetch 1 ,mem_mesh_iv_index + 3 
+425c 1ff27e00 lshift4 pdata ,pdata 
+425d 1fe9fe00 lshift3 pdata ,pdata 
+425e 6848c74d fetcht 1 ,mem_k2_nid 
+425f 9841fe00 ior temp ,pdata 
+4260 67e0c998 store 1 ,mem_mesh_send_upper_layer_ivi_and_nid 
+4261 6fe0c997 fetch 1 ,mem_mesh_send_message_ttl 
+4262 67e0c999 store 1 ,mem_mesh_send_upper_layer_ctl_and_ttl 
+4263 6fe14995 fetch 2 ,mem_mesh_send_message_src 
+4264 67e1499d store 2 ,mem_mesh_send_upper_layer_src 
+4265 6fe1094c fetch 2 ,mem_mesh_send_message_dst 
+4266 67e1499f store 2 ,mem_mesh_send_upper_layer_dst 
+
+ali_mesh_upper_transport_layer_send_access_message_add_seq:
+4267 6fe1c992 fetch 3 ,mem_mesh_send_message_seq 
+4268 67e1c99a store 3 ,mem_mesh_send_upper_layer_seq 
+4269 da20499a arg mem_mesh_send_upper_layer_seq ,rega 
+426a df200003 arg 3 ,loopcnt 
+426b 20407cb1 call inverse_data 
+426c 6fe44999 fetch 8 ,mem_mesh_send_upper_layer_ctl_and_ttl 
+426d 67e40923 store 8 ,mem_mesh_message_ttl 
+426e 20600000 rtn 
+
+ali_mesh_upper_transport_layer_send_segmented_access_message_get_seqzero_segon:
+426f 6fe08722 fetch 1 ,mem_mesh_upper_transport_layer_payload_len 
+4270 1fe6fc0c div pdata ,segmented_access_message_unint_pdu_len 
+4271 20407d62 call wait_div_end 
+4272 18078400 quotient temp 
+4273 18077e00 remainder pdata 
+4274 205a428f call ali_mesh_upper_transport_layer_send_segmented_access_message_sub_segn_one ,blank 
+4275 60488981 storet 1 ,mem_mesh_segmented_lower_transport_layer_segn 
+4276 70098000 jam 0 ,mem_mesh_segmented_lower_transport_layer_sego 
+4277 6fe1c992 fetch 3 ,mem_mesh_send_message_seq 
+4278 d8401fff arg 0x1fff ,temp 
+4279 98417e00 iand temp ,pdata 
+427a 67e1097e store 2 ,mem_mesh_segmented_lower_transport_layer_segzero 
+427b 20600000 rtn 
+
+ali_mesh_upper_transport_layer_send_segmented_access_message_calc_header:
+427c 6fe1097e fetch 2 ,mem_mesh_segmented_lower_transport_layer_segzero 
+427d 1ff27e00 lshift4 pdata ,pdata 
+427e 1fe3fe00 lshift pdata ,pdata 
+427f 68488980 fetcht 1 ,mem_mesh_segmented_lower_transport_layer_sego 
+4280 9841fe00 ior temp ,pdata 
+4281 1ff27e00 lshift4 pdata ,pdata 
+4282 1fe3fe00 lshift pdata ,pdata 
+4283 68488981 fetcht 1 ,mem_mesh_segmented_lower_transport_layer_segn 
+4284 9841fe00 ior temp ,pdata 
+4285 67e1c9a2 store 3 ,mem_mesh_segmented_access_lower_transport_layer_szmic_seqzero_sego_segn 
+4286 df200003 arg 3 ,loopcnt 
+4287 da2049a2 arg mem_mesh_segmented_access_lower_transport_layer_szmic_seqzero_sego_segn ,rega 
+4288 20207cb1 branch inverse_data 
+
+ali_mesh_upper_transport_layer_receive_new_msg_timer:
+4289 da6049b8 arg mem_mesh_upper_receive_new_message_timer ,regc 
+428a da40428c arg ali_mesh_upper_transport_layer_receive_new_msg_timeout ,regb 
+428b 202042e0 branch timer_single_step 
+
+ali_mesh_upper_transport_layer_receive_new_msg_timeout:
+428c df200028 arg 40 ,loopcnt 
+428d d8a0496a arg mem_mesh_access_message_mic_cache ,contw 
+428e 20207ca1 branch clear_mem 
+
+ali_mesh_upper_transport_layer_send_segmented_access_message_sub_segn_one:
+428f 184085ff increase -1 ,temp 
+4290 20600000 rtn 
+
+ali_mesh_upper_transport_layer_clear_tx_buffer:
+4291 20203b2a branch ali_mesh_stop_send_indication_packet 
+
+ali_mesh_upper_transport_layer_init_queue_param:
+4292 580049b9 setarg mem_mesh_upper_tran_layer_queue_each_size 
+4293 67e143fb store 2 ,mem_queue_ptr 
+4294 20600000 rtn 
+
+app_init:
+4295 44d8c016 bpatch patch16_1 ,mem_patch16 
+4296 6fe0c3cb fetch 1 ,mem_device_option 
+4297 203a4295 branch app_init ,blank 
+4298 c00247b7 beq dvc_op_dongle ,dongle_init 
+4299 c004e2ae beq dvc_op_shutter ,shutter_init 
+429a c0055099 beq dvc_op_module ,module_init 
+429b c00743b2 beq dvc_op_car ,car_init 
+429c c003646e beq dvc_op_shutter_dy ,shutter_dy_init 
+429d c006c672 beq dvc_op_remote_car ,remote_car_init 
+429e c007c959 beq dvc_op_keyboard ,keyboard_init 
+429f c0066882 beq dvc_op_hci_boot ,hci_init 
+42a0 c00453e0 beq dvc_op_mouse ,mouse_init 
+42a1 c005be02 beq dvc_op_mesh ,ali_mesh_init 
+42a2 20600000 rtn 
+
+app_param_init:
+42a3 20758000 rtn wake 
+42a4 20406f74 call adc_init_data 
+42a5 6fe0c3cb fetch 1 ,mem_device_option 
+42a6 c004e3d9 beq dvc_op_shutter ,shutter_default_init 
+42a7 c00363d9 beq dvc_op_shutter_dy ,shutter_default_init 
+42a8 c00247c2 beq dvc_op_dongle ,dongle_default_init 
+42a9 c0045428 beq dvc_op_mouse ,mouse_default_init 
+42aa c007d42c beq dvc_op_keyboard ,mouse_default_parm_init 
+42ab c006c772 beq dvc_op_remote_car ,remote_car_default_init 
+42ac 20600000 rtn 
+
+app_process_idle:
+42ad 20407774 call ui_dispatch 
+42ae 20407841 call check_51cmd 
+42af 204042b4 call app_process_bb_event 
+42b0 6fe143db fetch 2 ,mem_cb_idle_process 
+42b1 20207d79 branch callback_func 
+
+app_process_ble:
+42b2 6fe143d9 fetch 2 ,mem_cb_le_process 
+42b3 20207d79 branch callback_func 
+
+app_process_bb_event:
+42b4 44d94016 bpatch patch16_2 ,mem_patch16 
+42b5 da2044d3 arg mem_ipc_fifo_bt2c51 ,rega 
+42b6 20407d97 call fifo_out 
+42b7 207a0000 rtn blank 
+42b8 1fe22600 copy pdata ,regc 
+42b9 204042bd call app_event_normal_process 
+42ba 202042c1 branch app_process_bb_event_priority 
+
+app_discard_event:
+42bb da600000 arg 0 ,regc 
+42bc 20600000 rtn 
+
+app_event_normal_process:
+42bd c00842d0 beq bt_evt_button_long_pressed ,app_evt_button_long_pressed 
+42be c00a42c7 beq bt_evt_le_connected ,app_le_event_bb_connected 
+42bf c00ac2cb beq bt_evt_le_disconnected ,app_le_event_bb_disconn 
+42c0 20600000 rtn 
+
+app_process_bb_event_priority:
+42c1 6fe143dd fetch 2 ,mem_cb_bb_event_process 
+42c2 20207d79 branch callback_func 
+
+app_check_wake_lock:
+42c3 6fe143d3 fetch 2 ,mem_cb_check_wakelock 
+42c4 20207d79 branch callback_func 
+
+app_will_enter_lpm:
+42c5 6fe143d7 fetch 2 ,mem_cb_before_lpm 
+42c6 20207d79 branch callback_func 
+
+app_le_event_bb_connected:
+42c7 6fe144e9 fetch 2 ,mem_ui_state_map 
+42c8 79207e09 set1 ui_state_ble_connected ,pdata 
+42c9 67e144e9 store 2 ,mem_ui_state_map 
+42ca 20600000 rtn 
+
+app_le_event_bb_disconn:
+42cb 70439600 jam 0 ,mem_le_l2cap_att_states 
+42cc 6fe144e9 fetch 2 ,mem_ui_state_map 
+42cd 793ffe09 set0 ui_state_ble_connected ,pdata 
+42ce 67e144e9 store 2 ,mem_ui_state_map 
+42cf 2020432d branch app_lpm_mult_disable 
+
+app_evt_button_long_pressed:
+42d0 6fe143f1 fetch app_disc_rsn_size ,mem_app_disconn_reason_flag 
+42d1 79207e00 set1 app_disc_by_button ,pdata 
+42d2 67e143f1 store app_disc_rsn_size ,mem_app_disconn_reason_flag 
+42d3 20600000 rtn 
+
+app_evt_timer:
+42d4 67e0821d store 1 ,mem_app_evt_timer_count 
+
+app_evt_100ms_loop:
+42d5 44d9c016 bpatch patch16_3 ,mem_patch16 
+42d6 6fe0821d fetch 1 ,mem_app_evt_timer_count 
+42d7 207a0000 rtn blank 
+42d8 1fe0ffff increase -1 ,pdata 
+42d9 67e0821d store 1 ,mem_app_evt_timer_count 
+42da 20407780 call ui_button_polling 
+42db 2040430e call app_lpm_wake_auto_lock_timer 
+42dc 20406beb call flash_write_spi_sm_timer 
+42dd 6fe143e3 fetch 2 ,mem_cb_event_timer 
+42de 20407d79 call callback_func 
+42df 202042d5 branch app_evt_100ms_loop 
+
+timer_single_step:
+42e0 efe08013 ifetch 1 ,regc 
+42e1 207a0000 rtn blank 
+42e2 1fe0ffff pincrease -1 
+42e3 e7e08013 istore 1 ,regc 
+42e4 247a0000 nrtn blank 
+42e5 1a427e00 copy regb ,pdata 
+42e6 20207d79 branch callback_func 
+
+timer_single_step_2b:
+42e7 efe10013 ifetch 2 ,regc 
+42e8 207a0000 rtn blank 
+42e9 1fe0ffff pincrease -1 
+42ea e7e10013 istore 2 ,regc 
+42eb 247a0000 nrtn blank 
+42ec 1a427e00 copy regb ,pdata 
+42ed 20207d79 branch callback_func 
+
+app_power_timer:
+42ee 68494430 fetcht 2 ,mem_power_param_ptr 
+42ef 1840a601 add temp ,power_timer_offset ,regc 
+42f0 da4042f2 arg app_power_timer_timeout ,regb 
+42f1 202042e0 branch timer_single_step 
+
+app_power_timer_timeout:
+42f2 20404343 call app_got_power_state_common 
+42f3 c000c2f5 beq power_starting ,app_enter_power_stanby_state 
+
+app_enter_power_off_state:
+42f4 20204327 branch app_enter_hibernate 
+
+app_enter_power_stanby_state:
+42f5 58000002 setarg power_standby 
+42f6 e7e08013 istore 1 ,regc 
+42f7 1840a408 add temp ,power_standby_cb_offset ,regb 
+
+app_power_cb_common:
+42f8 efe10012 ifetch 2 ,regb 
+42f9 20207d79 branch callback_func 
+
+app_bb_hibernate:
+42fa 204042fc call app_disconn_reason_clear 
+42fb 20204327 branch app_enter_hibernate 
+
+app_disconn_reason_clear:
+42fc 58000000 setarg 0 
+42fd 67e143ef store app_disc_rsn_size ,mem_app_disconn_reason 
+42fe 20600000 rtn 
+
+app_disconn_reason_flag_clear:
+42ff 58000000 setarg 0 
+4300 67e143f1 store app_disc_rsn_size ,mem_app_disconn_reason_flag 
+4301 20600000 rtn 
+
+app_disconn_reason_collect_ble:
+4302 6fe143f1 fetch app_disc_rsn_size ,mem_app_disconn_reason_flag 
+4303 79207e07 set1 app_disc_ble ,pdata 
+4304 67e143ef store app_disc_rsn_size ,mem_app_disconn_reason 
+4305 58000000 setarg 0 
+4306 67e143f1 store app_disc_rsn_size ,mem_app_disconn_reason_flag 
+4307 20600000 rtn 
+
+app_get_lpm_wake_lock:
+4308 d8e00009 arg wake_lock_app ,queue 
+4309 202024e7 branch lpm_get_wake_lock 
+
+app_put_lpm_wake_lock:
+430a d8e00009 arg wake_lock_app ,queue 
+430b 202024eb branch lpm_put_wake_lock 
+
+app_lpm_wake_auto_lock:
+430c 7043ed05 jam lpm_wake_up_delay_timer ,mem_wake_up_delay_timer 
+430d 20204308 branch app_get_lpm_wake_lock 
+
+app_lpm_wake_auto_lock_timer:
+430e da6043ed arg mem_wake_up_delay_timer ,regc 
+430f da40430a arg app_put_lpm_wake_lock ,regb 
+4310 202042e0 branch timer_single_step 
+
+app_ble_start_direct_adv:
+4311 70066f0f jam bt_cmd_start_direct_adv ,mem_fifo_temp 
+4312 20207834 branch ui_ipc_send_cmd 
+
+app_ble_stop_direct_adv:
+4313 70066f10 jam bt_cmd_stop_direct_adv ,mem_fifo_temp 
+4314 20207834 branch ui_ipc_send_cmd 
+
+app_ble_stop_adv:
+4315 70066f0e jam bt_cmd_stop_adv ,mem_fifo_temp 
+4316 20207834 branch ui_ipc_send_cmd 
+
+app_ble_start_adv:
+4317 70066f0d jam bt_cmd_start_adv ,mem_fifo_temp 
+4318 20207834 branch ui_ipc_send_cmd 
+
+app_ble_start_scan:
+4319 70066f17 jam bt_cmd_le_start_scan ,mem_fifo_temp 
+431a 20207834 branch ui_ipc_send_cmd 
+
+app_ble_stop_scan:
+431b 70066f18 jam bt_cmd_le_stop_scan ,mem_fifo_temp 
+431c 20207834 branch ui_ipc_send_cmd 
+
+app_ble_start_conn:
+431d 70066f16 jam bt_cmd_le_start_conn ,mem_fifo_temp 
+431e 20207834 branch ui_ipc_send_cmd 
+
+app_ble_disconnect:
+431f 70066f11 jam bt_cmd_le_disconnect ,mem_fifo_temp 
+4320 20207834 branch ui_ipc_send_cmd 
+
+app_led_start_blink:
+4321 70066f15 jam bt_cmd_led_blink ,mem_fifo_temp 
+4322 20207834 branch ui_ipc_send_cmd 
+
+app_led_on:
+4323 70066f14 jam bt_cmd_led_on ,mem_fifo_temp 
+4324 20207834 branch ui_ipc_send_cmd 
+
+app_led_stop_blink:
+
+app_led_off:
+4325 70066f13 jam bt_cmd_led_off ,mem_fifo_temp 
+4326 20207834 branch ui_ipc_send_cmd 
+
+app_enter_hibernate:
+4327 70066f19 jam bt_cmd_enter_hibernate ,mem_fifo_temp 
+4328 20207834 branch ui_ipc_send_cmd 
+
+app_ble_store_reconn_info:
+4329 70066f1f jam bt_cmd_store_reconn_info_le ,mem_fifo_temp 
+432a 20207834 branch ui_ipc_send_cmd 
+
+app_lpm_mult_enable:
+432b 7920000d set1 mark_lpm_mult_enable ,mark 
+432c 20600000 rtn 
+
+app_lpm_mult_disable:
+432d 793f800d set0 mark_lpm_mult_enable ,mark 
+432e 20600000 rtn 
+
+app_button_long_pressed:
+432f 20404343 call app_got_power_state_common 
+4330 c0014339 beq power_standby ,app_power_shutting_down 
+
+app_power_starting:
+4331 58000001 setarg power_starting 
+4332 e7e08013 istore 1 ,regc 
+4333 1840a203 add temp ,power_starting_timeout_offset ,rega 
+4334 1840a406 add temp ,power_starting_cb_offset ,regb 
+
+app_power_common:
+4335 e8408011 ifetcht 1 ,rega 
+4336 1a60a601 increase 1 ,regc 
+4337 e0408013 istoret 1 ,regc 
+4338 202042f8 branch app_power_cb_common 
+
+app_power_shutting_down:
+4339 58000000 setarg power_off 
+433a e7e08013 istore 1 ,regc 
+433b 6fe144e9 fetch 2 ,mem_ui_state_map 
+433c c304c33f bbit0 ui_state_ble_connected ,app_power_off_end 
+433d 204030c5 call le_send_terminate_ind_user_terminated 
+433e 2040431f call app_ble_disconnect 
+
+app_power_off_end:
+433f 68494430 fetcht 2 ,mem_power_param_ptr 
+4340 1840a202 add temp ,power_off_timeout_offset ,rega 
+4341 1840a404 add temp ,power_off_cb_offset ,regb 
+4342 20204335 branch app_power_common 
+
+app_got_power_state_common:
+4343 68494430 fetcht 2 ,mem_power_param_ptr 
+4344 1840a600 add temp ,power_state_offset ,regc 
+4345 efe08013 ifetch 1 ,regc 
+4346 20600000 rtn 
+
+app_event_button_up:
+4347 20404343 call app_got_power_state_common 
+4348 c080434a bne power_off ,app_power_release 
+4349 20204327 branch app_enter_hibernate 
+
+app_power_release:
+434a 1840a40a add temp ,ui_butten_up_cb_offset ,regb 
+434b 202042f8 branch app_power_cb_common 
+
+adpcm_decode:
+434c 6fe44ceb fetch 8 ,mem_ad_state_valpred 
+434d 67e44cfe store 8 ,mem_ad_valpred 
+434e 704d0e00 jam 0 ,mem_ad_bufferstep 
+434f 6fe0cd02 fetch 1 ,mem_ad_index 
+4350 1febfe00 lshift2 pdata ,pdata 
+4351 d8404b87 arg mem_ad_stepsizetable ,temp 
+4352 98408400 iadd temp ,temp 
+4353 efe20002 ifetch 4 ,temp 
+4354 67e24cfa store 4 ,mem_ad_step 
+
+adpcm_decode_loop:
+4355 6fe0cd0e fetch 1 ,mem_ad_bufferstep 
+4356 243a435f nbranch adpcm_next_byte ,blank 
+4357 68494cf4 fetcht 2 ,mem_ad_in_ptr 
+4358 efe08002 ifetch 1 ,temp 
+4359 67e0cd0a store 1 ,mem_ad_inputbuffer 
+435a 18408401 increase 1 ,temp 
+435b 60494cf4 storet 2 ,mem_ad_in_ptr 
+435c 1ff1fe00 rshift4 pdata ,pdata 
+435d 67e0ccf9 store 1 ,mem_ad_delta 
+435e 20204362 branch adpcm_cal 
+
+adpcm_next_byte:
+435f 6fe0cd0a fetch 1 ,mem_ad_inputbuffer 
+4360 1fe17e0f and pdata ,0x0f ,pdata 
+4361 67e0ccf9 store 1 ,mem_ad_delta 
+
+adpcm_cal:
+4362 6fe0cd0e fetch 1 ,mem_ad_bufferstep 
+4363 79407e00 setflip 0 ,pdata 
+4364 67e0cd0e store 1 ,mem_ad_bufferstep 
+4365 d8404b77 arg mem_ad_indextable ,temp 
+4366 6fe0ccf9 fetch 1 ,mem_ad_delta 
+4367 98408400 iadd temp ,temp 
+4368 efe08002 ifetch 1 ,temp 
+4369 6848cd02 fetcht 1 ,mem_ad_index 
+436a 2040439a call adpcm_cal_index 
+436b 67e0cd02 store 1 ,mem_ad_index 
+436c 6fe0ccf9 fetch 1 ,mem_ad_delta 
+436d 1fe10408 and pdata ,0x08 ,temp 
+436e 6048ccf8 storet 1 ,mem_ad_sign 
+436f 1fe10407 and pdata ,0x07 ,temp 
+4370 6048ccf9 storet 1 ,mem_ad_delta 
+4371 204043a3 call adpcm_cal_vpdiff 
+4372 604a4d06 storet 4 ,mem_ad_vpdiff 
+4373 6fe0ccf8 fetch 1 ,mem_ad_sign 
+4374 203a4379 branch adpcm_cal_valpred ,blank 
+4375 6fe24cfe fetch 4 ,mem_ad_valpred 
+4376 684a4d06 fetcht 4 ,mem_ad_vpdiff 
+4377 98467e00 isub temp ,pdata 
+4378 2020437c branch adpcm_cal_valpred_end 
+
+adpcm_cal_valpred:
+4379 6fe24cfe fetch 4 ,mem_ad_valpred 
+437a 684a4d06 fetcht 4 ,mem_ad_vpdiff 
+437b 9840fe00 iadd temp ,pdata 
+
+adpcm_cal_valpred_end:
+437c 67e24cfe store 4 ,mem_ad_valpred 
+437d d8407fff arg 32767 ,temp 
+437e 98467e00 isub temp ,pdata 
+437f c28fc382 bbit1 31 ,adpcm_cal_valpred_overflow 
+4380 604a4cfe storet 4 ,mem_ad_valpred 
+4381 20204388 branch adpcm_cal_valpred_overflow_end 
+
+adpcm_cal_valpred_overflow:
+4382 6fe24cfe fetch 4 ,mem_ad_valpred 
+4383 d8408000 arg 32768 ,temp 
+4384 9840fe00 iadd temp ,pdata 
+4385 c30fc388 bbit0 31 ,adpcm_cal_valpred_overflow_end 
+4386 d85f8000 arg -32768 ,temp 
+4387 604a4cfe storet 4 ,mem_ad_valpred 
+
+adpcm_cal_valpred_overflow_end:
+4388 6fe0cd02 fetch 1 ,mem_ad_index 
+4389 1febfe00 lshift2 pdata ,pdata 
+438a d8404b87 arg mem_ad_stepsizetable ,temp 
+438b 98408400 iadd temp ,temp 
+438c efe20002 ifetch 4 ,temp 
+438d 67e24cfa store 4 ,mem_ad_step 
+438e 6fe14cf6 fetch 2 ,mem_ad_out_ptr 
+438f 68494cfe fetcht 2 ,mem_ad_valpred 
+4390 e041003f istoret 2 ,pdata 
+4391 1fe0fe02 increase 2 ,pdata 
+4392 67e14cf6 store 2 ,mem_ad_out_ptr 
+4393 6fe0ccf3 fetch 1 ,mem_ad_in_numsamples 
+4394 1fe0ffff increase -1 ,pdata 
+4395 67e0ccf3 store 1 ,mem_ad_in_numsamples 
+4396 243a4355 nbranch adpcm_decode_loop ,blank 
+4397 6fe44cfe fetch 8 ,mem_ad_valpred 
+4398 67e44ceb store 8 ,mem_ad_state_valpred 
+4399 20600000 rtn 
+
+adpcm_cal_index:
+439a 9840fe00 iadd temp ,pdata 
+439b c303c39e bbit0 7 ,adpcm_cal_bigger_zero 
+439c 58000000 setarg 0 
+439d 20600000 rtn 
+
+adpcm_cal_bigger_zero:
+439e 1fe17eff and pdata ,0xff ,pdata 
+439f 1fe67c58 sub pdata ,88 ,null 
+43a0 20610000 rtn positive 
+43a1 58000058 setarg 88 
+43a2 20600000 rtn 
+
+adpcm_cal_vpdiff:
+43a3 6a224cfa fetchr rega ,4 ,mem_ad_step 
+43a4 1a290400 rshift3 rega ,temp 
+43a5 6fe0ccf9 fetch 1 ,mem_ad_delta 
+43a6 c30143a9 bbit0 2 ,adpcm_cal_vpdiff1 
+43a7 1a227e00 copy rega ,pdata 
+43a8 98408400 iadd temp ,temp 
+
+adpcm_cal_vpdiff1:
+43a9 6fe0ccf9 fetch 1 ,mem_ad_delta 
+43aa c300c3ad bbit0 1 ,adpcm_cal_vpdiff2 
+43ab 1a237e00 rshift rega ,pdata 
+43ac 98408400 iadd temp ,temp 
+
+adpcm_cal_vpdiff2:
+43ad 6fe0ccf9 fetch 1 ,mem_ad_delta 
+43ae c4000000 rtnbit0 0 
+43af 1a2b7e00 rshift2 rega ,pdata 
+43b0 98408400 iadd temp ,temp 
+43b1 20600000 rtn 
+
+car_init:
+43b2 20407396 call enable_authrom 
+43b3 20758000 rtn wake 
+43b4 580045be setarg car_g24_receive_process 
+43b5 67e145e0 store 2 ,mem_cb_24g_receive_process 
+43b6 5800330a setarg g24_bind_ackpayload_prep 
+43b7 67e145e2 store 2 ,mem_cb_24g_ackpayload 
+43b8 5800465e setarg car_g24_cb_data_device1 
+43b9 67e145e4 store 2 ,mem_cb_24g_data_device1 
+43ba 5800442e setarg car_le_before_hibernate 
+43bb 67e143d5 store 2 ,mem_cb_before_hibernate 
+43bc 58004430 setarg car_le_process_lpm_before 
+43bd 67e143d7 store 2 ,mem_cb_before_lpm 
+43be 58004455 setarg car_scale_process_idle 
+43bf 67e143db store 2 ,mem_cb_idle_process 
+43c0 58004476 setarg car_scale_process_bb_event 
+43c1 67e143dd store 2 ,mem_cb_bb_event_process 
+43c2 58004308 setarg app_get_lpm_wake_lock 
+43c3 67e143d3 store 2 ,mem_cb_check_wakelock 
+43c4 580044d1 setarg car_le_receive_data 
+43c5 67e143df store 2 ,mem_cb_att_write 
+43c6 58004494 setarg car_le_bb_event_timer 
+43c7 67e143e3 store 2 ,mem_cb_event_timer 
+43c8 44974005 bpatch patch05_6 ,mem_patch05 
+43c9 20404412 call car_init_environment 
+43ca 20404463 call car_lpm_timer_enable 
+43cb 204078ad call queue_init 
+43cc 7040c002 jam 2 ,mem_lpm_mult 
+43cd 7049b700 jam power_on ,mem_car_24g_received_pac 
+43ce 6fe0c779 fetch 1 ,mem_car_config_soft_switch_enable 
+43cf 67e0c648 store 1 ,mem_car_hard_soft_switch 
+43d0 c00043db beq hard_switch ,car_hard_switch_power_on_signal 
+43d1 6fe0c77a fetch 1 ,mem_car_config_soft_switch_gpio 
+43d2 67e0c4ec store 1 ,mem_ui_button_gpio 
+43d3 70438800 jam off ,mem_le_adv_enable 
+
+car_soft_switch_power_on_init:
+43d4 20407776 call ui_button_init 
+43d5 20407780 call ui_button_polling 
+43d6 7047a101 jam power_starting ,mem_car_power_state 
+43d7 6fe144e9 fetch 2 ,mem_ui_state_map 
+43d8 c3860000 rtnbit1 ui_state_btn_down 
+43d9 20204327 branch app_enter_hibernate 
+
+car_power_off_signal:
+43da 202043f9 branch car_ui_led_init 
+
+car_hard_switch_power_on_signal:
+43db 7047a102 jam power_standby ,mem_car_power_state 
+
+car_soft_switch_power_on_signal:
+43dc 70438801 jam on ,mem_le_adv_enable 
+43dd 58000020 setarg fast_adv_interval_value_car 
+43de 204063c7 call shutter_ble_adv_interval_set 
+
+car_le_modified_name_adv:
+43df d8a04273 arg mem_le_name + 7 ,contw 
+43e0 6fe0c2db fetch 1 ,mem_le_lap 
+
+car_name_loop:
+43e1 1fe104f0 and pdata ,0xF0 ,temp 
+43e2 18518400 rshift4 temp ,temp 
+43e3 204043f3 call car_hex_to_ascii 
+43e4 e0408005 istoret 1 ,contw 
+43e5 1fe1040f and pdata ,0x0F ,temp 
+43e6 204043f3 call car_hex_to_ascii 
+43e7 e0408005 istoret 1 ,contw 
+43e8 20402955 call le_modified_name_att_list 
+43e9 6848c26b fetcht 1 ,mem_le_name_len 
+43ea 18427200 copy temp ,loopcnt 
+43eb d8a0434b arg mem_le_adv_data + 2 ,contw 
+43ec d8c0426c arg mem_le_name ,contr 
+43ed 20407cda call memcpy 
+
+car_le_modified_name_scan:
+43ee 6848c26b fetcht 1 ,mem_le_name_len 
+43ef 18427200 copy temp ,loopcnt 
+43f0 d8a0436b arg mem_le_scan_data + 2 ,contw 
+43f1 d8c0426c arg mem_le_name ,contr 
+43f2 20207cda branch memcpy 
+
+car_hex_to_ascii:
+43f3 18467c09 sub temp ,9 ,null 
+43f4 202143f7 branch car_hex_num ,positive 
+43f5 18408437 add temp ,55 ,temp 
+43f6 20600000 rtn 
+
+car_hex_num:
+43f7 18408430 add temp ,48 ,temp 
+43f8 20600000 rtn 
+
+car_ui_led_init:
+43f9 6fe0c76e fetch 1 ,mem_car_config_blood_led1_gpio 
+43fa c0ffc40b bne invalid_pin_num ,car_blood_led_gpio_set 
+
+car_ui_led_init_1:
+43fb 6fe0c76c fetch 1 ,mem_car_config_pairing_led_gpio 
+43fc c0ffc40e bne invalid_pin_num ,car_pairing_led_gpio_set 
+
+car_ui_led_init_2:
+43fd 6fe0c777 fetch 1 ,mem_car_config_low_voltage_led_gpio 
+43fe c0ffc410 bne invalid_pin_num ,car_low_voltage_led_gpio_set 
+
+car_ui_led_init_3:
+43ff 6fe0c6da fetch 1 ,mem_car_led_num 
+4400 1fe27200 copy pdata ,loopcnt 
+4401 580046db setarg mem_car_led_map 
+4402 1fe22200 copy pdata ,rega 
+
+car_in_lp1:
+4403 1a220c00 copy rega ,contr 
+4404 efe08006 ifetch 1 ,contr 
+4405 18c22200 copy contr ,rega 
+4406 c07fc409 beq invalid_pin_num ,car_in_lp1_end 
+4407 1fe20400 copy pdata ,temp 
+4408 20406ef7 call gpio_config_output 
+
+car_in_lp1_end:
+4409 c2004403 loop car_in_lp1 
+
+car_ui_led_init_end:
+440a 20600000 rtn 
+
+car_blood_led_gpio_set:
+440b 6fe4476e fetch 8 ,mem_car_config_blood_led1_gpio 
+440c 67e446dd store 8 ,mem_car_led_map + 2 
+440d 202043fb branch car_ui_led_init_1 
+
+car_pairing_led_gpio_set:
+440e 67e0c6db store 1 ,mem_car_led_map 
+440f 202043fd branch car_ui_led_init_2 
+
+car_low_voltage_led_gpio_set:
+4410 67e0c6dc store 1 ,mem_car_led_map + 1 
+4411 202043ff branch car_ui_led_init_3 
+
+car_init_environment:
+4412 204045ba call car_g24_init 
+4413 20404640 call car_g24_load_commom_addr 
+4414 da200000 arg 0 ,rega 
+4415 20407055 call pwm_init 
+4416 204043f9 call car_ui_led_init 
+4417 2040446b call car_start_blink 
+4418 2040442c call car_init_adc_hvin 
+4419 2020441b branch car_motor_init 
+
+car_read_otp_addr:
+441a 20600000 rtn 
+
+car_motor_init:
+441b 6fe0c9a4 fetch 1 ,mem_car_motor_gpio_num 
+441c 1fe27200 copy pdata ,loopcnt 
+441d 580049a5 setarg mem_car_motor_gpio_map 
+441e 1fe22200 copy pdata ,rega 
+
+p_in_lp1:
+441f 1a220c00 copy rega ,contr 
+4420 efe08006 ifetch 1 ,contr 
+4421 18c22200 copy contr ,rega 
+4422 c07fc426 beq invalid_pin_num ,p_in_lp1_end 
+4423 1fe20400 copy pdata ,temp 
+4424 67e0c9a9 store 1 ,mem_car_gpio 
+4425 20404428 call car_ui_gpio_init 
+
+p_in_lp1_end:
+4426 c200441f loop p_in_lp1 
+
+p_car_ui_led_init_end:
+4427 20600000 rtn 
+
+car_ui_gpio_init:
+4428 6fe0c9a9 fetch 1 ,mem_car_gpio 
+4429 c17f8000 rtneq ui_button_gpio_disable 
+442a 98000400 iforce temp 
+442b 20206ef7 branch gpio_config_output 
+
+car_init_adc_hvin:
+442c 70477d64 jam 100 ,mem_car_notify_vdd_value_last 
+442d 20600000 rtn 
+
+car_le_before_hibernate:
+442e 20404431 call car_gpio_set_before_hibernate 
+442f 20407de2 call clear_wake 
+
+car_le_process_lpm_before:
+4430 2020701b branch keyscan_process_lpm_before 
+
+car_gpio_set_before_hibernate:
+4431 2040788b call check_51cmd_led_off 
+
+car_gpio_set_before_lpm_common:
+4432 df200010 arg gpio_number ,loopcnt 
+4433 d8c08070 arg core_gpio_conf ,contr 
+
+car_setgpio_loop:
+4434 18c20a00 copy contr ,contw 
+4435 efe08006 ifetch 1 ,contr 
+4436 c00fc445 beq gpcfg_spid_miso ,car_setgpio_pullup 
+4437 c0104445 beq gpcfg_spid_ncs ,car_setgpio_pullup 
+4438 c010c445 beq gpcfg_spid_sck ,car_setgpio_pullup 
+4439 c0114445 beq gpcfg_spid_mosi ,car_setgpio_pullup 
+443a c011c445 beq gpcfg_spid_sdio ,car_setgpio_pullup 
+443b c0164445 beq gpcfg_iic_scl ,car_setgpio_pullup 
+443c c016c445 beq gpcfg_iic_sda ,car_setgpio_pullup 
+443d c0004445 beq gpcfg_input ,car_setgpio_pullup 
+
+car_setgpio_loop_end:
+443e c2004434 loop car_setgpio_loop 
+443f dfe080dc arg core_gpio_conf_hi + gpio_number_ext ,pdata 
+4440 98c67c00 isub contr ,null 
+4441 2022c44b branch car_motor_setgpio ,zero 
+
+car_setgpio_loop_ext:
+4442 df200008 arg gpio_number_ext ,loopcnt 
+4443 d8c080d4 arg core_gpio_conf_hi ,contr 
+4444 20204434 branch car_setgpio_loop 
+
+car_setgpio_pullup:
+4445 58000040 setarg gpcfg_pullup 
+4446 e7e08005 istore 1 ,contw 
+4447 2020443e branch car_setgpio_loop_end 
+
+car_setgpio_pulldown:
+4448 58000080 setarg gpcfg_pulldown 
+4449 e7e08005 istore 1 ,contw 
+444a 2020443e branch car_setgpio_loop_end 
+
+car_motor_setgpio:
+444b 6fe0c9a4 fetch 1 ,mem_car_motor_gpio_num 
+444c 1fe27200 copy pdata ,loopcnt 
+444d d8c049a5 arg mem_car_motor_gpio_map ,contr 
+
+car_motor_setgpio_loop:
+444e efe08006 ifetch 1 ,contr 
+444f 79207e07 set1 7 ,pdata 
+4450 d840003e arg gpcfg_output_low ,temp 
+4451 20406f20 call gpio_config_function 
+4452 c200444e loop car_motor_setgpio_loop 
+4453 20600000 rtn 
+
+car_key_scan_process:
+4454 20207027 branch keyscan_key_process 
+
+car_scale_process_idle:
+4455 2040446d call car_le_send_packet 
+4456 20404458 call car_g24_status_process 
+4457 20204454 branch car_key_scan_process 
+
+car_g24_status_process:
+4458 6fe144e9 fetch 2 ,mem_ui_state_map 
+4459 c3848000 rtnbit1 ui_state_ble_connected 
+445a 6fe0c9b7 fetch 1 ,mem_car_24g_received_pac 
+445b c000c45d beq work_paired ,car_g24_connected_event 
+445c 20600000 rtn 
+
+car_g24_connected_event:
+445d 6fe0c798 fetch 1 ,mem_car_24g_status 
+445e c1008000 rtneq work_paired 
+445f 70479801 jam work_paired ,mem_car_24g_status 
+4460 20404467 call car_lpm_timer_disable 
+4461 20404469 call car_stop_blink 
+4462 20204480 branch car_g24_connected 
+
+car_lpm_timer_enable:
+4463 6fe149bc fetch 2 ,mem_car_enter_lpm_timer_count 
+4464 67e149be store 2 ,mem_car_enter_lpm_timer 
+4465 7049c000 jam 0 ,mem_car_enter_lpm_flag 
+4466 20600000 rtn 
+
+car_lpm_timer_disable:
+4467 58000000 setarg 0 
+4468 20204464 branch car_lpm_timer_enable + 1 
+
+car_stop_blink:
+4469 da200000 arg 0 ,rega 
+446a 202077bf branch ui_led_blink_stop_global 
+
+car_start_blink:
+446b da200000 arg 0 ,rega 
+446c 202077c4 branch ui_led_blink_start_global 
+
+car_le_send_packet:
+446d 6fe144e9 fetch 2 ,mem_ui_state_map 
+446e c4048000 rtnbit0 ui_state_ble_connected 
+446f 20402a28 call le_fifo_check_nearly_full 
+4470 247a0000 nrtn blank 
+4471 da2046c6 arg mem_car_pop_queue_buff ,rega 
+4472 204078ca call queue_pop 
+4473 24740000 nrtn user 
+4474 d8c046c6 arg mem_car_pop_queue_buff ,contr 
+4475 202063cb branch le_send_notify_from_list 
+
+car_scale_process_bb_event:
+4476 1a627e00 copy regc ,pdata 
+4477 c016c347 beq bt_evt_button_up ,app_event_button_up 
+4478 c008432f beq bt_evt_button_long_pressed ,app_button_long_pressed 
+4479 c00a447c beq bt_evt_le_connected ,car_scale_event_le_conn 
+447a c00ac486 beq bt_evt_le_disconnected ,car_scale_event_le_discon 
+447b 20600000 rtn 
+
+car_scale_event_le_conn:
+447c 20404467 call car_lpm_timer_disable 
+447d 20404469 call car_stop_blink 
+447e 793f8027 set0 mark_24g_rxmode ,mark 
+447f 20204482 branch car_scale_process_conn 
+
+car_g24_connected:
+4480 6fe14799 fetch 2 ,mem_car_24g_no_data_timeout_count 
+4481 67e1479b store 2 ,mem_car_24g_no_data_timeout_timer 
+
+car_scale_process_conn:
+4482 70477c14 jam 0x14 ,mem_car_notify_vdd_timer 
+4483 70409400 jam 0 ,mem_lpm_mode 
+4484 20404315 call app_ble_stop_adv 
+4485 2020432b branch app_lpm_mult_enable 
+
+car_scale_event_le_discon:
+4486 79200027 set1 mark_24g_rxmode ,mark 
+4487 20404463 call car_lpm_timer_enable 
+4488 2040456e call car_fb_motor_stop 
+4489 20404562 call car_lr_motor_stop 
+
+car_g24_disconnect:
+448a 58000000 setarg 0 
+448b 67e2c74a store 5 ,mem_car_led_control 
+448c 204078ad call queue_init 
+448d 70470c0a jam 10 ,mem_motor1_speed 
+448e 70470e0a jam 10 ,mem_motor2_speed 
+448f 7047100a jam 10 ,mem_motor3_speed 
+4490 7040c002 jam 2 ,mem_lpm_mult 
+4491 58000020 setarg fast_adv_interval_value_car 
+4492 204063c7 call shutter_ble_adv_interval_set 
+4493 20204317 branch app_ble_start_adv 
+
+car_le_bb_event_timer:
+4494 2040450f call car_moto1_blank_data_timer 
+4495 20404512 call car_moto2_blank_data_timer 
+4496 20404515 call car_moto3_blank_data_timer 
+4497 204044a1 call car_24g_no_data_timeout_timer 
+4498 20204499 branch car_24g_bind_enable_timer 
+
+car_24g_bind_enable_timer:
+4499 da6049b8 arg mem_car_24g_bind_enable_delay_count ,regc 
+449a da400000 arg 0 ,regb 
+449b 202042e0 branch timer_single_step 
+
+car_enter_lpm_timer:
+449c da6049be arg mem_car_enter_lpm_timer ,regc 
+449d da40449f arg car_enter_lpm_enable ,regb 
+449e 202042e7 branch timer_single_step_2b 
+
+car_enter_lpm_enable:
+449f 7049c001 jam 1 ,mem_car_enter_lpm_flag 
+44a0 20600000 rtn 
+
+car_24g_no_data_timeout_timer:
+44a1 da60479b arg mem_car_24g_no_data_timeout_timer ,regc 
+44a2 da4044a4 arg car_24g_no_data_timer_timeout ,regb 
+44a3 202042e7 branch timer_single_step_2b 
+
+car_24g_no_data_timer_timeout:
+44a4 70479802 jam work_search ,mem_car_24g_status 
+44a5 7049b700 jam power_on ,mem_car_24g_received_pac 
+44a6 2020448a branch car_g24_disconnect 
+
+car_notify_vdd_timer:
+44a7 6fe0c776 fetch 1 ,mem_car_config_bat_notify_enable 
+44a8 207a0000 rtn blank 
+44a9 da60477c arg mem_car_notify_vdd_timer ,regc 
+44aa da4044ac arg car_notify_vdd ,regb 
+44ab 202042e0 branch timer_single_step 
+
+car_notify_vdd:
+44ac 6fe0c77b fetch 1 ,mem_car_notify_vdd_count 
+44ad 67e0c77c store 1 ,mem_car_notify_vdd_timer 
+44ae 6fe0c77f fetch 1 ,mem_car_working_flag 
+44af 247a0000 nrtn blank 
+
+car_read_hvin:
+44b0 20406fb0 call vdd_calculate_by_mode 
+44b1 67e14796 store 2 ,mem_vdd_now_vol 
+44b2 da204790 arg mem_vdd_calculate_set ,rega 
+44b3 20406fd7 call adc_bat_percent_lowpower_out 
+44b4 6848c77d fetcht 1 ,mem_car_notify_vdd_value_last 
+44b5 98467c00 isub temp ,null 
+44b6 202144b9 branch car_notify_vdd_next2 ,positive 
+44b7 67e0c77d store 1 ,mem_car_notify_vdd_value_last 
+44b8 1fe20400 copy pdata ,temp 
+
+car_notify_vdd_next2:
+44b9 6048c77e storet 1 ,mem_car_notify_vdd_percent 
+44ba 6fe0c778 fetch 1 ,mem_car_config_low_voltage_percent 
+44bb 98467c00 isub temp ,null 
+44bc 204144c4 call car_enter_low_bat ,positive 
+44bd 6048c789 storet 1 ,mem_notify_bat_payload 
+44be df200006 arg 6 ,loopcnt 
+44bf d8c04784 arg mem_notify_bat_head ,contr 
+44c0 204044cb call calc_check_sum_start 
+44c1 67e0c78a store 1 ,mem_notify_bat_check_sum 
+44c2 da204781 arg mem_notify_bat_packet ,rega 
+44c3 202078b2 branch queue_push 
+
+car_enter_low_bat:
+44c4 6fe0c780 fetch 1 ,mem_low_bat_flag 
+44c5 247a0000 nrtn blank 
+44c6 70478001 jam 1 ,mem_low_bat_flag 
+44c7 da200001 arg 1 ,rega 
+44c8 202077c4 branch ui_led_blink_start_global 
+
+car_low_bat_led_off:
+44c9 da200001 arg 1 ,rega 
+44ca 202077bf branch ui_led_blink_stop_global 
+
+calc_check_sum_start:
+44cb da200000 arg 0 ,rega 
+
+calc_check_sum_loop:
+44cc efe08006 ifetch 1 ,contr 
+44cd 9a20a200 iadd rega ,rega 
+44ce c20044cc loop calc_check_sum_loop 
+
+calc_check_sum_and:
+44cf 1a217eff and rega ,0xff ,pdata 
+44d0 20600000 rtn 
+
+car_le_receive_data:
+44d1 6fe0c397 fetch 1 ,mem_le_att_opcode 
+44d2 c00944d4 beq attop_write_request ,car_le_parse_att_write_request 
+44d3 20600000 rtn 
+
+car_le_parse_att_write_request:
+44d4 6fe14398 fetch 2 ,mem_le_att_handle 
+44d5 c00cc4eb beq att_car_control_handle ,car_control_le_receive 
+44d6 20600000 rtn 
+
+le_app_receive_data:
+44d7 4497c005 bpatch patch05_7 ,mem_patch05 
+44d8 efe28011 ifetch 5 ,rega 
+44d9 67e286f1 store 5 ,mem_app_receive_temp 
+44da 6fe106f1 fetch 2 ,mem_app_receive_temp 
+44db d8406b5a arg le_receive_packet_head ,temp 
+44dc 98467c00 isub temp ,null 
+44dd 24628000 nrtn zero 
+44de 6fe106f4 fetch 2 ,mem_app_receive_temp + 3 
+44df 1ff0fe00 byteswap pdata ,pdata 
+44e0 67e106f4 store 2 ,mem_app_receive_temp + 3 
+44e1 1fe27200 copy pdata ,loopcnt 
+44e2 1a20a205 increase 5 ,rega 
+44e3 1a220c00 copy rega ,contr 
+44e4 d8a006f6 arg mem_app_receive_temp + 5 ,contw 
+44e5 20407cda call memcpy 
+44e6 efe08006 ifetch 1 ,contr 
+44e7 67e08700 store 1 ,mem_app_receive_temp + 15 
+44e8 da2006f3 arg mem_app_receive_temp + 2 ,rega 
+44e9 da4006f6 arg mem_app_receive_temp + 5 ,regb 
+44ea 20600000 rtn 
+
+car_control_le_receive:
+44eb 58000000 setarg 0 
+44ec 67e2c700 store 5 ,mem_le_receive_payload 
+44ed 67e2c705 store 5 ,mem_le_receive_payload + 5 
+44ee 204044d7 call le_app_receive_data 
+44ef 1a420c00 copy regb ,contr 
+44f0 d8a04700 arg mem_le_receive_payload ,contw 
+44f1 df20000a arg 10 ,loopcnt 
+44f2 20407cda call memcpy 
+
+car_receive_cmd_select:
+44f3 44984006 bpatch patch06_0 ,mem_patch06 
+44f4 efe08011 ifetch 1 ,rega 
+44f5 c001451e beq car_cmd_old_car_control ,car_drive_old 
+44f6 c001c533 beq car_cmd_old_speed_control ,car_speed_set_old 
+44f7 c002453a beq car_cmd_l_r_motor_control ,car_motor_control 
+44f8 c002c53a beq car_cmd_f_b_motor_control ,car_motor_control 
+44f9 c00345aa beq car_cmd_ir_control ,car_ir_data_rx_from_app 
+44fa c003c5ab beq car_cmd_led_control ,car_led_control_receive 
+44fb c00445ae beq car_cmd_device_info ,car_info_request 
+44fc 20600000 rtn 
+
+car_24g_receive_data:
+44fd 204044eb call car_control_le_receive 
+44fe 6fe086f3 fetch 1 ,mem_app_receive_temp + 2 
+44ff c0024502 beq car_cmd_l_r_motor_control ,car_24g_receive_data_next 
+4500 c002c502 beq car_cmd_f_b_motor_control ,car_24g_receive_data_next 
+4501 20600000 rtn 
+
+car_24g_receive_data_next:
+4502 6fe0c700 fetch 1 ,mem_le_receive_payload 
+4503 245a4509 ncall car_moto1_enable_blank_data_timer ,blank 
+4504 6fe0c702 fetch 1 ,mem_le_receive_payload + 2 
+4505 245a450b ncall car_moto2_enable_blank_data_timer ,blank 
+4506 6fe0c704 fetch 1 ,mem_le_receive_payload + 4 
+4507 245a450d ncall car_moto3_enable_blank_data_timer ,blank 
+4508 20600000 rtn 
+
+car_moto1_enable_blank_data_timer:
+4509 7049a105 jam 5 ,mem_car_moto1_blank_timer 
+450a 20600000 rtn 
+
+car_moto2_enable_blank_data_timer:
+450b 7049a205 jam 5 ,mem_car_moto2_blank_timer 
+450c 20600000 rtn 
+
+car_moto3_enable_blank_data_timer:
+450d 7049a305 jam 5 ,mem_car_moto3_blank_timer 
+450e 20600000 rtn 
+
+car_moto1_blank_data_timer:
+450f da6049a1 arg mem_car_moto1_blank_timer ,regc 
+4510 da404518 arg car_moto1_blank_data ,regb 
+4511 202042e0 branch timer_single_step 
+
+car_moto2_blank_data_timer:
+4512 da6049a2 arg mem_car_moto2_blank_timer ,regc 
+4513 da40451a arg car_moto2_blank_data ,regb 
+4514 202042e0 branch timer_single_step 
+
+car_moto3_blank_data_timer:
+4515 da6049a3 arg mem_car_moto3_blank_timer ,regc 
+4516 da40451c arg car_moto3_blank_data ,regb 
+4517 202042e0 branch timer_single_step 
+
+car_moto1_blank_data:
+4518 70470000 jam 0 ,mem_le_receive_payload 
+4519 2020453a branch car_motor_control 
+
+car_moto2_blank_data:
+451a 70470200 jam 0 ,mem_le_receive_payload + 2 
+451b 2020453a branch car_motor_control 
+
+car_moto3_blank_data:
+451c 70470400 jam 0 ,mem_le_receive_payload + 4 
+451d 2020453a branch car_motor_control 
+
+car_drive_old:
+451e 6fe0c700 fetch 1 ,mem_le_receive_payload 
+451f 67e0c70b store 1 ,mem_motor1_status 
+4520 6fe0c701 fetch 1 ,mem_le_receive_payload + 1 
+4521 67e0c70d store 1 ,mem_motor2_status 
+4522 20204544 branch car_motor_control_common 
+
+car_left_right_control_old:
+4523 6fe0c700 fetch 1 ,mem_le_receive_payload 
+4524 67e0c70d store 1 ,mem_motor2_status 
+4525 20204552 branch car_motor2_control 
+
+car_front_back_control_old:
+4526 6fe0c70c fetch 1 ,mem_motor1_speed 
+4527 2040452b call car_reset_old_speed 
+4528 6fe0c701 fetch 1 ,mem_le_receive_payload + 1 
+4529 67e0c70b store 1 ,mem_motor1_status 
+452a 20204550 branch car_motor1_control 
+
+car_reset_old_speed:
+452b c001452f beq speed_level_2 ,car_reset_old_speed2 
+452c c001c531 beq speed_level_3 ,car_reset_old_speed3 
+452d 67e0c70c store 1 ,mem_motor1_speed 
+452e 20600000 rtn 
+
+car_reset_old_speed2:
+452f 70470c05 jam speed_level_5 ,mem_motor1_speed 
+4530 20600000 rtn 
+
+car_reset_old_speed3:
+4531 70470c0a jam speed_level_10 ,mem_motor1_speed 
+4532 20600000 rtn 
+
+car_speed_set_old:
+4533 6fe0c700 fetch 1 ,mem_le_receive_payload 
+4534 2040452b call car_reset_old_speed 
+4535 6fe0c70c fetch 1 ,mem_motor1_speed 
+4536 2040459e call car_motor_speed_duty_setting 
+4537 204045a1 call car_motor_speed_duty_transform 
+4538 70067100 jam 0x00 ,mem_pdatatemp + 1 
+4539 2020707a branch pwm_duty_cycle_set 
+
+car_motor_control:
+453a 6fe0c79e fetch 1 ,mem_car_24g_go_die_flag 
+453b 247a0000 nrtn blank 
+453c 6fe34700 fetch 6 ,mem_le_receive_payload 
+453d 67e3470b store 6 ,mem_motor1_status 
+453e 6fe0c70c fetch 1 ,mem_motor1_speed 
+453f 6848c70e fetcht 1 ,mem_motor2_speed 
+4540 98417e00 iand temp ,pdata 
+4541 6848c710 fetcht 1 ,mem_motor3_speed 
+4542 98417e00 iand temp ,pdata 
+4543 205a4556 call car_motor_working_flag ,blank 
+
+car_motor_control_common:
+4544 4498c006 bpatch patch06_1 ,mem_patch06 
+4545 6fe144e9 fetch 2 ,mem_ui_state_map 
+4546 2feffe09 isolate1 ui_state_ble_connected ,pdata 
+4547 2440c463 ncall car_lpm_timer_enable ,true 
+4548 20404550 call car_motor1_control 
+4549 20404552 call car_motor2_control 
+454a 2020454b branch car_conn_led_state 
+
+car_conn_led_state:
+454b 6fe0c70b fetch 1 ,mem_motor1_status 
+454c 6848c70d fetcht 1 ,mem_motor2_status 
+454d 9840fe00 iadd temp ,pdata 
+454e 243a788d nbranch check_51cmd_led_on ,blank 
+454f 2020788b branch check_51cmd_led_off 
+
+car_motor1_control:
+4550 d8c0470b arg mem_motor1_status ,contr 
+4551 20204558 branch car_motor1_status_select 
+
+car_motor2_control:
+4552 d8c0470d arg mem_motor2_status ,contr 
+4553 2020455d branch car_motor2_status_select 
+
+car_motor3_control:
+4554 d8c0470f arg mem_motor3_status ,contr 
+4555 2020457a branch car_motor_status_select 
+
+car_motor_working_flag:
+4556 70477f00 jam 0 ,mem_car_working_flag 
+4557 20600000 rtn 
+
+car_motor1_status_select:
+4558 efe08006 ifetch 1 ,contr 
+4559 c0004562 beq turn_front ,car_lr_motor_stop 
+455a c000c566 beq turn_left ,car_lr_motor_left 
+455b c001456a beq turn_right ,car_lr_motor_right 
+455c 20600000 rtn 
+
+car_motor2_status_select:
+455d efe08006 ifetch 1 ,contr 
+455e c000456e beq motor_stop ,car_fb_motor_stop 
+455f c0014572 beq go_back ,car_fb_motor_front 
+4560 c000c576 beq go_front ,car_fb_motor_back 
+4561 20600000 rtn 
+
+car_lr_motor_stop:
+4562 6848c9a5 fetcht 1 ,mem_car_motor_left_gpio 
+4563 20406ef3 call gpio_out_inactive 
+4564 6848c9a6 fetcht 1 ,mem_car_motor_right_gpio 
+4565 20206ef3 branch gpio_out_inactive 
+
+car_lr_motor_left:
+4566 6848c9a5 fetcht 1 ,mem_car_motor_left_gpio 
+4567 20406ef7 call gpio_out_active 
+4568 6848c9a6 fetcht 1 ,mem_car_motor_right_gpio 
+4569 20206ef3 branch gpio_out_inactive 
+
+car_lr_motor_right:
+456a 6848c9a5 fetcht 1 ,mem_car_motor_left_gpio 
+456b 20406ef3 call gpio_out_inactive 
+456c 6848c9a6 fetcht 1 ,mem_car_motor_right_gpio 
+456d 20206ef7 branch gpio_out_active 
+
+car_fb_motor_stop:
+456e 6848c9a7 fetcht 1 ,mem_car_motor_front_gpio 
+456f 20406ef3 call gpio_out_inactive 
+4570 6848c9a8 fetcht 1 ,mem_car_motor_back_gpio 
+4571 20206ef3 branch gpio_out_inactive 
+
+car_fb_motor_front:
+4572 6848c9a7 fetcht 1 ,mem_car_motor_front_gpio 
+4573 20406ef7 call gpio_out_active 
+4574 6848c9a8 fetcht 1 ,mem_car_motor_back_gpio 
+4575 20206ef3 branch gpio_out_inactive 
+
+car_fb_motor_back:
+4576 6848c9a7 fetcht 1 ,mem_car_motor_front_gpio 
+4577 20406ef3 call gpio_out_inactive 
+4578 6848c9a8 fetcht 1 ,mem_car_motor_back_gpio 
+4579 20206ef7 branch gpio_out_active 
+
+car_motor_status_select:
+457a 44994006 bpatch patch06_2 ,mem_patch06 
+457b efe08006 ifetch 1 ,contr 
+457c c0004587 beq motor_stop ,car_motor_stop 
+457d c000c580 beq go_front ,car_motor_positive 
+457e c0014582 beq go_back ,car_motor_negative 
+457f 20600000 rtn 
+
+car_motor_positive:
+4580 70472900 jam 0 ,mem_motor_select_p_n 
+4581 20204583 branch car_motor_negative + 1 
+
+car_motor_negative:
+4582 70472901 jam 1 ,mem_motor_select_p_n 
+4583 efe08006 ifetch 1 ,contr 
+4584 67e0c72b store 1 ,mem_car_motor_speed 
+4585 efe40012 ifetch 8 ,regb 
+4586 2020458c branch car_motor_work 
+
+car_motor_stop:
+4587 efe08012 ifetch 1 ,regb 
+4588 204070bd call pwm_disable 
+4589 1a40a401 increase 1 ,regb 
+458a efe08012 ifetch 1 ,regb 
+458b 202070bd branch pwm_disable 
+
+car_motor_work:
+458c 67e4472c store 8 ,mem_motor_pwm_pin1_set 
+458d 70477f01 jam 1 ,mem_car_working_flag 
+458e 6fe0c729 fetch 1 ,mem_motor_select_p_n 
+458f c000459a beq 0 ,car_motor_select_positive 
+
+car_motor_select_negative:
+4590 6fe0c72d fetch 1 ,mem_motor_pwm_pin2_set 
+4591 67e0c72e store 1 ,mem_motor_pwm_pin_set 
+4592 6fe0c72c fetch 1 ,mem_motor_pwm_pin1_set 
+
+car_motor_work_next:
+4593 204070bd call pwm_disable 
+4594 6fe0c72b fetch 1 ,mem_car_motor_speed 
+4595 2040459e call car_motor_speed_duty_setting 
+4596 67e0c733 store 1 ,mem_motor_pwm_dute_set 
+4597 6fe3472e fetch 6 ,mem_motor_pwm_pin_set 
+4598 67e30670 store 6 ,mem_pdatatemp 
+4599 20207066 branch pwm_out_set 
+
+car_motor_select_positive:
+459a 6fe0c72c fetch 1 ,mem_motor_pwm_pin1_set 
+459b 67e0c72e store 1 ,mem_motor_pwm_pin_set 
+459c 6fe0c72d fetch 1 ,mem_motor_pwm_pin2_set 
+459d 20204593 branch car_motor_work_next 
+
+car_motor_speed_duty_setting:
+459e 1feffe05 mul32 pdata ,5 ,pdata 
+459f 1fe0fe32 add pdata ,50 ,pdata 
+45a0 20600000 rtn 
+
+car_motor_speed_duty_transform:
+45a1 d8402ee0 arg 12000 ,temp 
+45a2 984ffe00 imul32 temp ,pdata 
+45a3 1fe6fc64 div pdata ,100 
+45a4 20407d62 call wait_div_end 
+45a5 18078400 quotient temp 
+45a6 18422200 copy temp ,rega 
+45a7 58002ee0 setarg 12000 
+45a8 98462400 isub temp ,regb 
+45a9 20600000 rtn 
+
+car_ir_data_rx_from_app:
+45aa 20600000 rtn 
+
+car_led_control_receive:
+45ab 6fe44700 fetch 8 ,mem_le_receive_payload 
+45ac 67e4474a store 8 ,mem_car_led_control 
+45ad 20600000 rtn 
+
+car_info_request:
+45ae 6fe0c767 fetch 1 ,mem_car_config_device_select 
+45af 67e0c75d store 1 ,mem_car_info_request_payload 
+45b0 6fe0c768 fetch 1 ,mem_car_config_motor_layout 
+45b1 67e0c75e store 1 ,mem_car_info_request_payload + 1 
+45b2 6fe0c769 fetch 1 ,mem_car_config_ir_enable 
+45b3 67e0c75f store 1 ,mem_car_info_request_payload + 2 
+45b4 df20000d arg 13 ,loopcnt 
+45b5 d8c04758 arg mem_car_info_request_head ,contr 
+45b6 204044cb call calc_check_sum_start 
+45b7 67e0c765 store 1 ,mem_car_info_request_checksum 
+45b8 da204755 arg mem_car_info_request ,rega 
+45b9 202078b2 branch queue_push 
+
+car_g24_init:
+45ba 58000000 setarg 0 
+45bb 67e445d6 store 8 ,mem_24g_bind_payload 
+45bc 2040339f call g24_receive_init 
+45bd 20203402 branch g24_mode_switch_init 
+
+car_g24_receive_process:
+45be 204045c2 call car_g24_mode_switch 
+45bf 204045ca call car_g24_work_mode 
+45c0 2040460e call car_g24_bind_mode 
+45c1 20204665 branch car_g24_lpm_dipatch 
+
+car_g24_mode_switch:
+45c2 20403407 call g24_mode_switch_bind_work 
+
+car_g24_bind_mode_enable:
+45c3 6fe0c616 fetch 1 ,mem_24g_work_mode 
+45c4 c1808000 rtnne dongle_bind 
+45c5 6fe0c9b8 fetch 1 ,mem_car_24g_bind_enable_delay_count 
+45c6 243a3460 nbranch g24_switch_work_mode ,blank 
+45c7 6fe0c798 fetch 1 ,mem_car_24g_status 
+45c8 c0013460 beq work_search ,g24_switch_work_mode 
+45c9 20600000 rtn 
+
+car_g24_work_mode:
+45ca 6fe0c616 fetch 1 ,mem_24g_work_mode 
+45cb c1800000 rtnne dongle_work 
+45cc 204045d9 call car_g24_work_mode_start 
+45cd 2037c5d7 branch car_g24_ch_polling_clear ,user3 
+
+car_g24_receive_ch_polling:
+45ce 6fe0c9c0 fetch 1 ,mem_car_enter_lpm_flag 
+45cf 207a0000 rtn blank 
+45d0 6fe0c9c1 fetch 1 ,mem_car_24g_ch_polling 
+45d1 1fe0fe01 increase 1 ,pdata 
+45d2 67e0c9c1 store 1 ,mem_car_24g_ch_polling 
+45d3 c00245d7 beq 4 ,car_g24_ch_polling_clear 
+45d4 20403222 call g24_ch 
+45d5 204045ea call car_g24_receive_packet_start 
+45d6 2437c5ce nbranch car_g24_receive_ch_polling ,user3 
+
+car_g24_ch_polling_clear:
+45d7 7049c100 jam 0 ,mem_car_24g_ch_polling 
+45d8 20600000 rtn 
+
+car_g24_work_mode_start:
+45d9 6fe0c616 fetch 1 ,mem_24g_work_mode 
+45da c1800000 rtnne dongle_work 
+45db 204045de call car_g24_work_init 
+45dc 20403518 call g24_ch_process 
+45dd 202045ea branch car_g24_receive_packet_start 
+
+car_g24_work_init:
+45de 6fe0c615 fetch 1 ,mem_24g_mode_init 
+45df c3800000 rtnbit1 dongle_work 
+45e0 79207e00 set1 dongle_work ,pdata 
+45e1 67e0c615 store 1 ,mem_24g_mode_init 
+45e2 6fe0c623 fetch 1 ,mem_tx_power_temp 
+45e3 67e0c141 store 1 ,mem_tx_power 
+45e4 70461100 jam 0 ,mem_24g_ackpayload_enable 
+45e5 70090d00 jam 0 ,mem_usb_tx_enable 
+45e6 70460a01 jam 1 ,mem_24g_abort_packet 
+45e7 70457e00 jam 0 ,mem_24g_pid 
+45e8 6fe249da fetch 4 ,mem_car_24g_commom_addr 
+45e9 2020345d branch g24_work_init + 12 
+
+car_g24_receive_packet_start:
+45ea 204033f1 call g24_receive_transmit_ack 
+45eb 2437b3be nbranch g24_rx_interrupt_clear ,user3 
+
+car_g24_receive_packet_parse:
+45ec 204033e3 call g24_receive_packet_parse_pid_crc 
+45ed 243433be nbranch g24_rx_interrupt_clear ,user 
+45ee 6fe0c57d fetch 1 ,mem_24g_rxdata_length 
+45ef 203a33be branch g24_rx_interrupt_clear ,blank 
+45f0 1fe0fe02 increase 2 ,pdata 
+45f1 98007200 iforce loopcnt 
+45f2 d8c044f7 arg mem_24g_rxbuf ,contr 
+45f3 d8a045e8 arg mem_24g_rxdata_temp ,contw 
+45f4 20407cda call memcpy 
+45f5 70461300 jam 0 ,mem_24g_mode_switch 
+45f6 6fe0c610 fetch 1 ,mem_24g_pair_mode 
+45f7 205a33fe call g24_enable_nodata_timer ,blank 
+45f8 6fe0c5ea fetch 1 ,mem_24g_rxdata_temp + 2 
+45f9 c07fc5fc beq datatype_attemp ,car_g24_data_attemp 
+45fa c000c601 beq datatype_device1 ,car_g24_data_device1 
+45fb 202033bb branch g24_receive_packet_parse + 14 
+
+car_g24_data_attemp:
+45fc 6fe0c610 fetch 1 ,mem_24g_pair_mode 
+45fd 247a0000 nrtn blank 
+45fe 6fe0c5d5 fetch 1 ,mem_24g_bind_device_status 
+45ff 207a0000 rtn blank 
+4600 2020359b branch g24_data_attemp 
+
+car_g24_data_device1:
+4601 2040352e call g24_ch_timer_reinit 
+4602 6fe0c60a fetch 1 ,mem_24g_abort_packet 
+4603 6848c5e8 fetcht 1 ,mem_24g_rxdata_temp 
+4604 284ffe03 isolate1 bit_abort ,temp 
+4605 7920fe00 setflag true ,0 ,pdata 
+4606 67e0c60a store 1 ,mem_24g_abort_packet 
+4607 c000c609 beq 1 ,car_g24_data_attemp_device1_abort 
+4608 202033cb branch g24_data_device1 + 7 
+
+car_g24_data_attemp_device1_abort:
+4609 6fe0c3cb fetch 1 ,mem_device_option 
+460a 1fe67c0e sub pdata ,dvc_op_car ,null 
+460b 2042f88d call check_51cmd_led_on ,zero 
+460c 6fe245f2 fetch 4 ,mem_24g_rxdata_temp + 10 
+460d 202035a3 branch g24_store_device1_addr 
+
+car_g24_bind_mode:
+460e 6fe0c616 fetch 1 ,mem_24g_work_mode 
+460f c1808000 rtnne dongle_bind 
+4610 204032ff call g24_bind_init 
+4611 2040465b call car_g24_bind_device_addr 
+4612 204033be call g24_rx_interrupt_clear 
+4613 20403119 call g24_receive_packet 
+4614 2437b3be nbranch g24_rx_interrupt_clear ,user3 
+4615 2040331e call g24_bind_data_parse 
+4616 204033f4 call g24_transmit_ack 
+4617 20403399 call g24_bind_device_status_check 
+4618 20403317 call g24_bind_data_process + 8 
+4619 6fe0c5d5 fetch 1 ,mem_24g_bind_device_status 
+461a 243a4621 nbranch car_g24_bind_mode_exit ,blank 
+461b 2040350a call g24_nodata_process 
+461c 6fe0c614 fetch 1 ,mem_24g_nodata_timer_enable 
+461d 207a0000 rtn blank 
+461e 58000000 setarg 0 
+461f 67e24630 store 4 ,mem_24g_device1_addr 
+4620 20600000 rtn 
+
+car_g24_bind_mode_exit:
+4621 70461300 jam 0 ,mem_24g_mode_switch 
+4622 da200000 arg 0 ,rega 
+4623 2040788d call check_51cmd_led_on 
+4624 20403460 call g24_switch_work_mode 
+4625 20403258 call g24_timer_init 
+4626 6fe244f1 fetch 4 ,mem_24g_lap 
+4627 67e249da store 4 ,mem_car_24g_commom_addr 
+4628 6fe0c9e6 fetch 1 ,mem_car_save_addr_flag 
+4629 245a462c ncall car_g24_save_commom_addr ,blank 
+462a 6fe249da fetch 4 ,mem_car_24g_commom_addr 
+462b 20203236 branch g24_update_addr_and_synccrc8 
+
+car_g24_save_commom_addr:
+462c 6fe0c9e6 fetch 1 ,mem_car_save_addr_flag 
+462d 207a0000 rtn blank 
+462e 6fe0c62d fetch 1 ,mem_24g_transmitter_addr + 1 
+462f 67e0c9dd store 1 ,mem_car_24g_commom_addr + 3 
+4630 6fe0c4f2 fetch 1 ,mem_24g_lap + 1 
+4631 67e0c9dc store 1 ,mem_car_24g_commom_addr + 2 
+4632 6fe0c62c fetch 1 ,mem_24g_transmitter_addr 
+4633 67e0c9db store 1 ,mem_car_24g_commom_addr + 1 
+4634 6fe0c4f1 fetch 1 ,mem_24g_lap 
+4635 67e0c9da store 1 ,mem_car_24g_commom_addr 
+4636 20600000 rtn 
+4637 2040464a call car_g24_search_commom_addr 
+4638 6fe249da fetch 4 ,mem_car_24g_commom_addr 
+4639 684a49de fetcht 4 ,mem_car_24g_commom_addr_temp 
+463a 98467c00 isub temp ,null 
+463b 20628000 rtn zero 
+463c 1a622400 copy regc ,regb 
+463d da2049da arg mem_car_24g_commom_addr ,rega 
+463e df200004 arg 4 ,loopcnt 
+463f 20206b45 branch otp_write 
+
+car_g24_load_commom_addr:
+4640 6fe244f1 fetch 4 ,mem_24g_lap 
+4641 67e249da store 4 ,mem_car_24g_commom_addr 
+4642 6fe0c9e6 fetch 1 ,mem_car_save_addr_flag 
+4643 207a0000 rtn blank 
+4644 20600000 rtn 
+4645 2040464a call car_g24_search_commom_addr 
+4646 6fe249de fetch 4 ,mem_car_24g_commom_addr_temp 
+4647 207a0000 rtn blank 
+4648 67e249da store 4 ,mem_car_24g_commom_addr 
+4649 20600000 rtn 
+
+car_g24_search_commom_addr:
+464a 20600000 rtn 
+464b 6fe0c9e6 fetch 1 ,mem_car_save_addr_flag 
+464c 207a0000 rtn blank 
+464d da600700 arg otp_offset_car_commom_start_addr ,regc 
+
+car_g24_search_commom_addr_loop:
+464e 1a622400 copy regc ,regb 
+464f da2049e2 arg mem_car_24g_commom_addr_read ,rega 
+4650 df200004 arg 4 ,loopcnt 
+4651 20406b74 call otp_read_data 
+4652 6fe249e2 fetch 4 ,mem_car_24g_commom_addr_read 
+4653 207a0000 rtn blank 
+4654 67e249de store 4 ,mem_car_24g_commom_addr_temp 
+4655 1a627e00 copy regc ,pdata 
+4656 d84007cc arg otp_offset_car_commom_end_addr ,temp 
+4657 98467c00 isub temp ,null 
+4658 20610000 rtn positive 
+4659 1a60a604 increase 4 ,regc 
+465a 2020464e branch car_g24_search_commom_addr_loop 
+
+car_g24_bind_device_addr:
+465b 6fe24630 fetch 4 ,mem_24g_device1_addr 
+465c 207a0000 rtn blank 
+465d 20203236 branch g24_update_addr_and_synccrc8 
+
+car_g24_cb_data_device1:
+465e 6fe144e9 fetch 2 ,mem_ui_state_map 
+465f c3848000 rtnbit1 ui_state_ble_connected 
+4660 6fe14799 fetch 2 ,mem_car_24g_no_data_timeout_count 
+4661 67e1479b store 2 ,mem_car_24g_no_data_timeout_timer 
+4662 7049b701 jam work_paired ,mem_car_24g_received_pac 
+4663 da2045eb arg mem_24g_rxdata_temp + 3 ,rega 
+4664 202044fd branch car_24g_receive_data 
+
+car_g24_lpm_dipatch:
+4665 6fe0c9c0 fetch 1 ,mem_car_enter_lpm_flag 
+4666 207a0000 rtn blank 
+4667 2040466d call car_g24_lpm_wait 
+4668 24740000 nrtn user 
+4669 6fe1c5af fetch 3 ,mem_24g_enter_hibernate 
+466a 20407d25 call clk2lpo 
+466b 604a40a9 storet 4 ,mem_sleep_counter 
+466c 2020241e branch lpm_sleep 
+
+car_g24_lpm_wait:
+466d 78347c00 enable user 
+466e 20402408 call lpo_calibration 
+466f 6fe1c0bd fetch 3 ,mem_clks_per_lpo 
+4670 203a7dbc branch disable_user ,blank 
+4671 20204430 branch car_le_process_lpm_before 
+
+remote_car_init:
+4672 20758000 rtn wake 
+4673 20404772 call remote_car_default_init 
+4674 20406ff7 call keyscan_key_init 
+4675 58004756 setarg remote_car_g24_package_data 
+4676 67e145f2 store 2 ,mem_cb_24g_transmit_data 
+4677 580046b6 setarg remote_car_process_lpm_before 
+4678 67e145f6 store 2 ,mem_cb_24g_lpm_before 
+4679 580046b1 setarg remote_car_le_before_hibernate 
+467a 67e143d5 store 2 ,mem_cb_before_hibernate 
+467b 580046f0 setarg remote_car_scale_process_idle 
+467c 67e143db store 2 ,mem_cb_idle_process 
+467d 580046f2 setarg remote_car_scale_process_bb_event 
+467e 67e143dd store 2 ,mem_cb_bb_event_process 
+467f 5800473b setarg remote_car_event_timer 
+4680 67e143e3 store 2 ,mem_cb_event_timer 
+4681 580046a6 setarg remote_car_power_off_signal 
+4682 67e146ee store 2 ,mem_remote_car_power_off_cb 
+4683 58004696 setarg remote_car_soft_switch_power_on_signal 
+4684 67e146f2 store 2 ,mem_remote_car_power_standby_cb 
+4685 4499c006 bpatch patch06_3 ,mem_patch06 
+4686 20406cc1 call set_eeprom_size_2k 
+4687 204046ad call remote_car_init_environment 
+4688 204078ad call queue_init 
+4689 6fe0c6be fetch 1 ,mem_remote_car_config_soft_switch_enable 
+468a 67e0c62d store 1 ,mem_remote_car_hard_soft_switch 
+468b c0004695 beq hard_switch ,remote_car_hard_switch_power_on_signal 
+468c 6fe0c6bf fetch 1 ,mem_remote_car_config_soft_switch_gpio 
+468d 67e0c4ec store 1 ,mem_ui_button_gpio 
+
+remote_car_soft_switch_power_on_init:
+468e 204046a6 call remote_car_ui_led_init 
+468f 20407776 call ui_button_init 
+4690 20407780 call ui_button_polling 
+4691 7046ea01 jam power_starting ,mem_remote_car_power_state 
+4692 6fe144e9 fetch 2 ,mem_ui_state_map 
+4693 c3860000 rtnbit1 ui_state_btn_down 
+4694 20204327 branch app_enter_hibernate 
+
+remote_car_hard_switch_power_on_signal:
+4695 7046ea02 jam power_standby ,mem_remote_car_power_state 
+
+remote_car_soft_switch_power_on_signal:
+4696 204046a6 call remote_car_ui_led_init 
+4697 da200000 arg 0 ,rega 
+4698 204077c4 call ui_led_blink_start_global 
+4699 20404719 call remote_car_g24_load_commom_addr 
+469a 6fe24700 fetch 4 ,mem_remote_24g_commom_addr 
+469b 67e2458f store 4 ,mem_24g_addr 
+469c 203a3291 branch g24_pair_start ,blank 
+469d 6fe2458f fetch 4 ,mem_24g_addr 
+469e 67e245e8 store 4 ,mem_24g_receiver_addr 
+469f 6fe145dc fetch 2 ,mem_24g_reconn_timeout_init 
+46a0 67e145de store 2 ,mem_24g_reconn_timeout 
+46a1 20203534 branch g24_reconn_start 
+
+remote_car_set_24g_addr_eeprom:
+46a2 d8400004 arg 4 ,temp 
+46a3 da20458f arg mem_24g_addr ,rega 
+46a4 da400000 arg remote_info_eeprom_offect ,regb 
+46a5 20600000 rtn 
+
+remote_car_power_off_signal:
+
+remote_car_ui_led_init:
+46a6 449a4006 bpatch patch06_4 ,mem_patch06 
+46a7 6fe0c6bc fetch 1 ,mem_remote_car_config_connect_led_gpio 
+46a8 c0ffc6ab bne invalid_pin_num ,remote_car_pairing_led_gpio_set 
+
+remote_car_ui_led_init_1:
+46a9 6848c699 fetcht 1 ,mem_remote_car_led_map 
+46aa 20206ef7 branch gpio_config_output 
+
+remote_car_pairing_led_gpio_set:
+46ab 67e0c699 store 1 ,mem_remote_car_led_map 
+46ac 202046a9 branch remote_car_ui_led_init_1 
+
+remote_car_init_environment:
+46ad 204035f0 call g24_transmit_init 
+
+remote_no_data_timer_init:
+46ae 6fe146e6 fetch 2 ,mem_remote_car_no_data_timeout 
+46af 67e146e8 store 2 ,mem_remote_car_no_data_timer 
+46b0 20600000 rtn 
+
+remote_car_le_before_hibernate:
+46b1 204046b6 call remote_car_process_lpm_before 
+
+remote_gpio_set_before_hibernate:
+46b2 6fe0c68f fetch 1 ,mem_remote_style_struct_led_gpio 
+46b3 79207e07 set1 7 ,pdata 
+46b4 d840003f arg gpcfg_output_high ,temp 
+46b5 20206f20 branch gpio_config_function 
+
+remote_car_process_lpm_before:
+46b6 20406f35 call gpio_set_before_lpm 
+46b7 2020701b branch keyscan_process_lpm_before 
+
+remote_car_key_scan_process:
+46b8 20407027 call keyscan_key_process 
+46b9 204046c9 call get_remote_key_state 
+46ba 204046bc call remote_conn_led_state 
+46bb 202046d7 branch send_data 
+
+remote_conn_led_state:
+46bc 6fe0c6f5 fetch 1 ,mem_remote_car_24g_status 
+46bd c1808000 rtnne work_paired 
+46be 6fe246f9 fetch 4 ,mem_remote_car_motor1_key0_press_state 
+46bf 203a46c3 branch remote_car_stop_state ,blank 
+46c0 7046ff00 jam 0 ,mem_remote_car_no_data_check 
+46c1 78347c00 enable user 
+46c2 2020788d branch check_51cmd_led_on 
+
+remote_car_stop_state:
+46c3 6fe0c6ff fetch 1 ,mem_remote_car_no_data_check 
+46c4 c17f8000 rtneq 0xff 
+46c5 1fe0fe01 pincrease 1 
+46c6 67e0c6ff store 1 ,mem_remote_car_no_data_check 
+46c7 78547c00 disable user 
+46c8 2020788b branch check_51cmd_led_off 
+
+get_remote_key_state:
+46c9 6849442e fetcht 2 ,mem_key_value_retention 
+46ca 18417e01 and temp ,0x01 ,pdata 
+46cb 18430400 rshift temp ,temp 
+46cc 67e0c6f9 store 1 ,mem_remote_car_motor1_key0_press_state 
+46cd 18417e01 and temp ,0x01 ,pdata 
+46ce 18430400 rshift temp ,temp 
+46cf 67e0c6fa store 1 ,mem_remote_car_motor1_key1_press_state 
+46d0 18417e01 and temp ,0x01 ,pdata 
+46d1 18430400 rshift temp ,temp 
+46d2 67e0c6fb store 1 ,mem_remote_car_motor2_key2_press_state 
+46d3 18417e01 and temp ,0x01 ,pdata 
+46d4 18430400 rshift temp ,temp 
+46d5 67e0c6fc store 1 ,mem_remote_car_motor2_key3_press_state 
+46d6 20600000 rtn 
+
+send_data:
+46d7 449ac006 bpatch patch06_5 ,mem_patch06 
+46d8 204046e6 call remote_car_fb_check 
+46d9 204046eb call remote_car_lr_check 
+46da 204046dd call remote_car_no_data_timeout_check 
+46db 24740000 nrtn user 
+46dc 20204752 branch remote_car_send_key 
+
+remote_car_no_data_timeout_check:
+46dd 6fe0c6f5 fetch 1 ,mem_remote_car_24g_status 
+46de c1808000 rtnne work_paired 
+46df 6fe0c6ff fetch 1 ,mem_remote_car_no_data_check 
+46e0 207a0000 rtn blank 
+46e1 1fe67c01 sub pdata ,1 ,null 
+46e2 24610000 nrtn positive 
+46e3 6fe145dc fetch 2 ,mem_24g_reconn_timeout_init 
+46e4 67e145de store 2 ,mem_24g_reconn_timeout 
+46e5 20207dba branch enable_user 
+
+remote_car_fb_check:
+46e6 6fe0c6f9 fetch 1 ,mem_remote_car_motor1_key0_press_state 
+46e7 243a4746 nbranch remote_car_send_motor1_key0_press ,blank 
+46e8 6fe0c6fa fetch 1 ,mem_remote_car_motor1_key1_press_state 
+46e9 243a4748 nbranch remote_car_send_motor1_key1_press ,blank 
+46ea 2020474e branch remote_car_send_motor1_key0_rel 
+
+remote_car_lr_check:
+46eb 6fe0c6fb fetch 1 ,mem_remote_car_motor2_key2_press_state 
+46ec 243a474a nbranch remote_car_send_motor2_key2_press ,blank 
+46ed 6fe0c6fc fetch 1 ,mem_remote_car_motor2_key3_press_state 
+46ee 243a474c nbranch remote_car_send_motor2_key3_press ,blank 
+46ef 20204750 branch remote_car_send_motor2_key2_rel 
+
+remote_car_scale_process_idle:
+46f0 20404730 call remote_car_24g_status_process 
+46f1 202046b8 branch remote_car_key_scan_process 
+
+remote_car_scale_process_bb_event:
+46f2 1a627e00 copy regc ,pdata 
+46f3 c016c347 beq bt_evt_button_up ,app_event_button_up 
+46f4 c008432f beq bt_evt_button_long_pressed ,app_button_long_pressed 
+46f5 c01cc6fa beq bt_evt_24g_pairing_complete ,remote_car_24g_pairing_complete 
+46f6 c01e4701 beq bt_evt_24g_attempt_success ,remote_car_24g_attempt_success 
+46f7 c01d46f9 beq bt_evt_24g_attempt_fail ,remote_car_24g_attempt_fail 
+46f8 20600000 rtn 
+
+remote_car_24g_attempt_fail:
+46f9 2020357b branch g24_txbuf_clear 
+
+remote_car_24g_pairing_complete:
+46fa 449b4006 bpatch patch06_6 ,mem_patch06 
+46fb 6fe245e8 fetch 4 ,mem_24g_receiver_addr 
+46fc 67e24700 store 4 ,mem_remote_24g_commom_addr 
+46fd 6fe0c70c fetch 1 ,mem_remote_save_addr_flag 
+46fe 245a4706 ncall remote_car_g24_save_commom_addr ,blank 
+46ff 6fe24700 fetch 4 ,mem_remote_24g_commom_addr 
+4700 20403236 call g24_update_addr_and_synccrc8 
+
+remote_car_24g_attempt_success:
+4701 7045fc00 jam 0 ,mem_24g_conn_sm 
+4702 7046f601 jam work_paired ,mem_remote_car_24g_auto_work_step 
+4703 7046f701 jam work_paired ,mem_remote_car_24g_pair_success_flag 
+4704 7045de00 jam 0 ,mem_24g_reconn_timeout 
+4705 20600000 rtn 
+
+remote_car_g24_save_commom_addr:
+4706 6fe0c70c fetch 1 ,mem_remote_save_addr_flag 
+4707 207a0000 rtn blank 
+4708 6fe0c4f2 fetch 1 ,mem_24g_lap + 1 
+4709 67e0c703 store 1 ,mem_remote_24g_commom_addr + 3 
+470a 6fe0c5e9 fetch 1 ,mem_24g_receiver_addr + 1 
+470b 67e0c702 store 1 ,mem_remote_24g_commom_addr + 2 
+470c 6fe0c4f1 fetch 1 ,mem_24g_lap 
+470d 67e0c701 store 1 ,mem_remote_24g_commom_addr + 1 
+470e 6fe0c5e8 fetch 1 ,mem_24g_receiver_addr 
+470f 67e0c700 store 1 ,mem_remote_24g_commom_addr 
+4710 20404720 call remote_car_g24_search_commom_addr 
+4711 6fe24700 fetch 4 ,mem_remote_24g_commom_addr 
+4712 684a4704 fetcht 4 ,mem_remote_24g_commom_addr_temp 
+4713 98467c00 isub temp ,null 
+4714 20628000 rtn zero 
+4715 1a622400 copy regc ,regb 
+4716 da204700 arg mem_remote_24g_commom_addr ,rega 
+4717 df200004 arg 4 ,loopcnt 
+4718 20206b45 branch otp_write 
+
+remote_car_g24_load_commom_addr:
+4719 6fe0c70c fetch 1 ,mem_remote_save_addr_flag 
+471a 207a0000 rtn blank 
+471b 20404720 call remote_car_g24_search_commom_addr 
+471c 6fe24704 fetch 4 ,mem_remote_24g_commom_addr_temp 
+471d 207a0000 rtn blank 
+471e 67e24700 store 4 ,mem_remote_24g_commom_addr 
+471f 20600000 rtn 
+
+remote_car_g24_search_commom_addr:
+4720 6fe0c70c fetch 1 ,mem_remote_save_addr_flag 
+4721 207a0000 rtn blank 
+4722 da600700 arg otp_offset_remote_commom_start_addr ,regc 
+
+remote_car_g24_search_commom_addr_loop:
+4723 1a622400 copy regc ,regb 
+4724 da204704 arg mem_remote_24g_commom_addr_temp ,rega 
+4725 df200004 arg 4 ,loopcnt 
+4726 20406b74 call otp_read_data 
+4727 6fe24708 fetch 4 ,mem_remote_24g_commom_addr_read 
+4728 207a0000 rtn blank 
+4729 67e24704 store 4 ,mem_remote_24g_commom_addr_temp 
+472a 1a627e00 copy regc ,pdata 
+472b d84007cc arg otp_offset_remote_commom_end_addr ,temp 
+472c 98467c00 isub temp ,null 
+472d 20610000 rtn positive 
+472e 1a60a604 increase 4 ,regc 
+472f 20204723 branch remote_car_g24_search_commom_addr_loop 
+
+remote_car_24g_status_process:
+4730 6fe0c6f6 fetch 1 ,mem_remote_car_24g_auto_work_step 
+4731 c1000000 rtneq power_on 
+4732 6fe0c6f5 fetch 1 ,mem_remote_car_24g_status 
+4733 c1008000 rtneq work_paired 
+4734 7046f501 jam work_paired ,mem_remote_car_24g_status 
+
+remote_car_scale_process_paired:
+4735 da200000 arg 0 ,rega 
+4736 202077bf branch ui_led_off_global 
+
+remote_car_scale_process_shutdown:
+4737 da200000 arg 0 ,rega 
+4738 204077bf call ui_led_off_global 
+4739 204046a6 call remote_car_ui_led_init 
+473a 20204327 branch app_enter_hibernate 
+
+remote_car_event_timer:
+473b 204042ee call app_power_timer 
+473c 2040328e call g24_pair_timeout_timer 
+473d 20403531 call g24_reconn_timeout_timer 
+473e 2020473f branch remote_car_no_data_timer 
+
+remote_car_no_data_timer:
+473f 6fe0c6c0 fetch 1 ,mem_remote_car_config_timeout_shutdown_enable 
+4740 207a0000 rtn blank 
+4741 6fe0c42e fetch 1 ,mem_key_value_retention 
+4742 243a46ae nbranch remote_no_data_timer_init ,blank 
+4743 da6046e8 arg mem_remote_car_no_data_timer ,regc 
+4744 da404737 arg remote_car_scale_process_shutdown ,regb 
+4745 202042e7 branch timer_single_step_2b 
+
+remote_car_send_motor1_key0_press:
+4746 7046c701 jam motor_positive ,mem_remote_car_24g_motor1_payload 
+4747 20600000 rtn 
+
+remote_car_send_motor1_key1_press:
+4748 7046c702 jam motor_negative ,mem_remote_car_24g_motor1_payload 
+4749 20600000 rtn 
+
+remote_car_send_motor2_key2_press:
+474a 7046c901 jam motor_positive ,mem_remote_car_24g_motor2_payload 
+474b 20600000 rtn 
+
+remote_car_send_motor2_key3_press:
+474c 7046c902 jam motor_negative ,mem_remote_car_24g_motor2_payload 
+474d 20600000 rtn 
+
+remote_car_send_motor1_key0_rel:
+
+remote_car_send_motor1_key1_rel:
+474e 7046c700 jam motor_stop ,mem_remote_car_24g_motor1_payload 
+474f 20600000 rtn 
+
+remote_car_send_motor2_key2_rel:
+
+remote_car_send_motor2_key3_rel:
+4750 7046c900 jam motor_stop ,mem_remote_car_24g_motor2_payload 
+4751 20600000 rtn 
+
+remote_car_send_key:
+4752 da2046c1 arg mem_remote_car_24g_motor_packet ,rega 
+4753 202078b2 branch queue_push 
+
+remote_car_send_attack:
+4754 da2046ce arg mem_remote_car_24g_fire_packet ,rega 
+4755 202078b2 branch queue_push 
+
+remote_car_g24_package_data:
+4756 6fe0c6f7 fetch 1 ,mem_remote_car_24g_pair_success_flag 
+4757 c000c760 beq work_paired ,remote_car_g24_send_empty 
+4758 da2046d7 arg mem_remote_car_24g_tx_temp ,rega 
+4759 204078ca call queue_pop 
+475a 24344765 nbranch remote_car_moto_data ,user 
+
+remote_car_g24_package_data_continue:
+475b d8c046d7 arg mem_remote_car_24g_tx_temp ,contr 
+475c efe08006 ifetch 1 ,contr 
+475d 1fe22200 copy pdata ,rega 
+475e da4046d8 arg mem_remote_car_24g_tx_temp + 1 ,regb 
+475f 20600000 rtn 
+
+remote_car_g24_send_empty:
+4760 7046f700 jam 0 ,mem_remote_car_24g_pair_success_flag 
+4761 78347c00 enable user 
+4762 da200001 arg 1 ,rega 
+4763 da4046f8 arg mem_remote_car_empty_packet ,regb 
+4764 20600000 rtn 
+
+remote_car_moto_data:
+4765 6fe0c6da fetch 1 ,mem_remote_car_24g_tx_temp + 3 
+4766 c0024769 beq car_cmd_l_r_motor_control ,remote_car_moto_data_next 
+4767 c002c769 beq car_cmd_f_b_motor_control ,remote_car_moto_data_next 
+4768 20600000 rtn 
+
+remote_car_moto_data_next:
+4769 6fe0c6dd fetch 1 ,mem_remote_car_24g_tx_temp + 6 
+476a 243a4770 nbranch remote_car_moto_data_enable_user ,blank 
+476b 6fe0c6df fetch 1 ,mem_remote_car_24g_tx_temp + 8 
+476c 243a4770 nbranch remote_car_moto_data_enable_user ,blank 
+476d 6fe0c6e1 fetch 1 ,mem_remote_car_24g_tx_temp + 10 
+476e 243a4770 nbranch remote_car_moto_data_enable_user ,blank 
+476f 20600000 rtn 
+
+remote_car_moto_data_enable_user:
+4770 78347c00 enable user 
+4771 2020475b branch remote_car_g24_package_data_continue 
+
+remote_car_default_init:
+4772 7044eb14 jam 0x14 ,mem_ui_button_timeout 
+4773 7044e401 jam 0x01 ,mem_ui_button_last_state 
+4774 5800060f setarg 0x060f 
+4775 67e1462e store 2 ,mem_remote_car_queue_each_size 
+4776 5800462e setarg mem_remote_car_queue_each_size 
+4777 67e143fb store 2 ,mem_queue_ptr 
+4778 70409401 jam 0x01 ,mem_lpm_mode 
+4779 7040a606 jam 0x06 ,mem_lpm_overhead 
+477a 7040c102 jam 0x02 ,mem_lpm_mult_timeout 
+477b 70462d00 jam 0x00 ,mem_remote_car_hard_soft_switch 
+477c 5800468d setarg mem_remote_style_led_type 
+477d 67e144ef store 2 ,mem_ui_led_struct_ptr 
+477e 7044ee01 jam 0x01 ,mem_ui_led_struct_num 
+477f 70468eff jam 0xff ,mem_remote_style_blink_count 
+4780 58000296 setarg 0x0296 
+4781 67e14690 store 2 ,mem_remote_style_on_time 
+4782 5800073a setarg 0x073a 
+4783 67e14692 store 2 ,mem_remote_style_off_time 
+4784 580046ea setarg mem_remote_car_soft_power 
+4785 67e14430 store 2 ,mem_power_param_ptr 
+4786 58000c0c setarg 0x0c0c 
+4787 67e146ec store 2 ,mem_remote_car_power_off_timeout 
+4788 580046a1 setarg mem_remote_car_keyscan 
+4789 67e1442c store 2 ,mem_keyscan_ptr 
+478a 7046be00 jam 0x00 ,mem_remote_car_config_soft_switch_enable 
+478b 7046bcff jam 0xff ,mem_remote_car_config_connect_led_gpio 
+478c 7046bfff jam 0xff ,mem_remote_car_config_soft_switch_gpio 
+478d 7046ba00 jam 0x00 ,mem_remote_car_config_key_map 
+478e 7046bb00 jam 0x00 ,mem_remote_car_config_layout 
+478f 7046bd00 jam 0x00 ,mem_remote_car_config_check_way 
+4790 7046c001 jam 0x01 ,mem_remote_car_config_timeout_shutdown_enable 
+4791 58004e55 setarg 0x4e55 
+4792 67e146ad store 2 ,mem_current_vdd_value_default_mid_x 
+4793 67e146af store 2 ,mem_current_vdd_value_default_mid_y 
+4794 58000007 setarg 0x0007 
+4795 67e146b3 store 2 ,mem_current_vdd_default_range 
+4796 70440702 jam 0x02 ,mem_adc_config_flag 
+4797 38035a0c setsect 0 ,0x35a0c 
+4798 3804011a setsect 1 ,0x11a 
+4799 38080060 setsect 2 ,0x60 
+479a 380c0028 setsect 3 ,0x28 
+479b 67e4c6c1 store 9 ,mem_remote_car_24g_motor_packet 
+479c 3802000a setsect 0 ,0x2000a 
+479d 38040002 setsect 1 ,0x02 
+479e e7e20005 istore 4 ,contw 
+479f 38035a08 setsect 0 ,0x35a08 
+47a0 3804019a setsect 1 ,0x19a 
+47a1 38080000 setsect 2 ,0x00 
+47a2 380c0000 setsect 3 ,0x00 
+47a3 67e4c6ce store 9 ,mem_remote_car_24g_fire_packet 
+47a4 58000064 setarg 0x0064 
+47a5 67e146e6 store 2 ,mem_remote_car_no_data_timeout 
+47a6 70414100 jam tx_power_0db ,mem_tx_power 
+47a7 70458901 jam 0x01 ,mem_24g_data_type 
+47a8 70460306 jam 0x06 ,mem_24g_max_retry 
+47a9 7045ae01 jam 0x01 ,mem_24g_pair_switch 
+47aa 7045e300 jam 0x00 ,mem_24g_fast_conn_enable 
+47ab 20403278 call g24_rx_window_init 
+47ac 204035fb call g24_interval_param_8ms 
+47ad 2040325b call g24_chmap_param_init 
+47ae 58000708 setarg 0x0708 
+47af 67e145d6 store 2 ,mem_24g_pair_timeout_init 
+47b0 58000050 setarg 0x0050 
+47b1 67e145dc store 2 ,mem_24g_reconn_timeout_init 
+47b2 580a7700 setarg 0x0a7700 
+47b3 67e1c60b store 3 ,mem_24g_long_sleep_set 
+47b4 58604800 setarg 0x604800 
+47b5 67e1c5af store 3 ,mem_24g_enter_hibernate 
+47b6 20600000 rtn 
+
+dongle_init:
+47b7 580047ea setarg dongle_dispatch 
+47b8 67e145e0 store 2 ,mem_cb_24g_receive_process 
+47b9 580048d4 setarg dongle_g24_mouse 
+47ba 67e145e4 store 2 ,mem_cb_24g_data_device1 
+47bb 580048e5 setarg dongle_g24_kb 
+47bc 67e145e6 store 2 ,mem_cb_24g_data_device2 
+47bd 580048ab setarg dongle_ackpayload_prep 
+47be 67e145e2 store 2 ,mem_cb_24g_ackpayload 
+47bf 580047f9 setarg dongle_usb_config 
+47c0 67e10859 store 2 ,mem_cb_usb_config 
+47c1 20207912 branch usb_init 
+
+dongle_default_init:
+47c2 449bc006 bpatch patch06_7 ,mem_patch06 
+47c3 204047ef call dongle_read_kb_bind_status 
+47c4 204047e5 call dongle_xtal_select 
+47c5 6fe0c669 fetch 1 ,mem_dg_sys_config 
+47c6 2feffe05 isolate1 dg_enable_eeprom ,pdata 
+47c7 2020c7cb branch dongle_default_no_eeprom ,true 
+47c8 6fe0c669 fetch 1 ,mem_dg_sys_config 
+47c9 2feffe06 isolate1 dg_enable_new_chmap ,pdata 
+47ca 2040b26b call g24_chamap_param_update ,true 
+
+dongle_default_no_eeprom:
+47cb 6fe0c694 fetch 1 ,mem_dg_24g_tx_power_default 
+47cc 67e0c141 store 1 ,mem_tx_power 
+47cd 7045d2ff jam 0xff ,mem_rssi_buff_index 
+47ce 5800099f setarg mem_dg_rssi_noise_buffer 
+47cf 67e14640 store 2 ,mem_rssi_noise_buffer_ptr 
+47d0 58000a9f setarg mem_dg_rssi_noise_dg_buffer 
+47d1 67e14642 store 2 ,mem_rssi_noise_self_buffer_ptr 
+47d2 58000b9f setarg mem_dg_rssi_noise_ms_buffer 
+47d3 67e14644 store 2 ,mem_rssi_noise_device1_buffer_ptr 
+47d4 58000c9f setarg mem_dg_rssi_noise_kb_buffer 
+47d5 67e14646 store 2 ,mem_rssi_noise_device2_buffer_ptr 
+47d6 7045d185 jam tx_power_f5db ,mem_24g_pair_tx_power 
+47d7 70469200 jam 0 ,mem_dg_kb_bind_success 
+47d8 70462b00 jam 0 ,mem_24g_bind_device_living 
+47d9 20403281 call g24_enable_1m 
+47da 6fe0c669 fetch 1 ,mem_dg_sys_config 
+47db 2feffe03 isolate1 dg_enable_24g_2m ,pdata 
+47dc 2040b284 call g24_enable_2m ,true 
+47dd 2040339f call g24_receive_init 
+47de 20403287 call g24_pair_param_init 
+47df 2040325b call g24_chmap_param_init 
+47e0 6fe0c673 fetch 1 ,mem_dg_usb_tx_interval 
+47e1 67e0885b store 1 ,mem_usb_tx_interval 
+47e2 6fe4c66a fetch 9 ,mem_dg_usb_vid_pid 
+47e3 67e4885c store 9 ,mem_usb_vid_pid 
+47e4 20600000 rtn 
+
+dongle_xtal_select:
+47e5 70409918 jam xtal_24m ,mem_fcomp_div 
+47e6 6fe0c669 fetch 1 ,mem_dg_sys_config 
+47e7 c4038000 rtnbit0 dg_enable_xtal_24m 
+47e8 70409910 jam xtal_16m ,mem_fcomp_div 
+47e9 20600000 rtn 
+
+dongle_dispatch:
+47ea 6fe0c610 fetch 1 ,mem_24g_pair_mode 
+47eb c000489b beq 0x00 ,dongle_auto_bind 
+47ec c000c822 beq 0x01 ,dongle_pc_bind 
+47ed c007c81e beq 0x0f ,dongle_all_powerful 
+47ee 20600000 rtn 
+
+dongle_read_kb_bind_status:
+47ef 449c4007 bpatch patch07_0 ,mem_patch07 
+47f0 da401fdf arg dongle_kb_bind_efuse_offect ,regb 
+47f1 da204648 arg mem_dg_kb_bind_flag ,rega 
+47f2 df200001 arg 1 ,loopcnt 
+47f3 20206b74 branch otp_read_data 
+
+dongle_write_kb_bind_status:
+47f4 449cc007 bpatch patch07_1 ,mem_patch07 
+47f5 df200001 arg 1 ,loopcnt 
+47f6 da204648 arg mem_dg_kb_bind_flag ,rega 
+47f7 da401fdf arg dongle_kb_bind_efuse_offect ,regb 
+47f8 20206b45 branch otp_write 
+
+dongle_usb_config:
+47f9 6fe0c669 fetch 1 ,mem_dg_sys_config 
+47fa c28247fd bbit1 dg_enable_kb_icon ,dongle_usb_config_kb 
+47fb 6fe0c648 fetch 1 ,mem_dg_kb_bind_flag 
+47fc c0ad4801 bne dongle_kb_bind_success ,dongle_usb_config_param 
+
+dongle_usb_config_kb:
+47fd 7046485a jam dongle_kb_bind_success ,mem_dg_kb_bind_flag 
+47fe 6ff2137a fetch 4 ,usb_devicedata_addr + 9 
+47ff 79207e1d set1 29 ,pdata 
+4800 67e207b4 store 4 ,mem_devicedesc + 9 
+
+dongle_usb_config_param:
+4801 20404818 call dongle_usb_device_name 
+4802 20407966 call usb_tx_interval_config 
+4803 20404805 call dongle_usb_vid_pid_config 
+4804 2020480e branch dongle_usb_hid_icon_config 
+
+dongle_usb_vid_pid_config:
+4805 6fe0885c fetch 1 ,mem_usb_vid_pid 
+4806 207a0000 rtn blank 
+4807 6fe0c648 fetch 1 ,mem_dg_kb_bind_flag 
+4808 c02d480c beq dongle_kb_bind_success ,dongle_usb_vid_pid_for_suit 
+
+dongle_usb_vid_pid_for_mouse_only_auto_pair:
+4809 6fe2085d fetch 4 ,mem_usb_vid_pid + 1 
+
+dongle_usb_vid_pid_store:
+480a 67e207b4 store 4 ,mem_devicedesc + 9 
+480b 20600000 rtn 
+
+dongle_usb_vid_pid_for_suit:
+480c 6fe20861 fetch 4 ,mem_usb_vid_pid + 5 
+480d 2020480a branch dongle_usb_vid_pid_store 
+
+dongle_usb_hid_icon_config:
+480e 6fe0c648 fetch 1 ,mem_dg_kb_bind_flag 
+480f c02d4814 beq dongle_kb_bind_success ,dongle_usb_kb_hidreportdesc 
+4810 58009272 setarg usb_kbdata_vendor_define_addr 
+4811 67e107a7 store 2 ,mem_hidreportdesc_kb 
+4812 7007d81a jam 0x1a ,mem_confdesc + 26 
+4813 20600000 rtn 
+
+dongle_usb_kb_hidreportdesc:
+4814 5800928d setarg usb_kbdata_addr 
+4815 67e107a7 store 2 ,mem_hidreportdesc_kb 
+4816 7007d83f jam 0x3f ,mem_confdesc + 26 
+4817 20600000 rtn 
+
+dongle_usb_device_name:
+4818 6fe0c674 fetch 1 ,mem_dg_usb_device_name 
+4819 207a0000 rtn blank 
+481a d8c04674 arg mem_dg_usb_device_name ,contr 
+481b d8a0081d arg mem_string2 ,contw 
+481c df20001e arg 30 ,loopcnt 
+481d 20207cda branch memcpy 
+
+dongle_all_powerful:
+481e 20403460 call g24_switch_work_mode 
+
+dongle_all_powerful_loop:
+481f 204048a3 call dongle_work_mode_auto 
+4820 20404867 call dongle_usb_dispatch 
+4821 2020481f branch dongle_all_powerful_loop 
+
+dongle_pc_bind:
+4822 20403460 call g24_switch_work_mode 
+
+dongle_pc_bind_loop:
+4823 204048a3 call dongle_work_mode_auto 
+4824 20403469 call g24_bind_mode_auto 
+4825 20404867 call dongle_usb_dispatch 
+4826 20204823 branch dongle_pc_bind_loop 
+
+dongle_g24_blank_data_process:
+4827 2040482b call dongle_g24_ms_blank_data 
+4828 2040483b call dongle_g24_kb_blank_data 
+4829 2040484c call dongle_g24_kb_sys_ctrl_blank_data 
+482a 20204859 branch dongle_g24_kb_mul_blank_data 
+
+dongle_g24_ms_blank_data:
+482b 449d4007 bpatch patch07_2 ,mem_patch07 
+482c 6fe0c668 fetch 1 ,mem_dg_ms_blank_data_enable 
+482d 207a0000 rtn blank 
+482e d8e0000d arg g24_timer_ms_blank ,queue 
+482f 20407cef call timer_check 
+4830 247a0000 nrtn blank 
+4831 70466800 jam 0 ,mem_dg_ms_blank_data_enable 
+4832 58000001 setarg ms_report_id 
+4833 67e08913 store 1 ,mem_usb_mouse_data 
+4834 58000000 setarg 0 
+4835 e7e38005 istore 7 ,contw 
+
+dongle_usb_tx_ms_data:
+4836 70090c20 jam usb_ep2_ms ,mem_usb_ep2_data 
+
+dongle_usb_tx_enable_ep2:
+4837 6fe0890d fetch 1 ,mem_usb_tx_enable 
+4838 79207e02 set1 2 ,pdata 
+4839 67e0890d store 1 ,mem_usb_tx_enable 
+483a 20600000 rtn 
+
+dongle_g24_kb_blank_data:
+483b 449dc007 bpatch patch07_3 ,mem_patch07 
+483c 6fe0c665 fetch 1 ,mem_dg_kb_blank_data_enable 
+483d 207a0000 rtn blank 
+483e d8e0000e arg g24_timer_kb_blank ,queue 
+483f 20407cef call timer_check 
+4840 247a0000 nrtn blank 
+4841 70466500 jam 0 ,mem_dg_kb_blank_data_enable 
+4842 d8a00923 arg mem_usb_kb_data ,contw 
+4843 20407c99 call memset0_16 
+4844 6fe40923 fetch 8 ,mem_usb_kb_data 
+4845 67e44651 store 8 ,mem_dg_kb_data_last_data 
+
+dongle_usb_tx_kb_data:
+4846 70092300 jam kb_normal_report_id ,mem_usb_kb_data 
+
+dongle_usb_tx_enable_ep1:
+4847 70090b10 jam usb_ep1_kb ,mem_usb_ep1_data 
+4848 6fe0890d fetch 1 ,mem_usb_tx_enable 
+4849 79207e01 set1 1 ,pdata 
+484a 67e0890d store 1 ,mem_usb_tx_enable 
+484b 20600000 rtn 
+
+dongle_g24_kb_sys_ctrl_blank_data:
+484c 6fe0c667 fetch 1 ,mem_dg_kb_system_crtl_blank_data_enable 
+484d 207a0000 rtn blank 
+484e d8e0000a arg g24_timer_kb_sys_crtl_blank ,queue 
+484f 20407cef call timer_check 
+4850 247a0000 nrtn blank 
+4851 70466700 jam 0 ,mem_dg_kb_system_crtl_blank_data_enable 
+4852 d8a00943 arg mem_usb_kb_system ,contw 
+4853 20407c99 call memset0_16 
+4854 70094302 jam kb_system_conctrl_report_id ,mem_usb_kb_system 
+4855 6fe10943 fetch 2 ,mem_usb_kb_system 
+4856 67e1465f store 2 ,mem_dg_kb_system_sta_data 
+
+dongle_usb_tx_sys_ctrl_data:
+4857 70090c22 jam usb_ep2_systemkey ,mem_usb_ep2_data 
+4858 20204837 branch dongle_usb_tx_enable_ep2 
+
+dongle_g24_kb_mul_blank_data:
+4859 449e4007 bpatch patch07_4 ,mem_patch07 
+485a 6fe0c666 fetch 1 ,mem_dg_kb_mul_blank_data_enable 
+485b 207a0000 rtn blank 
+485c d8e0000c arg g24_timer_kb_mul_blank ,queue 
+485d 20407cef call timer_check 
+485e 247a0000 nrtn blank 
+485f 70466600 jam 0 ,mem_dg_kb_mul_blank_data_enable 
+4860 d8a00933 arg mem_usb_kb_multikey ,contw 
+4861 20407c99 call memset0_16 
+4862 70093303 jam kb_multikey_report_id ,mem_usb_kb_multikey 
+4863 6fe18933 fetch 3 ,mem_usb_kb_multikey 
+4864 67e1c65c store 3 ,mem_dg_kb_multikey_last_data 
+
+dongle_usb_tx_multikey_data:
+4865 70090c21 jam usb_ep2_multikey ,mem_usb_ep2_data 
+4866 20204837 branch dongle_usb_tx_enable_ep2 
+
+dongle_usb_dispatch:
+4867 449ec007 bpatch patch07_5 ,mem_patch07 
+4868 6fe08901 fetch 1 ,mem_usb_remote_wakeup 
+4869 205a48b5 call dongle_clear_pc_sleep_flag ,blank 
+486a 20407906 call usb_isr 
+486b 6fe088f7 fetch 1 ,mem_usb0_get_set_report 
+486c 207a0000 rtn blank 
+486d 7008f700 jam 0 ,mem_usb0_get_set_report 
+486e 6fe108f5 fetch 2 ,mem_usb_setup_bvalue_temp 
+486f d84002ba arg pc_set_report ,temp 
+4870 98467c00 isub temp ,null 
+4871 24628000 nrtn zero 
+4872 6fe08875 fetch 1 ,mem_usb0_set_report_data 
+4873 c1dd0000 rtnne pc_report_id 
+4874 6fe08876 fetch 1 ,mem_usb0_set_report_data + 1 
+4875 c050487c beq command_mode ,dongle_dispose_cmd_mode 
+4876 c050c882 beq command_bind ,dongle_dispose_cmd_bind 
+4877 c053488e beq command_current_project ,dongle_dispose_cmd_current_project 
+4878 c053c890 beq command_current_mode ,dongle_dispose_cmd_current_mode 
+4879 c054c896 beq command_current_fw_version ,dongle_dispose_cmd_current_fw_version 
+
+dongle_usb0_data_ready_report_set0:
+487a 7008f800 jam 0 ,mem_usb0_data_ready_report 
+487b 20600000 rtn 
+
+dongle_dispose_cmd_mode:
+487c 6fe08877 fetch 1 ,mem_usb0_set_report_data + 2 
+487d c040c87f beq com_mode_bind ,dongle_enter_bind_mode 
+487e 2020487a branch dongle_usb0_data_ready_report_set0 
+
+dongle_enter_bind_mode:
+487f 204032fc call g24_bind_mode_enable 
+
+dongle_usb0_data_ready_report_set1:
+4880 7008f801 jam 1 ,mem_usb0_data_ready_report 
+4881 20600000 rtn 
+
+dongle_dispose_cmd_bind:
+4882 6fe08877 fetch 1 ,mem_usb0_set_report_data + 2 
+4883 c000c887 beq com_bind_get ,dongle_dispose_cmd_get_bind 
+4884 c042488a beq com_bind_exit ,dongle_dispose_cmd_exit_bind 
+4885 c053c88c beq com_read_mode ,dongle_dispose_cmd_read_mode 
+4886 2020487a branch dongle_usb0_data_ready_report_set0 
+
+dongle_dispose_cmd_get_bind:
+4887 6fe0c5d5 fetch 1 ,mem_24g_bind_device_status 
+4888 67e088b6 store 1 ,mem_usb0_get_report_data + 1 
+4889 20204880 branch dongle_usb0_data_ready_report_set1 
+
+dongle_dispose_cmd_exit_bind:
+488a 20403461 call g24_work_mode_enable 
+488b 20204887 branch dongle_dispose_cmd_get_bind 
+
+dongle_dispose_cmd_read_mode:
+
+dongle_dispose_in_bind_mode:
+488c 7008b6a1 jam command_bind ,mem_usb0_get_report_data + 1 
+488d 20204880 branch dongle_usb0_data_ready_report_set1 
+
+dongle_dispose_cmd_current_project:
+488e 7008b615 jam product_id ,mem_usb0_get_report_data + 1 
+488f 20204880 branch dongle_usb0_data_ready_report_set1 
+
+dongle_dispose_cmd_current_mode:
+4890 6fe0c616 fetch 1 ,mem_24g_work_mode 
+4891 c0004894 beq dongle_work ,dongle_dispose_in_work_mode 
+4892 c000c88c beq dongle_bind ,dongle_dispose_in_bind_mode 
+4893 20600000 rtn 
+
+dongle_dispose_in_work_mode:
+4894 7008b6a0 jam command_mode ,mem_usb0_get_report_data + 1 
+4895 20204880 branch dongle_usb0_data_ready_report_set1 
+
+dongle_dispose_cmd_current_fw_version:
+4896 7008b600 jam fw_version0 ,mem_usb0_get_report_data + 1 
+4897 7008b700 jam fw_version1 ,mem_usb0_get_report_data + 2 
+4898 7008b801 jam fw_version2 ,mem_usb0_get_report_data + 3 
+4899 7008b907 jam fw_version3 ,mem_usb0_get_report_data + 4 
+489a 20204880 branch dongle_usb0_data_ready_report_set1 
+
+dongle_auto_bind:
+489b 20403402 call g24_mode_switch_init 
+
+dongle_auto_bind_loop:
+489c 20403407 call g24_mode_switch_bind_work 
+489d 2040342d call g24_mode_switch_bind_search 
+489e 204048a3 call dongle_work_mode_auto 
+489f 20403469 call g24_bind_mode_auto 
+48a0 20403488 call g24_search_mode_auto 
+48a1 20404867 call dongle_usb_dispatch 
+48a2 2020489c branch dongle_auto_bind_loop 
+
+dongle_work_mode_auto:
+48a3 449f4007 bpatch patch07_6 ,mem_patch07 
+48a4 6fe0c616 fetch 1 ,mem_24g_work_mode 
+48a5 c1800000 rtnne dongle_work 
+48a6 20403464 call g24_work_mode_start 
+48a7 20404827 call dongle_g24_blank_data_process 
+48a8 6fe0c610 fetch 1 ,mem_24g_pair_mode 
+48a9 247a0000 nrtn blank 
+48aa 2020350a branch g24_nodata_process 
+
+dongle_ackpayload_prep:
+48ab 6fe0c589 fetch 1 ,mem_24g_data_type 
+48ac c000c8ae beq datatype_device1 ,dongle_ackpayload_prep_mouse 
+48ad c00148b7 beq datatype_device2 ,dongle_ackpayload_prep_keyboard 
+
+dongle_ackpayload_prep_mouse:
+48ae 6fe0c693 fetch 1 ,mem_dg_pc_sleep_flag 
+48af c28048bd bbit1 0 ,dongle_pc_sleep_ackpayload_prep_mouse 
+48b0 202048b9 branch dongle_ackpayload_prep_end 
+
+dongle_set_pc_sleep_flag:
+48b1 6fe0c3cb fetch 1 ,mem_device_option 
+48b2 c1820000 rtnne dvc_op_dongle 
+48b3 70469303 jam 3 ,mem_dg_pc_sleep_flag 
+48b4 20600000 rtn 
+
+dongle_clear_pc_sleep_flag:
+48b5 70469300 jam 0 ,mem_dg_pc_sleep_flag 
+48b6 20600000 rtn 
+
+dongle_ackpayload_prep_keyboard:
+48b7 6fe0c693 fetch 1 ,mem_dg_pc_sleep_flag 
+48b8 c280c8c1 bbit1 1 ,dongle_pc_sleep_ackpayload_prep_keyboard 
+
+dongle_ackpayload_prep_end:
+48b9 6fe0c611 fetch 1 ,mem_24g_ackpayload_enable 
+48ba c000c8c8 beq bind_ackpayload ,dongle_g24_bind_ackpayload_prep 
+48bb c001c8cc beq kb_led_ackpayload ,dongle_g24_kb_led_ackpayload_prep 
+48bc 20600000 rtn 
+
+dongle_pc_sleep_ackpayload_prep_mouse:
+48bd 6fe0c693 fetch 1 ,mem_dg_pc_sleep_flag 
+48be 793ffe00 set0 0 ,pdata 
+48bf 67e0c693 store 1 ,mem_dg_pc_sleep_flag 
+48c0 202048c4 branch dongle_pc_sleep_ackpayload_prep 
+
+dongle_pc_sleep_ackpayload_prep_keyboard:
+48c1 6fe0c693 fetch 1 ,mem_dg_pc_sleep_flag 
+48c2 793ffe01 set0 1 ,pdata 
+48c3 67e0c693 store 1 ,mem_dg_pc_sleep_flag 
+
+dongle_pc_sleep_ackpayload_prep:
+48c4 70458801 jam 0x01 ,mem_24g_datalen 
+48c5 580000ff setarg 0xff 
+48c6 67e0c519 store 1 ,mem_24g_txbuf 
+48c7 20600000 rtn 
+
+dongle_g24_bind_ackpayload_prep:
+48c8 70461101 jam 1 ,mem_24g_ackpayload_enable 
+48c9 2040337e call g24_binding_device_check 
+48ca 24778000 nrtn user3 
+48cb 2020330a branch g24_bind_ackpayload_prep 
+
+dongle_g24_kb_led_ackpayload_prep:
+48cc 6fe0c4f9 fetch 1 ,mem_24g_rxbuf + 2 
+48cd c000c8c8 beq datatype_device1 ,dongle_g24_bind_ackpayload_prep 
+48ce c07fc8c8 beq datatype_attemp ,dongle_g24_bind_ackpayload_prep 
+48cf 7008f900 jam 0 ,mem_usb_tx_win_enable 
+48d0 70458801 jam 0x01 ,mem_24g_datalen 
+48d1 6fe0c621 fetch 1 ,mem_24g_led_status 
+48d2 67e0c519 store 1 ,mem_24g_txbuf 
+48d3 20600000 rtn 
+
+dongle_g24_mouse:
+48d4 58000001 setarg ms_report_id 
+48d5 67e08913 store 1 ,mem_usb_mouse_data 
+48d6 6fe3c5eb fetch 7 ,mem_24g_rxdata_temp + 3 
+48d7 e7e38005 istore 7 ,contw 
+48d8 6fe0c5eb fetch 1 ,mem_24g_rxdata_temp + 3 
+48d9 245a48dd ncall dongle_g24_ms_enable_blank_data_forcibly ,blank 
+48da 6fe0c5eb fetch 1 ,mem_24g_rxdata_temp + 3 
+48db 205a48e1 call dongle_g24_ms_disable_blank_data_forcibly ,blank 
+48dc 20204836 branch dongle_usb_tx_ms_data 
+
+dongle_g24_ms_enable_blank_data_forcibly:
+48dd 70466801 jam 1 ,mem_dg_ms_blank_data_enable 
+48de 58000180 setarg timer_ms_blank_delay 
+48df d8e0000d arg g24_timer_ms_blank ,queue 
+48e0 20207ce1 branch timer_init 
+
+dongle_g24_ms_disable_blank_data_forcibly:
+48e1 70466800 jam 0 ,mem_dg_ms_blank_data_enable 
+48e2 58000000 setarg 0 
+48e3 d8e0000d arg g24_timer_ms_blank ,queue 
+48e4 20207ce1 branch timer_init 
+
+dongle_g24_kb:
+48e5 6fe0c5eb fetch 1 ,mem_24g_rxdata_temp + 3 
+48e6 c00048ea beq 0 ,dongle_g24_kb_type0 
+48e7 c001491d beq 2 ,dongle_g24_kb_type2 
+48e8 c001c905 beq 3 ,dongle_g24_kb_type3 
+48e9 202033be branch g24_rx_interrupt_clear 
+
+dongle_g24_kb_type0:
+48ea 6fe0c5ed fetch 1 ,mem_24g_rxdata_temp + 5 
+48eb 67e0c611 store 1 ,mem_24g_ackpayload_enable 
+48ec 7045ed00 jam 0 ,mem_24g_rxdata_temp + 5 
+48ed d8a00923 arg mem_usb_kb_data ,contw 
+48ee d8c045ec arg mem_24g_rxdata_temp + 4 ,contr 
+48ef df200008 arg 8 ,loopcnt 
+48f0 20407cda call memcpy 
+48f1 6fe40923 fetch 8 ,mem_usb_kb_data 
+48f2 245a48fd ncall dongle_g24_kb_enable_blank_data_forcibly ,blank 
+48f3 6fe40923 fetch 8 ,mem_usb_kb_data 
+48f4 205a4901 call dongle_g24_kb_disable_blank_data_forcibly ,blank 
+48f5 6fe40923 fetch 8 ,mem_usb_kb_data 
+48f6 67e44649 store 8 ,mem_dg_kb_data_sta_data 
+48f7 684c4651 fetcht 8 ,mem_dg_kb_data_last_data 
+48f8 98467c00 isub temp ,null 
+48f9 2442c847 ncall dongle_usb_tx_enable_ep1 ,zero 
+48fa 6fe44649 fetch 8 ,mem_dg_kb_data_sta_data 
+48fb 67e44651 store 8 ,mem_dg_kb_data_last_data 
+48fc 202033be branch g24_rx_interrupt_clear 
+
+dongle_g24_kb_enable_blank_data_forcibly:
+48fd 70466501 jam 1 ,mem_dg_kb_blank_data_enable 
+48fe 58000180 setarg timer_kb_blank_delay 
+48ff d8e0000e arg g24_timer_kb_blank ,queue 
+4900 20207ce1 branch timer_init 
+
+dongle_g24_kb_disable_blank_data_forcibly:
+4901 70466500 jam 0 ,mem_dg_kb_blank_data_enable 
+4902 58000000 setarg 0 
+4903 d8e0000e arg g24_timer_kb_blank ,queue 
+4904 20207ce1 branch timer_init 
+
+dongle_g24_kb_type3:
+4905 d8a00933 arg mem_usb_kb_multikey ,contw 
+4906 d8c045eb arg mem_24g_rxdata_temp + 3 ,contr 
+4907 df200003 arg 3 ,loopcnt 
+4908 20407cda call memcpy 
+4909 6fe10934 fetch 2 ,mem_usb_kb_multikey + 1 
+490a 245a4915 ncall dongle_g24_kb_mul_enable_blank_data_forcibly ,blank 
+490b 6fe10934 fetch 2 ,mem_usb_kb_multikey + 1 
+490c 205a4919 call dongle_g24_kb_mul_disable_blank_data_forcibly ,blank 
+490d 6fe18933 fetch 3 ,mem_usb_kb_multikey 
+490e 67e1c659 store 3 ,mem_dg_kb_multikey_sta_data 
+490f 6849c65c fetcht 3 ,mem_dg_kb_multikey_last_data 
+4910 98467c00 isub temp ,null 
+4911 2442c865 ncall dongle_usb_tx_multikey_data ,zero 
+4912 6fe1c659 fetch 3 ,mem_dg_kb_multikey_sta_data 
+4913 67e1c65c store 3 ,mem_dg_kb_multikey_last_data 
+4914 202033be branch g24_rx_interrupt_clear 
+
+dongle_g24_kb_mul_enable_blank_data_forcibly:
+4915 70466601 jam 1 ,mem_dg_kb_mul_blank_data_enable 
+4916 58000180 setarg timer_kb_mul_blank_delay 
+4917 d8e0000c arg g24_timer_kb_mul_blank ,queue 
+4918 20207ce1 branch timer_init 
+
+dongle_g24_kb_mul_disable_blank_data_forcibly:
+4919 70466600 jam 0 ,mem_dg_kb_mul_blank_data_enable 
+491a 58000000 setarg 0 
+491b d8e0000c arg g24_timer_kb_mul_blank ,queue 
+491c 20207ce1 branch timer_init 
+
+dongle_g24_kb_type2:
+491d d8a00943 arg mem_usb_kb_system ,contw 
+491e d8c045eb arg mem_24g_rxdata_temp + 3 ,contr 
+491f df200002 arg 2 ,loopcnt 
+4920 20407cda call memcpy 
+4921 6fe10943 fetch 2 ,mem_usb_kb_system 
+4922 245a492d ncall dongle_g24_kb_sys_enable_blank_data_forcibly ,blank 
+4923 6fe10943 fetch 2 ,mem_usb_kb_system 
+4924 205a4931 call dongle_g24_kb_sys_disable_blank_data_forcibly ,blank 
+4925 6fe10943 fetch 2 ,mem_usb_kb_system 
+4926 67e1465f store 2 ,mem_dg_kb_system_sta_data 
+4927 68494662 fetcht 2 ,mem_dg_kb_system_last_data 
+4928 98467c00 isub temp ,null 
+4929 2442c935 ncall dongle_usb_tx_sys_data ,zero 
+492a 6fe1465f fetch 2 ,mem_dg_kb_system_sta_data 
+492b 67e14662 store 2 ,mem_dg_kb_system_last_data 
+492c 202033be branch g24_rx_interrupt_clear 
+
+dongle_g24_kb_sys_enable_blank_data_forcibly:
+492d 70466701 jam 1 ,mem_dg_kb_system_crtl_blank_data_enable 
+492e 58000180 setarg timer_kb_sys_crtl_blank_delay 
+492f d8e0000a arg g24_timer_kb_sys_crtl_blank ,queue 
+4930 20207ce1 branch timer_init 
+
+dongle_g24_kb_sys_disable_blank_data_forcibly:
+4931 70466700 jam 0 ,mem_dg_kb_system_crtl_blank_data_enable 
+4932 58000000 setarg 0 
+4933 d8e0000a arg g24_timer_kb_sys_crtl_blank ,queue 
+4934 20207ce1 branch timer_init 
+
+dongle_usb_tx_sys_data:
+4935 70090c22 jam usb_ep2_systemkey ,mem_usb_ep2_data 
+4936 20204837 branch dongle_usb_tx_enable_ep2 
+
+dongle_g24_store_dvc2_bind_flag:
+4937 6fe0c3cb fetch 1 ,mem_device_option 
+4938 c1820000 rtnne dvc_op_dongle 
+4939 6fe0c648 fetch 1 ,mem_dg_kb_bind_flag 
+493a c12d0000 rtneq dongle_kb_bind_success 
+
+dongle_prep_soft_reset:
+493b 70469201 jam 1 ,mem_dg_kb_bind_success 
+493c 20600000 rtn 
+
+dongle_kb_bind_soft_reset:
+493d 6fe0c3cb fetch 1 ,mem_device_option 
+493e c1820000 rtnne dvc_op_dongle 
+493f 6fe0c692 fetch 1 ,mem_dg_kb_bind_success 
+4940 207a0000 rtn blank 
+4941 70067800 jam 0 ,mem_temp 
+
+dongle_wirte_efuse_bind_status:
+4942 7046485a jam dongle_kb_bind_success ,mem_dg_kb_bind_flag 
+4943 204047f4 call dongle_write_kb_bind_status 
+4944 204047ef call dongle_read_kb_bind_status 
+4945 6fe08678 fetch 1 ,mem_temp 
+4946 1fe0fe01 increase 1 ,pdata 
+4947 67e08678 store 1 ,mem_temp 
+4948 c07feca3 beq 0xff ,soft_reset_chip 
+4949 6fe0c648 fetch 1 ,mem_dg_kb_bind_flag 
+494a c0ad4942 bne dongle_kb_bind_success ,dongle_wirte_efuse_bind_status 
+494b 20206ca3 branch soft_reset_chip 
+
+keyboard_softreset_process:
+494c 6fe0c3cb fetch 1 ,mem_device_option 
+494d c1878000 rtnne dvc_op_keyboard 
+494e 204054ac call mouse_wakeup_from_power_check 
+494f 24342002 nbranch soft_reset + 1 ,user 
+4950 6fe0c846 fetch 1 ,mem_power_on_flag 
+4951 203a2002 branch soft_reset + 1 ,blank 
+4952 6fe0c655 fetch 1 ,mem_config_select_device_button_gpio 
+4953 c17f8000 rtneq ui_button_gpio_disable 
+4954 1fe20e00 copy pdata ,queue 
+4955 6fe2069d fetch 4 ,mem_saved_gpio_in 
+4956 afec0000 qisolate0 pdata 
+4957 2040ce45 call keyboard_pb_set ,true 
+4958 20202003 branch soft_reset + 2 
+
+keyboard_init:
+4959 20407396 call enable_authrom 
+495a 204049a1 call keyboard_setting_config 
+495b 204049c8 call keyboard_gpio_init 
+495c 204049ea call keyboard_low_vol_mult_set 
+495d 20758000 rtn wake 
+495e 20404966 call keyboard_usb_check_enable 
+495f 20404a7a call keyboard_cb_fuction 
+4960 6fe0c663 fetch 1 ,mem_usb_addr 
+4961 c3838000 rtnbit1 7 
+
+keyboard_init_wireless:
+4962 6fe144e9 fetch 2 ,mem_ui_state_map 
+4963 c2864b95 bbit1 ui_state_btn_down ,keyboard_start_discovery 
+4964 20405eb6 call mouse_check_select_device_by_switch 
+4965 20204bcf branch keyboard_start_work 
+
+keyboard_usb_check_enable:
+4966 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4967 c4068000 rtnbit0 mouse_enable_usb 
+4968 5800496c setarg keyboard_usb_config_param 
+4969 67e10859 store 2 ,mem_cb_usb_config 
+496a 704664a5 jam mouse_usb_interface_remove ,mem_mouse_usb_vdd_status 
+496b 2020498e branch keyboard_usb_interface_check 
+
+keyboard_usb_config_param:
+496c 2040496f call keyboard_usb_config_kb_check 
+496d 20404974 call keyboard_usb_config_param_init 
+496e 20204984 branch keyboard_usb_config_param_setup 
+
+keyboard_usb_config_kb_check:
+496f 70466500 jam dongle_kb_bind_eeprom_offect ,mem_mouse_usb_keyboard_flag 
+4970 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4971 c40b0000 rtnbit0 mouse_enable_keyboard 
+4972 7046655a jam dongle_kb_bind_success ,mem_mouse_usb_keyboard_flag 
+4973 20600000 rtn 
+
+keyboard_usb_config_param_init:
+4974 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4975 c28ec97b bbit1 mouse_enable_usb_250 ,keyboard_usb_report_rate_set_250hz 
+4976 c28f497e bbit1 mouse_enable_usb_500 ,keyboard_usb_report_rate_set_500hz 
+4977 c28fc981 bbit1 mouse_enable_usb_1000 ,keyboard_usb_report_rate_set_1000hz 
+4978 70466219 jam 0x19 ,mem_wire_usb_interval 
+4979 70085b08 jam 0x08 ,mem_usb_tx_interval 
+497a 20600000 rtn 
+
+keyboard_usb_report_rate_set_250hz:
+497b 7046620c jam 0x0c ,mem_wire_usb_interval 
+497c 70085b04 jam 0x04 ,mem_usb_tx_interval 
+497d 20600000 rtn 
+
+keyboard_usb_report_rate_set_500hz:
+497e 70466206 jam 0x06 ,mem_wire_usb_interval 
+497f 70085b02 jam 0x02 ,mem_usb_tx_interval 
+4980 20600000 rtn 
+
+keyboard_usb_report_rate_set_1000hz:
+4981 70466203 jam 0x03 ,mem_wire_usb_interval 
+4982 70085b01 jam 0x01 ,mem_usb_tx_interval 
+4983 20600000 rtn 
+
+keyboard_usb_config_param_setup:
+4984 20407966 call usb_tx_interval_config 
+4985 20404987 call keyboard_usb_vid_pid_config 
+4986 2020498c branch keyboard_usb_hid_icon_config 
+
+keyboard_usb_vid_pid_config:
+4987 6fe0885c fetch 1 ,mem_usb_vid_pid 
+4988 207a0000 rtn blank 
+4989 6fe0c665 fetch 1 ,mem_mouse_usb_keyboard_flag 
+498a c02d480c beq dongle_kb_bind_success ,dongle_usb_vid_pid_for_suit 
+498b 20204809 branch dongle_usb_vid_pid_for_mouse_only_auto_pair 
+
+keyboard_usb_hid_icon_config:
+498c 6fe0c665 fetch 1 ,mem_mouse_usb_keyboard_flag 
+498d 2020480f branch dongle_usb_hid_icon_config + 1 
+
+keyboard_usb_interface_check:
+498e 44a0c008 bpatch patch08_1 ,mem_patch08 
+498f 6848886c fetcht 1 ,mem_usb_offline_check_gpio 
+4990 20406ee6 call gpio_get_bit 
+4991 2020c993 branch keyboard_usb_gpio_low ,true 
+4992 2020499a branch keyboard_usb_gpio_high 
+
+keyboard_usb_gpio_low:
+4993 6fe0c664 fetch 1 ,mem_mouse_usb_vdd_status 
+4994 c1528000 rtneq mouse_usb_interface_remove 
+4995 704664a5 jam mouse_usb_interface_remove ,mem_mouse_usb_vdd_status 
+4996 70090e00 jam 0 ,mem_usb_device_enumeration_endflag 
+4997 70070900 jam 0 ,mem_usb_status 
+4998 70090000 jam 0 ,mem_usb_state 
+4999 20204962 branch keyboard_init_wireless 
+
+keyboard_usb_gpio_high:
+499a 6fe0c664 fetch 1 ,mem_mouse_usb_vdd_status 
+499b c12d0000 rtneq mouse_usb_interface_insert 
+499c 7046645a jam mouse_usb_interface_insert ,mem_mouse_usb_vdd_status 
+499d 20406018 call mouse_24g_stop 
+499e 20405aaa call mouse_stop_bluetooth_mode 
+499f 20404f70 call keyboard_device_led_all_off 
+49a0 20207912 branch usb_init 
+
+keyboard_setting_config:
+49a1 20758000 rtn wake 
+49a2 204035f0 call g24_transmit_init 
+49a3 2040325b call g24_chmap_param_init 
+49a4 204049af call keyboard_param_init 
+49a5 6848c865 fetcht 1 ,mem_mcu_rstb_gpio 
+49a6 20406ef3 call gpio_out_inactive 
+49a7 20404b6d call keyboard_device_led_off 
+49a8 20406177 call mouse_device_multi_led_parm_init 
+49a9 20402a41 call le_set_fixed_ltk_justwork 
+49aa 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+49ab c28a49fd bbit1 mouse_enable_otp ,keyboard_load_otp_info_check 
+49ac c289dd60 bbit1 mouse_enable_eeprom ,mouse_load_eeprom_info_check 
+49ad c2895d6e bbit1 mouse_enable_flash ,mouse_load_flash_info_check 
+49ae 20600000 rtn 
+
+keyboard_param_init:
+49af 2040543b call mouse_param_common_init 
+49b0 7048eb00 jam 0 ,mem_same_keyvalue_timerout_flag 
+49b1 58230170 setarg 0x230170 
+49b2 67e1c62d store 3 ,mem_mouse_vdd_full_vol 
+49b3 58015301 setarg 0x015301 
+49b4 e7e18005 istore 3 ,contw 
+49b5 d8a047a0 arg mem_le_adv_swift_pair ,contw 
+49b6 df200014 arg 20 ,loopcnt 
+49b7 20407ca1 call clear_mem 
+49b8 6fe0c26b fetch 1 ,mem_le_name_len 
+49b9 1fe67c0c sub pdata ,12 ,null 
+49ba 242149c6 nbranch ble_name_set_no_swift_pair ,positive 
+49bb 5806ff06 setarg 0x06ff06 
+49bc 67e1c7a0 store 3 ,mem_le_adv_swift_pair 
+49bd 58000300 setarg 0x000300 
+49be e7e18005 istore 3 ,contw 
+49bf 58000080 setarg 0x80 
+49c0 e7e08005 istore 1 ,contw 
+
+ble_store_le_name:
+49c1 6fe0c26b fetch 1 ,mem_le_name_len 
+49c2 1fe0fe01 increase 1 ,pdata 
+49c3 1fe27200 copy pdata ,loopcnt 
+49c4 d8c04369 arg mem_le_scan_data ,contr 
+49c5 20207cda branch memcpy 
+
+ble_name_set_no_swift_pair:
+49c6 d8a047a0 arg mem_le_adv_swift_pair ,contw 
+49c7 202049c1 branch ble_store_le_name 
+
+keyboard_gpio_init:
+49c8 6848c864 fetcht 1 ,mem_mcu_clk_gpio 
+49c9 20406f0f call gpio_set_high_impedance 
+49ca 6848c863 fetcht 1 ,mem_mcu_stb_gpio 
+49cb 20406f0f call gpio_set_high_impedance 
+49cc 6848c865 fetcht 1 ,mem_mcu_rstb_gpio 
+49cd 20406f0f call gpio_set_high_impedance 
+49ce 5800486e setarg mem_key_row_gpio 
+49cf 67e14896 store 2 ,mem_kb_row_ptr 
+49d0 58004876 setarg mem_key_col_gpio 
+49d1 67e14898 store 2 ,mem_kb_col_ptr 
+49d2 5800488a setarg mem_key_excol_gpio 
+49d3 67e1489a store 2 ,mem_kb_excol_ptr 
+49d4 6fe14896 fetch 2 ,mem_kb_row_ptr 
+49d5 1fe22400 copy pdata ,regb 
+49d6 df200008 arg 8 ,loopcnt 
+
+keyboard_key_row_init:
+49d7 e8408012 ifetcht 1 ,regb 
+49d8 18467cff sub temp ,ui_button_gpio_disable ,null 
+49d9 2442c9e7 ncall keboard_gpio_set_high_impedance ,zero 
+49da 1a40a401 increase 1 ,regb 
+49db c20049d7 loop keyboard_key_row_init 
+49dc 204023fd call lpm_write_gpio_wakeup 
+49dd 6fe14898 fetch 2 ,mem_kb_col_ptr 
+49de 1fe22400 copy pdata ,regb 
+49df 1fe22600 copy pdata ,regc 
+49e0 df20000b arg 11 ,loopcnt 
+
+keyboard_key_cow_init:
+49e1 e8408012 ifetcht 1 ,regb 
+49e2 284ffe07 isolate1 7 ,temp 
+49e3 2440ef0f ncall gpio_set_high_impedance ,true 
+49e4 1a40a401 increase 1 ,regb 
+49e5 c20049e1 loop keyboard_key_cow_init 
+49e6 20600000 rtn 
+
+keboard_gpio_set_high_impedance:
+49e7 20406f0f call gpio_set_high_impedance 
+49e8 e8408012 ifetcht 1 ,regb 
+49e9 20206ec6 branch gpio_set_low_pullup 
+
+keyboard_low_vol_mult_set:
+49ea 6fe0c666 fetch 1 ,mem_device_flag 
+49eb c000c9f1 beq mode_bt_device1 ,keyboard_low_vol_mult_ble_set 
+49ec 585d4800 setarg 0x5d4800 
+49ed 67e24613 store 4 ,mem_24g_long_sleep_set1 
+49ee 6fe0c40c fetch 1 ,mem_adc_power_flag 
+49ef c4000000 rtnbit0 0 
+49f0 20205fe4 branch mouse_24g_long_sleep_set 
+
+keyboard_low_vol_mult_ble_set:
+49f1 70496b0c jam 0x0c ,mem_lpm_mult_init 
+49f2 6fe0c40c fetch 1 ,mem_adc_power_flag 
+49f3 c4000000 rtnbit0 0 
+49f4 70496b10 jam 0x10 ,mem_lpm_mult_init 
+49f5 6fe0c77e fetch 1 ,mem_mouse_current_mult_timer 
+49f6 203a5c01 branch mouse_current_mult_reinit ,blank 
+49f7 20600000 rtn 
+
+keyboard_pairing_check_otp_offset:
+49f8 6fe149df fetch 2 ,mem_otp_read_retention_offset 
+49f9 d8400528 arg 0x528 ,temp 
+49fa 98467c00 isub temp ,null 
+49fb 24610000 nrtn positive 
+49fc 2020235a branch assert 
+
+keyboard_load_otp_info_check:
+49fd 44a14008 bpatch patch08_2 ,mem_patch08 
+49fe 6fe0c666 fetch 1 ,mem_device_flag 
+49ff c0004a02 beq mode_24g_device ,keyboard_load_otp_device_info_g24_init 
+4a00 c000ca0c beq mode_bt_device1 ,keyboard_load_otp_device_info_ble_init 
+4a01 20600000 rtn 
+
+keyboard_load_otp_device_info_g24_init:
+4a02 db000050 arg 80 ,regd 
+4a03 58000400 setarg 0x400 
+4a04 9b06fc00 idiv regd 
+4a05 20407d62 call wait_div_end 
+4a06 1807fe00 quotient pdata 
+4a07 67e10670 store 2 ,mem_pdatatemp 
+4a08 dfe01fcc arg 0x1fcc ,pdata 
+4a09 d8400004 arg 4 ,temp 
+4a0a dd600004 arg 4 ,rege 
+4a0b 20204a16 branch keyboard_load_otp_device_info 
+
+keyboard_load_otp_device_info_ble_init:
+4a0c db000118 arg 280 ,regd 
+4a0d 58000400 setarg 0x400 
+4a0e 9b06fc00 idiv regd 
+4a0f 20407d62 call wait_div_end 
+4a10 1807fe00 quotient pdata 
+4a11 67e10670 store 2 ,mem_pdatatemp 
+4a12 dfe01fc2 arg 0x1fc2 ,pdata 
+4a13 d840000e arg 14 ,temp 
+4a14 dd60000e arg 14 ,rege 
+4a15 20204a16 branch keyboard_load_otp_device_info 
+
+keyboard_load_otp_device_info:
+4a16 60488678 storet 1 ,mem_temp 
+4a17 da2049c7 arg mem_otp_read_retention_memory ,rega 
+4a18 da600000 arg 0 ,regc 
+
+keyboard_load_otp_info_check_page_loop:
+4a19 1fe22400 copy pdata ,regb 
+4a1a 6f208678 fetchr loopcnt ,1 ,mem_temp 
+4a1b 20406b74 call otp_read_data 
+4a1c 6fe449c7 fetch 8 ,mem_otp_read_retention_memory 
+4a1d 684c49cf fetcht 8 ,mem_otp_read_retention_memory + 8 
+4a1e 9841fe00 ior temp ,pdata 
+4a1f 684c49d7 fetcht 8 ,mem_otp_read_retention_memory + 16 
+4a20 9841fe00 ior temp ,pdata 
+4a21 203a4a28 branch keyboard_load_otp_info_check_first_time ,blank 
+4a22 1a60a601 increase 1 ,regc 
+4a23 6fe10670 fetch 2 ,mem_pdatatemp 
+4a24 9a667c00 isub regc ,null 
+4a25 1a427e00 copy regb ,pdata 
+4a26 9b067e00 isub regd ,pdata 
+4a27 20204a19 branch keyboard_load_otp_info_check_page_loop 
+
+keyboard_load_otp_info_check_first_time:
+4a28 1a667c00 sub regc ,0 ,null 
+4a29 2022ca38 branch keyboard_load_otp_info_check_first_time_process ,zero 
+
+keyboard_load_otp_info_check_first_time_loop_init:
+4a2a 1a427e00 copy regb ,pdata 
+4a2b 9b00fe00 iadd regd ,pdata 
+
+keyboard_load_otp_info_check_first_time_loop:
+4a2c 9d667e00 isub rege ,pdata 
+4a2d 1fe22400 copy pdata ,regb 
+4a2e 6f208678 fetchr loopcnt ,1 ,mem_temp 
+4a2f 20406b74 call otp_read_data 
+4a30 6fe449c7 fetch 8 ,mem_otp_read_retention_memory 
+4a31 684c49cf fetcht 8 ,mem_otp_read_retention_memory + 8 
+4a32 9841fe00 ior temp ,pdata 
+4a33 684c49d7 fetcht 8 ,mem_otp_read_retention_memory + 16 
+4a34 9841fe00 ior temp ,pdata 
+4a35 203a4a3a branch keyboard_load_otp_info_check_offset_process ,blank 
+4a36 1a427e00 copy regb ,pdata 
+4a37 20204a2c branch keyboard_load_otp_info_check_first_time_loop 
+
+keyboard_load_otp_info_check_first_time_process:
+4a38 6560c9df storer rege ,1 ,mem_otp_read_retention_offset 
+4a39 20600000 rtn 
+
+keyboard_load_otp_info_check_offset_process:
+4a3a 44a1c008 bpatch patch08_3 ,mem_patch08 
+4a3b 58001fd0 setarg 0x1fd0 
+4a3c 9a467e00 isub regb ,pdata 
+4a3d 67e149df store 2 ,mem_otp_read_retention_offset 
+4a3e 1a427e00 copy regb ,pdata 
+4a3f 9d60a400 iadd rege ,regb 
+4a40 6f208678 fetchr loopcnt ,1 ,mem_temp 
+4a41 da2049c7 arg mem_otp_read_retention_memory ,rega 
+4a42 20406b74 call otp_read_data 
+4a43 6fe0c666 fetch 1 ,mem_device_flag 
+4a44 c0004a47 beq mode_24g_device ,keyboard_load_otp_info_check_offset_process_g24 
+4a45 c000ca4a beq mode_bt_device1 ,keyboard_load_otp_info_check_offset_process_ble 
+4a46 20600000 rtn 
+
+keyboard_load_otp_info_check_offset_process_g24:
+4a47 6fe349c7 fetch 6 ,mem_otp_read_retention_memory 
+4a48 67e24691 store 4 ,mem_mouse_24g_addr 
+4a49 20204a76 branch keybaord_load_device_info 
+
+keyboard_load_otp_info_check_offset_process_ble:
+4a4a 6fe0c9c7 fetch 1 ,mem_otp_read_retention_memory 
+4a4b 1fe67c03 sub pdata ,system_os_mac ,null 
+4a4c 24417dca ncall set_pdata_0 ,positive 
+4a4d 67e0c9c6 store 1 ,mem_kb_computer_system 
+4a4e 6fe0c9c8 fetch 1 ,mem_otp_read_retention_memory + 1 
+4a4f 67e0c667 store 1 ,mem_device1_type 
+4a50 6fe349c9 fetch 6 ,mem_otp_read_retention_memory + 2 
+4a51 67e34668 store 6 ,mem_device1_addr 
+4a52 6fe349cf fetch 6 ,mem_otp_read_retention_memory + 8 
+4a53 67e3466e store 6 ,mem_device1_locall_addr 
+4a54 20205c6f branch mouse_select_reconn_device 
+
+keyboard_load_otp_info_check_overwise:
+4a55 2020235a branch assert 
+
+keyboard_store_device_info:
+4a56 44a24008 bpatch patch08_4 ,mem_patch08 
+4a57 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4a58 c28a4a5c bbit1 mouse_enable_otp ,keyboard_store_otp_device_info 
+4a59 c289dcb1 bbit1 mouse_enable_eeprom ,mouse_store_eeprom_device_info 
+4a5a c2895cb9 bbit1 mouse_enable_flash ,mouse_store_flash_device_info 
+4a5b 20600000 rtn 
+
+keyboard_store_otp_device_info:
+4a5c 20600000 rtn 
+4a5d 6fe0c666 fetch 1 ,mem_device_flag 
+4a5e c0004a61 beq mode_24g_device ,keyboard_store_otp_device_info_g24 
+4a5f c000ca6b beq mode_bt_device1 ,keyboard_store_otp_device_info_ble 
+4a60 20600000 rtn 
+
+keyboard_store_otp_device_info_g24:
+4a61 684949df fetcht 2 ,mem_otp_read_retention_offset 
+4a62 58001fd0 setarg 0x1fd0 
+4a63 98462400 isub temp ,regb 
+4a64 da204691 arg mem_mouse_24g_addr ,rega 
+4a65 df200004 arg 4 ,loopcnt 
+4a66 20406b45 call otp_write 
+4a67 684949df fetcht 2 ,mem_otp_read_retention_offset 
+4a68 18408404 increase 4 ,temp 
+4a69 604949df storet 2 ,mem_otp_read_retention_offset 
+4a6a 20600000 rtn 
+
+keyboard_store_otp_device_info_ble:
+4a6b 684949df fetcht 2 ,mem_otp_read_retention_offset 
+4a6c 58001fd0 setarg 0x1fd0 
+4a6d 98462400 isub temp ,regb 
+4a6e 1a40a401 add regb ,1 ,regb 
+4a6f da204668 arg mem_device1_addr ,rega 
+4a70 df200006 arg 6 ,loopcnt 
+4a71 20406b45 call otp_write 
+4a72 1a40a407 add regb ,7 ,regb 
+4a73 da20466e arg mem_device1_locall_addr ,rega 
+4a74 df200006 arg 6 ,loopcnt 
+4a75 20206b45 branch otp_write 
+
+keybaord_load_device_info:
+4a76 6fe24691 fetch 4 ,mem_mouse_24g_addr 
+4a77 67e245e8 store 4 ,mem_24g_receiver_addr 
+4a78 67e2458f store 4 ,mem_24g_addr 
+4a79 20600000 rtn 
+
+keyboard_cb_fuction:
+4a7a 44a2c008 bpatch patch08_5 ,mem_patch08 
+4a7b 58006109 setarg mouse_24g_before_lpm_sleep 
+4a7c 67e143e9 store 2 ,mem_cb_before_lpm_sleep 
+4a7d 58004fe5 setarg keyboard_24g_package_data 
+4a7e 67e145f2 store 2 ,mem_cb_24g_transmit_data 
+4a7f 58004ff8 setarg keyboard_24g_search_dongle 
+4a80 67e145f4 store 2 ,mem_cb_24g_search_receiver 
+4a81 58004f41 setarg keyboard_lpm_before_common 
+4a82 67e145f6 store 2 ,mem_cb_24g_lpm_before 
+4a83 58004be6 setarg keyboard_le 
+4a84 67e143d9 store 2 ,mem_cb_le_process 
+4a85 58004f5d setarg keyboard_process_lpm_before 
+4a86 67e143d7 store 2 ,mem_cb_before_lpm 
+4a87 58004a9a setarg keyboard_priority_bb_event 
+4a88 67e143dd store 2 ,mem_cb_bb_event_process 
+4a89 58004bcc setarg keyboard_idle 
+4a8a 67e143db store 2 ,mem_cb_idle_process 
+4a8b 58004f62 setarg keyboard_before_hibernate 
+4a8c 67e143d5 store 2 ,mem_cb_before_hibernate 
+4a8d 58005b08 setarg mouse_le_bb_event_connect_complete 
+4a8e 67e143df store 2 ,mem_cb_att_write 
+4a8f 58004b19 setarg keyboard_bb_event_timer 
+4a90 67e143e3 store 2 ,mem_cb_event_timer 
+4a91 580055fa setarg mouse_spi_write_flash_cb 
+4a92 67e143e7 store 2 ,mem_cb_spi_flash_write_complate 
+4a93 580054c5 setarg mouse_lpm_check_wake_lock 
+4a94 67e143d3 store 2 ,mem_cb_check_wakelock 
+4a95 58006221 setarg mouse_le_transmit 
+4a96 67e143e1 store 2 ,mem_cb_ble_transmit 
+4a97 58006228 setarg mouse_set_lpm_mult 
+4a98 67e143e5 store 2 ,mem_cb_bt_set_mult 
+4a99 20600000 rtn 
+
+keyboard_priority_bb_event:
+4a9a 44a34008 bpatch patch08_6 ,mem_patch08 
+4a9b 1a627e00 copy regc ,pdata 
+4a9c c0194acb beq bt_evt_le_start_enc ,keyboard_le_ll_start_encryt 
+4a9d c0224ad3 beq bt_evt_le_parse_conn_param_accepted ,keyboard_le_parse_conn_param_accepted 
+4a9e c0204add beq bt_evt_le_parse_conn_papa_update_rsp ,keyboard_le_conn_param_update_rsp_recieved 
+4a9f c00acab8 beq bt_evt_le_disconnected ,keyboard_le_bb_disconnected 
+4aa0 c00a4aaa beq bt_evt_le_connected ,keyboard_le_bb_event_connected 
+4aa1 c0084b90 beq bt_evt_button_long_pressed ,keyboard_bb_event_discovery_btn 
+4aa2 c018daed beq bt_evt_le_pairing_success ,mouse_le_pairing_success 
+4aa3 c014daef beq bt_evt_le_enc_info ,mouse_le_enc_info 
+4aa4 c01f4329 beq bt_evt_le_pairing_complete ,app_ble_store_reconn_info 
+4aa5 c0225b10 beq bt_evt_le_parse_conn_param_accepted ,mouse_le_parse_conn_param_accepted 
+4aa6 c01ccae2 beq bt_evt_24g_pairing_complete ,keyboard_24g_pairing_complete 
+4aa7 c01e4ae5 beq bt_evt_24g_attempt_success ,keyboard_24g_attempt_success 
+4aa8 c01d4afe beq bt_evt_24g_attempt_fail ,keyboard_24g_attempt_fail 
+4aa9 20600000 rtn 
+
+keyboard_le_bb_event_connected:
+4aaa 70477d00 jam 0 ,mem_mouse_long_mult_flag 
+4aab 70479401 jam 1 ,mem_mouse_le_bb_connected_flag 
+4aac 20406042 call mouse_24g_first_store_reconn_info 
+4aad 6fe0c795 fetch 1 ,mem_mouse_le_reconnect_flag 
+4aae 243a4ab0 nbranch keyboard_le_bb_event_connected_next ,blank 
+4aaf 70479614 jam 0x14 ,mem_mouse_send_secutiry_request_timer 
+
+keyboard_le_bb_event_connected_next:
+4ab0 6fe143f1 fetch app_disc_rsn_size ,mem_app_disconn_reason_flag 
+4ab1 793ffe00 set0 app_disc_by_button ,pdata 
+4ab2 67e143f1 store app_disc_rsn_size ,mem_app_disconn_reason_flag 
+4ab3 70484500 jam 0 ,mem_mouse_direct_timer 
+4ab4 6fe147be fetch 2 ,mem_le_battery_level_updata_timer_init 
+4ab5 67e147c0 store 2 ,mem_le_battery_level_updata_timer 
+4ab6 20405c0b call mouse_no_data_timer_init 
+4ab7 20204bbd branch keyboard_stop_discovery 
+
+keyboard_le_bb_disconnected:
+4ab8 58000000 setarg 0 
+4ab9 67e147c0 store 2 ,mem_le_battery_level_updata_timer 
+4aba 67e0c860 store 1 ,mem_keyboard_le_send_conn_param_update 
+4abb 67e0c861 store 1 ,mem_keyboard_le_send_conn_param_update_timer 
+4abc 67e0c794 store 1 ,mem_mouse_le_bb_connected_flag 
+
+keyboard_le_bb_disconnected_next:
+4abd 7047c200 jam le_lpm_enable ,mem_mouse_le_conn_param_reject 
+4abe 70495600 jam 0 ,mem_mouse_clear_sensor_data_flag 
+4abf 204029cb call le_clr_config_more_data 
+4ac0 20204ac1 branch keyboard_bb_disconnected 
+
+keyboard_bb_disconnected:
+4ac1 20405b7b call mouse_bb_discon_clear_stack 
+4ac2 6fe143ef fetch app_disc_rsn_size ,mem_app_disconn_reason 
+4ac3 c283cac6 bbit1 app_disc_ble ,keyboard4_0_event_bb_disconn 
+4ac4 c28042fc bbit1 app_disc_by_button ,app_disconn_reason_clear 
+4ac5 20204b95 branch keyboard_start_discovery 
+
+keyboard4_0_event_bb_disconn:
+4ac6 20405b21 call mouse_le_clean_connect_flag 
+4ac7 6fe143ef fetch app_disc_rsn_size ,mem_app_disconn_reason 
+4ac8 c28042fc bbit1 app_disc_by_button ,app_disconn_reason_clear 
+4ac9 20407d7c call ice_break 
+4aca 20204f6c branch keyboard_app_enter_hibernate 
+
+keyboard_le_ll_start_encryt:
+4acb 6fe0c795 fetch 1 ,mem_mouse_le_reconnect_flag 
+4acc c000cad0 beq 1 ,keyboard_le_ll_reconn_start_encryt 
+4acd 70484414 jam 20 ,mem_le_start_encrypt_timer 
+4ace 70486205 jam 5 ,mem_le_start_auto_reco_timer 
+4acf 20205af6 branch mouse_le_ll_enable_start_enc_flag 
+
+keyboard_le_ll_reconn_start_encryt:
+4ad0 20405aef call mouse_updata_le_param 
+4ad1 70484405 jam 5 ,mem_le_start_encrypt_timer 
+4ad2 20205af6 branch mouse_le_ll_enable_start_enc_flag 
+
+keyboard_le_parse_conn_param_accepted:
+4ad3 6fe081a2 fetch 1 ,mem_le_new_conninterval 
+4ad4 1fe67c0c sub pdata ,le_interval_15ms ,null 
+4ad5 24215b06 nbranch mouse_le_conn_param_lpm_disable ,positive 
+4ad6 6fe081a4 fetch 1 ,mem_le_new_connslavelatency 
+4ad7 6848c96b fetcht 1 ,mem_lpm_mult_init 
+4ad8 98467c00 isub temp ,null 
+4ad9 20215b1d branch mouse_le_lpm_mult_reinit ,positive 
+4ada 6fe081a4 fetch 1 ,mem_le_new_connslavelatency 
+4adb 67e0c0c0 store 1 ,mem_lpm_mult 
+4adc 20205b1f branch mouse_le_conn_param_lpm_enable 
+
+keyboard_le_conn_param_update_rsp_recieved:
+4add 6fe0c860 fetch 1 ,mem_keyboard_le_send_conn_param_update 
+4ade 247a0000 nrtn blank 
+4adf 70486001 jam 1 ,mem_keyboard_le_send_conn_param_update 
+4ae0 7048611e jam 30 ,mem_keyboard_le_send_conn_param_update_timer 
+4ae1 20600000 rtn 
+
+keyboard_24g_pairing_complete:
+4ae2 20404af9 call keyboard_get_24g_led_enable 
+4ae3 20405c0b call mouse_no_data_timer_init 
+4ae4 20206086 branch mouse_24g_pairing_complete_common 
+
+keyboard_24g_attempt_success:
+4ae5 20404af9 call keyboard_get_24g_led_enable 
+4ae6 6fe2458f fetch 4 ,mem_24g_addr 
+4ae7 67e245e8 store 4 ,mem_24g_receiver_addr 
+4ae8 67e24691 store 4 ,mem_mouse_24g_addr 
+4ae9 2040355a call g24_ch_syncword_crc8_init 
+4aea 2040618e call mouse_device_poweron_led_config 
+4aeb 20405c0b call mouse_no_data_timer_init 
+4aec 20206075 branch mouse_24g_attempt_success 
+
+keyboard_24g_get_led:
+4aed 70485f02 jam device_data_tpye_standard_keyboard ,mem_keyboard_data_send_flag 
+4aee 20404f3e call keyboard_clear_key_data 
+4aef 70472c03 jam 0x03 ,mem_customer_key_press + 2 
+4af0 20600000 rtn 
+
+keyboard_24g_led_get_status_check:
+4af1 df200006 arg 6 ,loopcnt 
+4af2 d8c04858 arg mem_keyboard_tx_data + 3 ,contr 
+
+keyboard_24g_led_data_check:
+4af3 efe08006 ifetch 1 ,contr 
+4af4 c029caf9 beq hid_key_num_lock ,keyboard_get_24g_led_enable 
+4af5 c01ccaf9 beq hid_key_caps_lock ,keyboard_get_24g_led_enable 
+4af6 c023caf9 beq hid_key_scroll_lock ,keyboard_get_24g_led_enable 
+4af7 c2004af3 loop keyboard_24g_led_data_check 
+4af8 20600000 rtn 
+
+keyboard_get_24g_led_enable:
+4af9 7049ab03 jam 0x03 ,mem_keyboard_led_status_get 
+4afa 7048f401 jam 1 ,mem_keyboard_data_change_flag 
+4afb 20600000 rtn 
+
+keyboard_set_repeat_send_flag:
+4afc 7049a901 jam 1 ,mem_24g_repeat_send_flag 
+4afd 20600000 rtn 
+
+keyboard_24g_attempt_fail:
+4afe 6fe0c600 fetch 1 ,mem_24g_attempt_fail_flag 
+4aff 243a4b11 nbranch keyboard_24g_hibernate_set ,blank 
+4b00 6fe0c5e2 fetch 1 ,mem_24g_reconn_type 
+4b01 c0014b0a beq fast_conn_and_3_0_addr ,keyboard_24g_fast_conn_attempt_fail 
+4b02 c001cb04 beq receiver_and_3_0_addr ,keyboard_24g_attempt_fail_enter_hibernate 
+4b03 20204b04 branch keyboard_24g_attempt_fail_enter_hibernate 
+
+keyboard_24g_attempt_fail_enter_hibernate:
+4b04 20406018 call mouse_24g_stop 
+4b05 6fe0c77f fetch 1 ,mem_reconn_times 
+4b06 243a5f1b nbranch mouse_polling_device ,blank 
+4b07 6fe0c666 fetch 1 ,mem_device_flag 
+4b08 c0004f6c beq mode_24g_device ,keyboard_app_enter_hibernate 
+4b09 20600000 rtn 
+
+keyboard_24g_fast_conn_attempt_fail:
+4b0a 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4b0b c29f6034 bbit1 mouse_enable_24g_first_auto_pairing ,mouse_24g_start_auto_pair 
+4b0c c2986034 bbit1 mouse_enable_auto_24g_paring ,mouse_24g_start_auto_pair 
+4b0d c31d6067 bbit0 mouse_enable_24g_auto_pair_nerver_been_paired ,mouse_24g_reconn_dongle_start 
+4b0e 6fe24691 fetch 4 ,mem_mouse_24g_addr 
+4b0f 203a4e39 branch keyboard_24g_start_pair_mode ,blank 
+4b10 20206067 branch mouse_24g_reconn_dongle_start 
+
+keyboard_24g_hibernate_set:
+4b11 70460000 jam 0 ,mem_24g_attempt_fail_flag 
+4b12 20403647 call g24_transmit_next_packet 
+4b13 5fffffff setarg -1 
+4b14 67e445af store 8 ,mem_24g_enter_hibernate 
+4b15 58000000 setarg 0 
+4b16 67e3c846 store 7 ,mem_mouse_key 
+4b17 70473f01 jam 1 ,mem_sensor_shutdown_flag 
+4b18 20204f9a branch keyboard_g24_long_sleep 
+
+keyboard_bb_event_timer:
+4b19 44a3c008 bpatch patch08_7 ,mem_patch08 
+4b1a 2040553d call mouse_adc_read 
+4b1b 20404b4f call keyboard_low_voltage_param_set 
+4b1c 2040614d call mouse_low_voltage_led_timer 
+4b1d 2040328e call g24_pair_timeout_timer 
+4b1e 20403531 call g24_reconn_timeout_timer 
+4b1f 20405fdd call mouse_24g_long_sleep_param_update_timer 
+4b20 20404b62 call keyboard_24g_repeat_send_data 
+4b21 20404b68 call keyboard_24g_led_status_get_timer 
+4b22 20404b43 call keyboard_check_discovery_timeout_timer 
+4b23 20404b58 call keyboard_check_direct_timeout_timer 
+4b24 20405be1 call mouse_le_enable_att_list_timer 
+4b25 20404b5c call keyboard_le_battery_updata_timer 
+4b26 20405be4 call mouse_le_send_smp_security_request_timer 
+4b27 20404b5f call keyboard_le_send_conn_param_update_timer 
+4b28 20404b55 call keyboard_le_auto_recognize_timer 
+4b29 20405bfe call mouse_current_mult_update_timer 
+4b2a 204056b6 call mouse_wheel_trigger_timer 
+4b2b 20404b48 call keyboard_store_information_delay_timer 
+4b2c 20404b72 call keyboard_capslock_led_on_timer 
+4b2d 20404b82 call keyboard_long_press_timer 
+4b2e 20404b87 call keyboard_commbination_delay_release_timer 
+4b2f 6fe0c666 fetch 1 ,mem_device_flag 
+4b30 c0004b8a beq mode_24g_device ,keyboard_check_no_data_timeout_timer 
+4b31 20205c05 branch mouse_check_no_data_timeout_timer 
+
+keyboard_commbination_key_process:
+4b32 6fe0c980 fetch 1 ,mem_commbination_key_statue 
+4b33 c1808000 rtnne commbination_key_state_down 
+4b34 da604981 arg mem_combination_ui_button_count ,regc 
+4b35 da405a94 arg mouse_bluetooth_fast_conn_init ,regb 
+4b36 202042e0 branch timer_single_step 
+
+keyboard_commbination_fast_conn_bt_check:
+4b37 6fe148fa fetch 2 ,mem_keyboard_keyvalue_buffer + 2 
+4b38 684949ff fetcht 2 ,mem_keyboard_commbination_fast_conn_bt 
+4b39 98467c00 isub temp ,null 
+4b3a 2022cb3f branch keyboard_commbination_key_down ,zero 
+4b3b 18508400 byteswap temp ,temp 
+4b3c 98467c00 isub temp ,null 
+4b3d 2022cb3f branch keyboard_commbination_key_down ,zero 
+4b3e 20205bba branch mouse_commbination_key_up 
+
+keyboard_commbination_key_down:
+4b3f 6fe0c980 fetch 1 ,mem_commbination_key_statue 
+4b40 c1008000 rtneq commbination_key_state_down 
+4b41 70498001 jam commbination_key_state_down ,mem_commbination_key_statue 
+4b42 20600000 rtn 
+
+keyboard_check_discovery_timeout_timer:
+4b43 da604790 arg mem_mouse_discovery_timer ,regc 
+4b44 da404b46 arg keyboard_check_discovery_timeout ,regb 
+4b45 202042e7 branch timer_single_step_2b 
+
+keyboard_check_discovery_timeout:
+4b46 20404bbd call keyboard_stop_discovery 
+4b47 20204f6c branch keyboard_app_enter_hibernate 
+
+keyboard_store_information_delay_timer:
+4b48 da6046f3 arg mem_store_information_delay_timer ,regc 
+4b49 da404b4b arg keyboard_store_device_info_check ,regb 
+4b4a 202042e0 branch timer_single_step 
+
+keyboard_store_device_info_check:
+4b4b 20404a56 call keyboard_store_device_info 
+4b4c 6fe0c793 fetch 1 ,mem_mouse_need_soft_reset 
+4b4d 243a5ed1 nbranch mouse_soft_reset ,blank 
+4b4e 20600000 rtn 
+
+keyboard_low_voltage_param_set:
+4b4f 6fe0c637 fetch 1 ,mem_mouse_adc_last_low_voltage_flag 
+4b50 203a4b53 branch keyboard_low_voltage_param_set_33v ,blank 
+4b51 7046313a jam 58 ,mem_mouse_vdd_low_vol 
+4b52 20600000 rtn 
+
+keyboard_low_voltage_param_set_33v:
+4b53 70463135 jam 53 ,mem_mouse_vdd_low_vol 
+4b54 20600000 rtn 
+
+keyboard_le_auto_recognize_timer:
+4b55 da604862 arg mem_le_start_auto_reco_timer ,regc 
+4b56 da40502f arg keyboard_le_send_att_find_by_type_value_request_ancs ,regb 
+4b57 202042e0 branch timer_single_step 
+
+keyboard_check_direct_timeout_timer:
+4b58 da604845 arg mem_mouse_direct_timer ,regc 
+4b59 da405bd9 arg mouse_check_direct_timeout ,regb 
+4b5a 204042e0 call timer_single_step 
+4b5b 20205bd6 branch mouse_check_direct_timeout_timer + 3 
+
+keyboard_le_battery_updata_timer:
+4b5c 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4b5d c39d8000 rtnbit1 mouse_enable_le_battery_service_cancel 
+4b5e 20205bee branch mouse_le_battery_updata_timer 
+
+keyboard_le_send_conn_param_update_timer:
+4b5f da604861 arg mem_keyboard_le_send_conn_param_update_timer ,regc 
+4b60 da405aef arg mouse_updata_le_param ,regb 
+4b61 202042e0 branch timer_single_step 
+
+keyboard_24g_repeat_send_data:
+4b62 6fe0c9a9 fetch 1 ,mem_24g_repeat_send_flag 
+4b63 207a0000 rtn blank 
+4b64 7049a900 jam 0 ,mem_24g_repeat_send_flag 
+4b65 7048f401 jam 1 ,mem_keyboard_data_change_flag 
+4b66 20403625 call g24_txdata_prep 
+4b67 20204fa0 branch keyboard_g24_transmit_process 
+
+keyboard_24g_led_status_get_timer:
+4b68 da6049ac arg mem_keyboard_led_status_get_timer ,regc 
+4b69 da404b6b arg keyboard_24g_led_status_clear ,regb 
+4b6a 202042e0 branch timer_single_step 
+
+keyboard_24g_led_status_clear:
+4b6b 7049ab00 jam 0 ,mem_keyboard_led_status_get 
+4b6c 20600000 rtn 
+
+keyboard_device_led_off:
+4b6d 204061ea call mouse_device_multi_led_off 
+4b6e 20404b7c call keyboard_capslock_led_off 
+
+keyboard_power_led_off:
+4b6f 6848c868 fetcht 1 ,mem_keyboard_power_led_gpio 
+4b70 20206ef3 branch gpio_out_inactive 
+
+keyboard_numlock_led_off:
+4b71 20600000 rtn 
+
+keyboard_capslock_led_on_timer:
+4b72 6fe0c866 fetch 1 ,mem_keyboard_caps_led_gpio 
+4b73 c17f8000 rtneq gpio_disable 
+4b74 6fe14781 fetch 2 ,mem_mouse_no_data_timer 
+4b75 207a0000 rtn blank 
+4b76 6fe14725 fetch 2 ,mem_mouse_no_data_timeout 
+4b77 68494781 fetcht 2 ,mem_mouse_no_data_timer 
+4b78 98460400 isub temp ,temp 
+4b79 6fe14869 fetch 2 ,mem_keyboard_caps_led_on_timer 
+4b7a 98467e00 isub temp ,pdata 
+4b7b 20214b7e branch keyboard_capslock_led_check_on ,positive 
+
+keyboard_capslock_led_off:
+4b7c 6848c866 fetcht 1 ,mem_keyboard_caps_led_gpio 
+4b7d 20206ef3 branch gpio_out_inactive 
+
+keyboard_capslock_led_check_on:
+4b7e 6fe0c9aa fetch 1 ,mem_keyboard_led_status 
+4b7f c300cb7c bbit0 kb_pc_keysel_capslock ,keyboard_capslock_led_off 
+4b80 6848c866 fetcht 1 ,mem_keyboard_caps_led_gpio 
+4b81 20206ef7 branch gpio_out_active 
+
+keyboard_long_press_timer:
+4b82 da6048ee arg mem_same_keyvalue_timer ,regc 
+4b83 da404b85 arg keyboard_long_press_timerout ,regb 
+4b84 202042e7 branch timer_single_step_2b 
+
+keyboard_long_press_timerout:
+4b85 7048eb01 jam 1 ,mem_same_keyvalue_timerout_flag 
+4b86 20204327 branch app_enter_hibernate 
+
+keyboard_commbination_delay_release_timer:
+4b87 da6049c4 arg mem_keyboard_commbination_control_key_delay_release_timer ,regc 
+4b88 da404d9e arg keyboard_commbination_key_null_set ,regb 
+4b89 202042e0 branch timer_single_step 
+
+keyboard_check_no_data_timeout_timer:
+4b8a da604781 arg mem_mouse_no_data_timer ,regc 
+4b8b da404b8d arg keyboard_check_no_data_timeout ,regb 
+4b8c 202042e7 branch timer_single_step_2b 
+
+keyboard_check_no_data_timeout:
+4b8d 6fe0c666 fetch 1 ,mem_device_flag 
+4b8e c0004b11 beq mode_24g_device ,keyboard_24g_hibernate_set 
+4b8f 20205aad branch mouse_disconnect 
+
+keyboard_bb_event_discovery_btn:
+4b90 280ffe26 isolate1 mark_24g ,mark 
+4b91 2040e018 call mouse_24g_stop ,true 
+4b92 20405aad call mouse_disconnect 
+4b93 20405b21 call mouse_le_clean_connect_flag 
+4b94 20204b95 branch keyboard_start_discovery 
+
+keyboard_start_discovery:
+4b95 44a44009 bpatch patch09_0 ,mem_patch09 
+4b96 204061ab call mouse_device_discovery_led_config 
+4b97 6fe144e9 fetch 2 ,mem_ui_state_map 
+4b98 2feffe0b isolate1 ui_state_ble_adv ,pdata 
+4b99 2040dc3e call mouse_stop_le_adv ,true 
+4b9a 58000000 setarg 0 
+4b9b 67e147c0 store 2 ,mem_le_battery_level_updata_timer 
+4b9c 20404b7c call keyboard_capslock_led_off 
+4b9d 7049c6ff jam 0xff ,mem_kb_computer_system 
+4b9e 6fe144e9 fetch 2 ,mem_ui_state_map 
+4b9f 2feffe0b isolate1 ui_state_ble_adv ,pdata 
+4ba0 2040dc3e call mouse_stop_le_adv ,true 
+4ba1 20405aa8 call mouse_bluetooth_fast_conn_disable 
+4ba2 6fe144e9 fetch 2 ,mem_ui_state_map 
+4ba3 c285cbac bbit1 ui_state_ble_adv ,keyboard_start_discovery_norandom 
+4ba4 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4ba5 c3044bac bbit0 mouse_enable_ble_random_addre ,keyboard_start_discovery_norandom 
+4ba6 68494695 fetcht 2 ,mem_random_addr_increase_count 
+4ba7 18408401 increase 1 ,temp 
+4ba8 60494695 storet 2 ,mem_random_addr_increase_count 
+4ba9 604942dc storet 2 ,mem_le_lap + 1 
+4baa 180a7e00 random pdata 
+4bab 67e0c2db store 1 ,mem_le_lap 
+
+keyboard_start_discovery_norandom:
+4bac 6fe1c797 fetch 3 ,mem_mouse_le_lap_temp 
+4bad 67e1c2de store 3 ,mem_le_lap + 3 
+4bae 2040432d call app_lpm_mult_disable 
+4baf 6fe14638 fetch 2 ,mem_mouse_discovery_timeout 
+4bb0 67e14790 store 2 ,mem_mouse_discovery_timer 
+4bb1 58000000 setarg 0 
+4bb2 67e14781 store 2 ,mem_mouse_no_data_timer 
+4bb3 67e147c0 store 2 ,mem_le_battery_level_updata_timer 
+4bb4 67e0c845 store 1 ,mem_mouse_direct_timer 
+4bb5 67e0c792 store 1 ,mem_mouse_bluetooth_reconnect_timeout 
+4bb6 67e0c956 store 1 ,mem_mouse_clear_sensor_data_flag 
+4bb7 d8e00002 arg mouse_store_eeprom_flag ,queue 
+4bb8 20405f00 call mouse_enable_function_flag 
+4bb9 20405ef4 call mouse_bt_discovery_button_down_disable 
+4bba 20205b62 branch mouse_check_51cmd_adv 
+
+keyboard_low_voltage_led_blink_disable:
+4bbb 70463700 jam 0 ,mem_mouse_adc_last_low_voltage_flag 
+4bbc 2020616e branch mouse_low_voltage_led_off_judge 
+
+keyboard_stop_discovery:
+4bbd 44a4c009 bpatch patch09_1 ,mem_patch09 
+4bbe 58000000 setarg 0 
+4bbf 67e14790 store 2 ,mem_mouse_discovery_timer 
+4bc0 d8e00006 arg mouse_bt_discovery_button_long_down_flag ,queue 
+4bc1 20405f04 call mouse_disable_function_flag 
+4bc2 70479200 jam 0 ,mem_mouse_bluetooth_reconnect_timeout 
+4bc3 20405c3e call mouse_stop_le_adv 
+4bc4 20204b6d branch keyboard_device_led_off 
+
+keyboard_store_remote_bdaddr:
+4bc5 44a54009 bpatch patch09_2 ,mem_patch09 
+4bc6 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4bc7 c4010000 rtnbit0 mouse_store_eeprom_flag 
+4bc8 d8e00002 arg mouse_store_eeprom_flag ,queue 
+4bc9 20405f04 call mouse_disable_function_flag 
+4bca 20405c4a call mouse_check_device_addr 
+4bcb 20205c48 branch mouse_unplug_clean_bdaddr 
+
+keyboard_idle:
+4bcc 44a5c009 bpatch patch09_3 ,mem_patch09 
+4bcd 2040620e call mouse_low_voltage_led_no_enter_lpm 
+4bce 202078aa branch ui_check_paring_button 
+
+keyboard_start_work:
+4bcf 44a64009 bpatch patch09_4 ,mem_patch09 
+4bd0 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4bd1 c30acbdc bbit0 mouse_enable_adc ,keyboard_start_work_next 
+4bd2 20406f82 call enable_adc 
+4bd3 20406fb0 call vdd_calculate_by_mode 
+4bd4 67e14633 store 2 ,mem_mouse_vdd_now_vol 
+4bd5 6fe1440a fetch 2 ,mem_adc_current_value 
+4bd6 98467c00 isub temp ,null 
+4bd7 20214bcf branch keyboard_start_work ,positive 
+4bd8 da20462d arg mem_mouse_vdd_calculate_set ,rega 
+4bd9 20405563 call mouse_adc_bat_percent_lowpower_out 
+4bda 6fe0c40c fetch 1 ,mem_adc_power_flag 
+4bdb c280cf6b bbit1 1 ,keyboard_power_down 
+
+keyboard_start_work_next:
+4bdc 6fe0c9a4 fetch 1 ,mem_keyboard_pairing_type 
+4bdd 205a4e24 call keyboard_enable_bt_button_pairing ,blank 
+4bde 6fe0c9a3 fetch 1 ,mem_keyboard_bt_button_flag 
+4bdf 247a0000 nrtn blank 
+4be0 6fe0c666 fetch 1 ,mem_device_flag 
+4be1 c000602f beq mode_24g_device ,mouse_24g_reconn_general_dongle 
+4be2 20405aa8 call mouse_bluetooth_fast_conn_disable 
+4be3 6fe34668 fetch 6 ,mem_device1_addr 
+4be4 203a5a94 branch mouse_bluetooth_fast_conn_init ,blank 
+4be5 202054a0 branch mouse_start_reconnect_device 
+
+keyboard_le:
+4be6 44a6c009 bpatch patch09_5 ,mem_patch09 
+4be7 20402a28 call le_fifo_check_nearly_full 
+4be8 247a0000 nrtn blank 
+4be9 6fe0c78f fetch 1 ,mem_mouse_bluetooth_fast_conn_flag 
+4bea c07fcbee beq 0xff ,keyboard_le_next 
+4beb 6fe0c843 fetch 1 ,mem_le_connect_status_flag 
+4bec 1fe17e03 and pdata ,0x03 ,pdata 
+4bed c1818000 rtnne 0x03 
+
+keyboard_le_next:
+4bee 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4bef c280db5b bbit1 mouse_24g_pairing_flag ,mouse_le_send_empty_packet 
+4bf0 c2805b5b bbit1 mouse_select_device_flag ,mouse_le_send_empty_packet 
+4bf1 c282db5b bbit1 mouse_bt_discovery_button_down_flag ,mouse_le_send_empty_packet 
+4bf2 c2835b5b bbit1 mouse_bt_discovery_button_long_down_flag ,mouse_le_send_empty_packet 
+4bf3 20404e47 call keyboard_motion 
+4bf4 24740000 nrtn user 
+4bf5 20405abc call mouse_current_mult_update 
+4bf6 204056b1 call mouse_wheel_trigger 
+4bf7 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4bf8 c30b5b3c bbit0 mouse_enable_keyboard ,mouse_le_send_mouse_data 
+4bf9 6fe0c96c fetch 1 ,mem_customer_key 
+4bfa 20205b3d branch mouse_le_send_keyboard_package_data 
+
+kscan_dispatch:
+4bfb 6fe0c3cb fetch 1 ,mem_device_option 
+4bfc c1878000 rtnne dvc_op_keyboard 
+4bfd 20404c00 call keyboard_keyscan 
+4bfe 20404c8b call keyboard_key_process 
+4bff 20204df5 branch keyboard_special_key_check 
+
+keyboard_keyscan:
+4c00 44a74009 bpatch patch09_6 ,mem_patch09 
+4c01 20404c85 call keyboard_stb_state_low 
+4c02 58000000 setarg 0 
+4c03 67e148e9 store 2 ,mem_keyscan_exmcu_wait_wake_count 
+4c04 d8c0489c arg mem_keyscan_value_current ,contr 
+4c05 d8a048b0 arg mem_keyscan_value_check ,contw 
+4c06 df200014 arg 20 ,loopcnt 
+4c07 20407cda call memcpy 
+4c08 5800489c setarg mem_keyscan_value_current 
+4c09 67e148e3 store 2 ,mem_keyscan_value_ptr 
+4c0a 580048d8 setarg mem_keyscan_exmcu_value 
+4c0b 67e148e5 store 2 ,mem_keyscan_exmcu_value_ptr 
+4c0c 20404c2f call keyboard_keyscan_get_exmcu_value 
+4c0d 20404c53 call keyboard_keyscan_get_mcu_value 
+4c0e 20404c83 call keyboard_stb_state_high 
+
+keyboard_keyscan_copy_value:
+4c0f 6fe1489a fetch 2 ,mem_kb_excol_ptr 
+4c10 1fe22400 copy pdata ,regb 
+4c11 7048e800 jam 0 ,mem_keyscan_col_loop_count 
+
+keyboard_compare_col_excol_gpio_loop:
+4c12 e8408012 ifetcht 1 ,regb 
+4c13 6fe14898 fetch 2 ,mem_kb_col_ptr 
+4c14 1fe22200 copy pdata ,rega 
+4c15 1a222600 copy rega ,regc 
+4c16 df200014 arg 20 ,loopcnt 
+
+keyboard_compare_col_gpio_loop:
+4c17 efe08011 ifetch 1 ,rega 
+4c18 98467c00 isub temp ,null 
+4c19 2022cc23 branch keyboard_copy_value_exmcu_to_mcu ,zero 
+4c1a 1a20a201 increase 1 ,rega 
+4c1b c2004c17 loop keyboard_compare_col_gpio_loop 
+
+keyboard_compare_col_excol_gpio_loop_next:
+4c1c 1a40a401 increase 1 ,regb 
+4c1d 6fe0c8e8 fetch 1 ,mem_keyscan_col_loop_count 
+4c1e 1fe0fe01 increase 1 ,pdata 
+4c1f 67e0c8e8 store 1 ,mem_keyscan_col_loop_count 
+4c20 1fe67c0a sub pdata ,10 ,null 
+4c21 20214c12 branch keyboard_compare_col_excol_gpio_loop ,positive 
+4c22 20600000 rtn 
+
+keyboard_copy_value_exmcu_to_mcu:
+4c23 6fe148e3 fetch 2 ,mem_keyscan_value_ptr 
+4c24 1fe20a00 copy pdata ,contw 
+4c25 1a227e00 copy rega ,pdata 
+4c26 9a667e00 isub regc ,pdata 
+4c27 98a08a00 iadd contw ,contw 
+4c28 6fe148e5 fetch 2 ,mem_keyscan_exmcu_value_ptr 
+4c29 1fe22600 copy pdata ,regc 
+4c2a 6fe0c8e8 fetch 1 ,mem_keyscan_col_loop_count 
+4c2b 9a60a600 iadd regc ,regc 
+4c2c efe08013 ifetch 1 ,regc 
+4c2d e7e08005 istore 1 ,contw 
+4c2e 20204c1c branch keyboard_compare_col_excol_gpio_loop_next 
+
+keyboard_keyscan_get_exmcu_value:
+4c2f 44a7c009 bpatch patch09_7 ,mem_patch09 
+4c30 20404c83 call keyboard_stb_state_high 
+4c31 20404c81 call keyboard_clk_input 
+
+keyboard_keyscan_exmcu_start:
+4c32 6fe148e9 fetch 2 ,mem_keyscan_exmcu_wait_wake_count 
+4c33 1fe0fe01 increase 1 ,pdata 
+4c34 67e148e9 store 2 ,mem_keyscan_exmcu_wait_wake_count 
+4c35 c284cc71 bbit1 9 ,keyboard_keyscan_reset_exmcu 
+4c36 6848c864 fetcht 1 ,mem_mcu_clk_gpio 
+4c37 20406ee6 call gpio_get_bit 
+4c38 2420cc32 nbranch keyboard_keyscan_exmcu_start ,true 
+4c39 20000014 nop 20 
+4c3a 20404c79 call keyboard_clk_state_high 
+4c3b 20404c85 call keyboard_stb_state_low 
+4c3c 7048e800 jam 0 ,mem_keyscan_col_loop_count 
+
+keyboard_keyscan_exmcu_start_loop:
+4c3d 20404c7b call keyboard_clk_state_low 
+4c3e 20404c46 call keyboard_keyscan_exmcu_get_col_value 
+4c3f 20404c79 call keyboard_clk_state_high 
+4c40 20404c46 call keyboard_keyscan_exmcu_get_col_value 
+4c41 1fe67c09 sub pdata ,9 ,null 
+4c42 20214c3d branch keyboard_keyscan_exmcu_start_loop ,positive 
+4c43 20404c7b call keyboard_clk_state_low 
+4c44 20404c46 call keyboard_keyscan_exmcu_get_col_value 
+4c45 20204c79 branch keyboard_clk_state_high 
+
+keyboard_keyscan_exmcu_get_col_value:
+4c46 7048e700 jam 0 ,mem_keyscan_value_temp 
+4c47 20000032 nop 50 
+4c48 20404c65 call keyboard_keyscan_get_col_value 
+4c49 6fe148e5 fetch 2 ,mem_keyscan_exmcu_value_ptr 
+
+keyboard_keyscan_value_store:
+4c4a 1fe20a00 copy pdata ,contw 
+4c4b 6fe0c8e8 fetch 1 ,mem_keyscan_col_loop_count 
+4c4c 98a08a00 iadd contw ,contw 
+4c4d 6fe0c8e7 fetch 1 ,mem_keyscan_value_temp 
+4c4e e7e08005 istore 1 ,contw 
+4c4f 6fe0c8e8 fetch 1 ,mem_keyscan_col_loop_count 
+4c50 1fe0fe01 increase 1 ,pdata 
+4c51 67e0c8e8 store 1 ,mem_keyscan_col_loop_count 
+4c52 20600000 rtn 
+
+keyboard_keyscan_get_mcu_value:
+4c53 20000014 nop 20 
+4c54 6fe14898 fetch 2 ,mem_kb_col_ptr 
+4c55 1fe22400 copy pdata ,regb 
+4c56 7048e800 jam 0 ,mem_keyscan_col_loop_count 
+
+keyboard_keyscan_mcu_start:
+4c57 7048e700 jam 0 ,mem_keyscan_value_temp 
+4c58 e8408012 ifetcht 1 ,regb 
+4c59 284ffe07 isolate1 7 ,temp 
+4c5a 2020cc5f branch keyboard_keyscan_mcu_start_loop ,true 
+4c5b 20406ef7 call gpio_out_active 
+4c5c 20404c65 call keyboard_keyscan_get_col_value 
+4c5d e8408012 ifetcht 1 ,regb 
+4c5e 20406f0f call gpio_set_high_impedance 
+
+keyboard_keyscan_mcu_start_loop:
+4c5f 1a40a401 increase 1 ,regb 
+4c60 6fe148e3 fetch 2 ,mem_keyscan_value_ptr 
+4c61 20404c4a call keyboard_keyscan_value_store 
+4c62 1fe67c13 sub pdata ,19 ,null 
+4c63 20214c57 branch keyboard_keyscan_mcu_start ,positive 
+4c64 20600000 rtn 
+
+keyboard_keyscan_get_col_value:
+4c65 6fe14896 fetch 2 ,mem_kb_row_ptr 
+4c66 1fe22600 copy pdata ,regc 
+4c67 df200008 arg 8 ,loopcnt 
+
+keyboard_keyscan_get_col_value_loop:
+4c68 e8408013 ifetcht 1 ,regc 
+4c69 20406ee6 call gpio_get_bit 
+4c6a 6fe0c8e7 fetch 1 ,mem_keyscan_value_temp 
+4c6b 1fe37e00 rshift pdata ,pdata 
+4c6c 7920fe07 setflag true ,7 ,pdata 
+4c6d 67e0c8e7 store 1 ,mem_keyscan_value_temp 
+4c6e 1a60a601 increase 1 ,regc 
+4c6f c2004c68 loop keyboard_keyscan_get_col_value_loop 
+4c70 20600000 rtn 
+
+keyboard_keyscan_reset_exmcu:
+4c71 6848c865 fetcht 1 ,mem_mcu_rstb_gpio 
+4c72 20406ef7 call gpio_out_active 
+4c73 20000014 nop 20 
+4c74 6848c865 fetcht 1 ,mem_mcu_rstb_gpio 
+4c75 20406ef3 call gpio_out_inactive 
+4c76 20001770 nop 6000 
+4c77 20600000 rtn 
+4c78 20204c00 branch keyboard_keyscan 
+
+keyboard_clk_state_high:
+4c79 6848c864 fetcht 1 ,mem_mcu_clk_gpio 
+4c7a 20206ef3 branch gpio_out_inactive 
+
+keyboard_clk_state_low:
+4c7b 6848c864 fetcht 1 ,mem_mcu_clk_gpio 
+4c7c 20206ef7 branch gpio_out_active 
+
+keyboard_gpio_config_input_pu:
+4c7d 18467cff sub temp ,ui_button_gpio_disable ,null 
+4c7e 20628000 rtn zero 
+4c7f 793f8407 set0 gpio_active_bit ,temp 
+4c80 20206edd branch gpio_config_input 
+
+keyboard_clk_input:
+4c81 6848c864 fetcht 1 ,mem_mcu_clk_gpio 
+4c82 20206edd branch gpio_config_input 
+
+keyboard_stb_state_high:
+4c83 6848c863 fetcht 1 ,mem_mcu_stb_gpio 
+4c84 20206ef3 branch gpio_out_inactive 
+
+keyboard_stb_state_low:
+4c85 6848c863 fetcht 1 ,mem_mcu_stb_gpio 
+4c86 20206ef7 branch gpio_out_active 
+
+keyboard_press_change_or_no_key:
+4c87 7048eb00 jam 0 ,mem_same_keyvalue_timerout_flag 
+4c88 6fe148ec fetch 2 ,mem_same_keyvalue_timer_init 
+4c89 67e148ee store 2 ,mem_same_keyvalue_timer 
+4c8a 20600000 rtn 
+
+keyboard_key_process:
+4c8b 44a8400a bpatch patch0a_0 ,mem_patch0a 
+4c8c da20489c arg mem_keyscan_value_current ,rega 
+4c8d da4048b0 arg mem_keyscan_value_check ,regb 
+4c8e df200014 arg 20 ,loopcnt 
+4c8f 20407d64 call string_compare 
+4c90 2422cc87 nbranch keyboard_press_change_or_no_key ,zero 
+4c91 20404cc5 call keyboard_keyscan_value_current_zero_check 
+4c92 205a4c87 call keyboard_press_change_or_no_key ,blank 
+4c93 20404ccd call keyboard_ghost_key_check 
+4c94 6fe0c97b fetch 1 ,mem_mouse_ghost_flag 
+4c95 247a0000 nrtn blank 
+4c96 6fe0c9c1 fetch 1 ,mem_keyboard_commbination_key_step 
+4c97 c1008000 rtneq cammbination_key_press 
+4c98 c1010000 rtneq cammbination_key_hold 
+4c99 c1020000 rtneq cammbination_key_wait_release 
+4c9a 7048e800 jam 0 ,mem_keyscan_col_loop_count 
+4c9b da20489c arg mem_keyscan_value_current ,rega 
+4c9c da4048c4 arg mem_keyscan_value_old ,regb 
+
+keyboard_keyvalue_process:
+4c9d e8408011 ifetcht 1 ,rega 
+4c9e efe08012 ifetch 1 ,regb 
+4c9f 9842fe00 ixor temp ,pdata 
+4ca0 203a4cbd branch keyboard_keyvalue_process_loop ,blank 
+4ca1 67e0c8e7 store 1 ,mem_keyscan_value_temp 
+4ca2 6048c8f6 storet 1 ,mem_keyboard_press_flag_temp 
+4ca3 e0408012 istoret 1 ,regb 
+4ca4 7048f401 jam 1 ,mem_keyboard_data_change_flag 
+4ca5 7048f700 jam 0 ,mem_keyboard_keyvalue_bit_loop_count 
+
+keyboard_keyvalue_change:
+4ca6 6fe0c8e7 fetch 1 ,mem_keyscan_value_temp 
+4ca7 c3004cb3 bbit0 0 ,keyboard_keyvalue_change_loop 
+4ca8 6fe0c8e8 fetch 1 ,mem_keyscan_col_loop_count 
+4ca9 1feffe08 mul32 pdata ,8 ,pdata 
+4caa 6848c8f7 fetcht 1 ,mem_keyboard_keyvalue_bit_loop_count 
+4cab 9840fe00 iadd temp ,pdata 
+4cac d8c04901 arg mem_keyboard_keyvalue_map ,contr 
+4cad 98c08c00 iadd contr ,contr 
+4cae efe08006 ifetch 1 ,contr 
+4caf 67e0c8f5 store 1 ,mem_keyboard_keyvalue_temp 
+4cb0 20404cfc call keyboard_keyvalue_fn_replace 
+4cb1 20404d3a call keyboard_keyvalue_commbination_replace 
+4cb2 20404dbb call keyboard_keyvalue_in_out 
+
+keyboard_keyvalue_change_loop:
+4cb3 6fe0c8e7 fetch 1 ,mem_keyscan_value_temp 
+4cb4 1fe37e00 rshift pdata ,pdata 
+4cb5 67e0c8e7 store 1 ,mem_keyscan_value_temp 
+4cb6 6fe0c8f6 fetch 1 ,mem_keyboard_press_flag_temp 
+4cb7 1fe37e00 rshift pdata ,pdata 
+4cb8 67e0c8f6 store 1 ,mem_keyboard_press_flag_temp 
+4cb9 6fe0c8f7 fetch 1 ,mem_keyboard_keyvalue_bit_loop_count 
+4cba 1fe0fe01 increase 1 ,pdata 
+4cbb 67e0c8f7 store 1 ,mem_keyboard_keyvalue_bit_loop_count 
+4cbc c2004ca6 loop keyboard_keyvalue_change 
+
+keyboard_keyvalue_process_loop:
+4cbd 1a20a201 increase 1 ,rega 
+4cbe 1a40a401 increase 1 ,regb 
+4cbf 6fe0c8e8 fetch 1 ,mem_keyscan_col_loop_count 
+4cc0 1fe0fe01 increase 1 ,pdata 
+4cc1 67e0c8e8 store 1 ,mem_keyscan_col_loop_count 
+4cc2 1fe67c13 sub pdata ,19 ,null 
+4cc3 20214c9d branch keyboard_keyvalue_process ,positive 
+4cc4 20600000 rtn 
+
+keyboard_keyscan_value_current_zero_check:
+4cc5 6fe4489c fetch 8 ,mem_keyscan_value_current 
+4cc6 247a0000 nrtn blank 
+4cc7 6fe448a4 fetch 8 ,mem_keyscan_value_current + 8 
+4cc8 247a0000 nrtn blank 
+4cc9 6fe248ac fetch 4 ,mem_keyscan_value_current + 16 
+4cca 247a0000 nrtn blank 
+4ccb 7049c100 jam cammbination_key_free ,mem_keyboard_commbination_key_step 
+4ccc 20600000 rtn 
+
+keyboard_ghost_key_check:
+4ccd 44a8c00a bpatch patch0a_1 ,mem_patch0a 
+4cce 70497b00 jam 0 ,mem_mouse_ghost_flag 
+4ccf 7048f100 jam 0 ,mem_keyboard_all_press_key_count 
+4cd0 da20489c arg mem_keyscan_value_current ,rega 
+4cd1 df200014 arg 20 ,loopcnt 
+
+keyboard_ghost_key_check_loop:
+4cd2 7048f000 jam 0 ,mem_keyboard_current_col_press_key_count 
+4cd3 efe08011 ifetch 1 ,rega 
+4cd4 203a4cf7 branch keyboard_ghost_key_check_next_loop ,blank 
+
+keyboard_current_col_press_key_count_check:
+4cd5 6848c8f0 fetcht 1 ,mem_keyboard_current_col_press_key_count 
+4cd6 18408401 increase 1 ,temp 
+4cd7 6048c8f0 storet 1 ,mem_keyboard_current_col_press_key_count 
+4cd8 1fe20400 copy pdata ,temp 
+4cd9 1fe0ffff increase -1 ,pdata 
+4cda 98417e00 iand temp ,pdata 
+4cdb 2422ccd5 nbranch keyboard_current_col_press_key_count_check ,zero 
+4cdc 6fe0c8f0 fetch 1 ,mem_keyboard_current_col_press_key_count 
+4cdd 6848c8f1 fetcht 1 ,mem_keyboard_all_press_key_count 
+4cde 98408400 iadd temp ,temp 
+4cdf 6048c8f1 storet 1 ,mem_keyboard_all_press_key_count 
+4ce0 1fe67c01 sub pdata ,1 ,null 
+4ce1 20214cf7 branch keyboard_ghost_key_check_next_loop ,positive 
+4ce2 18467c02 sub temp ,2 ,null 
+4ce3 20214cf7 branch keyboard_ghost_key_check_next_loop ,positive 
+4ce4 7048e800 jam 0 ,mem_keyscan_col_loop_count 
+4ce5 7048f200 jam 0 ,mem_keyboard_same_row_press_key_count 
+4ce6 e8408011 ifetcht 1 ,rega 
+4ce7 da40489c arg mem_keyscan_value_current ,regb 
+
+keyboard_same_row_key_check:
+4ce8 6fe0c8e8 fetch 1 ,mem_keyscan_col_loop_count 
+4ce9 1fe0fe01 increase 1 ,pdata 
+4cea 67e0c8e8 store 1 ,mem_keyscan_col_loop_count 
+4ceb 1fe67c13 sub pdata ,19 ,null 
+4cec 24214cf7 nbranch keyboard_ghost_key_check_next_loop ,positive 
+4ced efe08012 ifetch 1 ,regb 
+4cee 98417c00 iand temp ,null 
+4cef 2022ccfa branch keyboard_same_row_key_check_loop ,zero 
+4cf0 6fe0c8f2 fetch 1 ,mem_keyboard_same_row_press_key_count 
+4cf1 1fe0fe01 increase 1 ,pdata 
+4cf2 67e0c8f2 store 1 ,mem_keyboard_same_row_press_key_count 
+4cf3 1fe67c01 sub pdata ,1 ,null 
+4cf4 20214cfa branch keyboard_same_row_key_check_loop ,positive 
+4cf5 70497b01 jam 1 ,mem_mouse_ghost_flag 
+4cf6 20600000 rtn 
+
+keyboard_ghost_key_check_next_loop:
+4cf7 1a20a201 increase 1 ,rega 
+4cf8 c2004cd2 loop keyboard_ghost_key_check_loop 
+4cf9 20600000 rtn 
+
+keyboard_same_row_key_check_loop:
+4cfa 1a40a401 increase 1 ,regb 
+4cfb 20204ce8 branch keyboard_same_row_key_check 
+
+keyboard_keyvalue_fn_replace:
+4cfc 44a9400a bpatch patch0a_2 ,mem_patch0a 
+4cfd 6fe0c8f6 fetch 1 ,mem_keyboard_press_flag_temp 
+4cfe 245a4d4e ncall keyboard_commbination_delay_release_clear ,blank 
+4cff 6fe0c9a1 fetch 1 ,mem_keyboard_fn_flag 
+4d00 245a4d11 ncall keyboard_keyvalue_fn_replace_press ,blank 
+4d01 6fe0c9ae fetch 1 ,mem_keyboard_fn_first 
+4d02 6848c9a1 fetcht 1 ,mem_keyboard_fn_flag 
+4d03 9842fe00 ixor temp ,pdata 
+4d04 20628000 rtn zero 
+4d05 6fe0c8f5 fetch 1 ,mem_keyboard_keyvalue_temp 
+4d06 c014cd19 beq hid_key_esc ,keyboard_keyvalue_fn_esc 
+4d07 c0264d1b beq hid_key_delete ,keyboard_keyvalue_fn_delete 
+4d08 1fe67c45 sub pdata ,hid_key_f12 ,null 
+4d09 24610000 nrtn positive 
+4d0a d840003a arg hid_key_f1 ,temp 
+4d0b 98467e00 isub temp ,pdata 
+4d0c 24610000 nrtn positive 
+4d0d d8c049b0 arg mem_keyboard_fn_f1 ,contr 
+4d0e 98c08c00 iadd contr ,contr 
+4d0f efe08006 ifetch 1 ,contr 
+4d10 20204d38 branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_replace_press:
+4d11 6fe0c8f5 fetch 1 ,mem_keyboard_keyvalue_temp 
+4d12 c0294d1d beq hid_key_up_arrow ,keyboard_keyvalue_fn_up_arrow 
+4d13 c028cd21 beq hid_key_down_arrow ,keyboard_keyvalue_fn_down_arrow 
+4d14 c0284d25 beq hid_key_left_arrow ,keyboard_keyvalue_fn_left_arrow 
+4d15 c027cd29 beq hid_key_right_arrow ,keyboard_keyvalue_fn_right_arrow 
+4d16 c0704d2d beq hid_key_left_ctrl ,keyboard_keyvalue_fn_left_ctrl 
+4d17 c0164d35 beq hid_key_space ,keyboard_keyvalue_fn_space 
+4d18 20600000 rtn 
+
+keyboard_keyvalue_fn_esc:
+4d19 6fe0c9af fetch 1 ,mem_keyboard_fn_esc 
+4d1a 20204d38 branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_delete:
+4d1b 6fe0c9bc fetch 1 ,mem_keyboard_fn_del 
+4d1c 20204d38 branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_up_arrow:
+4d1d 6fe0c9bd fetch 1 ,mem_keyboard_fn_arrow_enable_flag 
+4d1e 207a0000 rtn blank 
+4d1f 5800004b setarg hid_key_page_up 
+4d20 20204d38 branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_down_arrow:
+4d21 6fe0c9bd fetch 1 ,mem_keyboard_fn_arrow_enable_flag 
+4d22 207a0000 rtn blank 
+4d23 5800004e setarg hid_key_page_down 
+4d24 20204d38 branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_left_arrow:
+4d25 6fe0c9bd fetch 1 ,mem_keyboard_fn_arrow_enable_flag 
+4d26 207a0000 rtn blank 
+4d27 5800004a setarg hid_key_home 
+4d28 20204d38 branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_right_arrow:
+4d29 6fe0c9bd fetch 1 ,mem_keyboard_fn_arrow_enable_flag 
+4d2a 207a0000 rtn blank 
+4d2b 5800004d setarg hid_key_end 
+4d2c 20204d38 branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_left_ctrl:
+4d2d 6fe0c9be fetch 1 ,mem_keyboard_fn_left_ctrl_enable_flag 
+4d2e 207a0000 rtn blank 
+4d2f 6fe0c9c6 fetch 1 ,mem_kb_computer_system 
+4d30 c0004d33 beq system_os_windows ,keyboard_keyvalue_windows_osk 
+4d31 580000fd setarg hid_key_os_soft_kb 
+4d32 20204d38 branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_windows_osk:
+4d33 580000aa setarg hid_key_osk 
+4d34 20204d38 branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_space:
+4d35 6fe0c9bf fetch 1 ,mem_keyboard_fn_space_enable_flag 
+4d36 207a0000 rtn blank 
+4d37 580000ab setarg hid_key_language 
+
+keyboard_keyvalue_store_temp:
+4d38 67e0c8f5 store 1 ,mem_keyboard_keyvalue_temp 
+4d39 20600000 rtn 
+
+keyboard_keyvalue_commbination_replace:
+4d3a 44a9c00a bpatch patch0a_3 ,mem_patch0a 
+4d3b 6fe0c8f5 fetch 1 ,mem_keyboard_keyvalue_temp 
+4d3c c0234d50 beq hid_key_print_screen ,keyboard_commination_screen_shot_replace 
+4d3d c025cd56 beq hid_key_page_up ,keyboard_commination_pageup_replace 
+4d3e c0274d5c beq hid_key_page_down ,keyboard_commination_pagedown_replace 
+4d3f c0254d5e beq hid_key_home ,keyboard_commination_home_replace 
+4d40 c026cd60 beq hid_key_end ,keyboard_commination_end_replace 
+4d41 c052cd62 beq hid_key_select_all ,keyboard_commination_select_all 
+4d42 c0534d69 beq hid_key_copy ,keyboard_commbination_copy 
+4d43 c053cd6b beq hid_key_paste ,keyboard_commbination_paste 
+4d44 c0544d6d beq hid_key_cut ,keyboard_commbination_cut 
+4d45 c054cd6f beq hid_key_all_os_lock ,keyboard_commination_os_lock 
+4d46 c0554d7a beq hid_key_osk ,keyboard_commbination_osk 
+4d47 c055cd81 beq hid_key_language ,keyboard_commbination_language 
+4d48 c0564d8c beq hid_key_app_tiling ,keyboard_commbination_app_tiling 
+4d49 20600000 rtn 
+
+keyboard_commbination_delay_release_set:
+4d4a 6fe0c8f6 fetch 1 ,mem_keyboard_press_flag_temp 
+4d4b 247a0000 nrtn blank 
+4d4c 7049c40a jam 10 ,mem_keyboard_commbination_control_key_delay_release_timer 
+4d4d 20600000 rtn 
+
+keyboard_commbination_delay_release_clear:
+4d4e 7049c400 jam 0 ,mem_keyboard_commbination_control_key_delay_release_timer 
+4d4f 20600000 rtn 
+
+keyboard_commination_screen_shot_replace:
+4d50 6fe0c9c6 fetch 1 ,mem_kb_computer_system 
+4d51 c1000000 rtneq system_os_windows 
+4d52 c1008000 rtneq system_os_andriod 
+4d53 7049c20a jam left_shift_gui ,mem_keyboard_commbination_control_key_value 
+4d54 7049c320 jam hid_key_3 ,mem_keyboard_commbination_standard_key_value 
+4d55 20204d95 branch keyboard_commbination_keypress 
+
+keyboard_commination_pageup_replace:
+4d56 7049c352 jam hid_key_up_arrow ,mem_keyboard_commbination_standard_key_value 
+
+keyboard_commination_ios_mac_command_commiation:
+4d57 6fe0c9c6 fetch 1 ,mem_kb_computer_system 
+4d58 c1000000 rtneq system_os_windows 
+4d59 c1008000 rtneq system_os_andriod 
+4d5a 7049c208 jam left_gui ,mem_keyboard_commbination_control_key_value 
+4d5b 20204d95 branch keyboard_commbination_keypress 
+
+keyboard_commination_pagedown_replace:
+4d5c 7049c351 jam hid_key_down_arrow ,mem_keyboard_commbination_standard_key_value 
+4d5d 20204d57 branch keyboard_commination_ios_mac_command_commiation 
+
+keyboard_commination_home_replace:
+4d5e 7049c350 jam hid_key_left_arrow ,mem_keyboard_commbination_standard_key_value 
+4d5f 20204d57 branch keyboard_commination_ios_mac_command_commiation 
+
+keyboard_commination_end_replace:
+4d60 7049c34f jam hid_key_right_arrow ,mem_keyboard_commbination_standard_key_value 
+4d61 20204d57 branch keyboard_commination_ios_mac_command_commiation 
+
+keyboard_commination_select_all:
+4d62 7049c304 jam hid_key_a ,mem_keyboard_commbination_standard_key_value 
+
+keyboard_commbination_text_edit:
+4d63 7049c201 jam left_control ,mem_keyboard_commbination_control_key_value 
+4d64 6fe0c9c6 fetch 1 ,mem_kb_computer_system 
+4d65 c0004d95 beq system_os_windows ,keyboard_commbination_keypress 
+4d66 c000cd95 beq system_os_andriod ,keyboard_commbination_keypress 
+4d67 7049c208 jam left_gui ,mem_keyboard_commbination_control_key_value 
+4d68 20204d95 branch keyboard_commbination_keypress 
+
+keyboard_commbination_copy:
+4d69 7049c306 jam hid_key_c ,mem_keyboard_commbination_standard_key_value 
+4d6a 20204d63 branch keyboard_commbination_text_edit 
+
+keyboard_commbination_paste:
+4d6b 7049c319 jam hid_key_v ,mem_keyboard_commbination_standard_key_value 
+4d6c 20204d63 branch keyboard_commbination_text_edit 
+
+keyboard_commbination_cut:
+4d6d 7049c31b jam hid_key_x ,mem_keyboard_commbination_standard_key_value 
+4d6e 20204d63 branch keyboard_commbination_text_edit 
+
+keyboard_commination_os_lock:
+4d6f 6fe0c9c6 fetch 1 ,mem_kb_computer_system 
+4d70 c0004d74 beq system_os_windows ,keyboard_commination_windows_lock 
+4d71 c001cd77 beq system_os_mac ,keyboard_commination_mac_lock 
+4d72 580000fc setarg hid_key_ios_android_os_lock 
+4d73 20204d38 branch keyboard_keyvalue_store_temp 
+
+keyboard_commination_windows_lock:
+4d74 7049c208 jam left_gui ,mem_keyboard_commbination_control_key_value 
+4d75 7049c30f jam hid_key_l ,mem_keyboard_commbination_standard_key_value 
+4d76 20204d95 branch keyboard_commbination_keypress 
+
+keyboard_commination_mac_lock:
+4d77 7049c209 jam left_gui_control ,mem_keyboard_commbination_control_key_value 
+4d78 7049c314 jam hid_key_q ,mem_keyboard_commbination_standard_key_value 
+4d79 20204d95 branch keyboard_commbination_keypress 
+
+keyboard_commbination_osk:
+4d7a 6fe0c9c6 fetch 1 ,mem_kb_computer_system 
+4d7b c0004d7e beq system_os_windows ,keyboard_commbination_windows_osk 
+4d7c 580000fd setarg hid_key_os_soft_kb 
+4d7d 20204d38 branch keyboard_keyvalue_store_temp 
+
+keyboard_commbination_windows_osk:
+4d7e 7049c209 jam left_gui_control ,mem_keyboard_commbination_control_key_value 
+4d7f 7049c312 jam hid_key_o ,mem_keyboard_commbination_standard_key_value 
+4d80 20204d95 branch keyboard_commbination_keypress 
+
+keyboard_commbination_language:
+4d81 6fe0c9c6 fetch 1 ,mem_kb_computer_system 
+4d82 c0004d88 beq system_os_windows ,keyboard_commbination_language_windows 
+4d83 c000cd8a beq system_os_andriod ,keyboard_commbination_language_andriod 
+4d84 7049c201 jam left_control ,mem_keyboard_commbination_control_key_value 
+
+keyboard_commbination_language_next:
+4d85 7049c32c jam hid_key_space ,mem_keyboard_commbination_standard_key_value 
+4d86 20404d4a call keyboard_commbination_delay_release_set 
+4d87 20204d95 branch keyboard_commbination_keypress 
+
+keyboard_commbination_language_windows:
+4d88 7049c208 jam left_gui ,mem_keyboard_commbination_control_key_value 
+4d89 20204d85 branch keyboard_commbination_language_next 
+
+keyboard_commbination_language_andriod:
+4d8a 7049c202 jam left_shift ,mem_keyboard_commbination_control_key_value 
+4d8b 20204d85 branch keyboard_commbination_language_next 
+
+keyboard_commbination_app_tiling:
+4d8c 6fe0c9c6 fetch 1 ,mem_kb_computer_system 
+4d8d c0004d92 beq system_os_windows ,keyboard_commbination_app_tiling_windows_android 
+4d8e c000cd92 beq system_os_andriod ,keyboard_commbination_app_tiling_windows_android 
+4d8f 7049c201 jam left_control ,mem_keyboard_commbination_control_key_value 
+4d90 7049c352 jam hid_key_up_arrow ,mem_keyboard_commbination_standard_key_value 
+4d91 20204d95 branch keyboard_commbination_keypress 
+
+keyboard_commbination_app_tiling_windows_android:
+4d92 7049c208 jam left_gui ,mem_keyboard_commbination_control_key_value 
+4d93 7049c32b jam hid_key_tab ,mem_keyboard_commbination_standard_key_value 
+4d94 20204d95 branch keyboard_commbination_keypress 
+
+keyboard_commbination_keypress:
+4d95 7048f500 jam 0 ,mem_keyboard_keyvalue_temp 
+4d96 6fe0c8f6 fetch 1 ,mem_keyboard_press_flag_temp 
+4d97 c3004d9c bbit0 0 ,keyboard_commbination_key_wait_release_set 
+4d98 6fe0c9c1 fetch 1 ,mem_keyboard_commbination_key_step 
+4d99 c001cda8 beq cammbination_key_complete ,keyboard_commbination_key_hold_set 
+
+keyboard_commbination_key_press_set:
+4d9a 7049c101 jam cammbination_key_press ,mem_keyboard_commbination_key_step 
+4d9b 20600000 rtn 
+
+keyboard_commbination_key_wait_release_set:
+4d9c 7049c104 jam cammbination_key_wait_release ,mem_keyboard_commbination_key_step 
+4d9d 20600000 rtn 
+
+keyboard_commbination_key_null_set:
+4d9e 7049c106 jam cammbination_key_null ,mem_keyboard_commbination_key_step 
+4d9f 20600000 rtn 
+
+keyboard_commbination_key_value_store:
+4da0 67e0c856 store 1 ,mem_keyboard_tx_data + 1 
+4da1 6048c858 storet 1 ,mem_keyboard_tx_data + 3 
+4da2 20407dba call enable_user 
+4da3 70485500 jam hid_reportid_key_standard ,mem_keyboard_tx_data 
+4da4 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_commbination_key_press_process:
+4da5 6fe0c9c2 fetch 1 ,mem_keyboard_commbination_control_key_value 
+4da6 d8400000 arg 0 ,temp 
+4da7 20404da0 call keyboard_commbination_key_value_store 
+
+keyboard_commbination_key_hold_set:
+4da8 7049c102 jam cammbination_key_hold ,mem_keyboard_commbination_key_step 
+4da9 20600000 rtn 
+
+keyboard_commbination_key_hold_process:
+4daa 7049c103 jam cammbination_key_complete ,mem_keyboard_commbination_key_step 
+4dab 6fe0c9c2 fetch 1 ,mem_keyboard_commbination_control_key_value 
+4dac 6848c9c3 fetcht 1 ,mem_keyboard_commbination_standard_key_value 
+4dad 20204da0 branch keyboard_commbination_key_value_store 
+
+keyboard_commbination_key_wait_release_process:
+4dae 70485500 jam hid_reportid_key_standard ,mem_keyboard_tx_data 
+4daf 6fe0c9c2 fetch 1 ,mem_keyboard_commbination_control_key_value 
+4db0 d8400000 arg 0 ,temp 
+4db1 20404da0 call keyboard_commbination_key_value_store 
+4db2 6fe0c9c4 fetch 1 ,mem_keyboard_commbination_control_key_delay_release_timer 
+4db3 203a4d9e branch keyboard_commbination_key_null_set ,blank 
+
+keyboard_commbination_key_release_set:
+4db4 7049c105 jam cammbination_key_release ,mem_keyboard_commbination_key_step 
+4db5 20600000 rtn 
+
+keyboard_commbination_key_release_process:
+4db6 20204da2 branch keyboard_commbination_key_value_store + 2 
+
+keyboard_commbination_key_null_process:
+4db7 7049c100 jam cammbination_key_free ,mem_keyboard_commbination_key_step 
+4db8 dfe00000 arg 0 ,pdata 
+4db9 d8400000 arg 0 ,temp 
+4dba 20204da0 branch keyboard_commbination_key_value_store 
+
+keyboard_keyvalue_in_out:
+4dbb 44aa400a bpatch patch0a_4 ,mem_patch0a 
+4dbc 6fe0c8f5 fetch 1 ,mem_keyboard_keyvalue_temp 
+4dbd 1fe67ce7 sub pdata ,hid_key_right_gui ,null 
+4dbe 20214dc3 branch keyboard_keyvalue_standard ,positive 
+4dbf 7049c501 jam keyboard_consumer_key_press ,mem_keyboard_consumer_key_status 
+4dc0 6fe0c8f6 fetch 1 ,mem_keyboard_press_flag_temp 
+4dc1 c2804dc3 bbit1 0 ,keyboard_keyvalue_standard 
+4dc2 7049c502 jam keyboard_consumer_key_release ,mem_keyboard_consumer_key_status 
+
+keyboard_keyvalue_standard:
+4dc3 70490000 jam 0 ,mem_keyboard_keyvalue_buffer + 8 
+4dc4 6fe0c8f6 fetch 1 ,mem_keyboard_press_flag_temp 
+4dc5 c2804ddd bbit1 0 ,keyboard_keyvalue_standard_in 
+
+keyboard_keyvalue_standard_out:
+4dc6 6848c8f5 fetcht 1 ,mem_keyboard_keyvalue_temp 
+4dc7 df200006 arg 6 ,loopcnt 
+4dc8 d8c048fa arg mem_keyboard_keyvalue_buffer + 2 ,contr 
+
+keyboard_keyvalue_standard_out_loop:
+4dc9 efe08006 ifetch 1 ,contr 
+4dca 203a4dd4 branch keyboard_keyvalue_standard_out_next + 1 ,blank 
+4dcb 98467c00 isub temp ,null 
+4dcc 2422cdd3 nbranch keyboard_keyvalue_standard_out_next ,zero 
+4dcd efe08006 ifetch 1 ,contr 
+4dce 18c08dfe increase -2 ,contr 
+4dcf e7e08006 istore 1 ,contr 
+4dd0 207a0000 rtn blank 
+4dd1 18c08c01 increase 1 ,contr 
+4dd2 e0408006 istoret 1 ,contr 
+
+keyboard_keyvalue_standard_out_next:
+4dd3 c2004dc9 loop keyboard_keyvalue_standard_out_loop 
+4dd4 18467ce7 sub temp ,hid_key_right_gui ,null 
+4dd5 24610000 nrtn positive 
+4dd6 18467cbf sub temp ,0xbf ,null 
+4dd7 20610000 rtn positive 
+
+keyboard_keyvalue_control_key_out:
+4dd8 18410e07 and temp ,0x07 ,queue 
+4dd9 6fe0c8f8 fetch 1 ,mem_keyboard_keyvalue_buffer 
+4dda f93ffe00 qset0 pdata 
+4ddb 67e0c8f8 store 1 ,mem_keyboard_keyvalue_buffer 
+4ddc 20600000 rtn 
+
+keyboard_keyvalue_standard_in:
+4ddd 6848c8f5 fetcht 1 ,mem_keyboard_keyvalue_temp 
+4dde df200006 arg 6 ,loopcnt 
+4ddf d8c048fa arg mem_keyboard_keyvalue_buffer + 2 ,contr 
+
+keyboard_keyvalue_standard_in_loop:
+4de0 efe08006 ifetch 1 ,contr 
+4de1 203a4dee branch keyboard_keyvalue_standard_in_data ,blank 
+4de2 98467c00 isub temp ,null 
+4de3 20628000 rtn zero 
+4de4 c2004de0 loop keyboard_keyvalue_standard_in_loop 
+4de5 18467ce7 sub temp ,hid_key_right_gui ,null 
+4de6 24610000 nrtn positive 
+4de7 18467cbf sub temp ,0xbf ,null 
+4de8 20610000 rtn positive 
+
+keyboard_keyvalue_control_key_in:
+4de9 18410e07 and temp ,0x07 ,queue 
+4dea 6fe0c8f8 fetch 1 ,mem_keyboard_keyvalue_buffer 
+4deb f9207e00 qset1 pdata 
+4dec 67e0c8f8 store 1 ,mem_keyboard_keyvalue_buffer 
+4ded 20600000 rtn 
+
+keyboard_keyvalue_standard_in_data:
+4dee 18467ce7 sub temp ,hid_key_right_gui ,null 
+4def 24214df2 nbranch keyboard_keyvalue_standard_in_data_next ,positive 
+4df0 18467cbf sub temp ,0xbf ,null 
+4df1 24214de9 nbranch keyboard_keyvalue_control_key_in ,positive 
+
+keyboard_keyvalue_standard_in_data_next:
+4df2 18c08dff increase -1 ,contr 
+4df3 e0408006 istoret 1 ,contr 
+4df4 20600000 rtn 
+
+keyboard_special_key_check:
+4df5 44aac00a bpatch patch0a_5 ,mem_patch0a 
+4df6 20404e14 call keyboard_pairing_button_check 
+4df7 7049a100 jam 0 ,mem_keyboard_fn_flag 
+4df8 7049a200 jam 0 ,mem_keyboard_control_key_flag 
+4df9 7049a300 jam 0 ,mem_keyboard_bt_button_flag 
+4dfa 6fe0c8f8 fetch 1 ,mem_keyboard_keyvalue_buffer 
+4dfb 245a4e41 ncall keyborad_control_key_set ,blank 
+4dfc d8c048fa arg mem_keyboard_keyvalue_buffer + 2 ,contr 
+4dfd df200006 arg 6 ,loopcnt 
+
+keyboard_special_key_check_loop:
+4dfe efe08006 ifetch 1 ,contr 
+4dff 1fe67c7f sub pdata ,hid_key_fn ,null 
+4e00 2042ce43 call keyboard_fn_set ,zero 
+4e01 1fe67cde sub pdata ,hid_key_pb ,null 
+4e02 2042ce45 call keyboard_pb_set ,zero 
+4e03 c2004dfe loop keyboard_special_key_check_loop 
+4e04 6fe0c666 fetch 1 ,mem_device_flag 
+4e05 c0004e11 beq mode_24g_device ,keyboard_special_key_check_24g 
+
+keyboard_special_key_check_bluetooth:
+4e06 20404b37 call keyboard_commbination_fast_conn_bt_check 
+4e07 6fe0c9a4 fetch 1 ,mem_keyboard_pairing_type 
+4e08 203a4e24 branch keyboard_enable_bt_button_pairing ,blank 
+4e09 6fe148fa fetch 2 ,mem_keyboard_keyvalue_buffer + 2 
+4e0a 684949a5 fetcht 2 ,mem_keyboard_commbination_key_bt 
+4e0b 98467c00 isub temp ,null 
+4e0c 2022ce29 branch keyboard_long_button_bt_discovery ,zero 
+4e0d 18508400 byteswap temp ,temp 
+4e0e 98467c00 isub temp ,null 
+4e0f 2022ce29 branch keyboard_long_button_bt_discovery ,zero 
+4e10 20600000 rtn 
+
+keyboard_special_key_check_24g:
+4e11 6fe0c9a4 fetch 1 ,mem_keyboard_pairing_type 
+4e12 203a4e24 branch keyboard_enable_bt_button_pairing ,blank 
+4e13 20204e32 branch keyboard_commbination_pairing_24g_check 
+
+keyboard_pairing_button_check:
+4e14 6fe0c9a4 fetch 1 ,mem_keyboard_pairing_type 
+4e15 247a0000 nrtn blank 
+4e16 6848c655 fetcht 1 ,mem_config_select_device_button_gpio 
+4e17 18467cff sub temp ,ui_button_gpio_disable ,null 
+4e18 20628000 rtn zero 
+4e19 20406ee6 call gpio_get_bit 
+4e1a 2420ce20 nbranch keyboard_pairing_button_release ,true 
+4e1b df200008 arg 8 ,loopcnt 
+4e1c d8a048f8 arg mem_keyboard_keyvalue_buffer ,contw 
+4e1d 20407ca1 call clear_mem 
+4e1e 7048fade jam hid_key_pb ,mem_keyboard_keyvalue_buffer + 2 
+4e1f 20600000 rtn 
+
+keyboard_pairing_button_release:
+4e20 6fe0c8fa fetch 1 ,mem_keyboard_keyvalue_buffer + 2 
+4e21 c1ef0000 rtnne hid_key_pb 
+4e22 7048fa00 jam hid_key_null ,mem_keyboard_keyvalue_buffer + 2 
+4e23 20600000 rtn 
+
+keyboard_enable_bt_button_pairing:
+4e24 44ab400a bpatch patch0a_6 ,mem_patch0a 
+4e25 6fe0c9a3 fetch 1 ,mem_keyboard_bt_button_flag 
+4e26 207a0000 rtn blank 
+4e27 6fe0c666 fetch 1 ,mem_device_flag 
+4e28 c0004e39 beq mode_24g_device ,keyboard_24g_start_pair_mode 
+
+keyboard_long_button_bt_discovery:
+4e29 7048f400 jam 0 ,mem_keyboard_data_change_flag 
+4e2a 6fe0c666 fetch 1 ,mem_device_flag 
+4e2b c1000000 rtneq mode_24g_device 
+4e2c 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4e2d c3830000 rtnbit1 mouse_bt_discovery_button_long_down_flag 
+4e2e d8e00006 arg mouse_bt_discovery_button_long_down_flag ,queue 
+4e2f 20405f00 call mouse_enable_function_flag 
+4e30 204042d0 call app_evt_button_long_pressed 
+4e31 20204b90 branch keyboard_bb_event_discovery_btn 
+
+keyboard_commbination_pairing_24g_check:
+4e32 6fe148fa fetch 2 ,mem_keyboard_keyvalue_buffer + 2 
+4e33 684949a7 fetcht 2 ,mem_keyboard_commbination_key_24g 
+4e34 98467c00 isub temp ,null 
+4e35 2022ce39 branch keyboard_24g_start_pair_mode ,zero 
+4e36 18508400 byteswap temp ,temp 
+4e37 98467c00 isub temp ,null 
+4e38 24628000 nrtn zero 
+
+keyboard_24g_start_pair_mode:
+4e39 204049f8 call keyboard_pairing_check_otp_offset 
+4e3a 7048f400 jam 0 ,mem_keyboard_data_change_flag 
+4e3b 6fe145d8 fetch 2 ,mem_24g_pair_timeout 
+4e3c 247a0000 nrtn blank 
+4e3d 58000000 setarg 0 
+4e3e 67e14781 store 2 ,mem_mouse_no_data_timer 
+4e3f 20404b7c call keyboard_capslock_led_off 
+4e40 20206047 branch mouse_24g_start_pair_mode 
+
+keyborad_control_key_set:
+4e41 7049a201 jam 1 ,mem_keyboard_control_key_flag 
+4e42 20600000 rtn 
+
+keyboard_fn_set:
+4e43 7049a101 jam 1 ,mem_keyboard_fn_flag 
+4e44 20600000 rtn 
+
+keyboard_pb_set:
+4e45 7049a301 jam 1 ,mem_keyboard_bt_button_flag 
+4e46 20600000 rtn 
+
+keyboard_motion:
+4e47 44abc00a bpatch patch0a_7 ,mem_patch0a 
+4e48 78547c00 disable user 
+4e49 70496c00 jam 0 ,mem_customer_key 
+4e4a 70496d00 jam 0 ,mem_customer_data_trigger 
+4e4b 70496e00 jam 0 ,mem_customer_data_trigger_last 
+4e4c 6fe0c9c1 fetch 1 ,mem_keyboard_commbination_key_step 
+4e4d c000cda5 beq cammbination_key_press ,keyboard_commbination_key_press_process 
+4e4e c0014daa beq cammbination_key_hold ,keyboard_commbination_key_hold_process 
+4e4f c001cdaa beq cammbination_key_complete ,keyboard_commbination_key_hold_process 
+4e50 c0024dae beq cammbination_key_wait_release ,keyboard_commbination_key_wait_release_process 
+4e51 c0034db7 beq cammbination_key_null ,keyboard_commbination_key_null_process 
+4e52 6fe0c8f4 fetch 1 ,mem_keyboard_data_change_flag 
+4e53 203a4e64 branch keyboard_no_key_press ,blank 
+4e54 1fe0ffff increase -1 ,pdata 
+4e55 67e0c8f4 store 1 ,mem_keyboard_data_change_flag 
+4e56 20404e61 call keyboard_current_mult_update 
+4e57 7049ac0a jam 10 ,mem_keyboard_led_status_get_timer 
+4e58 20405c0b call mouse_no_data_timer_init 
+4e59 6fe0c9c1 fetch 1 ,mem_keyboard_commbination_key_step 
+4e5a c002cdb6 beq cammbination_key_release ,keyboard_commbination_key_release_process 
+4e5b d8a04855 arg mem_keyboard_tx_data ,contw 
+4e5c df20000a arg 10 ,loopcnt 
+4e5d 20407ca1 call clear_mem 
+4e5e 20404e74 call keyboard_motion_data_check 
+4e5f 70485f00 jam 0 ,mem_keyboard_data_send_flag 
+4e60 20600000 rtn 
+
+keyboard_current_mult_update:
+4e61 7040c003 jam 3 ,mem_lpm_mult 
+4e62 70477e0a jam 10 ,mem_mouse_current_mult_timer 
+4e63 20600000 rtn 
+
+keyboard_no_key_press:
+4e64 6fe0c666 fetch 1 ,mem_device_flag 
+4e65 c1008000 rtneq mode_bt_device1 
+4e66 6fe0c9ab fetch 1 ,mem_keyboard_led_status_get 
+4e67 207a0000 rtn blank 
+4e68 6fe0c9a9 fetch 1 ,mem_24g_repeat_send_flag 
+4e69 247a0000 nrtn blank 
+4e6a 6848c9ad fetcht 1 ,mem_keyboard_led_status_get_timer_last 
+4e6b 6fe0c9ac fetch 1 ,mem_keyboard_led_status_get_timer 
+4e6c 98467c00 isub temp ,null 
+4e6d 67e0c9ad store 1 ,mem_keyboard_led_status_get_timer_last 
+4e6e 20628000 rtn zero 
+4e6f d8a04855 arg mem_keyboard_tx_data ,contw 
+4e70 df20000a arg 10 ,loopcnt 
+4e71 20407ca1 call clear_mem 
+4e72 20407dba call enable_user 
+4e73 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_motion_data_check:
+4e74 6fe0c9c5 fetch 1 ,mem_keyboard_consumer_key_status 
+4e75 c0014f05 beq keyboard_consumer_key_release ,keyboard_value_consumer_release 
+4e76 d8c048fa arg mem_keyboard_keyvalue_buffer + 2 ,contr 
+4e77 df200006 arg 6 ,loopcnt 
+
+keyboard_value_tpye_check:
+4e78 efe08006 ifetch 1 ,contr 
+4e79 1fe67ce7 sub pdata ,hid_key_right_gui ,null 
+4e7a 24214e9c nbranch keyboard_value_tpye_consumer_set ,positive 
+
+keyboard_value_tpye_check_loop:
+4e7b c2004e78 loop keyboard_value_tpye_check 
+4e7c 6fe0c8f1 fetch 1 ,mem_keyboard_all_press_key_count 
+4e7d 205a4e92 call keyboard_value_release_all_key ,blank 
+4e7e 70485500 jam hid_reportid_key_standard ,mem_keyboard_tx_data 
+4e7f 6fe0c8fa fetch 1 ,mem_keyboard_keyvalue_buffer + 2 
+4e80 1fe67c7f sub pdata ,hid_key_fn ,null 
+4e81 2022ce95 branch keyboard_tx_data_skip_fn ,zero 
+4e82 d8c048f8 arg mem_keyboard_keyvalue_buffer ,contr 
+4e83 d8a04856 arg mem_keyboard_tx_data + 1 ,contw 
+4e84 df200008 arg 8 ,loopcnt 
+
+keyboard_tx_data_store:
+4e85 efe08006 ifetch 1 ,contr 
+4e86 c03fce9a beq hid_key_fn ,keyboard_tx_data_clear_fn 
+
+keyboard_tx_data_store_loop:
+4e87 e7e08005 istore 1 ,contw 
+4e88 c2004e85 loop keyboard_tx_data_store 
+
+keyboard_motion_data_check_next:
+4e89 20404f10 call keyboard_device_data_tpye_check 
+4e8a 6fe0c85f fetch 1 ,mem_keyboard_data_send_flag 
+4e8b c000fdba beq device_data_tpye_mouse ,enable_user 
+4e8c c0014e90 beq device_data_tpye_standard_keyboard ,device_send_keyboard_data 
+4e8d c001ce90 beq device_data_tpye_nonstarndard_keyboard ,device_send_keyboard_data 
+4e8e c0024e90 beq device_data_tpye_consumer ,device_send_keyboard_data 
+4e8f c002ce90 beq device_data_tpye_system_conctol ,device_send_keyboard_data 
+
+device_send_keyboard_data:
+4e90 20405917 call mouse_customerkey_press 
+4e91 20207dba branch enable_user 
+
+keyboard_value_release_all_key:
+4e92 d8a048f8 arg mem_keyboard_keyvalue_buffer ,contw 
+4e93 df200009 arg 9 ,loopcnt 
+4e94 20207ca1 branch clear_mem 
+
+keyboard_tx_data_skip_fn:
+4e95 6fe148f8 fetch 2 ,mem_keyboard_keyvalue_buffer 
+4e96 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4e97 6fe348fb fetch 6 ,mem_keyboard_keyvalue_buffer + 3 
+4e98 67e34858 store 6 ,mem_keyboard_tx_data + 3 
+4e99 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_tx_data_clear_fn:
+4e9a 58000000 setarg 0 
+4e9b 20204e87 branch keyboard_tx_data_store_loop 
+
+keyboard_value_tpye_consumer_set:
+4e9c 1fe20400 copy pdata ,temp 
+4e9d 44ac400b bpatch patch0b_0 ,mem_patch0b 
+4e9e 18427e00 copy temp ,pdata 
+4e9f 70485503 jam hid_reportid_consumer_key ,mem_keyboard_tx_data 
+4ea0 6848c8f1 fetcht 1 ,mem_keyboard_all_press_key_count 
+4ea1 18467c00 sub temp ,hid_key_null ,null 
+4ea2 2022cf05 branch keyboard_value_consumer_all_key_release ,zero 
+4ea3 c0744ebb beq hid_key_multikey_media ,keyboard_value_media 
+4ea4 c074cebe beq hid_key_multikey_paly ,keyboard_value_play 
+4ea5 c0754ec1 beq hid_key_multikey_stop ,keyboard_value_stop 
+4ea6 c075cec4 beq hid_key_multikey_pre_track ,keyboard_value_pre_track 
+4ea7 c0764ec7 beq hid_key_multikey_next_track ,keyboard_value_next_track 
+4ea8 c076ceca beq hid_key_multikey_vol_down ,keyboard_value_vol_down 
+4ea9 c0774ecd beq hid_key_multikey_vol_up ,keyboard_value_vol_up 
+4eaa c077ced0 beq hid_key_multikey_mute ,keyboard_value_mute 
+4eab c0784ed3 beq hid_key_my_computer ,keyboard_value_my_computer 
+4eac c078ced6 beq hid_key_mail ,keyboard_value_mail 
+4ead c0794ed9 beq hid_key_calculator ,keyboard_value_calculator 
+4eae c079cedc beq hid_key_light_down ,keyboard_value_light_down 
+4eaf c07a4edf beq hid_key_light_up ,keyboard_value_light_up 
+4eb0 c07acee2 beq hid_key_ac_favorites ,keyboard_value_ac_favorites 
+4eb1 c07b4ee5 beq hid_key_ac_forward ,keyboard_value_ac_forward 
+4eb2 c07bcee8 beq hid_key_ac_back ,keyboard_value_ac_back 
+4eb3 c07c4eeb beq hid_key_ac_stop ,keyboard_value_ac_stop 
+4eb4 c07cceee beq hid_key_ac_refresh ,keyboard_value_ac_refresh 
+4eb5 c07d4ef1 beq hid_key_ac_search ,keyboard_value_ac_search 
+4eb6 c07dcef7 beq hid_key_ac_home ,keyboard_value_ac_home 
+4eb7 c07e4efa beq hid_key_ios_android_os_lock ,keyboard_value_os_lock 
+4eb8 c07ecefd beq hid_key_os_soft_kb ,keyboard_value_os_soft_kb 
+4eb9 c07fcf0c beq hid_key_system_sleep ,keyboard_value_system_sleep 
+4eba 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_media:
+4ebb 58000183 setarg 0x0183 
+4ebc 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ebd 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_play:
+4ebe 580000cd setarg 0x00cd 
+4ebf 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ec0 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_stop:
+4ec1 580000b7 setarg 0x00b7 
+4ec2 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ec3 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_pre_track:
+4ec4 580000b6 setarg 0x00b6 
+4ec5 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ec6 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_next_track:
+4ec7 580000b5 setarg 0x00b5 
+4ec8 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ec9 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_vol_down:
+4eca 580000ea setarg 0x00ea 
+4ecb 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ecc 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_vol_up:
+4ecd 580000e9 setarg 0x00e9 
+4ece 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ecf 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_mute:
+4ed0 580000e2 setarg 0x00e2 
+4ed1 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ed2 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_my_computer:
+4ed3 58000194 setarg 0x0194 
+4ed4 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ed5 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_mail:
+4ed6 5800018a setarg 0x018a 
+4ed7 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ed8 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_calculator:
+4ed9 58000192 setarg 0x0192 
+4eda 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4edb 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_light_down:
+4edc 58000070 setarg 0x0070 
+4edd 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ede 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_light_up:
+4edf 5800006f setarg 0x006f 
+4ee0 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ee1 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_ac_favorites:
+4ee2 5800022a setarg 0x022a 
+4ee3 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ee4 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_ac_forward:
+4ee5 58000225 setarg 0x0225 
+4ee6 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ee7 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_ac_back:
+4ee8 58000224 setarg 0x0224 
+4ee9 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4eea 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_ac_stop:
+4eeb 58000226 setarg 0x0226 
+4eec 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4eed 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_ac_refresh:
+4eee 58000227 setarg 0x0227 
+4eef 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ef0 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_ac_search:
+4ef1 6fe0c9c6 fetch 1 ,mem_kb_computer_system 
+4ef2 c0014ef7 beq system_os_ios ,keyboard_value_ac_home 
+4ef3 c001cef7 beq system_os_mac ,keyboard_value_ac_home 
+4ef4 58000221 setarg 0x0221 
+4ef5 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ef6 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_ac_home:
+4ef7 58000223 setarg 0x0223 
+4ef8 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4ef9 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_os_lock:
+4efa 58000030 setarg 0x0030 
+4efb 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4efc 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_os_soft_kb:
+4efd 6fe0c9c6 fetch 1 ,mem_kb_computer_system 
+4efe c000cf02 beq system_os_andriod ,keyboard_value_os_soft_kb_andriod 
+4eff 580001ae setarg 0x01ae 
+4f00 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4f01 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_os_soft_kb_andriod:
+4f02 58000307 setarg 0x0307 
+4f03 67e14856 store 2 ,mem_keyboard_tx_data + 1 
+4f04 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_consumer_all_key_release:
+
+keyboard_value_consumer_release:
+4f05 7048f402 jam 2 ,mem_keyboard_data_change_flag 
+4f06 6fe0c8f1 fetch 1 ,mem_keyboard_all_press_key_count 
+4f07 205a4e92 call keyboard_value_release_all_key ,blank 
+4f08 7049c500 jam keyboard_consumer_key_standby ,mem_keyboard_consumer_key_status 
+4f09 58000003 setarg 0x03 
+4f0a 67e1c855 store 3 ,mem_keyboard_tx_data 
+4f0b 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_value_system_sleep:
+4f0c 70485502 jam hid_reportid_system_ctrl ,mem_keyboard_tx_data 
+4f0d 58000002 setarg 0x02 
+4f0e 67e0c856 store 1 ,mem_keyboard_tx_data + 1 
+4f0f 20204e89 branch keyboard_motion_data_check_next 
+
+keyboard_device_data_tpye_check:
+4f10 44acc00b bpatch patch0b_1 ,mem_patch0b 
+4f11 6fe0c666 fetch 1 ,mem_device_flag 
+4f12 c0804f18 bne mode_24g_device ,keyboard_device_data_tpye_check_next 
+4f13 7049a900 jam 0 ,mem_24g_repeat_send_flag 
+4f14 6fe14855 fetch 2 ,mem_keyboard_tx_data 
+4f15 245a4afc ncall keyboard_set_repeat_send_flag ,blank 
+4f16 6fe34858 fetch 6 ,mem_keyboard_tx_data + 3 
+4f17 245a4afc ncall keyboard_set_repeat_send_flag ,blank 
+
+keyboard_device_data_tpye_check_next:
+4f18 6fe0c855 fetch 1 ,mem_keyboard_tx_data 
+4f19 c0004f23 beq hid_reportid_key_standard ,keyboard_standard_data_send 
+4f1a c000cf1e beq hid_reportid_mouse ,keyboard_mouse_data_send 
+4f1b c001cf2e beq hid_reportid_consumer_key ,keyboard_consumer_data_send 
+4f1c c0014f36 beq hid_reportid_system_ctrl ,keyboard_system_control_data_send 
+4f1d 20600000 rtn 
+
+keyboard_mouse_data_send:
+4f1e 70485f01 jam device_data_tpye_mouse ,mem_keyboard_data_send_flag 
+4f1f d8c04855 arg mem_keyboard_tx_data ,contr 
+4f20 d8a04846 arg mem_mouse_key ,contw 
+4f21 df200007 arg 7 ,loopcnt 
+4f22 20207cda branch memcpy 
+
+keyboard_standard_data_send:
+4f23 70485f02 jam device_data_tpye_standard_keyboard ,mem_keyboard_data_send_flag 
+4f24 20404f3e call keyboard_clear_key_data 
+4f25 6fe0c666 fetch 1 ,mem_device_flag 
+4f26 c000cf2a beq mode_bt_device1 ,keyboard_standard_data_send_end 
+4f27 20404af1 call keyboard_24g_led_get_status_check 
+4f28 6fe0c9ab fetch 1 ,mem_keyboard_led_status_get 
+4f29 67e0c857 store 1 ,mem_keyboard_tx_data + 2 
+
+keyboard_standard_data_send_end:
+4f2a d8c04855 arg mem_keyboard_tx_data ,contr 
+4f2b d8a0472a arg mem_customer_key_press ,contw 
+4f2c df200009 arg 9 ,loopcnt 
+4f2d 20207cda branch memcpy 
+
+keyboard_consumer_data_send:
+4f2e 70485f04 jam device_data_tpye_consumer ,mem_keyboard_data_send_flag 
+4f2f 20404f3e call keyboard_clear_key_data 
+4f30 58000003 setarg 0x03 
+4f31 20405f15 call mouse_customer_media_key_set 
+4f32 d8c04856 arg mem_keyboard_tx_data + 1 ,contr 
+4f33 d8a0472b arg mem_customer_key_press + 1 ,contw 
+4f34 df200002 arg 2 ,loopcnt 
+4f35 20207cda branch memcpy 
+
+keyboard_system_control_data_send:
+4f36 70485f05 jam device_data_tpye_system_conctol ,mem_keyboard_data_send_flag 
+4f37 20404f3e call keyboard_clear_key_data 
+4f38 58000002 setarg 0x02 
+4f39 67e4472a store 8 ,mem_customer_key_press 
+4f3a 67e44733 store 8 ,mem_customer_key_release 
+4f3b 6fe0c856 fetch 1 ,mem_keyboard_tx_data + 1 
+4f3c 67e0c72b store 1 ,mem_customer_key_press + 1 
+4f3d 20600000 rtn 
+
+keyboard_clear_key_data:
+4f3e df200012 arg 18 ,loopcnt 
+4f3f d8a0472a arg mem_customer_key_press ,contw 
+4f40 20207ca1 branch clear_mem 
+
+keyboard_lpm_before_common:
+4f41 20407de2 call clear_wake 
+4f42 2040561c call mouse_wheel_check 
+4f43 6848c64a fetcht 1 ,mem_whee_a_data_gpio 
+4f44 20406eb2 call gpio_set_wake_by_current_state 
+4f45 6848c64b fetcht 1 ,mem_whee_b_data_gpio 
+4f46 20406eb2 call gpio_set_wake_by_current_state 
+4f47 6848c655 fetcht 1 ,mem_config_select_device_button_gpio 
+4f48 20406eb6 call gpio_set_wake 
+4f49 6fe14898 fetch 2 ,mem_kb_col_ptr 
+4f4a 1fe22400 copy pdata ,regb 
+4f4b df200014 arg 20 ,loopcnt 
+
+keyboard_key_col_wake_init:
+4f4c e8408012 ifetcht 1 ,regb 
+4f4d 284ffe07 isolate1 7 ,temp 
+4f4e 2440eef7 ncall gpio_out_active ,true 
+4f4f 1a40a401 increase 1 ,regb 
+4f50 c2004f4c loop keyboard_key_col_wake_init 
+4f51 6fe14896 fetch 2 ,mem_kb_row_ptr 
+4f52 1fe22400 copy pdata ,regb 
+4f53 df200008 arg 8 ,loopcnt 
+
+keyboard_key_row_wake_init:
+4f54 e8408012 ifetcht 1 ,regb 
+4f55 18467cff sub temp ,ui_button_gpio_disable ,null 
+4f56 2442eeb2 ncall gpio_set_wake_by_current_state ,zero 
+4f57 1a40a401 increase 1 ,regb 
+4f58 c2004f54 loop keyboard_key_row_wake_init 
+4f59 20600000 rtn 
+
+keyboard_key_row_wake_set:
+4f5a 6fe0c8eb fetch 1 ,mem_same_keyvalue_timerout_flag 
+4f5b 203a6eb6 branch gpio_set_wake ,blank 
+4f5c 20206eb2 branch gpio_set_wake_by_current_state 
+
+keyboard_process_lpm_before:
+4f5d c6130000 rtnmark1 mark_24g 
+4f5e 20404f41 call keyboard_lpm_before_common 
+4f5f 6fe08015 fetch 1 ,mem_lpm_current_mult 
+4f60 247a0000 nrtn blank 
+4f61 20206ed3 branch gpio_clr_wake 
+
+keyboard_before_hibernate:
+4f62 44ad400b bpatch patch0b_2 ,mem_patch0b 
+4f63 704659ff jam 0xff ,mem_sensor_motion_gpio 
+4f64 2040739a call disable_authrom 
+4f65 20404f70 call keyboard_device_led_all_off 
+4f66 204056a9 call mouse_before_hibernate_wheel_gpio_set 
+4f67 204054dc call mouse_setgpio_hibernate 
+4f68 20405d9e call mouse_flash_power_down 
+4f69 6848c659 fetcht 1 ,mem_sensor_motion_gpio 
+4f6a 20206ed3 branch gpio_clr_wake 
+
+keyboard_power_down:
+4f6b 20404f70 call keyboard_device_led_all_off 
+
+keyboard_app_enter_hibernate:
+4f6c 44adc00b bpatch patch0b_3 ,mem_patch0b 
+4f6d 20404f75 call keyboard_setgpio_hibernate 
+4f6e 20407d7c call ice_break 
+4f6f 20204327 branch app_enter_hibernate 
+
+keyboard_device_led_all_off:
+4f70 44ae400b bpatch patch0b_4 ,mem_patch0b 
+4f71 20404b6d call keyboard_device_led_off 
+4f72 20404b71 call keyboard_numlock_led_off 
+4f73 20404b7c call keyboard_capslock_led_off 
+4f74 20204b6f branch keyboard_power_led_off 
+
+keyboard_setgpio_hibernate:
+4f75 44aec00b bpatch patch0b_5 ,mem_patch0b 
+4f76 20407de2 call clear_wake 
+4f77 20404f70 call keyboard_device_led_all_off 
+4f78 20405a92 call mouse_set_sdio_high 
+4f79 20404f41 call keyboard_lpm_before_common 
+4f7a 204054f9 call mouse_gpio_pd_idle 
+4f7b 6848c65b fetcht 1 ,mem_mouse_reuse_2ice_gpio 
+4f7c 204055b5 call mouse_gpio_config_input_pu 
+4f7d 204055b9 call mouse_gpio_set_high_impedance 
+4f7e 202054f2 branch mouse_adc_gpio_set_before_hibernate 
+
+keyboard_g24_reconn_dispatch:
+4f7f 6fe145e0 fetch 2 ,mem_24g_reconn_count 
+4f80 1fe17ee0 and_into 0xe0 ,pdata 
+4f81 203a4f86 branch keyboard_g24_reconn_dispatch_next ,blank 
+4f82 6fe145e0 fetch 2 ,mem_24g_reconn_count 
+4f83 1fe0fe01 increase 1 ,pdata 
+4f84 67e145e0 store 2 ,mem_24g_reconn_count 
+4f85 20600000 rtn 
+
+keyboard_g24_reconn_dispatch_next:
+4f86 2040357f call g24_reconn_data_prep 
+4f87 20403651 call g24_transmit_receive_ack 
+4f88 242c3586 nbranch g24_reconn_device_fail ,sync 
+4f89 2437b586 nbranch g24_reconn_device_fail ,user3 
+4f8a 20405028 call keyboard_g24_ackpayload_parse 
+4f8b 2020356a branch g24_reconn_dispatch_next + 5 
+
+keyboard_g24_transmit_no_interrupt:
+4f8c 20403625 call g24_txdata_prep 
+4f8d 24344f91 nbranch keyboard_g24_nodata_transmit ,user 
+
+keyboard_g24_transmit_start:
+4f8e 20404fa0 call keyboard_g24_transmit_process 
+4f8f 20404fd5 call keyboard_power_ctrl_start 
+4f90 20204fdb branch keyboard_g24_transmit_start_next 
+
+keyboard_g24_nodata_transmit:
+4f91 6fe4489c fetch 8 ,mem_keyscan_value_current 
+4f92 243a4f8e nbranch keyboard_g24_transmit_start ,blank 
+4f93 6fe448a4 fetch 8 ,mem_keyscan_value_current + 8 
+4f94 243a4f8e nbranch keyboard_g24_transmit_start ,blank 
+4f95 6fe248ac fetch 4 ,mem_keyscan_value_current + 16 
+4f96 243a4f8e nbranch keyboard_g24_transmit_start ,blank 
+4f97 6fe0c618 fetch 1 ,mem_24g_transmit_by_interrupt 
+4f98 c1008000 rtneq g24_tx_timer_int_enable 
+4f99 2040369d call g24_search_receiver 
+
+keyboard_g24_long_sleep:
+4f9a 20404fc8 call keyboard_g24_lpm_wait 
+4f9b 24740000 nrtn user 
+4f9c 6fe0c73f fetch 1 ,mem_sensor_shutdown_flag 
+4f9d 245a4f75 ncall keyboard_setgpio_hibernate ,blank 
+4f9e 6fe245af fetch 4 ,mem_24g_enter_hibernate 
+4f9f 20203622 branch g24_long_seep2 
+
+keyboard_g24_transmit_process:
+4fa0 44af400b bpatch patch0b_6 ,mem_patch0b 
+4fa1 70460100 jam 0 ,mem_24g_retry 
+
+keyboard_g24_transmit_loop:
+4fa2 69610040 fetchr timeup ,2 ,mem_param_rx_setup 
+4fa3 34730200 until clkn_rt ,meet 
+4fa4 20404df5 call keyboard_special_key_check 
+4fa5 6fe0c9a3 fetch 1 ,mem_keyboard_bt_button_flag 
+4fa6 243a5ed1 nbranch mouse_soft_reset ,blank 
+4fa7 20403651 call g24_transmit_receive_ack 
+4fa8 6fe0c57f fetch 1 ,mem_24g_no_ack 
+4fa9 c000b646 beq no_ack_24g ,g24_transmit_no_ack 
+4faa 242c4faf nbranch keyboard_g24_retransmit ,sync 
+4fab 2437cfaf nbranch keyboard_g24_retransmit ,user3 
+4fac 20405028 call keyboard_g24_ackpayload_parse 
+4fad 70473f00 jam 0 ,mem_sensor_shutdown_flag 
+4fae 20203646 branch g24_transmit_no_ack 
+
+keyboard_g24_retransmit:
+4faf 6fe0c602 fetch 1 ,mem_24g_abort_pac 
+4fb0 247a0000 nrtn blank 
+4fb1 6fe145fe fetch 2 ,mem_24g_txfail_cnt 
+4fb2 1fe0fe01 increase 1 ,pdata 
+4fb3 67e145fe store 2 ,mem_24g_txfail_cnt 
+4fb4 6fe0c5fe fetch 1 ,mem_24g_txfail_cnt 
+4fb5 c07fb676 beq 0xff ,g24_tx_attempt_fail 
+4fb6 20404fb8 call keyboard_g24_transmit_hop_process 
+4fb7 20204fa2 branch keyboard_g24_transmit_loop 
+
+keyboard_g24_transmit_hop_process:
+4fb8 6848c601 fetcht 1 ,mem_24g_retry 
+4fb9 18467c14 sub temp ,20 ,null 
+4fba 20214fbe branch keyboard_g24_tx_fast_hop ,positive 
+4fbb df200019 arg 25 ,loopcnt 
+4fbc 20407c96 call delay_ms_wait 
+4fbd 20203694 branch g24_hop_ch_disable 
+
+keyboard_g24_tx_fast_hop:
+4fbe 18408401 increase 1 ,temp 
+4fbf 6048c601 storet 1 ,mem_24g_retry 
+4fc0 6fe2458f fetch 4 ,mem_24g_addr 
+4fc1 684a45e4 fetcht 4 ,mem_24g_fast_conn_addr 
+4fc2 98467c00 isub temp ,null 
+4fc3 2022b222 branch g24_ch ,zero 
+4fc4 6fe0c601 fetch 1 ,mem_24g_retry 
+4fc5 1fe67c03 sub pdata ,3 ,null 
+4fc6 20610000 rtn positive 
+4fc7 2020369a branch g24_tx_fast_hop 
+
+keyboard_g24_lpm_wait:
+4fc8 78347c00 enable user 
+4fc9 20402408 call lpo_calibration 
+4fca 6fe1c0bd fetch 3 ,mem_clks_per_lpo 
+4fcb 203a7dbc branch disable_user ,blank 
+4fcc 6fe0c9a1 fetch 1 ,mem_keyboard_fn_flag 
+4fcd 243a7dbc nbranch disable_user ,blank 
+4fce 6fe0c9a2 fetch 1 ,mem_keyboard_control_key_flag 
+4fcf 243a7dbc nbranch disable_user ,blank 
+4fd0 6fe0c9c4 fetch 1 ,mem_keyboard_commbination_control_key_delay_release_timer 
+4fd1 243a7dbc nbranch disable_user ,blank 
+4fd2 6fe0c618 fetch 1 ,mem_24g_transmit_by_interrupt 
+4fd3 c000fdbc beq g24_tx_timer_int_enable ,disable_user 
+4fd4 202036b9 branch g24_lpm_wait + 5 
+
+keyboard_power_ctrl_start:
+4fd5 6fe2458f fetch 4 ,mem_24g_addr 
+4fd6 684a45e4 fetcht 4 ,mem_24g_fast_conn_addr 
+4fd7 98467c00 isub temp ,null 
+4fd8 2422b6e9 nbranch power_ctrl_start + 1 ,zero 
+4fd9 7041419e jam tx_power_f30db ,mem_tx_power 
+4fda 20600000 rtn 
+
+keyboard_g24_transmit_start_next:
+4fdb 6fe4460b fetch 8 ,mem_24g_long_sleep_set 
+4fdc 67e445af store 8 ,mem_24g_enter_hibernate 
+4fdd 6fe1461d fetch 2 ,mem_24g_long_sleep_param_update_timer_init 
+4fde 67e1461f store 2 ,mem_24g_long_sleep_param_update_timer 
+
+keyboard_g24_short_sleep:
+4fdf 44afc00b bpatch patch0b_7 ,mem_patch0b 
+4fe0 204036b4 call g24_lpm_wait 
+4fe1 24740000 nrtn user 
+4fe2 20407de2 call clear_wake 
+4fe3 6fe1c608 fetch 3 ,mem_24g_short_sleep_set 
+4fe4 20203622 branch g24_long_seep2 
+
+keyboard_24g_package_data:
+4fe5 c6930000 rtnmark0 mark_24g 
+4fe6 20404e47 call keyboard_motion 
+4fe7 24740000 nrtn user 
+4fe8 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4fe9 c30b60a1 bbit0 mouse_enable_keyboard ,mouse_24g_mouse_package_data 
+4fea 6fe0c96c fetch 1 ,mem_customer_key 
+4feb 243a4fed nbranch keyboard_24g_keyboard_package_data ,blank 
+4fec 202060a1 branch mouse_24g_mouse_package_data 
+
+keyboard_24g_keyboard_package_data:
+4fed 70458902 jam type_kb ,mem_24g_data_type 
+4fee da200009 arg 9 ,rega 
+4fef 6fe0c96d fetch 1 ,mem_customer_data_trigger 
+4ff0 243a4ff3 nbranch keyboard_customer_key_press ,blank 
+4ff1 da404733 arg mem_customer_key_release ,regb 
+4ff2 20600000 rtn 
+
+keyboard_customer_key_press:
+4ff3 da40472a arg mem_customer_key_press ,regb 
+4ff4 20600000 rtn 
+
+keyboard_24g_search_dongle_init:
+4ff5 58000000 setarg 0 
+4ff6 67e1c6f8 store 3 ,mem_mouse_search_dongle_action 
+4ff7 20600000 rtn 
+
+keyboard_24g_search_dongle:
+4ff8 44b0400c bpatch patch0c_0 ,mem_patch0c 
+4ff9 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+4ffa c4070000 rtnbit0 mouse_enable_24g_search_dongle 
+4ffb 6fe0c77d fetch 1 ,mem_mouse_long_mult_flag 
+4ffc 207a0000 rtn blank 
+4ffd 6fe0c602 fetch 1 ,mem_24g_abort_pac 
+4ffe 207a0000 rtn blank 
+4fff 6fe0c6f5 fetch 1 ,mem_mouse_search_dongle_interval 
+5000 1fe0fe01 increase 1 ,pdata 
+5001 1fe17e03 and_into 3 ,pdata 
+5002 67e0c6f5 store 1 ,mem_mouse_search_dongle_interval 
+5003 247a0000 nrtn blank 
+5004 7046f600 jam 0 ,mem_mouse_search_dongle_ch 
+
+keyboard_24g_search_dongle_loop:
+5005 6fe0c6f6 fetch 1 ,mem_mouse_search_dongle_ch 
+5006 1fe0fe01 increase 1 ,pdata 
+5007 67e0c6f6 store 1 ,mem_mouse_search_dongle_ch 
+5008 1fe67c08 sub pdata ,g24_ch_number ,null 
+5009 24215010 nbranch keyboard_24g_search_dongle_loop_end ,positive 
+500a 2040357f call g24_reconn_data_prep 
+500b 20403651 call g24_transmit_receive_ack 
+500c 242c5016 nbranch keyboard_24g_search_dongle_loop_retry ,sync 
+500d 2437d016 nbranch keyboard_24g_search_dongle_loop_retry ,user3 
+500e 20405028 call keyboard_g24_ackpayload_parse 
+500f 20405020 call keyboard_24g_search_dongle_success 
+
+keyboard_24g_search_dongle_loop_end:
+5010 2040357b call g24_txbuf_clear 
+5011 6fe0c6f7 fetch 1 ,mem_mouse_search_dongle_count 
+5012 1fe0fe01 increase 1 ,pdata 
+5013 67e0c6f7 store 1 ,mem_mouse_search_dongle_count 
+5014 c0085018 beq g24_ch_poll_count ,keyboard_24g_search_dongle_check 
+5015 20600000 rtn 
+
+keyboard_24g_search_dongle_loop_retry:
+5016 20403222 call g24_ch 
+5017 20205005 branch keyboard_24g_search_dongle_loop 
+
+keyboard_24g_search_dongle_check:
+5018 7046f700 jam 0 ,mem_mouse_search_dongle_count 
+5019 6fe0c6f8 fetch 1 ,mem_mouse_search_dongle_action 
+501a c3800000 rtnbit1 g24_disconn_state 
+501b 79207e00 set1 g24_disconn_state ,pdata 
+501c 67e0c6f8 store 1 ,mem_mouse_search_dongle_action 
+501d 6fe14723 fetch 2 ,mem_mouse_24g_search_dongle_time_init 
+501e 67e14781 store 2 ,mem_mouse_no_data_timer 
+501f 20600000 rtn 
+
+keyboard_24g_search_dongle_success:
+5020 6fe0c602 fetch 1 ,mem_24g_abort_pac 
+5021 203a4ff5 branch keyboard_24g_search_dongle_init ,blank 
+5022 7046f700 jam 0 ,mem_mouse_search_dongle_count 
+5023 6fe0c6f8 fetch 1 ,mem_mouse_search_dongle_action 
+5024 c4000000 rtnbit0 g24_disconn_state 
+5025 793ffe00 set0 g24_disconn_state ,pdata 
+5026 67e0c6f8 store 1 ,mem_mouse_search_dongle_action 
+5027 20205c0b branch mouse_no_data_timer_init 
+
+keyboard_g24_ackpayload_parse:
+5028 2040366e call g24_ackpayload_parse 
+5029 6fe0c4f8 fetch 1 ,mem_24g_rxbuf + 1 
+502a 2fe1f008 compare 0x08 ,pdata ,0xf8 
+502b 24608000 nrtn true 
+502c 6fe0c4f9 fetch 1 ,mem_24g_rxbuf + 2 
+502d c07fcb11 beq 0xff ,keyboard_24g_hibernate_set 
+502e 20600000 rtn 
+
+keyboard_le_send_att_find_by_type_value_request_ancs:
+502f 7049f101 jam 1 ,mem_le_connect_ios_mac_flag 
+5030 da200017 arg 23 ,rega 
+5031 da400004 arg le_l2cap_cid_att ,regb 
+5032 204029fb call le_fifo_malloc_tx_l2cap 
+5033 58000006 setarg attop_find_by_type_value_request 
+5034 e7e08005 istore 1 ,contw 
+5035 58000001 setarg 0x0001 
+5036 e7e10005 istore 2 ,contw 
+5037 5800ffff setarg 0xffff 
+5038 e7e10005 istore 2 ,contw 
+5039 58002800 setarg 0x2800 
+503a e7e10005 istore 2 ,contw 
+503b d8c049e1 arg mem_le_search_service_uuid ,contr 
+503c 20207c8f branch memcpy16 
+
+keyboard_le_att_auto_reco_process:
+503d 44b0c00c bpatch patch0c_1 ,mem_patch0c 
+503e 6fe0c9f1 fetch 1 ,mem_le_connect_ios_mac_flag 
+503f 207a0000 rtn blank 
+5040 1a220c00 copy rega ,contr 
+5041 efe18006 ifetch 3 ,contr 
+5042 67e1c397 store 3 ,mem_le_att_opcode 
+5043 c005d091 beq attop_read_response ,keyboard_le_parse_att_manu_resp 
+5044 c004d078 beq attop_read_by_type_response ,keyboard_le_send_att_read_by_type_rsp_mac 
+5045 c003d048 beq attop_find_by_type_value_response ,keyboard_le_parse_att_find_by_type_value_rsp 
+5046 c000d05b beq attop_error_response ,keyboard_le_send_att_find_by_type_value_request_mac 
+5047 20202b96 branch le_parse_att2 
+
+keyboard_le_parse_att_find_by_type_value_rsp:
+5048 6fe0c9f1 fetch 1 ,mem_le_connect_ios_mac_flag 
+5049 c001506c beq 2 ,keyboard_le_parse_att_find_by_type_value_rsp_mac 
+
+keyboard_le_parse_att_find_ios_report:
+504a 7049c602 jam system_os_ios ,mem_kb_computer_system 
+504b 20205050 branch keyboard_otp_store_computer_system_ble 
+
+keyboard_le_parse_att_not_find_mac_report:
+504c 6fe0c2cb fetch 1 ,mem_le_conn_peer_addr_type 
+504d 67e0c9c6 store 1 ,mem_kb_computer_system 
+504e 20205050 branch keyboard_otp_store_computer_system_ble 
+
+keyboard_le_parse_att_find_mac_report:
+504f 7049c603 jam system_os_mac ,mem_kb_computer_system 
+
+keyboard_otp_store_computer_system_ble:
+5050 7049f100 jam 0 ,mem_le_connect_ios_mac_flag 
+5051 684949df fetcht 2 ,mem_otp_read_retention_offset 
+5052 58001fd0 setarg 0x1fd0 
+5053 98462400 isub temp ,regb 
+5054 da2049c6 arg mem_kb_computer_system ,rega 
+5055 df200001 arg 1 ,loopcnt 
+5056 20406b45 call otp_write 
+5057 684949df fetcht 2 ,mem_otp_read_retention_offset 
+5058 1840840e increase 14 ,temp 
+5059 604949df storet 2 ,mem_otp_read_retention_offset 
+505a 20600000 rtn 
+
+keyboard_le_send_att_find_by_type_value_request_mac:
+505b 6fe0c9f1 fetch 1 ,mem_le_connect_ios_mac_flag 
+505c c001504c beq 2 ,keyboard_le_parse_att_not_find_mac_report 
+505d 7049f102 jam 2 ,mem_le_connect_ios_mac_flag 
+505e da200009 arg 9 ,rega 
+505f da400004 arg le_l2cap_cid_att ,regb 
+5060 204029fb call le_fifo_malloc_tx_l2cap 
+5061 58000006 setarg attop_find_by_type_value_request 
+5062 e7e08005 istore 1 ,contw 
+5063 58000001 setarg 0x0001 
+5064 e7e10005 istore 2 ,contw 
+5065 5800ffff setarg 0xffff 
+5066 e7e10005 istore 2 ,contw 
+5067 58002800 setarg 0x2800 
+5068 e7e10005 istore 2 ,contw 
+5069 df200002 arg 2 ,loopcnt 
+506a d8c049f2 arg mem_le_search_mac_uuid ,contr 
+506b 20207cda branch memcpy 
+
+keyboard_le_parse_att_find_by_type_value_rsp_mac:
+506c da200007 arg 7 ,rega 
+506d da400004 arg le_l2cap_cid_att ,regb 
+506e 204029fb call le_fifo_malloc_tx_l2cap 
+506f 58000008 setarg attop_read_by_type_request 
+5070 e7e08005 istore 1 ,contw 
+5071 68494339 fetcht 2 ,mem_le_payload_ptr 
+5072 18408405 increase 5 ,temp 
+5073 efe20002 ifetch 4 ,temp 
+5074 e7e20005 istore 4 ,contw 
+5075 58002803 setarg 0x2803 
+5076 e7e10005 istore 2 ,contw 
+5077 20600000 rtn 
+
+keyboard_le_send_att_read_by_type_rsp_mac:
+5078 6fe14335 fetch 2 ,mem_le_l2cap_size 
+5079 1fe0fffe increase -2 ,pdata 
+507a 1fe6fc07 div pdata ,7 
+507b 20407d62 call wait_div_end 
+507c 1807f200 quotient loopcnt 
+507d 6fe14339 fetch 2 ,mem_le_payload_ptr 
+507e 1fe08c06 add pdata ,6 ,contr 
+507f 20205080 branch keyboard_le_check_att_read_type_manu_loop 
+
+keyboard_le_check_att_read_type_manu_loop:
+5080 18c08c03 increase 3 ,contr 
+5081 efe10006 ifetch 2 ,contr 
+5082 1fe22600 copy pdata ,regc 
+5083 efe10006 ifetch 2 ,contr 
+5084 d8402a29 arg 0x2a29 ,temp 
+5085 98467c00 isub temp ,null 
+5086 2022d089 branch keyboard_le_send_att_read_by_type_rsp_manufactory ,zero 
+5087 c2005080 loop keyboard_le_check_att_read_type_manu_loop 
+5088 2020504c branch keyboard_le_parse_att_not_find_mac_report 
+
+keyboard_le_send_att_read_by_type_rsp_manufactory:
+5089 da200003 arg 3 ,rega 
+508a da400004 arg le_l2cap_cid_att ,regb 
+508b 204029fb call le_fifo_malloc_tx_l2cap 
+508c 5800000a setarg attop_read_request 
+508d e7e08005 istore 1 ,contw 
+508e 1a627e00 copy regc ,pdata 
+508f e7e10005 istore 2 ,contw 
+5090 20600000 rtn 
+
+keyboard_le_parse_att_manu_resp:
+5091 6fe14335 fetch 2 ,mem_le_l2cap_size 
+5092 df200009 arg 9 ,loopcnt 
+5093 6fe14339 fetch 2 ,mem_le_payload_ptr 
+5094 1fe0a205 add pdata ,5 ,rega 
+5095 da4049f4 arg mem_le_search_mac_manu_name ,regb 
+5096 20407d64 call string_compare 
+5097 2022d04f branch keyboard_le_parse_att_find_mac_report ,zero 
+5098 2020504c branch keyboard_le_parse_att_not_find_mac_report 
+
+module_init:
+5099 2035d0bd branch module_lpm_init ,wake 
+509a 20402952 call le_modified_name 
+509b 580050c7 setarg module_process_idle 
+509c 67e143db store 2 ,mem_cb_idle_process 
+509d 580050ca setarg module_process_bb_event 
+509e 67e143dd store 2 ,mem_cb_bb_event_process 
+509f 580050c3 setarg module_lpm_lock 
+50a0 67e143d3 store 2 ,mem_cb_check_wakelock 
+50a1 58005180 setarg module_hci_cmd_transmit_le_notify 
+50a2 67e143e1 store 2 ,mem_cb_ble_transmit 
+50a3 580053b0 setarg module_le_receive_data 
+50a4 67e143df store 2 ,mem_cb_att_write 
+50a5 580053c1 setarg module_bb_event_timer 
+50a6 67e143e3 store 2 ,mem_cb_event_timer 
+50a7 44b1400c bpatch patch0c_2 ,mem_patch0c 
+50a8 204050ab call module_lpm_uart_init 
+50a9 204050be call module_gpio_init 
+50aa 2020533b branch module_hci_event_enter_standby_mode 
+
+module_lpm_uart_init:
+50ab 6ff08060 fetch 1 ,core_uart_ctrl 
+50ac 793ffe00 set0 bit_uart_control_enable ,pdata 
+50ad 67f08060 store 1 ,core_uart_ctrl 
+50ae 6fe44500 fetch 8 ,mem_module_uart_rx_buffer 
+50af 20406d68 call uarta_init_dma_mem 
+50b0 6fe14508 fetch uart_baud_len ,mem_module_uarta_baud_rate 
+50b1 20406d73 call uarta_init_baud_rate 
+50b2 20406d82 call uart_clock_select_main_freq_crystal 
+50b3 70807708 jam gpcfg_uart_txd ,core_gpio_conf + hci_uart_tx_gpio_num 
+50b4 70807649 jam gpcfg_uart_rxd | gpcfg_pullup ,core_gpio_conf + hci_uart_rx_gpio_num 
+50b5 7080790a jam gpcfg_uart_rts ,core_gpio_conf + hci_uart_rts_gpio_num 
+50b6 70807a0b jam gpcfg_uart_cts ,core_gpio_conf + hci_uart_cts_gpio_num 
+50b7 d8400081 arg fun_uart_control_enable | fun_uart_control_setting_rate_baud ,temp 
+50b8 6fe1450f fetch 2 ,mem_module_flag 
+50b9 2feffe00 isolate1 module_flag_uart_flow_control ,pdata 
+50ba 79208404 setflag true ,bit_uart_control_flow_control ,temp 
+50bb 60588060 storet 1 ,core_uart_ctrl 
+50bc 20600000 rtn 
+
+module_lpm_init:
+50bd 202050ab branch module_lpm_uart_init 
+
+module_gpio_init:
+50be 6848c4f5 fetcht 1 ,mem_module_connect_state_gpio 
+50bf 20406ef7 call gpio_config_output 
+50c0 204050ed call module_set_conn_pin_low 
+50c1 6848c4f3 fetcht 1 ,mem_module_wake_up_gpio 
+50c2 20206edd branch gpio_config_input 
+
+module_lpm_lock:
+50c3 6848c4f3 fetcht 1 ,mem_module_wake_up_gpio 
+50c4 20406ee6 call gpio_get_bit 
+50c5 2420c30a nbranch app_put_lpm_wake_lock ,true 
+50c6 20204308 branch app_get_lpm_wake_lock 
+
+module_process_idle:
+50c7 204069a9 call l2cap_malloc_is_fifo_full 
+50c8 247a0000 nrtn blank 
+50c9 202050ef branch module_process_check_hci_command_complete 
+
+module_process_bb_event:
+50ca 1a627e00 copy regc ,pdata 
+50cb c00a50dc beq bt_evt_le_connected ,module_process_le_conn 
+50cc c00ad0d8 beq bt_evt_le_disconnected ,module_process_bb_even_le_disconn 
+50cd c0185375 beq bt_evt_le_pairing_fail ,module_hci_event_le_pairing_fail 
+50ce c018d377 beq bt_evt_le_pairing_success ,module_hci_event_le_pairing_success 
+50cf c0195381 beq bt_evt_le_start_enc ,module_hci_event_start_enc 
+50d0 c019d37f beq bt_evt_le_pause_enc ,module_hci_event_pause_enc 
+50d1 c01a536f beq bt_evt_le_tk_generate ,module_hci_event_le_tk 
+50d2 c01ed34f beq bt_evt_store_nvram ,module_hci_event_store_device 
+50d3 c020d0e2 beq bt_evt_le_ltk_lost ,module_process_ble_ltk_lost 
+50d4 c02150e4 beq bt_evt_le_update_phy ,module_process_ble_update_phy 
+50d5 c021d36d beq bt_evt_le_get_passkey ,module_hci_event_passkey_entry_mode 
+50d6 c01dd358 beq bt_evt_le_gkey_generate ,module_hci_event_gkey_generate 
+50d7 20600000 rtn 
+
+module_process_bb_even_le_disconn:
+50d8 204029cb call le_clr_config_more_data 
+50d9 70451100 jam 0 ,mem_module_hci_notify_len 
+50da 204050e0 call module_disconn_start 
+50db 20205321 branch module_hci_event_le_disconnect 
+
+module_process_le_conn:
+50dc 204050e7 call module_conn_start 
+50dd 6fe0c4fe fetch 1 ,mem_module_le_lpm_mult 
+50de 67e0c0c0 store 1 ,mem_lpm_mult 
+50df 2020531f branch module_hci_event_le_connect 
+
+module_disconn_start:
+50e0 20405149 call module_start_adv_discovery_by_command 
+50e1 202050e5 branch module_set_conn_pin_high 
+
+module_process_ble_ltk_lost:
+50e2 204030f3 call le_send_reject_ind 
+50e3 20202ed5 branch le_send_smp_security_request 
+
+module_process_ble_update_phy:
+50e4 20205391 branch module_hci_event_le_update_phy 
+
+module_set_conn_pin_high:
+50e5 6848c4f5 fetcht 1 ,mem_module_connect_state_gpio 
+50e6 20206ef7 branch gpio_out_active 
+
+module_conn_start:
+50e7 204050e9 call module_stop_adv_discovery 
+50e8 202050ed branch module_set_conn_pin_low 
+
+module_stop_adv_discovery:
+50e9 6fe0c4f8 fetch 1 ,mem_module_state 
+50ea 2feffe01 isolate1 moudle_state_ble_bit ,pdata 
+50eb 2040c315 call app_ble_stop_adv ,true 
+50ec 20600000 rtn 
+
+module_set_conn_pin_low:
+50ed 6848c4f5 fetcht 1 ,mem_module_connect_state_gpio 
+50ee 20206ef3 branch gpio_out_inactive 
+
+module_process_check_hci_command_complete:
+50ef 6ff0810b fetch 1 ,core_uart_status 
+50f0 c3810000 rtnbit1 uart_status_rx_fifo_empty 
+50f1 20406d96 call uarta_prepare_rx 
+50f2 efe08003 ifetch 1 ,contru 
+50f3 c080d105 bne 0x01 ,module_hci_in_excp 
+50f4 6ff10112 fetch 2 ,core_uart_rxitems 
+50f5 1fe67c02 sub pdata ,2 ,null 
+50f6 20610000 rtn positive 
+50f7 efe08003 ifetch 1 ,contru 
+50f8 67e086e2 store 1 ,mem_module_uart_opcode 
+50f9 e8408003 ifetcht 1 ,contru 
+50fa 18622200 copy contru ,rega 
+50fb 604886e3 storet 1 ,mem_module_uart_len 
+50fc 18408403 add temp ,3 ,temp 
+50fd 6ff10112 fetch 2 ,core_uart_rxitems 
+50fe 98460400 isub temp ,temp 
+50ff 24610000 nrtn positive 
+5100 7006e401 jam hci_discard_packet ,mem_module_temp_nl_discard_packet 
+5101 20405113 call module_hci_cmd_control 
+5102 6fe086e4 fetch 1 ,mem_module_temp_nl_discard_packet 
+5103 c1000000 rtneq hci_not_discard_packet 
+5104 2020510e branch module_hci_dicard_packet 
+
+module_hci_in_excp:
+5105 20407c95 call delay_10ms 
+5106 2040535e call module_hci_event_invalid_packet 
+5107 20205108 branch module_hci_release_except 
+
+module_hci_release_except:
+5108 44b1c00c bpatch patch0c_3 ,mem_patch0c 
+5109 20406d96 call uarta_prepare_rx 
+510a 6ff10112 fetch 2 ,core_uart_rxitems 
+510b 207a0000 rtn blank 
+510c 98608600 iadd contru ,contru 
+510d 20205112 branch module_hci_dicard_bytes 
+
+module_hci_dicard_packet:
+510e 20406d96 call uarta_prepare_rx 
+510f 18608602 increase 2 ,contu 
+5110 efe08003 ifetch 1 ,contu 
+5111 98608600 iadd contu ,contu 
+
+module_hci_dicard_bytes:
+5112 20206d9c branch uarta_rxdone 
+
+module_hci_cmd_control:
+5113 44b2400c bpatch patch0c_4 ,mem_patch0c 
+5114 6fe086e2 fetch 1 ,mem_module_uart_opcode 
+5115 c000d13d beq hci_cmd_set_le_addr_req ,module_hci_cmd_set_le_addr 
+5116 c0015142 beq hci_cmd_set_visibility_req ,module_hci_cmd_set_visibility 
+5117 c0025150 beq hci_cmd_set_le_name_req ,module_hci_cmd_set_le_name 
+5118 c004d154 beq hci_cmd_le_data_req ,module_hci_cmd_receive_le_data 
+5119 c005d1ab beq hci_cmd_status_irq ,module_hci_cmd_inquire_status 
+511a c00751ac beq hci_cmd_set_uartcontrol_req ,module_hci_cmd_set_uart_control_mode 
+511b c007d1b4 beq hci_cmd_set_uart_baud_req ,module_hci_cmd_set_uart_baud 
+511c c00851bc beq hci_cmd_version_req ,module_hci_cmd_version_request 
+511d c00951c0 beq hci_cmd_ble_disconnect ,module_hci_cmd_ble_disconnect 
+511e c01351c4 beq hci_cmd_set_nvram_req ,module_hci_cmd_set_nvram 
+511f c01451c9 beq hci_cmd_confirm_gkey ,module_hci_cmd_confirm_gkey 
+5120 c01551cc beq hci_cmd_auto_adv_scan ,module_hci_cmd_auto_adv 
+5121 c015d1ff beq hci_cmd_power_req ,module_hci_cmd_power_request 
+5122 c0165205 beq hci_cmd_power_set ,module_hci_cmd_power_set 
+5123 c018520c beq hci_cmd_passkey_entry ,module_hci_cmd_passkey_entry 
+5124 c018d211 beq hci_cmd_set_gpio ,module_hci_cmd_set_gpio 
+5125 c0195222 beq hci_cmd_read_gpio ,module_hci_cmd_read_gpio 
+5126 c019d22d beq hci_cmd_le_set_pairing ,module_hci_cmd_le_set_pairing_mode 
+5127 c01a525a beq hci_cmd_le_set_adv_data ,module_hci_cmd_le_set_adv_data 
+5128 c01ad25d beq hci_cmd_le_set_scan_data ,module_hci_cmd_le_set_scan_data 
+5129 c01b5266 beq hci_cmd_le_send_conn_update_req ,module_hci_cmd_le_send_conn_update_req 
+512a c01bd26f beq hci_cmd_le_set_adv_parm ,module_hci_cmd_set_le_adv_parameter 
+512b c01c5275 beq hci_cmd_le_start_pairing ,module_hci_cmd_le_start_pairing 
+512c c020527d beq hci_cmd_set_wake_gpio ,module_hci_cmd_set_wake_gpio 
+512d c0215287 beq hci_cmd_set_tx_power ,module_hci_cmd_set_tx_power 
+512e c024528c beq hci_cmd_le_confirm_gkey ,module_hci_cmd_le_confirm_gkey 
+512f c028d297 beq hci_cmd_reset_chip_req ,module_hci_cmd_reset_chip 
+5130 c030d29b beq hci_cmd_le_set_fixed_passkey ,module_hci_cmd_le_set_fixed_passkey 
+5131 c03b52aa beq hci_cmd_delete_customize_service ,module_hci_cmd_delete_customize_service 
+5132 c03bd2b0 beq hci_cmd_add_service_uuid ,module_hci_cmd_add_service_uuid 
+5133 c03c52b5 beq hci_cmd_add_characteristic_uuid ,module_hci_cmd_add_characteristic_uuid 
+5134 c03d52eb beq hci_cmd_passkey_entry_input ,module_hci_cmd_le_passkey_entry_input 
+5135 c03dd2f9 beq hci_cmd_le_creat_conn ,module_hci_cmd_le_create_conn 
+5136 c04852ff beq hci_cmd_ble_set_phy ,module_hci_cmd_ble_set_phy 
+5137 c048d304 beq hci_cmd_ble_read_current_phy ,module_hci_cmd_ble_read_current_phy 
+5138 c0495308 beq hci_cmd_ble_set_dle ,module_hci_cmd_ble_set_dle 
+5139 c049d30d beq hci_cmd_read_chip_data ,module_hci_cmd_read_chip_data 
+513a c04a5311 beq hci_cmd_write_chip_data ,module_hci_cmd_write_chip_data 
+513b c07fd317 beq hci_cmd_close_lpm ,module_hci_cmd_close_lpm 
+513c 20205319 branch module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_set_le_addr:
+513d 6fe086e3 fetch 1 ,mem_module_uart_len 
+513e c0835319 bne 6 ,module_hci_event_receive_invalid_cmd 
+513f efe30003 ifetch 6 ,contru 
+5140 67e342db store 6 ,mem_le_lap 
+5141 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_set_visibility:
+5142 6fe086e3 fetch 1 ,mem_module_uart_len 
+5143 c080d319 bne 1 ,module_hci_event_receive_invalid_cmd 
+5144 e8408003 ifetcht 1 ,contru 
+5145 6048c4ff storet 1 ,mem_module_bluetooth_stauts_by_command 
+5146 2040531c call module_hci_event_receive_valid_cmd 
+5147 6fe144e9 fetch 2 ,mem_ui_state_map 
+5148 c3848000 rtnbit1 ui_state_ble_connected 
+
+module_start_adv_discovery_by_command:
+
+moudle_start_adv_by_command:
+5149 6fe0c4f8 fetch 1 ,mem_module_state 
+514a 2feffe01 isolate1 moudle_state_ble_bit ,pdata 
+514b 24608000 nrtn true 
+514c 6848c4ff fetcht 1 ,mem_module_bluetooth_stauts_by_command 
+514d 284ffe02 isolate1 2 ,temp 
+514e 2020c317 branch app_ble_start_adv ,true 
+514f 20204315 branch app_ble_stop_adv 
+
+module_hci_cmd_set_le_name:
+5150 dfe0001d arg 29 ,pdata 
+5151 d8a0426b arg mem_le_name_len ,contw 
+5152 20405260 call module_hci_cmd_receive_store_mem 
+5153 20202952 branch le_modified_name 
+
+module_hci_cmd_receive_le_data:
+5154 6fe144e9 fetch 2 ,mem_ui_state_map 
+5155 c304d319 bbit0 ui_state_ble_connected ,module_hci_event_receive_invalid_cmd 
+5156 204051a8 call module_check_ble_encrypt_state 
+5157 20345319 branch module_hci_event_receive_invalid_cmd ,user 
+5158 7006e400 jam hci_not_discard_packet ,mem_module_temp_nl_discard_packet 
+5159 6fe1450f fetch 2 ,mem_module_flag 
+515a c2845179 bbit1 module_flag_ble_data_finish ,module_hci_cmd_receive_le_data_finish 
+515b 6fe0c511 fetch 1 ,mem_module_hci_notify_len 
+515c 247a0000 nrtn blank 
+515d 7006e401 jam hci_discard_packet ,mem_module_temp_nl_discard_packet 
+515e efe10003 ifetch 2 ,contru 
+515f 67e14512 store 2 ,mem_module_hci_notify_handle 
+5160 60614514 storer contru ,2 ,mem_module_hci_nofiy_addr 
+5161 6fe086e3 fetch 1 ,mem_module_uart_len 
+5162 1fe0fffe pincrease -2 
+5163 24215319 nbranch module_hci_event_receive_invalid_cmd ,positive 
+5164 2022d319 branch module_hci_event_receive_invalid_cmd ,zero 
+5165 67e0c511 store 1 ,mem_module_hci_notify_len 
+5166 68494512 fetcht 2 ,mem_module_hci_notify_handle 
+5167 184085ff increase -1 ,temp 
+5168 20402cd2 call le_att_get_handle_ptr2 
+5169 203a517c branch module_hci_cmd_transmit_handle_error ,blank 
+516a e8420006 ifetcht 4 ,contr 
+516b 59280302 setarg 0x01280302 
+516c 98467c00 isub temp ,null 
+516d 2422d17c nbranch module_hci_cmd_transmit_handle_error ,zero 
+516e efe08006 ifetch 1 ,contr 
+516f 67e0c516 store 1 ,mem_module_hci_notify_type 
+5170 1fe17e30 and_into 0x30 ,pdata 
+5171 203a517c branch module_hci_cmd_transmit_handle_error ,blank 
+5172 7006e400 jam hci_not_discard_packet ,mem_module_temp_nl_discard_packet 
+5173 204029c9 call le_set_config_more_data 
+5174 20405180 call module_hci_cmd_transmit_le_notify 
+5175 20405180 call module_hci_cmd_transmit_le_notify 
+5176 20405180 call module_hci_cmd_transmit_le_notify 
+5177 6fe1450f fetch 2 ,mem_module_flag 
+5178 c4040000 rtnbit0 module_flag_ble_data_finish 
+
+module_hci_cmd_receive_le_data_finish:
+5179 7006e401 jam hci_discard_packet ,mem_module_temp_nl_discard_packet 
+517a 204053d6 call module_clear_le_tx_data_flag 
+517b 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_transmit_handle_error:
+517c 70451100 jam 0 ,mem_module_hci_notify_len 
+517d 7006e401 jam hci_discard_packet ,mem_module_temp_nl_discard_packet 
+517e 204053d6 call module_clear_le_tx_data_flag 
+517f 20205319 branch module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_transmit_le_notify:
+5180 6fe0c511 fetch 1 ,mem_module_hci_notify_len 
+5181 207a0000 rtn blank 
+5182 20402a28 call le_fifo_check_nearly_full 
+5183 247a0000 nrtn blank 
+5184 204051a3 call module_get_le_remote_mtu 
+5185 44b2c00c bpatch patch0c_5 ,mem_patch0c 
+5186 6fe142e1 fetch 2 ,mem_le_local_mtu 
+5187 20407db0 call not_greater_than 
+5188 1fe20400 copy pdata ,temp 
+5189 6fe0c396 fetch 1 ,mem_le_l2cap_att_states 
+518a c3800000 rtnbit1 ble_l2cap_recv_confirmation_packet 
+518b 1840fffd add temp ,-3 ,pdata 
+518c d84000fb arg 251 ,temp 
+518d 20407db0 call not_greater_than 
+518e 6848c511 fetcht 1 ,mem_module_hci_notify_len 
+518f 20407db0 call not_greater_than 
+5190 1fe22200 copy pdata ,rega 
+5191 18427e00 copy temp ,pdata 
+5192 9a267e00 isub rega ,pdata 
+5193 67e0c511 store 1 ,mem_module_hci_notify_len 
+5194 2040519e call module_hci_cmd_transmit_le_notify_malloc_l2cap 
+5195 6fe14514 fetch 2 ,mem_module_hci_nofiy_addr 
+5196 1fe20600 copy pdata ,contru 
+5197 1a227200 copy rega ,loopcnt 
+5198 20406dca call uart_copy_rx_bytes_fast 
+5199 18627e00 copy contru ,pdata 
+519a 67e14514 store 2 ,mem_module_hci_nofiy_addr 
+519b 6fe0c511 fetch 1 ,mem_module_hci_notify_len 
+519c 247a0000 nrtn blank 
+519d 202053d4 branch module_set_le_tx_data_flag 
+
+module_hci_cmd_transmit_le_notify_malloc_l2cap:
+519e 68494512 fetcht 2 ,mem_module_hci_notify_handle 
+519f 6fe0c516 fetch 1 ,mem_module_hci_notify_type 
+51a0 c282adf7 bbit1 bit_characteristic_indicate ,le_att_malloc_tx_indication 
+51a1 c2822dee bbit1 bit_characteristic_notify ,le_att_malloc_tx_notify 
+51a2 20600000 rtn 
+
+module_get_le_remote_mtu:
+51a3 d8400017 arg 0x17 ,temp 
+51a4 6fe1450f fetch 2 ,mem_module_flag 
+51a5 c3808000 rtnbit1 module_flag_ble_send_mtu23 
+51a6 684942e3 fetcht 2 ,mem_le_remote_mtu 
+51a7 20600000 rtn 
+
+module_check_ble_encrypt_state:
+51a8 6fe1450f fetch 2 ,mem_module_flag 
+51a9 c2812dc7 bbit1 module_flag_ble_data_encrypt ,le_check_encrypt_state 
+51aa 20207dbc branch disable_user 
+
+module_hci_cmd_inquire_status:
+51ab 2020533f branch module_hci_event_status_res 
+
+module_hci_cmd_set_uart_control_mode:
+51ac efe08003 ifetch 1 ,contru 
+51ad 6848c50f fetcht 1 ,mem_module_flag 
+51ae 7d3a0400 nsetflag blank ,module_flag_uart_flow_control ,temp 
+51af 6048c50f storet 1 ,mem_module_flag 
+51b0 68588060 fetcht 1 ,core_uart_ctrl 
+51b1 7d3a0404 nsetflag blank ,bit_uart_control_flow_control ,temp 
+51b2 60588060 storet 1 ,core_uart_ctrl 
+51b3 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_set_uart_baud:
+51b4 6f2086e3 fetchr loopcnt ,1 ,mem_module_uart_len 
+51b5 20407d33 call string2dec_from_uart 
+51b6 20406d77 call uart_calc_baud_rate_config 
+51b7 67e14508 store uart_baud_len ,mem_module_uarta_baud_rate 
+51b8 2040531c call module_hci_event_receive_valid_cmd 
+51b9 20406dae call wait_uarttx 
+51ba 6fe14508 fetch uart_baud_len ,mem_module_uarta_baud_rate 
+51bb 20206d73 branch uarta_init_baud_rate 
+
+module_hci_cmd_version_request:
+51bc da200002 arg 2 ,rega 
+51bd da4044f1 arg mem_soft_version_num ,regb 
+51be d8400000 arg 0 ,temp 
+51bf 20205323 branch module_hci_event_set_cmd 
+
+module_hci_cmd_ble_disconnect:
+51c0 6fe144e9 fetch 2 ,mem_ui_state_map 
+51c1 c304d319 bbit0 ui_state_ble_connected ,module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_ble_disconnect_doing:
+51c2 2040531c call module_hci_event_receive_valid_cmd 
+51c3 2020431f branch app_ble_disconnect 
+
+module_hci_cmd_set_nvram:
+51c4 6f2086e3 fetchr loopcnt ,1 ,mem_module_uart_len 
+51c5 6fe143f8 fetch 2 ,mem_nv_data_ptr 
+51c6 1fe20a00 icopy contw 
+51c7 20406dca call uart_copy_rx_bytes_fast 
+51c8 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_confirm_gkey:
+51c9 6fe144e9 fetch 2 ,mem_ui_state_map 
+51ca c284d28c bbit1 ui_state_ble_connected ,module_hci_cmd_le_confirm_gkey 
+51cb 20205319 branch module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_auto_adv:
+51cc df200040 arg 0x40 ,loopcnt 
+51cd d8a04348 arg mem_le_adv_data_len ,contw 
+51ce 20407ca1 call clear_mem 
+51cf 58000000 setarg 0 
+51d0 67e08688 store 1 ,mem_regb 
+51d1 1a220600 copy rega ,contru 
+
+module_hci_cmd_auto_adv_loop:
+51d2 18627e00 copy contru ,pdata 
+51d3 67e1068c store 2 ,mem_regc 
+51d4 204051fa call module_hci_cmd_auto_adv_adv_analys 
+51d5 6fe08688 fetch 1 ,mem_regb 
+51d6 68488678 fetcht 1 ,mem_temp 
+51d7 18408401 increase 1 ,temp 
+51d8 9840fe00 iadd temp ,pdata 
+51d9 67e08688 store 1 ,mem_regb 
+51da 1fe67c1f sub pdata ,31 ,null 
+51db 242151e6 nbranch module_hci_cmd_auto_adv_store_scan ,positive 
+
+module_hci_cmd_auto_adv_store_adv:
+51dc 6848c348 fetcht 1 ,mem_le_adv_data_len 
+51dd 58004349 setarg mem_le_adv_data 
+51de 9840fe00 iadd temp ,pdata 
+51df 67e10691 store 2 ,mem_contw 
+51e0 68488678 fetcht 1 ,mem_temp 
+51e1 18408401 increase 1 ,temp 
+51e2 6fe0c348 fetch 1 ,mem_le_adv_data_len 
+51e3 9840fe00 iadd temp ,pdata 
+51e4 67e0c348 store 1 ,mem_le_adv_data_len 
+51e5 202051ef branch module_hci_cmd_auto_adv_store_common 
+
+module_hci_cmd_auto_adv_store_scan:
+51e6 6848c368 fetcht 1 ,mem_le_scan_data_len 
+51e7 58004369 setarg mem_le_scan_data 
+51e8 9840fe00 iadd temp ,pdata 
+51e9 67e10691 store 2 ,mem_contw 
+51ea 68488678 fetcht 1 ,mem_temp 
+51eb 18408401 increase 1 ,temp 
+51ec 6fe0c368 fetch 1 ,mem_le_scan_data_len 
+51ed 9840fe00 iadd temp ,pdata 
+51ee 67e0c368 store 1 ,mem_le_scan_data_len 
+
+module_hci_cmd_auto_adv_store_common:
+51ef 6fe10691 fetch 2 ,mem_contw 
+51f0 1fe20a00 copy pdata ,contw 
+51f1 6fe1068c fetch 2 ,mem_regc 
+51f2 1fe20600 copy pdata ,contru 
+51f3 18427200 copy temp ,loopcnt 
+51f4 20406dca call uart_copy_rx_bytes_fast 
+51f5 6fe086e3 fetch 1 ,mem_module_uart_len 
+51f6 68488688 fetcht 1 ,mem_regb 
+51f7 98467c00 isub temp ,null 
+51f8 2422d1d2 nbranch module_hci_cmd_auto_adv_loop ,zero 
+51f9 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_auto_adv_adv_analys:
+51fa efe08003 ifetch 1 ,contru 
+51fb 67e08678 store 1 ,mem_temp 
+51fc efe08003 ifetch 1 ,contru 
+51fd 67e08684 store 1 ,mem_rega 
+51fe 20600000 rtn 
+
+module_hci_cmd_power_request:
+51ff d8400000 arg 0 ,temp 
+5200 da200002 arg 2 ,rega 
+5201 6fe1450c fetch 2 ,mem_module_vdd_quotient 
+5202 67e106a1 store 2 ,mem_event_cmd_response_content 
+5203 da4006a1 arg mem_event_cmd_response_content ,regb 
+5204 20205323 branch module_hci_event_set_cmd 
+
+module_hci_cmd_power_set:
+5205 6fe086e3 fetch 1 ,mem_module_uart_len 
+5206 c080d319 bne 1 ,module_hci_event_receive_invalid_cmd 
+5207 efe08003 ifetch 1 ,contru 
+5208 67e0c50a store 1 ,mem_module_read_vdd_flag 
+5209 58000000 setarg 0x00 
+520a 67e1450c store 2 ,mem_module_vdd_quotient 
+520b 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_passkey_entry:
+520c 6fe086e3 fetch 1 ,mem_module_uart_len 
+520d c0825319 bne 4 ,module_hci_event_receive_invalid_cmd 
+520e 6fe144e9 fetch 2 ,mem_ui_state_map 
+520f c284d2eb bbit1 ui_state_ble_connected ,module_hci_cmd_le_passkey_entry_input 
+5210 20205319 branch module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_set_gpio:
+5211 6fe086e3 fetch 1 ,mem_module_uart_len 
+5212 c081d319 bne 3 ,module_hci_event_receive_invalid_cmd 
+5213 efe08003 ifetch 1 ,contru 
+5214 c0005217 beq hci_cmd_config_gpio_input ,module_set_gpio_input 
+5215 c000d21d beq hci_cmd_config_gpio_output ,module_set_gpio_output 
+5216 20205319 branch module_hci_event_receive_invalid_cmd 
+
+module_set_gpio_input:
+5217 2040531c call module_hci_event_receive_valid_cmd 
+5218 e8408003 ifetcht 1 ,contru 
+5219 efe08003 ifetch 1 ,contru 
+521a c0016f0f beq gpio_input_high_impedance ,gpio_set_high_impedance 
+521b 7d3a0407 nsetflag blank ,7 ,temp 
+521c 20206edd branch gpio_config_input 
+
+module_set_gpio_output:
+521d 2040531c call module_hci_event_receive_valid_cmd 
+521e e8408003 ifetcht 1 ,contru 
+521f efe08003 ifetch 1 ,contru 
+5220 203a6ef7 branch gpio_out_active ,blank 
+5221 20206ef3 branch gpio_out_inactive 
+
+module_hci_cmd_read_gpio:
+5222 6fe086e3 fetch 1 ,mem_module_uart_len 
+5223 c080d319 bne 1 ,module_hci_event_receive_invalid_cmd 
+5224 e8408003 ifetcht 1 ,contru 
+5225 20406ee6 call gpio_get_bit 
+5226 58000000 setarg 0x0 
+5227 7d20fe00 nsetflag true ,0 ,pdata 
+5228 da200001 arg 1 ,rega 
+5229 67e106a1 store 2 ,mem_event_cmd_response_content 
+522a da4006a1 arg mem_event_cmd_response_content ,regb 
+522b d8400000 arg 0 ,temp 
+522c 20205323 branch module_hci_event_set_cmd 
+
+module_hci_cmd_le_set_pairing_mode:
+522d efe08003 ifetch 1 ,contru 
+522e 1fe20400 copy pdata ,temp 
+522f c040d23c beq le_pairing_mode_secure_connect_justwork ,module_le_set_pairing_mode_secure_justwork 
+5230 c0415240 beq le_pairing_mode_secure_connect_numeric ,module_le_set_pairing_mode_secure_numeric 
+5231 c041d245 beq le_pairing_mode_secure_connect_passkey ,module_le_set_pairing_mode_secure_passkey 
+5232 c0425249 beq le_pairing_mode_secure_connect_passkey_res_input ,module_le_set_pairing_mode_secure_passkey_res_input 
+5233 67e0c2fe store 1 ,mem_le_pairing_mode 
+5234 204074ff call sc_reset 
+5235 20402ec4 call le_secure_connection_disable 
+5236 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+5237 c000524d beq le_pairing_mode_none ,module_le_set_no_pairing 
+5238 c000d250 beq le_pairing_mode_lagacy_justwork ,module_le_set_pairing_mode_lagacy_just_work 
+5239 c0015252 beq le_pairing_mode_lagacy_passkey ,module_le_set_pairing_mode_lagacy_passkey 
+523a c0025254 beq le_pairing_mode_lagacy_passkey_res_input ,module_le_set_pairing_mode_lagacy_passkey_res_input 
+523b 20205319 branch module_hci_event_receive_invalid_cmd 
+
+module_le_set_pairing_mode_secure_justwork:
+523c 6048c2fe storet 1 ,mem_le_pairing_mode 
+523d 20402ec0 call le_secure_connection_enable 
+523e 7042c70d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+523f 2020524e branch module_le_set_noinputnooutput 
+
+module_le_set_pairing_mode_secure_numeric:
+5240 6048c2fe storet 1 ,mem_le_pairing_mode 
+5241 20402ec0 call le_secure_connection_enable 
+5242 7042c70d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+5243 7042c501 jam flag_iocap_displayyesno ,mem_le_pres_iocap 
+5244 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_le_set_pairing_mode_secure_passkey:
+5245 6048c2fe storet 1 ,mem_le_pairing_mode 
+5246 20402ec0 call le_secure_connection_enable 
+5247 7042c70d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+5248 20205258 branch module_le_set_displayonly 
+
+module_le_set_pairing_mode_secure_passkey_res_input:
+5249 6048c2fe storet 1 ,mem_le_pairing_mode 
+524a 20402ec0 call le_secure_connection_enable 
+524b 7042c70d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+524c 20205256 branch module_le_set_keboadonly 
+
+module_le_set_no_pairing:
+524d 7042c700 jam flag_le_no_bonding_no_mitm ,mem_le_pres_auth 
+
+module_le_set_noinputnooutput:
+524e 7042c503 jam flag_iocap_noinputnooutput ,mem_le_pres_iocap 
+524f 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_le_set_pairing_mode_lagacy_just_work:
+5250 7042c701 jam flag_le_bonding_no_mitm ,mem_le_pres_auth 
+5251 2020524e branch module_le_set_noinputnooutput 
+
+module_le_set_pairing_mode_lagacy_passkey:
+5252 7042c705 jam flag_le_bonding_mitm ,mem_le_pres_auth 
+5253 20205258 branch module_le_set_displayonly 
+
+module_le_set_pairing_mode_lagacy_passkey_res_input:
+5254 7042c705 jam flag_le_bonding_mitm ,mem_le_pres_auth 
+5255 20205256 branch module_le_set_keboadonly 
+
+module_le_set_keboadonly:
+5256 7042c502 jam flag_iocap_keyboardonly ,mem_le_pres_iocap 
+5257 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_le_set_displayonly:
+5258 7042c500 jam flag_iocap_displayonly ,mem_le_pres_iocap 
+5259 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_le_set_adv_data:
+525a dfe0001f arg 31 ,pdata 
+525b d8a04348 arg mem_le_adv_data_len ,contw 
+525c 20205260 branch module_hci_cmd_receive_store_mem 
+
+module_hci_cmd_le_set_scan_data:
+525d dfe0001f arg 31 ,pdata 
+525e d8a04368 arg mem_le_scan_data_len ,contw 
+525f 20205260 branch module_hci_cmd_receive_store_mem 
+
+module_hci_cmd_receive_store_mem:
+5260 6f2086e3 fetchr loopcnt ,1 ,mem_module_uart_len 
+5261 9f267c00 isub loopcnt ,null 
+5262 24215319 nbranch module_hci_event_receive_invalid_cmd ,positive 
+5263 e7208005 istorer loopcnt ,1 ,contw 
+5264 20406dca call uart_copy_rx_bytes_fast 
+5265 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_le_send_conn_update_req:
+5266 6fe144e9 fetch 2 ,mem_ui_state_map 
+5267 c304d319 bbit0 ui_state_ble_connected ,module_hci_event_receive_invalid_cmd 
+5268 6fe086e3 fetch 1 ,mem_module_uart_len 
+5269 c0845319 bne 0x08 ,module_hci_event_receive_invalid_cmd 
+526a efe40003 ifetch 8 ,contru 
+526b 67e442d3 store 8 ,mem_le_interval_min 
+526c 70066f12 jam bt_cmd_le_update_conn ,mem_fifo_temp 
+526d 20407834 call ui_ipc_send_cmd 
+526e 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_set_le_adv_parameter:
+526f efe10003 ifetch 2 ,contru 
+5270 67e14389 store 2 ,mem_le_adv_interval 
+5271 6048c0a6 storet 1 ,mem_lpm_overhead 
+5272 9840fe00 iadd temp ,pdata 
+5273 67e140a4 store 2 ,mem_lpm_interval 
+5274 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_le_start_pairing:
+5275 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+5276 203a5319 branch module_hci_event_receive_invalid_cmd ,blank 
+5277 6fe0c2fc fetch 1 ,mem_le_pairing_state 
+5278 c0805319 bne flag_le_pairing_null ,module_hci_event_receive_invalid_cmd 
+5279 6fe0c2fd fetch 1 ,mem_le_enc_state 
+527a c0805319 bne flag_le_enc_null ,module_hci_event_receive_invalid_cmd 
+527b 204078a9 call check_51cmd_le_smp_sec_req 
+527c 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_set_wake_gpio:
+527d 6fe086e3 fetch 1 ,mem_module_uart_len 
+527e c082d319 bne 5 ,module_hci_event_receive_invalid_cmd 
+527f efe08003 ifetch 1 ,contru 
+5280 67e0c4f9 store 1 ,mem_module_mcu_wake_pin 
+5281 efe20003 ifetch 4 ,contru 
+5282 67e244fa store 4 ,mem_module_mcu_wake_delay_us 
+5283 6848c4f9 fetcht 1 ,mem_module_mcu_wake_pin 
+5284 20406ef7 call gpio_config_output 
+5285 204053ae call module_set_mcu_wake_pin_low 
+5286 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_set_tx_power:
+5287 6fe086e3 fetch 1 ,mem_module_uart_len 
+5288 c080d319 bne 0x01 ,module_hci_event_receive_invalid_cmd 
+5289 efe08003 ifetch 1 ,contru 
+528a 67e0c141 store 1 ,mem_tx_power 
+528b 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_le_confirm_gkey:
+528c efe08003 ifetch 1 ,contru 
+528d c000d295 beq 0x01 ,module_hci_cmd_le_confirm_gkey_fail 
+528e 6fe0c2fa fetch 1 ,mem_le_secure_connect_state 
+528f c001d293 beq le_sc_stat_send_public_key ,module_hci_cmd_le_confirm_gkey_ok 
+5290 c0035293 beq le_sc_stat_receive_dhkey ,module_hci_cmd_le_confirm_gkey_ok 
+5291 c003d293 beq le_sc_stat_wait_confirm_gkey ,module_hci_cmd_le_confirm_gkey_ok 
+5292 20205319 branch module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_le_confirm_gkey_ok:
+5293 7042fb01 jam flag_le_sc_confrim_gkey_ok ,mem_le_sc_confirm_gkey_flag 
+5294 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_le_confirm_gkey_fail:
+5295 20402f2a call le_send_pairing_confirm_value_failed 
+5296 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_reset_chip:
+5297 2040531c call module_hci_event_receive_valid_cmd 
+5298 20406dae call wait_uarttx 
+5299 70801001 jam 0x01 ,core_reset 
+529a 2020235a branch assert 
+
+module_hci_cmd_le_set_fixed_passkey:
+529b 6fe086e3 fetch 1 ,mem_module_uart_len 
+529c c0005319 beq 0 ,module_hci_event_receive_invalid_cmd 
+529d efe08003 ifetch 1 ,contru 
+529e 203a52a8 branch module_hci_cmd_le_set_random_passkey ,blank 
+529f 6fe086e3 fetch 1 ,mem_module_uart_len 
+52a0 c082d319 bne 5 ,module_hci_event_receive_invalid_cmd 
+52a1 efe20003 ifetch 4 ,contru 
+52a2 d84f4240 arg 1000000 ,temp 
+52a3 98467c00 isub temp ,null 
+52a4 20215319 branch module_hci_event_receive_invalid_cmd ,positive 
+52a5 67e242ff store 4 ,mem_le_tk 
+52a6 204029c1 call le_set_config_fixed_tk 
+52a7 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_le_set_random_passkey:
+52a8 204029c3 call le_clr_config_fixed_tk 
+52a9 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_delete_customize_service:
+52aa d8400001 arg 0x0001 ,temp 
+52ab 20402cd2 call le_att_get_handle_ptr2 
+52ac 18c08bfe add contr ,-2 ,contw 
+52ad 58000000 setarg 0x0000 
+52ae e7e10005 istore 2 ,contw 
+52af 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_add_service_uuid:
+52b0 204052b9 call module_hci_cmd_add_service_uuid_set_uuid 
+52b1 204052e7 call uart_copy_rx_bytes_len_data 
+52b2 58000000 setarg 0x0000 
+52b3 e7e10005 istore 2 ,contw 
+52b4 20205388 branch module_hci_event_uuid_handle 
+
+module_hci_cmd_add_characteristic_uuid:
+52b5 efe08003 ifetch 1 ,contru 
+52b6 204052bd call module_hci_cmd_add_characteristic_uuid_set_handle 
+52b7 204052c4 call module_hci_cmd_add_characteristic_uuid_set_uuid 
+52b8 20205388 branch module_hci_event_uuid_handle 
+
+module_hci_cmd_add_service_uuid_set_uuid:
+52b9 204052e4 call le_att_creat_new_handle 
+52ba 58280002 setarg 0x280002 
+52bb e7e18005 istore 3 ,contw 
+52bc 20600000 rtn 
+
+module_hci_cmd_add_characteristic_uuid_set_handle:
+52bd 67e08670 store 1 ,mem_pdatatemp 
+52be 204052e4 call le_att_creat_new_handle 
+52bf 59280302 setarg 0x01280302 
+52c0 e7e20005 istore 4 ,contw 
+52c1 6fe08670 fetch 1 ,mem_pdatatemp 
+52c2 e7e18005 istore 3 ,contw 
+52c3 20600000 rtn 
+
+module_hci_cmd_add_characteristic_uuid_set_uuid:
+52c4 20402cf6 call le_att_get_last_handle 
+52c5 efe08003 ifetch 1 ,contru 
+52c6 1fe1721f and pdata ,0x1f ,loopcnt 
+52c7 1fe22200 copy pdata ,rega 
+52c8 2a2ffe07 isolate1 bit_of_write_authenticated ,rega 
+52c9 7920840f setflag true ,bit_of_att_handle_write_authenticated ,temp 
+52ca 2a2ffe06 isolate1 bit_of_read_authenticated ,rega 
+52cb 7920840e setflag true ,bit_of_att_handle_read_authenticated ,temp 
+52cc e0410005 istoret 2 ,contw 
+52cd 1f227e00 copy loopcnt ,pdata 
+52ce e7e08005 istore 1 ,contw 
+52cf 20406ddd call uart_copy_rx_bytes 
+52d0 204052e7 call uart_copy_rx_bytes_len_data 
+52d1 58000000 setarg 0 
+52d2 e7e10005 istore 2 ,contw 
+52d3 184104ff and temp ,0xff ,temp 
+52d4 184085ff increase -1 ,temp 
+52d5 20402cd2 call le_att_get_handle_ptr2 
+52d6 18c08c04 add contr ,4 ,contr 
+52d7 efe08006 ifetch 1 ,contr 
+52d8 c28252dc bbit1 bit_characteristic_notify ,module_hci_cmd_add_characteristic_uuid_set_ccc_uuid 
+52d9 c282d2dc bbit1 bit_characteristic_indicate ,module_hci_cmd_add_characteristic_uuid_set_ccc_uuid 
+52da 18408401 increase 1 ,temp 
+52db 20600000 rtn 
+
+module_hci_cmd_add_characteristic_uuid_set_ccc_uuid:
+52dc 20402cf6 call le_att_get_last_handle 
+52dd 2a2ffe05 isolate1 bit_of_notify_authenticated ,rega 
+52de 7920840f setflag true ,bit_of_att_handle_write_authenticated ,temp 
+52df e0410005 istoret 2 ,contw 
+52e0 5a290202 setarg 0x02290202 
+52e1 e7e40005 istore 8 ,contw 
+52e2 184085ff increase -1 ,temp 
+52e3 20600000 rtn 
+
+le_att_creat_new_handle:
+52e4 20402cf6 call le_att_get_last_handle 
+52e5 e0410005 istoret 2 ,contw 
+52e6 20600000 rtn 
+
+uart_copy_rx_bytes_len_data:
+52e7 efe08003 ifetch 1 ,contru 
+52e8 1fe27200 copy pdata ,loopcnt 
+52e9 e7e08005 istore 1 ,contw 
+52ea 20206ddd branch uart_copy_rx_bytes 
+
+module_hci_cmd_le_passkey_entry_input:
+52eb 6fe0c2fc fetch 1 ,mem_le_pairing_state 
+52ec c082d319 bne flag_le_pairing_receive_pairing_confirm ,module_hci_event_receive_invalid_cmd 
+52ed 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+52ee c00252f7 beq le_pairing_mode_lagacy_passkey_res_input ,module_hci_cmd_passkey_entry_res_input 
+52ef c04252f1 beq le_pairing_mode_secure_connect_passkey_res_input ,module_hci_cmd_passkey_entry_sc_res_input 
+52f0 20205319 branch module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_passkey_entry_sc_res_input:
+52f1 7042f902 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+52f2 7042fa08 jam le_sc_stat_passkey_wait_confirm ,mem_le_secure_connect_state 
+52f3 202052f4 branch module_hci_cmd_receive_ble_passkey 
+
+module_hci_cmd_receive_ble_passkey:
+52f4 efe20003 ifetch 4 ,contru 
+52f5 67e242ff store 4 ,mem_le_tk 
+52f6 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_passkey_entry_res_input:
+52f7 204052f4 call module_hci_cmd_receive_ble_passkey 
+52f8 20202f13 branch le_send_smp_pairing_confirm 
+
+module_hci_cmd_le_create_conn:
+52f9 efe30003 ifetch 6 ,contru 
+52fa 67e342cc store 6 ,mem_le_conn_peer_addr 
+52fb 7001bc1b jam hci_cmd_le_create_conn ,mem_cmd_le_create_conn 
+52fc 70451701 jam on ,mem_le_conn_flag 
+52fd 70434301 jam on ,mem_le_scan_enable 
+52fe 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_ble_set_phy:
+52ff 6fe086e3 fetch 1 ,mem_module_uart_len 
+5300 c0815319 bne 2 ,module_hci_event_receive_invalid_cmd 
+5301 e8410003 ifetcht 2 ,contru 
+5302 20402a2d call le_set_phys 
+5303 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_ble_read_current_phy:
+5304 d8400000 arg 0 ,temp 
+5305 da200002 arg 2 ,rega 
+5306 da404075 arg mem_context + coffset_le_rx_phy ,regb 
+5307 20205323 branch module_hci_event_set_cmd 
+
+module_hci_cmd_ble_set_dle:
+5308 6fe086e3 fetch 1 ,mem_module_uart_len 
+5309 c0845319 bne 8 ,module_hci_event_receive_invalid_cmd 
+530a efe40003 ifetch 8 ,contru 
+530b 20402a2b call le_set_dle 
+530c 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_read_chip_data:
+530d ea208003 ifetchr rega ,1 ,contru 
+530e ea410003 ifetchr regb ,2 ,contru 
+530f d8400000 arg 0 ,temp 
+5310 20205323 branch module_hci_event_set_cmd 
+
+module_hci_cmd_write_chip_data:
+5311 6f2086e3 fetchr loopcnt ,1 ,mem_module_uart_len 
+5312 1f20f3fe increase -2 ,loopcnt 
+5313 efe10003 ifetch 2 ,contru 
+5314 1fe20a00 copy pdata ,contw 
+5315 20406dca call uart_copy_rx_bytes_fast 
+5316 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_close_lpm:
+5317 70409400 jam 0 ,mem_lpm_mode 
+5318 2020531c branch module_hci_event_receive_valid_cmd 
+
+module_hci_event_receive_invalid_cmd:
+5319 d8400001 arg 1 ,temp 
+531a da200000 arg 0 ,rega 
+531b 20205323 branch module_hci_event_set_cmd 
+
+module_hci_event_receive_valid_cmd:
+531c d8400000 arg 0 ,temp 
+531d da200000 arg 0 ,rega 
+531e 20205323 branch module_hci_event_set_cmd 
+
+module_hci_event_le_connect:
+531f 7006e202 jam hci_event_le_conn_rep ,mem_module_uart_opcode 
+5320 2020533c branch module_hci_event_enter_standby_mode_len0 
+
+module_hci_event_le_disconnect:
+5321 7006e205 jam hci_event_le_dis_rep ,mem_module_uart_opcode 
+5322 2020533c branch module_hci_event_enter_standby_mode_len0 
+
+module_hci_event_set_cmd:
+5323 6fe086e2 fetch 1 ,mem_module_uart_opcode 
+5324 1fe22600 copy pdata ,regc 
+5325 7006e206 jam hci_event_cmd_res ,mem_module_uart_opcode 
+5326 58000002 setarg 2 
+5327 9a20fe00 iadd rega ,pdata 
+5328 20405397 call module_hci_prepare_tx 
+5329 1a627e00 copy regc ,pdata 
+532a e7e08003 istore 1 ,contwu 
+532b e0408003 istoret 1 ,contwu 
+532c 1a227200 copy rega ,loopcnt 
+532d 1a420c00 copy regb ,contr 
+532e 20406dc4 call uart_copy_tx_bytes 
+532f 202053a1 branch module_hci_transmit_tx 
+
+module_hci_event_receive_le_data:
+5330 7006e208 jam hci_event_le_data_rep ,mem_module_uart_opcode 
+5331 1f20fe02 add loopcnt ,2 ,pdata 
+5332 20405397 call module_hci_prepare_tx 
+5333 6fe1070d fetch 2 ,mem_module_le_rx_data_handle 
+5334 e7e10003 istore 2 ,contwu 
+5335 6fe1070b fetch 2 ,mem_module_le_rx_data_address 
+5336 1fe20c00 icopy contr 
+5337 20406db1 call uart_copy_tx_bytes_fast 
+5338 18c27e00 copy contr ,pdata 
+5339 67e1070b store 2 ,mem_module_le_rx_data_address 
+533a 202053a1 branch module_hci_transmit_tx 
+
+module_hci_event_enter_standby_mode:
+533b 7006e209 jam hci_event_standby_rep ,mem_module_uart_opcode 
+
+module_hci_event_enter_standby_mode_len0:
+533c 58000000 setarg 0 
+533d 20405397 call module_hci_prepare_tx 
+533e 202053a1 branch module_hci_transmit_tx 
+
+module_hci_event_status_res:
+533f 7006e20a jam hci_event_status_res ,mem_module_uart_opcode 
+5340 58000001 setarg 1 
+5341 20405397 call module_hci_prepare_tx 
+5342 20405349 call module_hci_read_bt_status 
+5343 6fe144e9 fetch 2 ,mem_ui_state_map 
+5344 d8e00009 arg ui_state_ble_connected ,queue 
+5345 afefffff qisolate1 pdata 
+5346 79208405 setflag true ,5 ,temp 
+5347 e0408003 istoret 1 ,contwu 
+5348 202053a1 branch module_hci_transmit_tx 
+
+module_hci_read_bt_status:
+5349 d8400000 arg 0 ,temp 
+534a 6fe0c388 fetch 1 ,mem_le_adv_enable 
+534b d8e00000 arg 0 ,queue 
+534c afefffff qisolate1 pdata 
+534d 79208402 setflag true ,2 ,temp 
+534e 20600000 rtn 
+
+module_hci_event_store_device:
+534f 7006e20d jam hci_event_nvram_rep ,mem_module_uart_opcode 
+5350 6fe0c3fa fetch 1 ,mem_nv_data_number 
+5351 1feffe22 mul32 pdata ,34 ,pdata 
+5352 1fe27200 icopy loopcnt 
+5353 20405397 call module_hci_prepare_tx 
+5354 6fe143f8 fetch 2 ,mem_nv_data_ptr 
+5355 1fe20c00 icopy contr 
+5356 20406db1 call uart_copy_tx_bytes_fast 
+5357 202053a1 branch module_hci_transmit_tx 
+
+module_hci_event_gkey_generate:
+5358 7006e20e jam hci_event_gkey ,mem_module_uart_opcode 
+5359 58000004 setarg 4 
+535a 20405397 call module_hci_prepare_tx 
+535b 6fe205fa fetch 4 ,mem_gkey 
+535c e7e20003 istore 4 ,contwu 
+535d 202053a1 branch module_hci_transmit_tx 
+
+module_hci_event_invalid_packet:
+535e 7006e20f jam hci_event_invalid_packet ,mem_module_uart_opcode 
+535f 6ff10112 fetch 2 ,core_uart_rxitems 
+5360 d8400040 arg 0x40 ,temp 
+5361 20407db0 call not_greater_than 
+5362 1fe22200 copy pdata ,rega 
+5363 1fe27200 copy pdata ,loopcnt 
+5364 20406d96 call uarta_prepare_rx 
+5365 d8a006a1 arg mem_module_rx_error_data_buffer ,contw 
+5366 20406dca call uart_copy_rx_bytes_fast 
+5367 1a227e00 copy rega ,pdata 
+5368 1a227200 copy rega ,loopcnt 
+5369 20405397 call module_hci_prepare_tx 
+536a d8c006a1 arg mem_module_rx_error_data_buffer ,contr 
+536b 20406db1 call uart_copy_tx_bytes_fast 
+536c 202053a1 branch module_hci_transmit_tx 
+
+module_hci_event_passkey_entry_mode:
+536d 7006e210 jam hci_event_get_passkey ,mem_module_uart_opcode 
+536e 2020533c branch module_hci_event_enter_standby_mode_len0 
+
+module_hci_event_le_tk:
+536f 7006e211 jam hci_event_le_tk ,mem_module_uart_opcode 
+5370 58000004 setarg 4 
+5371 20405397 call module_hci_prepare_tx 
+5372 6fe242ff fetch 4 ,mem_le_tk 
+5373 e7e20003 istore 4 ,contwu 
+5374 202053a1 branch module_hci_transmit_tx 
+
+module_hci_event_le_pairing_fail:
+5375 da200180 arg flag_ble_pairing_fail ,rega 
+5376 20205379 branch module_hci_event_pairing_completed 
+
+module_hci_event_le_pairing_success:
+5377 da200080 arg flag_ble_pairing_success ,rega 
+5378 20205379 branch module_hci_event_pairing_completed 
+
+module_hci_event_pairing_completed:
+5379 7006e214 jam hci_event_le_pairing_state ,mem_module_uart_opcode 
+537a 58000002 setarg 2 
+537b 20405397 call module_hci_prepare_tx 
+537c 1a227e00 copy rega ,pdata 
+537d e7e10003 istore 2 ,contwu 
+537e 202053a1 branch module_hci_transmit_tx 
+
+module_hci_event_pause_enc:
+537f da600000 arg flag_event_pause_enc ,regc 
+5380 20205382 branch module_hci_event_enc 
+
+module_hci_event_start_enc:
+5381 da600001 arg flag_event_start_enc ,regc 
+
+module_hci_event_enc:
+5382 7006e215 jam hci_event_le_encryption_state ,mem_module_uart_opcode 
+5383 58000001 setarg 1 
+5384 20405397 call module_hci_prepare_tx 
+5385 1a627e00 copy regc ,pdata 
+5386 e7e08003 istore 1 ,contwu 
+5387 202053a1 branch module_hci_transmit_tx 
+
+module_hci_event_uuid_handle:
+5388 60490678 storet 2 ,mem_temp 
+5389 7006e229 jam hci_event_uuid_handle ,mem_module_uart_opcode 
+538a 58000002 setarg 2 
+538b 20405397 call module_hci_prepare_tx 
+538c 68490678 fetcht 2 ,mem_temp 
+538d e0410003 istoret 2 ,contwu 
+538e 202053a1 branch module_hci_transmit_tx 
+
+module_hci_event_le_input_passkey:
+538f 7006e22b jam hci_event_le_input_gkey ,mem_module_uart_opcode 
+5390 2020533c branch module_hci_event_enter_standby_mode_len0 
+
+module_hci_event_le_update_phy:
+5391 7006e240 jam hci_ble_update_phy_event ,mem_module_uart_opcode 
+5392 58000002 setarg 2 
+5393 20405397 call module_hci_prepare_tx 
+5394 6fe14075 fetch 2 ,mem_context + coffset_le_rx_phy 
+5395 e7e10003 istore 2 ,contwu 
+5396 202053a1 branch module_hci_transmit_tx 
+
+module_hci_prepare_tx:
+5397 7006e102 jam 0x02 ,mem_module_uart_cmd 
+5398 67e086e3 store 1 ,mem_module_uart_len 
+5399 604c0678 storet 8 ,mem_temp 
+539a 44b3400c bpatch patch0c_6 ,mem_patch0c 
+539b 204053a3 call module_set_mcu_wake_pin_high_delay 
+539c 684c0678 fetcht 8 ,mem_temp 
+539d 20406da2 call uarta_prepare_tx_register_push 
+539e 6fe186e1 fetch 3 ,mem_module_uart_cmd 
+539f e7e18003 istore 3 ,contwu 
+53a0 20600000 rtn 
+
+module_hci_transmit_tx:
+53a1 44b3c00c bpatch patch0c_7 ,mem_patch0c 
+53a2 20206da4 branch uarta_send_register_pop 
+
+module_set_mcu_wake_pin_high_delay:
+53a3 204053ac call module_check_mcu_wake_pin_high 
+53a4 20608000 rtn true 
+
+module_set_mcu_wake_pin_h_delay:
+53a5 204053aa call module_set_mcu_wake_pin_high 
+53a6 6fe244fa fetch 4 ,mem_module_mcu_wake_delay_us 
+53a7 1feb7e00 rshift2 pdata ,pdata 
+53a8 207a0000 rtn blank 
+53a9 20207c91 branch delay 
+
+module_set_mcu_wake_pin_high:
+53aa 6848c4f9 fetcht 1 ,mem_module_mcu_wake_pin 
+53ab 20206ef7 branch gpio_out_active 
+
+module_check_mcu_wake_pin_high:
+53ac 6848c4f9 fetcht 1 ,mem_module_mcu_wake_pin 
+53ad 20206f02 branch gpio_check_active 
+
+module_set_mcu_wake_pin_low:
+53ae 6848c4f9 fetcht 1 ,mem_module_mcu_wake_pin 
+53af 20206ef3 branch gpio_out_inactive 
+
+module_le_receive_data:
+53b0 6221070b storer rega ,2 ,mem_module_le_rx_data_address 
+53b1 62410709 storer regb ,2 ,mem_module_le_rx_data_len 
+53b2 6fe14398 fetch 2 ,mem_le_att_handle 
+53b3 67e1070d store 2 ,mem_module_le_rx_data_handle 
+53b4 204051a8 call module_check_ble_encrypt_state 
+53b5 20740000 rtn user 
+
+module_le_receive_data_ok:
+53b6 68490709 fetcht 2 ,mem_module_le_rx_data_len 
+53b7 6fe0c50e fetch 1 ,mem_module_ble_data_uart_max_length 
+53b8 20407db0 call not_greater_than 
+53b9 1fe27200 copy pdata ,loopcnt 
+53ba 18427e00 copy temp ,pdata 
+53bb 9f267e00 isub loopcnt ,pdata 
+53bc 67e10709 store 2 ,mem_module_le_rx_data_len 
+53bd 20405330 call module_hci_event_receive_le_data 
+53be 6fe10709 fetch 2 ,mem_module_le_rx_data_len 
+53bf 207a0000 rtn blank 
+53c0 202053b6 branch module_le_receive_data_ok 
+
+module_bb_event_timer:
+53c1 20600000 rtn 
+
+module_read_vdd_timer:
+53c2 6fe0c50a fetch 1 ,mem_module_read_vdd_flag 
+53c3 207a0000 rtn blank 
+53c4 6fe0c50b fetch 1 ,mem_module_read_vdd_count 
+53c5 207a0000 rtn blank 
+53c6 1fe0ffff increase -1 ,pdata 
+53c7 67e0c50b store 1 ,mem_module_read_vdd_count 
+53c8 247a0000 nrtn blank 
+53c9 70450b05 jam flag_module_read_vdd_count ,mem_module_read_vdd_count 
+53ca 20406f82 call enable_adc 
+53cb 20406fb0 call vdd_calculate_by_mode 
+53cc 1fe6fc0a div pdata ,10 
+53cd 20407d5f call get_div_result 
+53ce 1fe6fc64 div pdata ,100 
+53cf 20407d5f call get_div_result 
+53d0 18070400 remainder temp 
+53d1 67e0c50c store 1 ,mem_module_vdd_quotient 
+53d2 6048c50d storet 1 ,mem_module_vdd_remainder 
+53d3 20600000 rtn 
+
+module_set_le_tx_data_flag:
+53d4 d8e00008 arg module_flag_ble_data_finish ,queue 
+53d5 202053dc branch module_set_state 
+
+module_clear_le_tx_data_flag:
+53d6 d8e00008 arg module_flag_ble_data_finish ,queue 
+53d7 202053d8 branch module_clr_state 
+
+module_clr_state:
+53d8 6fe1450f fetch 2 ,mem_module_flag 
+53d9 f93ffe00 qset0 pdata 
+53da 67e1450f store 2 ,mem_module_flag 
+53db 20600000 rtn 
+
+module_set_state:
+53dc 6fe1450f fetch 2 ,mem_module_flag 
+53dd f9207e00 qset1 pdata 
+53de 67e1450f store 2 ,mem_module_flag 
+53df 20600000 rtn 
+
+mouse_init:
+53e0 20407396 call enable_authrom 
+53e1 20405410 call mouse_setting_config 
+53e2 20405949 call mouse_init_sunt 
+53e3 20758000 rtn wake 
+53e4 20405747 call mouse_setting_sensor_type 
+53e5 20405f37 call mouse_drawing_optima_init 
+53e6 204053ec call mouse_cb_fuction 
+53e7 204059ed call mouse_sensor_powerdown 
+
+mouse_init_wireless:
+53e8 6fe144e9 fetch 2 ,mem_ui_state_map 
+53e9 c2865c1a bbit1 ui_state_btn_down ,mouse_start_discovery 
+53ea 20405eb6 call mouse_check_select_device_by_switch 
+53eb 2020548c branch mouse_start_work 
+
+mouse_cb_fuction:
+53ec 44b4400d bpatch patch0d_0 ,mem_patch0d 
+53ed 58006235 setarg mouse_24g_short_sleep 
+53ee 67e145f8 store 2 ,mem_cb_24g_transmit_short_sleep 
+53ef 5800622b setarg mouse_24g_long_sleep 
+53f0 67e145fa store 2 ,mem_cb_24g_transmit_long_sleep 
+53f1 58006109 setarg mouse_24g_before_lpm_sleep 
+53f2 67e143e9 store 2 ,mem_cb_before_lpm_sleep 
+53f3 58006096 setarg mouse_24g_package_data 
+53f4 67e145f2 store 2 ,mem_cb_24g_transmit_data 
+53f5 580060c1 setarg mouse_24g_search_dongle 
+53f6 67e145f4 store 2 ,mem_cb_24g_search_receiver 
+53f7 5800550c setarg mouse_lpm_before_common 
+53f8 67e145f6 store 2 ,mem_cb_24g_lpm_before 
+53f9 58005b23 setarg mouse_le 
+53fa 67e143d9 store 2 ,mem_cb_le_process 
+53fb 58005507 setarg mouse_process_lpm_before 
+53fc 67e143d7 store 2 ,mem_cb_before_lpm 
+53fd 58005ac1 setarg mouse_priority_bb_event 
+53fe 67e143dd store 2 ,mem_cb_bb_event_process 
+53ff 58005e5d setarg mouse_idle 
+5400 67e143db store 2 ,mem_cb_idle_process 
+5401 580054d5 setarg mouse_before_hibernate 
+5402 67e143d5 store 2 ,mem_cb_before_hibernate 
+5403 58005b08 setarg mouse_le_bb_event_connect_complete 
+5404 67e143df store 2 ,mem_cb_att_write 
+5405 58005b85 setarg mouse_bb_event_timer 
+5406 67e143e3 store 2 ,mem_cb_event_timer 
+5407 580055fa setarg mouse_spi_write_flash_cb 
+5408 67e143e7 store 2 ,mem_cb_spi_flash_write_complate 
+5409 580054c5 setarg mouse_lpm_check_wake_lock 
+540a 67e143d3 store 2 ,mem_cb_check_wakelock 
+540b 58006221 setarg mouse_le_transmit 
+540c 67e143e1 store 2 ,mem_cb_ble_transmit 
+540d 58006228 setarg mouse_set_lpm_mult 
+540e 67e143e5 store 2 ,mem_cb_bt_set_mult 
+540f 20600000 rtn 
+
+mouse_setting_config:
+5410 20758000 rtn wake 
+5411 204035f0 call g24_transmit_init 
+5412 2040325b call g24_chmap_param_init 
+5413 204062aa call mouse_24g_send_time_long_wake 
+5414 20405589 call mouse_gpio_init 
+5415 204055c6 call mouse_le_name_modify 
+5416 2040544a call mouse_param_init 
+5417 20406177 call mouse_device_multi_led_parm_init 
+5418 20402a41 call le_set_fixed_ltk_justwork 
+
+mouse_load_device_info_check:
+5419 44b4c00d bpatch patch0d_1 ,mem_patch0d 
+541a 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+541b c289dd60 bbit1 mouse_enable_eeprom ,mouse_load_eeprom_info_check 
+541c c2895d6e bbit1 mouse_enable_flash ,mouse_load_flash_info_check 
+541d c28a5da6 bbit1 mouse_enable_otp ,mouse_load_otp_info_check 
+541e 20600000 rtn 
+
+mouse_xtal_init:
+541f 70409910 jam xtal_16m ,mem_fcomp_div 
+5420 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5421 c3860000 rtnbit1 mouse_enable_16m 
+5422 70409918 jam xtal_24m ,mem_fcomp_div 
+5423 20600000 rtn 
+
+mouse_24g_phy_select:
+5424 20403281 call g24_enable_1m 
+5425 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5426 c41e8000 rtnbit0 mouse_enable_24g_2m_phy 
+5427 20203284 branch g24_enable_2m 
+
+mouse_default_init:
+5428 44b5400d bpatch patch0d_2 ,mem_patch0d 
+5429 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+542a 2feffe05 isolate1 mouse_keyboard_enable ,pdata 
+542b 2040df08 call mouse_customer_key_enable ,true 
+
+mouse_default_parm_init:
+542c 6fe1463a fetch 2 ,mem_mouse_24g_pair_timeout_init 
+542d 67e145d6 store 2 ,mem_24g_pair_timeout_init 
+542e 6fe0c63d fetch 1 ,mem_mouse_24g_reconn_timeout_init 
+542f 67e145dc store 2 ,mem_24g_reconn_timeout_init 
+5430 6fe2c63f fetch 5 ,mem_rssi_dis_min_24g_init 
+5431 67e2c628 store 5 ,mem_rssi_dis_min_24g 
+5432 6fe0c63e fetch 1 ,mem_mouse_24g_pair_tx_power 
+5433 67e0c5d1 store 1 ,mem_24g_pair_tx_power 
+5434 6fe0c5b9 fetch 1 ,mem_24g_ch_map_update 
+5435 245a326b ncall g24_chamap_param_update ,blank 
+
+mouse_default_parm_init_next:
+5436 44b5c00d bpatch patch0d_3 ,mem_patch0d 
+5437 2040541f call mouse_xtal_init 
+5438 20405424 call mouse_24g_phy_select 
+5439 20405fe4 call mouse_24g_long_sleep_set 
+543a 20203287 branch g24_pair_param_init 
+
+mouse_param_common_init:
+543b 58009000 setarg mouse_ble_att_list_addr 
+543c 67e142f7 store 2 ,mem_ui_le_uuid_table 
+543d 7040c103 jam 3 ,mem_lpm_mult_timeout 
+543e 7040a608 jam 8 ,mem_lpm_overhead 
+543f 70497f00 jam pb_button_state_up ,mem_select_device_button_statue 
+5440 70498000 jam commbination_key_state_up ,mem_commbination_key_statue 
+5441 58000200 setarg 0x0200 
+5442 67e140a4 store 2 ,mem_lpm_interval 
+5443 7042e117 jam 0x17 ,mem_le_local_mtu 
+5444 7042e317 jam 0x17 ,mem_le_remote_mtu 
+5445 580047c3 setarg mem_le_tx_buffer0_omemalloc 
+5446 67e1433f store 2 ,mem_ble_l2cap_tx_buff0_ptr 
+5447 58000010 setarg mouse_ble_l2cap_txbuff_size 
+5448 67e14341 store 2 ,mem_ble_l2cap_tx_buff_size_ptr 
+5449 20205539 branch mouse_adc_gpio_mux_init 
+
+mouse_param_init:
+544a 44b6400d bpatch patch0d_4 ,mem_patch0d 
+544b 2040543b call mouse_param_common_init 
+544c 70487a00 jam dpi_button_state_up ,mem_mouse_dpi_button_state 
+544d 58000a77 setarg 0x0a77 
+544e 67e143f5 store 2 ,mem_spi_init_clk 
+544f 38001224 setsect 0 ,0x1224 
+5450 38044000 setsect 1 ,0x4000 
+5451 38080000 setsect 2 ,0x0 
+5452 e7e28005 istore 5 ,contw 
+5453 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5454 c30dd458 bbit0 mouse_enable_bt_125hz ,mouse_param_init_intervl_end 
+5455 58000006 setarg le_interval_7_5ms 
+5456 67e142d3 store 2 ,mem_le_interval_min 
+5457 67e142d5 store 2 ,mem_le_interval_min + 2 
+
+mouse_param_init_intervl_end:
+5458 20405481 call mouse_g24_interval_param_8ms 
+5459 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+545a c30c545c bbit0 mouse_enable_24g_250hz ,mouse_24g_short_sleep_set_end 
+545b 20405476 call mouse_g24_interval_param_4ms 
+
+mouse_24g_short_sleep_set_end:
+545c 6fe1c608 fetch 3 ,mem_24g_short_sleep_set 
+545d 67e1c75d store 3 ,mem_mouse_24g_short_sleep_set_init 
+545e 6fe0c666 fetch 1 ,mem_device_flag 
+545f 67e0c9a1 store 1 ,mem_device_flag_temp 
+5460 6fe1c2de fetch 3 ,mem_le_lap + 3 
+5461 67e1c797 store 3 ,mem_mouse_le_lap_temp 
+5462 58000000 setarg 0 
+5463 67e3c846 store 7 ,mem_mouse_key 
+5464 6fe0c4eb fetch 1 ,mem_ui_button_timeout 
+5465 67e0c97c store 1 ,mem_bt_discovery_count 
+5466 67e0c97d store 1 ,mem_select_device_count 
+5467 20402969 call le_modified_name_adv 
+
+mouse_sensor_set_angle:
+5468 44b6c00d bpatch patch0d_5 ,mem_patch0d 
+5469 6fe0c64f fetch 1 ,mem_sensor_angle_default 
+546a 67e0c958 store 1 ,mem_config_sensor_angle 
+546b 6fe0c64e fetch 1 ,mem_select_sensor_angle_gpio 
+546c c17f8000 rtneq gpio_disable 
+546d 6848c64e fetcht 1 ,mem_select_sensor_angle_gpio 
+546e 204055b5 call mouse_gpio_config_input_pu 
+546f 6848c64e fetcht 1 ,mem_select_sensor_angle_gpio 
+5470 20406ee6 call gpio_get_bit 
+5471 2040d473 call mouse_sensor_switch_angle ,true 
+5472 202055b1 branch mouse_gpio_config_input_pd 
+
+mouse_sensor_switch_angle:
+5473 6fe0c650 fetch 1 ,mem_sensor_angle_switch 
+5474 67e0c958 store 1 ,mem_config_sensor_angle 
+5475 20600000 rtn 
+
+mouse_g24_interval_param_4ms:
+5476 6fe1c743 fetch 3 ,mem_mouse_24g_short_sleep_set_4ms 
+5477 67e1c608 store 3 ,mem_24g_short_sleep_set 
+5478 6fe1c746 fetch 3 ,mem_mouse_24g_long_sleep_set_4ms 
+5479 67e1c60b store 3 ,mem_24g_long_sleep_set 
+547a 6fe0c749 fetch 1 ,mem_mouse_24g_fast_hop_count_4ms 
+547b 67e0c621 store 1 ,mem_24g_fast_hop_count 
+547c 6fe24755 fetch 4 ,mem_mouse_24g_tsniff_4ms 
+547d 67e24751 store 4 ,mem_mouse_24g_tsniff 
+
+mouse_report_rate_set_250hz:
+547e 58100c0c setarg 0x100c0c 
+547f 67e1c5a7 store 3 ,mem_24g_interval 
+5480 20600000 rtn 
+
+mouse_g24_interval_param_8ms:
+5481 6fe1c74a fetch 3 ,mem_mouse_24g_short_sleep_set_8ms 
+5482 67e1c608 store 3 ,mem_24g_short_sleep_set 
+5483 6fe1c74d fetch 3 ,mem_mouse_24g_long_sleep_set_8ms 
+5484 67e1c60b store 3 ,mem_24g_long_sleep_set 
+5485 6fe0c750 fetch 1 ,mem_mouse_24g_fast_hop_count_8ms 
+5486 67e0c621 store 1 ,mem_24g_fast_hop_count 
+5487 6fe24759 fetch 4 ,mem_mouse_24g_tsniff_8ms 
+5488 67e24751 store 4 ,mem_mouse_24g_tsniff 
+
+mouse_report_rate_set_125hz:
+5489 581c1919 setarg 0x1c1919 
+548a 67e1c5a7 store 3 ,mem_24g_interval 
+548b 20600000 rtn 
+
+mouse_start_work:
+548c 44b7400d bpatch patch0d_6 ,mem_patch0d 
+548d 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+548e c29f602d bbit1 mouse_enable_24g_first_auto_pairing ,mouse_24g_first_start_auto_pair_mode 
+548f 6fe0c666 fetch 1 ,mem_device_flag 
+5490 c000601c beq mode_24g_device ,mouse_24g_start_mode 
+
+mouse_le_fast_conn_judge:
+5491 20405aa8 call mouse_bluetooth_fast_conn_disable 
+5492 6fe0c666 fetch 1 ,mem_device_flag 
+5493 c000d496 beq mode_bt_device1 ,mouse_le_device1_judge 
+5494 c001549b beq mode_bt_device2 ,mouse_le_device2_judge 
+5495 20600000 rtn 
+
+mouse_le_device1_judge:
+5496 6fe34668 fetch 6 ,mem_device1_addr 
+5497 684b46e6 fetcht 6 ,mem_mouse_compare_addr 
+5498 98467c00 isub temp ,null 
+5499 2022da94 branch mouse_bluetooth_fast_conn_init ,zero 
+549a 202054a0 branch mouse_start_reconnect_device 
+
+mouse_le_device2_judge:
+549b 6fe34675 fetch 6 ,mem_device2_addr 
+549c 684b46e6 fetcht 6 ,mem_mouse_compare_addr 
+549d 98467c00 isub temp ,null 
+549e 2022da94 branch mouse_bluetooth_fast_conn_init ,zero 
+549f 202054a0 branch mouse_start_reconnect_device 
+
+mouse_start_reconnect_device:
+54a0 44b7c00d bpatch patch0d_7 ,mem_patch0d 
+54a1 2040619f call mouse_device_le_reconn_led_config 
+54a2 da204667 arg mem_device1_type ,rega 
+54a3 6fe0c666 fetch 1 ,mem_device_flag 
+54a4 1fe0ffff increase -1 ,pdata 
+54a5 1feffe1d mul32 pdata ,29 ,pdata 
+54a6 9a20a200 iadd rega ,rega 
+54a7 efe08011 ifetch 1 ,rega 
+54a8 67e0c3f3 store 1 ,mem_xrecord_mode 
+
+mouse_start_reconnect:
+54a9 6fe0c3f3 fetch 1 ,mem_xrecord_mode 
+54aa c01a54b6 beq rec_4_mode ,mouse4_0_check_reconn_target 
+54ab 20205a94 branch mouse_bluetooth_fast_conn_init 
+
+mouse_wakeup_from_power_check:
+54ac 44b8400e bpatch patch0e_0 ,mem_patch0e 
+54ad 78547c00 disable user 
+54ae 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+54af c305d4b3 bbit0 mouse_enable_wakeup_from_power ,mouse_wakeup_from_poweron 
+54b0 6ff08132 fetch 1 ,core_lpm_isogate 
+54b1 c28254b3 bbit1 cold_wake ,mouse_wakeup_from_poweron 
+54b2 78347c00 enable user 
+
+mouse_wakeup_from_poweron:
+54b3 6fe0c780 fetch 1 ,mem_reconn_times_init 
+54b4 67e0c77f store 1 ,mem_reconn_times 
+54b5 20600000 rtn 
+
+mouse4_0_check_reconn_target:
+54b6 70479501 jam 1 ,mem_mouse_le_reconnect_flag 
+54b7 6848c71e fetcht 1 ,mem_mouse_fast_direct_timeout 
+54b8 6fe0c78f fetch 1 ,mem_mouse_bluetooth_fast_conn_flag 
+54b9 c07fd4bb beq 0xff ,mouse4_0_check_reconn_target_next 
+54ba 6848c63c fetcht 1 ,mem_mouse_direct_timeout 
+
+mouse4_0_check_reconn_target_next:
+54bb 6048c845 storet 1 ,mem_mouse_direct_timer 
+54bc 2040432d call app_lpm_mult_disable 
+54bd 6fe1c79d fetch 3 ,mem_le_adv_direct_ind 
+54be 67e1c34d store 3 ,mem_le_adv_data + 4 
+54bf 20405b6b call mouse_le_check_adv_flag 
+54c0 58000004 setarg adv_flag_bredr_not_supported 
+54c1 e7e08006 istore 1 ,contr 
+54c2 d8c04369 arg mem_le_scan_data ,contr 
+54c3 20405b72 call mouse_le_adv_data_update 
+54c4 20207870 branch check_51cmd_adv 
+
+mouse_lpm_check_wake_lock:
+54c5 c5134308 bmark1 mark_24g ,app_get_lpm_wake_lock 
+54c6 6fe0c956 fetch 1 ,mem_mouse_clear_sensor_data_flag 
+54c7 203a4308 branch app_get_lpm_wake_lock ,blank 
+54c8 6fe0c7c2 fetch 1 ,mem_mouse_le_conn_param_reject 
+54c9 c000c308 beq le_lpm_disable ,app_get_lpm_wake_lock 
+54ca 6fe0c857 fetch 1 ,mem_mouse_wheel_trigger 
+54cb 243a4308 nbranch app_get_lpm_wake_lock ,blank 
+54cc 2020430a branch app_put_lpm_wake_lock 
+
+mouse_app_enter_hibernate:
+54cd 44b8c00e bpatch patch0e_1 ,mem_patch0e 
+54ce 58000006 setarg pan_reg_config 
+54cf 204069e5 call twspi_read 
+54d0 c281d4d3 bbit1 3 ,mouse_app_enter_hibernate_next 
+54d1 204059da call mouse_sensor_reset 
+54d2 204059ed call mouse_sensor_powerdown 
+
+mouse_app_enter_hibernate_next:
+54d3 204054dc call mouse_setgpio_hibernate 
+54d4 20204327 branch app_enter_hibernate 
+
+mouse_before_hibernate:
+54d5 44b9400e bpatch patch0e_2 ,mem_patch0e 
+54d6 2040739a call disable_authrom 
+54d7 204056a9 call mouse_before_hibernate_wheel_gpio_set 
+54d8 204054dc call mouse_setgpio_hibernate 
+54d9 20405d9e call mouse_flash_power_down 
+54da 6848c659 fetcht 1 ,mem_sensor_motion_gpio 
+54db 20206ed3 branch gpio_clr_wake 
+
+mouse_setgpio_hibernate:
+54dc 44b9c00e bpatch patch0e_3 ,mem_patch0e 
+54dd 20405a92 call mouse_set_sdio_high 
+54de 20407de2 call clear_wake 
+54df 2040611a call mouse_logo_led_off 
+54e0 2040550c call mouse_lpm_before_common 
+54e1 204054f9 call mouse_gpio_pd_idle 
+54e2 6848c65b fetcht 1 ,mem_mouse_reuse_2ice_gpio 
+54e3 204055b5 call mouse_gpio_config_input_pu 
+54e4 204055b9 call mouse_gpio_set_high_impedance 
+54e5 204061fd call mouse_device_multi_led_all_off 
+54e6 204054f2 call mouse_adc_gpio_set_before_hibernate 
+54e7 202054e8 branch mouse_wheel_gpio_set_before_hibernate 
+
+mouse_wheel_gpio_set_before_hibernate:
+54e8 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+54e9 c41e0000 rtnbit0 mouse_enable_wheel_wake_up_cancel 
+
+mouse_wheel_gpio_clr_wakeup:
+54ea 6848c64a fetcht 1 ,mem_whee_a_data_gpio 
+54eb 20406ed3 call gpio_clr_wake 
+54ec 6848c64b fetcht 1 ,mem_whee_b_data_gpio 
+54ed 20406ed3 call gpio_clr_wake 
+54ee 6848c64a fetcht 1 ,mem_whee_a_data_gpio 
+54ef 204055b1 call mouse_gpio_config_input_pd 
+54f0 6848c64b fetcht 1 ,mem_whee_b_data_gpio 
+54f1 202055b1 branch mouse_gpio_config_input_pd 
+
+mouse_adc_gpio_set_before_hibernate:
+54f2 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+54f3 c40a8000 rtnbit0 mouse_enable_adc 
+54f4 6fe0c407 fetch 1 ,mem_adc_config_flag 
+54f5 c1810000 rtnne adc_config_gpio 
+54f6 6fe0c635 fetch 1 ,mem_adc_channel_gpio 
+54f7 d84000c0 arg gpcfg_no_ie ,temp 
+54f8 20206f21 branch gpio_config_function_int 
+
+mouse_gpio_pd_idle:
+54f9 d8c08070 arg core_gpio_conf ,contr 
+54fa df200010 arg gpio_number ,loopcnt 
+
+mouse_gpio_pd_idle_loop:
+54fb efe08006 ifetch 1 ,contr 
+54fc 243a5500 nbranch mouse_gpio_pd_idle_configured ,blank 
+54fd 58000080 setarg gpcfg_pulldown 
+54fe 18c08bff add contr ,-1 ,contw 
+54ff e7e08005 istore 1 ,contw 
+
+mouse_gpio_pd_idle_configured:
+5500 c20054fb loop mouse_gpio_pd_idle_loop 
+5501 dfe080dc arg core_gpio_conf_hi + gpio_number_ext ,pdata 
+5502 98c67c00 isub contr ,null 
+5503 20628000 rtn zero 
+
+mouse_gpio_pd_idle_ext:
+5504 df200008 arg gpio_number_ext ,loopcnt 
+5505 d8c080d4 arg core_gpio_conf_hi ,contr 
+5506 202054fb branch mouse_gpio_pd_idle_loop 
+
+mouse_process_lpm_before:
+5507 c6130000 rtnmark1 mark_24g 
+5508 2040550c call mouse_lpm_before_common 
+5509 6fe08015 fetch 1 ,mem_lpm_current_mult 
+550a 247a0000 nrtn blank 
+550b 20206ed3 branch gpio_clr_wake 
+
+mouse_lpm_before_common:
+550c 44ba400e bpatch patch0e_4 ,mem_patch0e 
+550d 6848c64a fetcht 1 ,mem_whee_a_data_gpio 
+550e 20406edd call gpio_config_input 
+550f 6848c64b fetcht 1 ,mem_whee_b_data_gpio 
+5510 20406edd call gpio_config_input 
+5511 2040561c call mouse_wheel_check 
+5512 6fe0c64c fetch 1 ,mem_mouse_sensor_sclk_gpio 
+5513 20405943 call mouse_gpio_config_output_high 
+5514 204069dc call twspi_disable 
+5515 6848c644 fetcht 1 ,mem_lbutton_gpio 
+5516 20406eb6 call gpio_set_wake 
+5517 6848c646 fetcht 1 ,mem_rbutton_gpio 
+5518 20406eb6 call gpio_set_wake 
+5519 6848c645 fetcht 1 ,mem_mbutton_gpio 
+551a 20406eb6 call gpio_set_wake 
+551b 6848c647 fetcht 1 ,mem_bk_button_gpio 
+551c 20406eb6 call gpio_set_wake 
+551d 6848c648 fetcht 1 ,mem_fw_button_gpio 
+551e 20406eb6 call gpio_set_wake 
+551f 6848c649 fetcht 1 ,mem_dpi_button_gpio 
+5520 20406eb6 call gpio_set_wake 
+5521 6848c655 fetcht 1 ,mem_config_select_device_button_gpio 
+5522 20406eb6 call gpio_set_wake 
+5523 6848c656 fetcht 1 ,mem_customer_key_gpio 
+5524 20406eb6 call gpio_set_wake 
+5525 6848c64a fetcht 1 ,mem_whee_a_data_gpio 
+5526 20406eb2 call gpio_set_wake_by_current_state 
+5527 6848c64b fetcht 1 ,mem_whee_b_data_gpio 
+5528 20406eb2 call gpio_set_wake_by_current_state 
+5529 6848c652 fetcht 1 ,mem_whee_ta_data_gpio 
+552a 20406eb2 call gpio_set_wake_by_current_state 
+552b 6848c653 fetcht 1 ,mem_whee_tb_data_gpio 
+552c 20406eb2 call gpio_set_wake_by_current_state 
+552d 6848c659 fetcht 1 ,mem_sensor_motion_gpio 
+552e 20206eb6 branch gpio_set_wake 
+
+mouse_set_mult:
+552f 6fe144e9 fetch 2 ,mem_ui_state_map 
+5530 c4048000 rtnbit0 ui_state_ble_connected 
+5531 1a227e00 copy rega ,pdata 
+5532 243a29d5 nbranch le_set_config_short_mult ,blank 
+5533 202029da branch le_clr_config_short_mult 
+
+mouse_adc_gpio_set:
+5534 44bac00e bpatch patch0e_5 ,mem_patch0e 
+5535 6fe0c407 fetch 1 ,mem_adc_config_flag 
+5536 c1810000 rtnne adc_config_gpio 
+5537 6848c635 fetcht 1 ,mem_adc_channel_gpio 
+5538 20206f0f branch gpio_set_high_impedance 
+
+mouse_adc_gpio_mux_init:
+5539 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+553a c40a8000 rtnbit0 mouse_enable_adc 
+553b 70463601 jam mouse_adc_check_multiple ,mem_adc_mux_status 
+553c 20600000 rtn 
+
+mouse_adc_read:
+553d 44bb400e bpatch patch0e_6 ,mem_patch0e 
+553e 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+553f c40a8000 rtnbit0 mouse_enable_adc 
+5540 20405534 call mouse_adc_gpio_set 
+5541 6fe0c407 fetch 1 ,mem_adc_config_flag 
+5542 c0015545 beq adc_config_gpio ,mouse_adc_read_gpio_mux_start 
+5543 70463603 jam mouse_adc_check_hvin_multiple ,mem_adc_mux_status 
+5544 20205547 branch mouse_adc_read_start 
+
+mouse_adc_read_gpio_mux_start:
+5545 70463602 jam mouse_adc_check_gpio_multiple ,mem_adc_mux_status 
+5546 20205547 branch mouse_adc_read_start 
+
+mouse_adc_read_start:
+5547 44bbc00e bpatch patch0e_7 ,mem_patch0e 
+5548 20406f82 call enable_adc 
+5549 20406fb0 call vdd_calculate_by_mode 
+554a 67e14633 store 2 ,mem_mouse_vdd_now_vol 
+554b 6fe0c407 fetch 1 ,mem_adc_config_flag 
+554c c0815553 bne adc_config_gpio ,mouse_adc_data_process 
+554d 68494633 fetcht 2 ,mem_mouse_vdd_now_vol 
+554e 184ffe08 mul32 temp ,8 ,pdata 
+554f 1fe6fc0a div pdata ,10 
+5550 20407d5f call get_div_result 
+5551 9840fe00 iadd temp ,pdata 
+5552 67e14633 store 2 ,mem_mouse_vdd_now_vol 
+
+mouse_adc_data_process:
+5553 da20462d arg mem_mouse_vdd_calculate_set ,rega 
+5554 20405563 call mouse_adc_bat_percent_lowpower_out 
+5555 6fe0c40c fetch 1 ,mem_adc_power_flag 
+5556 c280d4cd bbit1 1 ,mouse_app_enter_hibernate 
+5557 c300555c bbit0 0 ,mouse_adc_no_low_voltage 
+5558 70463701 jam 1 ,mem_mouse_adc_last_low_voltage_flag 
+5559 2020555a branch mouse_adc_low_voltage 
+
+mouse_adc_low_voltage:
+555a d8e00004 arg mouse_low_voltage_flag ,queue 
+555b 20205f00 branch mouse_enable_function_flag 
+
+mouse_adc_no_low_voltage:
+555c d8e00004 arg mouse_low_voltage_flag ,queue 
+555d 20405f04 call mouse_disable_function_flag 
+555e 70470901 jam 1 ,mem_adc_low_volatage_led_timer_count 
+555f 6fe0c637 fetch 1 ,mem_mouse_adc_last_low_voltage_flag 
+5560 207a0000 rtn blank 
+5561 70463700 jam 0 ,mem_mouse_adc_last_low_voltage_flag 
+5562 2020616e branch mouse_low_voltage_led_off_judge 
+
+mouse_adc_bat_percent_lowpower_out:
+5563 44bc400f bpatch patch0f_0 ,mem_patch0f 
+5564 efe40011 ifetch 8 ,rega 
+5565 67e40670 store 8 ,mem_pdatatemp 
+5566 6fe0c636 fetch 1 ,mem_adc_mux_status 
+5567 c000556a beq mouse_adc_check_battery_only ,mouse_adc_bat_percent_lowpower_out_battery 
+5568 c001556a beq mouse_adc_check_gpio_multiple ,mouse_adc_bat_percent_lowpower_out_battery 
+5569 c001d588 beq mouse_adc_check_hvin_multiple ,mouse_adc_bat_percent_lowpower_out_hvin_multiple 
+
+mouse_adc_bat_percent_lowpower_out_battery:
+556a 20406ff3 call adc_clear_no_power_flag 
+556b 20406feb call adc_clear_low_power_flag 
+556c 6fe10676 fetch 2 ,mem_pdatatemp + 6 
+556d 68490672 fetcht 2 ,mem_pdatatemp + 2 
+556e 98467c00 isub temp ,null 
+556f 24416fef ncall adc_set_no_power_flag ,positive 
+5570 68490674 fetcht 2 ,mem_pdatatemp + 4 
+5571 98467c00 isub temp ,null 
+5572 24416fe7 ncall adc_set_low_power_flag ,positive 
+
+mouse_adc_bat_level_set:
+5573 6fe10676 fetch 2 ,mem_pdatatemp + 6 
+5574 68490670 fetcht 2 ,mem_pdatatemp 
+5575 98467c00 isub temp ,null 
+5576 20215584 branch mouse_adc_bat_level_100_percent ,positive 
+5577 68490672 fetcht 2 ,mem_pdatatemp + 2 
+5578 98467e00 isub temp ,pdata 
+5579 24215586 nbranch mouse_adc_bat_level_0_percent ,positive 
+557a 203a5586 branch mouse_adc_bat_level_0_percent ,blank 
+557b 1fefa264 mul32 pdata ,100 ,rega 
+557c 6fe10670 fetch 2 ,mem_pdatatemp 
+557d 68490672 fetcht 2 ,mem_pdatatemp + 2 
+557e 98460400 isub temp ,temp 
+557f 1a227e00 copy rega ,pdata 
+5580 9846fc00 idiv temp 
+5581 20407d5f call get_div_result 
+5582 67e0c7bd store 1 ,mem_le_battery_level_percentage 
+5583 20600000 rtn 
+
+mouse_adc_bat_level_100_percent:
+5584 7047bd64 jam 100 ,mem_le_battery_level_percentage 
+5585 20600000 rtn 
+
+mouse_adc_bat_level_0_percent:
+5586 7047bd00 jam 0 ,mem_le_battery_level_percentage 
+5587 20600000 rtn 
+
+mouse_adc_bat_percent_lowpower_out_hvin_multiple:
+5588 2020556a branch mouse_adc_bat_percent_lowpower_out_battery 
+
+mouse_gpio_init:
+5589 6848c427 fetcht 1 ,mem_eeprom_wp_gpio 
+558a 20406ef7 call gpio_config_output 
+558b 6848c644 fetcht 1 ,mem_lbutton_gpio 
+558c 204055b5 call mouse_gpio_config_input_pu 
+558d 6848c646 fetcht 1 ,mem_rbutton_gpio 
+558e 204055b5 call mouse_gpio_config_input_pu 
+558f 6848c645 fetcht 1 ,mem_mbutton_gpio 
+5590 204055b5 call mouse_gpio_config_input_pu 
+5591 6848c647 fetcht 1 ,mem_bk_button_gpio 
+5592 204055b5 call mouse_gpio_config_input_pu 
+5593 6848c648 fetcht 1 ,mem_fw_button_gpio 
+5594 204055b5 call mouse_gpio_config_input_pu 
+5595 6848c649 fetcht 1 ,mem_dpi_button_gpio 
+5596 204055b5 call mouse_gpio_config_input_pu 
+5597 6848c654 fetcht 1 ,mem_matrix_public_gpio 
+5598 204055b5 call mouse_gpio_config_input_pu 
+5599 6848c655 fetcht 1 ,mem_config_select_device_button_gpio 
+559a 204055b5 call mouse_gpio_config_input_pu 
+559b 6848c656 fetcht 1 ,mem_customer_key_gpio 
+559c 204055b5 call mouse_gpio_config_input_pu 
+559d 6848c64a fetcht 1 ,mem_whee_a_data_gpio 
+559e 204055b5 call mouse_gpio_config_input_pu 
+559f 6848c64b fetcht 1 ,mem_whee_b_data_gpio 
+55a0 204055b5 call mouse_gpio_config_input_pu 
+55a1 6848c652 fetcht 1 ,mem_whee_ta_data_gpio 
+55a2 204055b5 call mouse_gpio_config_input_pu 
+55a3 6848c653 fetcht 1 ,mem_whee_tb_data_gpio 
+55a4 204055b5 call mouse_gpio_config_input_pu 
+55a5 6848c659 fetcht 1 ,mem_sensor_motion_gpio 
+55a6 204055b5 call mouse_gpio_config_input_pu 
+55a7 6848c65a fetcht 1 ,mem_device_switch_gpio 
+55a8 204055b5 call mouse_gpio_config_input_pu 
+55a9 6848c64e fetcht 1 ,mem_select_sensor_angle_gpio 
+55aa 202055b5 branch mouse_gpio_config_input_pu 
+
+mouse_gpio_set_pupd_by_input:
+55ab 18467cff sub temp ,ui_button_gpio_disable ,null 
+55ac 20628000 rtn zero 
+55ad 18410e7f and temp ,0x7f ,queue 
+55ae 6ff2011c fetch 4 ,core_gpio_in 
+55af afefffff qisolate1 pdata 
+55b0 2020d5b5 branch mouse_gpio_config_input_pu ,true 
+
+mouse_gpio_config_input_pd:
+55b1 18467cff sub temp ,ui_button_gpio_disable ,null 
+55b2 20628000 rtn zero 
+55b3 79200407 set1 gpio_active_bit ,temp 
+55b4 20206edd branch gpio_config_input 
+
+mouse_gpio_config_input_pu:
+55b5 18467cff sub temp ,ui_button_gpio_disable ,null 
+55b6 20628000 rtn zero 
+55b7 793f8407 set0 gpio_active_bit ,temp 
+55b8 20206edd branch gpio_config_input 
+
+mouse_gpio_set_high_impedance:
+55b9 6fe1c73c fetch 3 ,mem_mouse_set_high_impedance_bit_set 
+55ba 67e18670 store 3 ,mem_pdatatemp 
+55bb df20000d arg 13 ,loopcnt 
+55bc d8400000 arg 0 ,temp 
+
+mouse_gpio_set_high_impedance_bit_loop:
+55bd 6fe18670 fetch 3 ,mem_pdatatemp 
+55be 2feffe00 isolate1 0 ,pdata 
+55bf 2040ef0f call gpio_set_high_impedance ,true 
+55c0 6fe18670 fetch 3 ,mem_pdatatemp 
+55c1 1fe3fe00 lshift pdata ,pdata 
+55c2 67e18670 store 3 ,mem_pdatatemp 
+55c3 18408401 increase 1 ,temp 
+55c4 c20055bd loop mouse_gpio_set_high_impedance_bit_loop 
+55c5 20600000 rtn 
+
+mouse_le_name_modify:
+55c6 44bcc00f bpatch patch0f_1 ,mem_patch0f 
+55c7 6fe4498d fetch 8 ,mem_le_name_patch 
+55c8 207a0000 rtn blank 
+55c9 6fe0c98c fetch 1 ,mem_le_name_patch_len 
+55ca 1fe22200 copy pdata ,rega 
+55cb 1fe67c0b sub pdata ,11 ,null 
+55cc 242155dd nbranch mouse_le_name_patch_len_overflow ,positive 
+55cd 204055d6 call mouse_le_name_clear 
+55ce d8a047a9 arg mem_le_adv_swift_pair + 9 ,contw 
+55cf 204055d3 call mouse_le_name_modify_next 
+55d0 d8a0436b arg mem_le_scan_data + 2 ,contw 
+55d1 204055d3 call mouse_le_name_modify_next 
+55d2 d8a0426c arg mem_le_name ,contw 
+
+mouse_le_name_modify_next:
+55d3 d8c0498d arg mem_le_name_patch ,contr 
+55d4 1a227200 copy rega ,loopcnt 
+55d5 20207cda branch memcpy 
+
+mouse_le_name_clear:
+55d6 d8a047a9 arg mem_le_adv_swift_pair + 9 ,contw 
+55d7 204055db call mouse_le_name_clear_next 
+55d8 d8a0436b arg mem_le_scan_data + 2 ,contw 
+55d9 204055db call mouse_le_name_clear_next 
+55da d8a0426c arg mem_le_name ,contw 
+
+mouse_le_name_clear_next:
+55db df20000b arg 11 ,loopcnt 
+55dc 20207ca1 branch clear_mem 
+
+mouse_le_name_patch_len_overflow:
+55dd 204055f3 call mouse_le_swift_pair_disable 
+55de 6fe0c98c fetch 1 ,mem_le_name_patch_len 
+55df 1fe0fe01 increase 1 ,pdata 
+55e0 67e0c7a0 store 1 ,mem_le_adv_swift_pair 
+55e1 7047a109 jam 9 ,mem_le_adv_swift_pair + 1 
+55e2 d8c0498d arg mem_le_name_patch ,contr 
+55e3 d8a047a2 arg mem_le_adv_swift_pair + 2 ,contw 
+55e4 1a227200 copy rega ,loopcnt 
+55e5 20407cda call memcpy 
+55e6 6fe0c98c fetch 1 ,mem_le_name_patch_len 
+55e7 1fe0fe01 increase 1 ,pdata 
+55e8 67e0c369 store 1 ,mem_le_scan_data 
+55e9 70436a09 jam 9 ,mem_le_scan_data + 1 
+55ea d8c0498d arg mem_le_name_patch ,contr 
+55eb d8a0436b arg mem_le_scan_data + 2 ,contw 
+55ec 1a227200 copy rega ,loopcnt 
+55ed 20407cda call memcpy 
+55ee d8c0498c arg mem_le_name_patch_len ,contr 
+55ef d8a0426b arg mem_le_name_len ,contw 
+55f0 1a227200 copy rega ,loopcnt 
+55f1 1f20f201 increase 1 ,loopcnt 
+55f2 20207cda branch memcpy 
+
+mouse_le_swift_pair_disable:
+55f3 d8a047a0 arg mem_le_adv_swift_pair ,contw 
+55f4 df200014 arg 20 ,loopcnt 
+55f5 20207ca1 branch clear_mem 
+
+mouse_sensor_spi_init:
+55f6 204055fb call mouse_spid_init_pin 
+55f7 7043f573 jam 0x73 ,mem_spi_init_clk 
+55f8 204055fa call mouse_spi_init 
+55f9 202069e0 branch twspi_enable 
+
+mouse_spi_write_flash_cb:
+
+mouse_spi_init:
+55fa 20206bc6 branch spid_init 
+
+mouse_spid_init_pin:
+55fb 6fe0c64c fetch 1 ,mem_mouse_sensor_sclk_gpio 
+55fc d8400021 arg gpcfg_spid_sck ,temp 
+55fd 20406f21 call gpio_config_function_int 
+55fe 6fe0c64d fetch 1 ,mem_mouse_sensor_sdio_gpio 
+55ff d8400023 arg gpcfg_spid_sdio ,temp 
+5600 20206f21 branch gpio_config_function_int 
+
+mouse_motion:
+5601 44bd400f bpatch patch0f_2 ,mem_patch0f 
+5602 78547c00 disable user 
+5603 58000000 setarg 0 
+5604 67e34847 store 6 ,mem_mouse_x 
+5605 204059f6 call mouse_check_sensor_data 
+5606 58000089 setarg 0x0089 
+5607 204069e4 call twspi_write 
+5608 20405747 call mouse_setting_sensor_type 
+5609 20405612 call mouse_zwheel 
+560a 20405617 call mouse_t_zwheel 
+560b 204057a6 call mouse_key 
+560c 6fe0c846 fetch 1 ,mem_mouse_key 
+560d 1fe17e1f and_into 0x1f ,pdata 
+560e 67e0c846 store 1 ,mem_mouse_key 
+560f 24345f37 nbranch mouse_drawing_optima_init ,user 
+5610 20405f26 call mouse_drawing_optima 
+5611 20205c0b branch mouse_no_data_timer_init 
+
+mouse_zwheel:
+5612 6fe0c856 fetch 1 ,mem_mouse_z_data 
+5613 207a0000 rtn blank 
+5614 67e0c84b store 1 ,mem_mouse_z 
+5615 70485600 jam 0 ,mem_mouse_z_data 
+5616 20207dba branch enable_user 
+
+mouse_t_zwheel:
+5617 6fe0c852 fetch 1 ,mem_mouse_tz_data 
+5618 207a0000 rtn blank 
+5619 67e0c84c store 1 ,mem_mouse_tz 
+561a 70485200 jam 0 ,mem_mouse_tz_data 
+561b 20207dba branch enable_user 
+
+mouse_wheel_check:
+561c 20405629 call mouse_t_wheel_scan 
+561d 20405665 call mouse_wheel_scan 
+561e 6fe0c850 fetch 1 ,mem_wheel_tb_new_pinlevel 
+561f 6848c84f fetcht 1 ,mem_wheel_tb_old_pinlevel 
+5620 67e0c84f store 1 ,mem_wheel_tb_old_pinlevel 
+5621 98467c00 isub temp ,null 
+5622 2422c30c nbranch app_lpm_wake_auto_lock ,zero 
+5623 6fe0c854 fetch 1 ,mem_mwheel_b_new_pinlevel 
+5624 6848c853 fetcht 1 ,mem_mwheel_b_old_pinlevel 
+5625 67e0c853 store 1 ,mem_mwheel_b_old_pinlevel 
+5626 98467c00 isub temp ,null 
+5627 2422c30c nbranch app_lpm_wake_auto_lock ,zero 
+5628 20600000 rtn 
+
+mouse_t_wheel_scan:
+5629 6fe0c652 fetch 1 ,mem_whee_ta_data_gpio 
+562a c17f8000 rtneq gpio_disable 
+562b da200000 arg 0 ,rega 
+562c 6848c652 fetcht 1 ,mem_whee_ta_data_gpio 
+562d 20406ee6 call gpio_get_bit 
+562e 7920a200 setflag true ,0 ,rega 
+562f 6848c653 fetcht 1 ,mem_whee_tb_data_gpio 
+5630 20406ee6 call gpio_get_bit 
+5631 7920a201 setflag true ,1 ,rega 
+5632 1a227e00 copy rega ,pdata 
+5633 67e0c850 store 1 ,mem_wheel_tb_new_pinlevel 
+5634 c000d639 beq 0x01 ,mouse_t_wheel_scan_judge1 
+5635 c001563d beq 0x02 ,mouse_t_wheel_scan_judge2 
+5636 6fe0c851 fetch 1 ,mem_wheel_tog 
+5637 c283d649 bbit1 7 ,mouse_t_wheel_scan_judge3 
+5638 20600000 rtn 
+
+mouse_t_wheel_scan_judge1:
+5639 6fe0c84f fetch 1 ,mem_wheel_tb_old_pinlevel 
+563a c0005641 beq 0 ,mouse_t_wheel_scan_judge11 
+563b c001d643 beq 3 ,mouse_t_wheel_scan_judge12 
+563c 20600000 rtn 
+
+mouse_t_wheel_scan_judge2:
+563d 6fe0c84f fetch 1 ,mem_wheel_tb_old_pinlevel 
+563e c0005645 beq 0 ,mouse_t_wheel_scan_judge21 
+563f c001d647 beq 3 ,mouse_t_wheel_scan_judge22 
+5640 20600000 rtn 
+
+mouse_t_wheel_scan_judge11:
+5641 70485182 jam 0x82 ,mem_wheel_tog 
+5642 20600000 rtn 
+
+mouse_t_wheel_scan_judge12:
+5643 70485181 jam 0x81 ,mem_wheel_tog 
+5644 20600000 rtn 
+
+mouse_t_wheel_scan_judge21:
+5645 70485180 jam 0x80 ,mem_wheel_tog 
+5646 20600000 rtn 
+
+mouse_t_wheel_scan_judge22:
+5647 70485183 jam 0x83 ,mem_wheel_tog 
+5648 20600000 rtn 
+
+mouse_t_wheel_scan_judge3:
+5649 6fe0c851 fetch 1 ,mem_wheel_tog 
+564a 793ffe07 set0 7 ,pdata 
+564b 67e0c851 store 1 ,mem_wheel_tog 
+564c c0005651 beq 0 ,mouse_t_wheel_scan_judge30 
+564d c000d654 beq 1 ,mouse_t_wheel_scan_judge31 
+564e c0015657 beq 2 ,mouse_t_wheel_scan_judge32 
+564f c001d65a beq 3 ,mouse_t_wheel_scan_judge33 
+5650 20600000 rtn 
+
+mouse_t_wheel_scan_judge30:
+5651 6fe0c850 fetch 1 ,mem_wheel_tb_new_pinlevel 
+5652 c001d65d beq 3 ,mouse_wheel_t_forward 
+5653 20600000 rtn 
+
+mouse_t_wheel_scan_judge31:
+5654 6fe0c850 fetch 1 ,mem_wheel_tb_new_pinlevel 
+5655 c000565d beq 0 ,mouse_wheel_t_forward 
+5656 20600000 rtn 
+
+mouse_t_wheel_scan_judge32:
+5657 6fe0c850 fetch 1 ,mem_wheel_tb_new_pinlevel 
+5658 c001d661 beq 3 ,mouse_wheel_t_back 
+5659 20600000 rtn 
+
+mouse_t_wheel_scan_judge33:
+565a 6fe0c850 fetch 1 ,mem_wheel_tb_new_pinlevel 
+565b c0005661 beq 0 ,mouse_wheel_t_back 
+565c 20600000 rtn 
+
+mouse_wheel_t_forward:
+565d 6fe0c852 fetch 1 ,mem_mouse_tz_data 
+565e 1fe0fe01 increase 1 ,pdata 
+565f 67e0c852 store 1 ,mem_mouse_tz_data 
+5660 20600000 rtn 
+
+mouse_wheel_t_back:
+5661 6fe0c852 fetch 1 ,mem_mouse_tz_data 
+5662 1fe0ffff increase -1 ,pdata 
+5663 67e0c852 store 1 ,mem_mouse_tz_data 
+5664 20600000 rtn 
+
+mouse_wheel_scan:
+5665 6fe0c64a fetch 1 ,mem_whee_a_data_gpio 
+5666 c17f8000 rtneq gpio_disable 
+5667 da200000 arg 0 ,rega 
+5668 6848c64a fetcht 1 ,mem_whee_a_data_gpio 
+5669 20406ee6 call gpio_get_bit 
+566a 7920a200 setflag true ,0 ,rega 
+566b 6848c64b fetcht 1 ,mem_whee_b_data_gpio 
+566c 20406ee6 call gpio_get_bit 
+566d 7920a201 setflag true ,1 ,rega 
+566e 1a227e00 copy rega ,pdata 
+566f 67e0c854 store 1 ,mem_mwheel_b_new_pinlevel 
+5670 c000d675 beq 0x01 ,mouse_wheel_scan_judge1 
+5671 c0015679 beq 0x02 ,mouse_wheel_scan_judge2 
+5672 6fe0c855 fetch 1 ,mem_mwheel_tog 
+5673 c283d685 bbit1 7 ,mouse_wheel_scan_judge3 
+5674 20600000 rtn 
+
+mouse_wheel_scan_judge1:
+5675 6fe0c853 fetch 1 ,mem_mwheel_b_old_pinlevel 
+5676 c000567d beq 0 ,mouse_wheel_scan_judge11 
+5677 c001d67f beq 3 ,mouse_wheel_scan_judge12 
+5678 20600000 rtn 
+
+mouse_wheel_scan_judge2:
+5679 6fe0c853 fetch 1 ,mem_mwheel_b_old_pinlevel 
+567a c0005681 beq 0 ,mouse_wheel_scan_judge21 
+567b c001d683 beq 3 ,mouse_wheel_scan_judge22 
+567c 20600000 rtn 
+
+mouse_wheel_scan_judge11:
+567d 70485582 jam 0x82 ,mem_mwheel_tog 
+567e 20600000 rtn 
+
+mouse_wheel_scan_judge12:
+567f 70485581 jam 0x81 ,mem_mwheel_tog 
+5680 20600000 rtn 
+
+mouse_wheel_scan_judge21:
+5681 70485580 jam 0x80 ,mem_mwheel_tog 
+5682 20600000 rtn 
+
+mouse_wheel_scan_judge22:
+5683 70485583 jam 0x83 ,mem_mwheel_tog 
+5684 20600000 rtn 
+
+mouse_wheel_scan_judge3:
+5685 6fe0c855 fetch 1 ,mem_mwheel_tog 
+5686 793ffe07 set0 7 ,pdata 
+5687 67e0c855 store 1 ,mem_mwheel_tog 
+5688 c000568d beq 0 ,mouse_wheel_scan_judge30 
+5689 c000d690 beq 1 ,mouse_wheel_scan_judge31 
+568a c0015693 beq 2 ,mouse_wheel_scan_judge32 
+568b c001d696 beq 3 ,mouse_wheel_scan_judge33 
+568c 20600000 rtn 
+
+mouse_wheel_scan_judge30:
+568d 6fe0c854 fetch 1 ,mem_mwheel_b_new_pinlevel 
+568e c001d699 beq 3 ,mouse_wheel_forward 
+568f 20600000 rtn 
+
+mouse_wheel_scan_judge31:
+5690 6fe0c854 fetch 1 ,mem_mwheel_b_new_pinlevel 
+5691 c0005699 beq 0 ,mouse_wheel_forward 
+5692 20600000 rtn 
+
+mouse_wheel_scan_judge32:
+5693 6fe0c854 fetch 1 ,mem_mwheel_b_new_pinlevel 
+5694 c001d69d beq 3 ,mouse_wheel_back 
+5695 20600000 rtn 
+
+mouse_wheel_scan_judge33:
+5696 6fe0c854 fetch 1 ,mem_mwheel_b_new_pinlevel 
+5697 c000569d beq 0 ,mouse_wheel_back 
+5698 20600000 rtn 
+
+mouse_wheel_forward:
+5699 6fe0c856 fetch 1 ,mem_mouse_z_data 
+569a 1fe0fe01 increase 1 ,pdata 
+569b 67e0c856 store 1 ,mem_mouse_z_data 
+569c 20600000 rtn 
+
+mouse_wheel_back:
+569d 6fe0c856 fetch 1 ,mem_mouse_z_data 
+569e 1fe0ffff increase -1 ,pdata 
+569f 67e0c856 store 1 ,mem_mouse_z_data 
+56a0 20600000 rtn 
+
+mouse_wheel_gpio_set_wake:
+56a1 6848c64a fetcht 1 ,mem_whee_a_data_gpio 
+56a2 20406eb2 call gpio_set_wake_by_current_state 
+56a3 6848c64b fetcht 1 ,mem_whee_b_data_gpio 
+56a4 20406eb2 call gpio_set_wake_by_current_state 
+56a5 6848c652 fetcht 1 ,mem_whee_ta_data_gpio 
+56a6 20406eb2 call gpio_set_wake_by_current_state 
+56a7 6848c653 fetcht 1 ,mem_whee_tb_data_gpio 
+56a8 20206eb2 branch gpio_set_wake_by_current_state 
+
+mouse_before_hibernate_wheel_gpio_set:
+56a9 6848c64a fetcht 1 ,mem_whee_a_data_gpio 
+56aa 204055ab call mouse_gpio_set_pupd_by_input 
+56ab 6848c64b fetcht 1 ,mem_whee_b_data_gpio 
+56ac 204055ab call mouse_gpio_set_pupd_by_input 
+56ad 6848c652 fetcht 1 ,mem_whee_ta_data_gpio 
+56ae 204055ab call mouse_gpio_set_pupd_by_input 
+56af 6848c653 fetcht 1 ,mem_whee_tb_data_gpio 
+56b0 202055ab branch mouse_gpio_set_pupd_by_input 
+
+mouse_wheel_trigger:
+56b1 6fe1484b fetch 2 ,mem_mouse_z 
+56b2 207a0000 rtn blank 
+56b3 70485701 jam 1 ,mem_mouse_wheel_trigger 
+56b4 7048580a jam 10 ,mem_mouse_wheel_trigger_timer 
+56b5 20600000 rtn 
+
+mouse_wheel_trigger_timer:
+56b6 da604858 arg mem_mouse_wheel_trigger_timer ,regc 
+56b7 da4056b9 arg mouse_wheel_trigger_disable ,regb 
+56b8 202042e0 branch timer_single_step 
+
+mouse_wheel_trigger_disable:
+56b9 70485700 jam 0 ,mem_mouse_wheel_trigger 
+56ba 20600000 rtn 
+
+mouse_dpi_check:
+56bb 6fe0c649 fetch 1 ,mem_dpi_button_gpio 
+56bc c17f8000 rtneq gpio_disable 
+56bd da200000 arg 0 ,rega 
+56be 70497705 jam mouse_dpi_key ,mem_mouse_key_temp 
+56bf 6848c649 fetcht 1 ,mem_dpi_button_gpio 
+56c0 204056c8 call mouse_dpi_key_check 
+
+mouse_dpi_check_next:
+56c1 67e0c974 store 1 ,mem_mouse_dpikey_press_status 
+56c2 6fe0c654 fetch 1 ,mem_matrix_public_gpio 
+56c3 c07fd6d8 beq gpio_disable ,mouse_3io6key_dpi_check_end 
+56c4 204058df call mouse_matrix_public_gpio_reset 
+
+mouse_dpi_check_exit:
+56c5 1a227e00 copy rega ,pdata 
+56c6 c282d6e0 bbit1 mouse_dpi_key ,mouse_dpi_down 
+56c7 202056e7 branch mouse_dpi_up 
+
+mouse_dpi_key_check:
+56c8 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+56c9 c295d6de bbit1 mouse_enable_dpi_key_connect_gnd ,mouse_dpi_key_connect_gnd 
+56ca 6fe0c974 fetch 1 ,mem_mouse_dpikey_press_status 
+56cb 1fe22600 copy pdata ,regc 
+56cc 6fe0c654 fetch 1 ,mem_matrix_public_gpio 
+56cd c07fd931 beq gpio_disable ,mouse_3io6key_check 
+
+mouse_dpi_key_check_next:
+56ce 6fe0c97b fetch 1 ,mem_mouse_ghost_flag 
+56cf 243a56db nbranch mouse_dpi_check_end ,blank 
+
+mouse_dpi_key_connect_matrix:
+56d0 20406ee6 call gpio_get_bit 
+56d1 6848c654 fetcht 1 ,mem_matrix_public_gpio 
+56d2 2020d6de branch mouse_dpi_key_connect_gnd ,true 
+56d3 6848c654 fetcht 1 ,mem_matrix_public_gpio 
+56d4 20406ef7 call gpio_out_active 
+56d5 6848c649 fetcht 1 ,mem_dpi_button_gpio 
+56d6 6fe0c974 fetch 1 ,mem_mouse_dpikey_press_status 
+56d7 20205925 branch mouse_check_key_connect_gnd 
+
+mouse_3io6key_dpi_check_end:
+56d8 6848c649 fetcht 1 ,mem_dpi_button_gpio 
+56d9 204055b5 call mouse_gpio_config_input_pu 
+56da 202056c5 branch mouse_dpi_check_exit 
+
+mouse_dpi_check_end:
+56db 70487a00 jam dpi_button_state_up ,mem_mouse_dpi_button_state 
+56dc 70497400 jam 0 ,mem_mouse_dpikey_press_status 
+56dd 20600000 rtn 
+
+mouse_dpi_key_connect_gnd:
+56de 6fe0c974 fetch 1 ,mem_mouse_dpikey_press_status 
+56df 20205925 branch mouse_check_key_connect_gnd 
+
+mouse_dpi_down:
+56e0 6fe0c87a fetch 1 ,mem_mouse_dpi_button_state 
+56e1 c1008000 rtneq dpi_button_state_down 
+56e2 70487a01 jam dpi_button_state_down ,mem_mouse_dpi_button_state 
+56e3 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+56e4 c3940000 rtnbit1 mouse_enable_select_device_by_dpi_button 
+56e5 c39b0000 rtnbit1 mouse_enable_dpi_key_long_press_disconvery 
+56e6 202056f7 branch mouse_dpi_process 
+
+mouse_dpi_up:
+56e7 6fe0c87a fetch 1 ,mem_mouse_dpi_button_state 
+56e8 c1000000 rtneq dpi_button_state_up 
+56e9 70487a00 jam dpi_button_state_up ,mem_mouse_dpi_button_state 
+56ea 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+56eb c29456ee bbit1 mouse_enable_select_device_by_dpi_button ,mouse_dpi_up_next 
+56ec c29b56ee bbit1 mouse_enable_dpi_key_long_press_disconvery ,mouse_dpi_up_next 
+56ed 20600000 rtn 
+
+mouse_dpi_up_next:
+56ee 6fe0c87b fetch 1 ,mem_mouse_dpi_long_press_flag 
+56ef 243a56f2 nbranch mouse_dpi_up_after_long_press ,blank 
+56f0 6fe0c97d fetch 1 ,mem_select_device_count 
+56f1 245a56f7 ncall mouse_dpi_process ,blank 
+
+mouse_dpi_up_after_long_press:
+56f2 70487b00 jam 0 ,mem_mouse_dpi_long_press_flag 
+56f3 6fe0c4eb fetch 1 ,mem_ui_button_timeout 
+56f4 67e0c97d store 1 ,mem_select_device_count 
+56f5 67e0c97c store 1 ,mem_bt_discovery_count 
+56f6 20600000 rtn 
+
+mouse_dpi_process:
+56f7 44bdc00f bpatch patch0f_3 ,mem_patch0f 
+56f8 20405728 call mouse_dpi_ghost_check 
+56f9 20740000 rtn user 
+56fa 6fe0c690 fetch 1 ,mem_mouse_dpi 
+56fb 1fe20400 copy pdata ,temp 
+56fc 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+56fd c28bd704 bbit1 mouse_enable_double_dpi_key ,mouse_double_dpi_check 
+56fe 18427e00 copy temp ,pdata 
+56ff 1fe0fe01 increase 1 ,pdata 
+5700 1fe17e03 and pdata ,0x03 ,pdata 
+
+mouse_dpi_level_store:
+5701 67e0c690 store 1 ,mem_mouse_dpi 
+5702 20405744 call mouse_setting_dpi 
+5703 20205cac branch mouse_store_dpi_info_check 
+
+mouse_double_dpi_check:
+5704 6fe0c98a fetch 1 ,mem_dpi_another_button_down_enable 
+5705 243a5721 nbranch mouse_another_dpi_button_down ,blank 
+
+mouse_dpi_increase:
+5706 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5707 c28e5715 bbit1 mouse_enable_dpi_level_4 ,mouse_dpi_increase_level_4 
+5708 18427e00 copy temp ,pdata 
+5709 c1008000 rtneq mouse_dpi_level2 
+
+mouse_dpi_increase_level:
+570a c0005711 beq mouse_dpi_level1 ,mouse_dpi_level_3 
+570b c001570f beq mouse_dpi_level3 ,mouse_dpi_level_2 
+570c 20600000 rtn 
+
+mouse_dpi_level_1:
+570d 58000002 setarg 2 
+570e 20205701 branch mouse_dpi_level_store 
+
+mouse_dpi_level_2:
+570f 58000000 setarg 0 
+5710 20205701 branch mouse_dpi_level_store 
+
+mouse_dpi_level_3:
+5711 58000001 setarg 1 
+5712 20205701 branch mouse_dpi_level_store 
+
+mouse_dpi_level_4:
+5713 58000003 setarg 3 
+5714 20205701 branch mouse_dpi_level_store 
+
+mouse_dpi_increase_level_4:
+5715 18427e00 copy temp ,pdata 
+5716 c1008000 rtneq mouse_dpi_level2 
+5717 c0005711 beq mouse_dpi_level1 ,mouse_dpi_level_3 
+5718 c0015713 beq mouse_dpi_level3 ,mouse_dpi_level_4 
+5719 c001d70f beq mouse_dpi_level4 ,mouse_dpi_level_2 
+571a 20600000 rtn 
+
+mouse_dpi_decrease_level_4:
+571b 18427e00 copy temp ,pdata 
+571c c1010000 rtneq mouse_dpi_level3 
+571d c0005713 beq mouse_dpi_level1 ,mouse_dpi_level_4 
+571e c000d70f beq mouse_dpi_level2 ,mouse_dpi_level_2 
+571f c001d70d beq mouse_dpi_level4 ,mouse_dpi_level_1 
+5720 20600000 rtn 
+
+mouse_another_dpi_button_down:
+
+mouse_dpi_decrease:
+5721 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5722 c28e571b bbit1 mouse_enable_dpi_level_4 ,mouse_dpi_decrease_level_4 
+5723 18427e00 copy temp ,pdata 
+5724 c1010000 rtneq mouse_dpi_level3 
+
+mouse_dpi_decrease_level:
+5725 c000570d beq mouse_dpi_level1 ,mouse_dpi_level_1 
+5726 c000d70f beq mouse_dpi_level2 ,mouse_dpi_level_2 
+5727 20600000 rtn 
+
+mouse_dpi_ghost_check:
+5728 78547c00 disable user 
+5729 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+572a c3958000 rtnbit1 mouse_enable_dpi_key_connect_gnd 
+572b 20205eb1 branch mouse_ghost_key_value_check 
+
+mouse_dpi_key_check_long_press:
+572c 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+572d c2945730 bbit1 mouse_enable_select_device_by_dpi_button ,mouse_select_device_by_dpi_button 
+572e c29b5737 bbit1 mouse_enable_dpi_key_long_press_disconvery ,mouse_discovery_by_dpi_button 
+572f 20600000 rtn 
+
+mouse_select_device_by_dpi_button:
+5730 6fe0c87a fetch 1 ,mem_mouse_dpi_button_state 
+5731 c1808000 rtnne dpi_button_state_down 
+5732 da60497d arg mem_select_device_count ,regc 
+5733 da405735 arg mouse_ready_reconnection_by_dpi_button ,regb 
+5734 202042e0 branch timer_single_step 
+
+mouse_ready_reconnection_by_dpi_button:
+5735 70487b01 jam 1 ,mem_mouse_dpi_long_press_flag 
+5736 20205ec6 branch mouse_ready_reconnection_by_button 
+
+mouse_discovery_by_dpi_button:
+5737 6fe0c87a fetch 1 ,mem_mouse_dpi_button_state 
+5738 c1808000 rtnne dpi_button_state_down 
+5739 da60497c arg mem_bt_discovery_count ,regc 
+573a da40573c arg mouse_long_dpi_button_bt_discovery ,regb 
+573b 202042e0 branch timer_single_step 
+
+mouse_long_dpi_button_bt_discovery:
+573c 70487b01 jam 1 ,mem_mouse_dpi_long_press_flag 
+573d 20205ba3 branch mouse_long_button_bt_discovery 
+
+mouse_setting_dpi_4_level:
+573e 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+573f c38e0000 rtnbit1 mouse_enable_dpi_level_4 
+5740 6fe0c690 fetch 1 ,mem_mouse_dpi 
+5741 c1818000 rtnne mouse_dpi_level4 
+5742 70469000 jam mouse_dpi_level1 ,mem_mouse_dpi 
+5743 20600000 rtn 
+
+mouse_setting_dpi:
+5744 44be400f bpatch patch0f_4 ,mem_patch0f 
+5745 2040573e call mouse_setting_dpi_4_level 
+5746 2040613a call mouse_dpi_led_blink_delay 
+
+mouse_setting_sensor_type:
+5747 44bec00f bpatch patch0f_5 ,mem_patch0f 
+5748 6fe0c957 fetch 1 ,mem_config_sensor_type 
+5749 c006576b beq s201x ,mouse_seting_s201_dpi 
+574a c001d785 beq p3212 ,mouse_seting_3212_dpi 
+574b c005d799 beq ka8g2 ,mouse_seting_ka8g2_dpi 
+574c 6fe0c690 fetch 1 ,mem_mouse_dpi 
+574d c0005753 beq mouse_dpi_level1 ,mouse_set_cpi0 
+574e c000d751 beq mouse_dpi_level2 ,mouse_set_cpi1 
+574f c0015755 beq mouse_dpi_level3 ,mouse_set_cpi2 
+5750 c001d757 beq mouse_dpi_level4 ,mouse_set_cpi3 
+
+mouse_set_cpi1:
+5751 6848c869 fetcht 1 ,mem_320x_dpi_1 
+5752 20205758 branch mouse_dpi_store 
+
+mouse_set_cpi0:
+5753 6848c868 fetcht 1 ,mem_320x_dpi_0 
+5754 20205758 branch mouse_dpi_store 
+
+mouse_set_cpi2:
+5755 6848c86a fetcht 1 ,mem_320x_dpi_2 
+5756 20205758 branch mouse_dpi_store 
+
+mouse_set_cpi3:
+5757 6848c86b fetcht 1 ,mem_320x_dpi_3 
+
+mouse_dpi_store:
+5758 6fe0c957 fetch 1 ,mem_config_sensor_type 
+5759 c0025767 beq p3065_xy ,mouse_3065xy_set_dpi 
+575a c002d767 beq mx8650 ,mouse_3065xy_set_dpi 
+575b c0045769 beq ka8 ,mouse_ka8_set_dpi 
+575c c003d769 beq p6520 ,mouse_ka8_set_dpi 
+575d c0035767 beq p8009 ,mouse_3065xy_set_dpi 
+
+mouse_dpi_write:
+575e 6048c879 storet 1 ,mem_mouse_cpi_count 
+575f 58000006 setarg mouse_dpi_address 
+5760 204069e5 call twspi_read 
+5761 1fe104f8 and pdata ,0xf8 ,temp 
+5762 6fe0c879 fetch 1 ,mem_mouse_cpi_count 
+5763 9840fe00 iadd temp ,pdata 
+5764 1fed7e00 lshift8 pdata ,pdata 
+5765 1fe0fe06 add pdata ,mouse_dpi_address ,pdata 
+5766 202069e4 branch twspi_write 
+
+mouse_3065xy_set_dpi:
+5767 184085ff increase -1 ,temp 
+5768 2020575e branch mouse_dpi_write 
+
+mouse_ka8_set_dpi:
+5769 18408402 increase 2 ,temp 
+576a 2020575e branch mouse_dpi_write 
+
+mouse_seting_s201_dpi:
+576b 6fe0c690 fetch 1 ,mem_mouse_dpi 
+576c c000576f beq mouse_dpi_level1 ,mouse_set_s201_dpi_0 
+576d c000d775 beq mouse_dpi_level2 ,mouse_set_s201_dpi_2 
+576e c0015778 beq mouse_dpi_level3 ,mouse_set_s201_dpi_3 
+
+mouse_set_s201_dpi_0:
+576f 6fe0c874 fetch 1 ,mem_sensor_s201_dpi_0 
+5770 1fe22200 copy pdata ,rega 
+5771 2020577d branch mouse_dpi_s201_store 
+
+mouse_set_s201_dpi_1:
+5772 6fe0c875 fetch 1 ,mem_sensor_s201_dpi_1 
+5773 1fe22200 copy pdata ,rega 
+5774 2020577d branch mouse_dpi_s201_store 
+
+mouse_set_s201_dpi_2:
+5775 6fe0c876 fetch 1 ,mem_sensor_s201_dpi_2 
+5776 1fe22200 copy pdata ,rega 
+5777 2020577d branch mouse_dpi_s201_store 
+
+mouse_set_s201_dpi_3:
+5778 6fe0c877 fetch 1 ,mem_sensor_s201_dpi_3 
+5779 1fe22200 copy pdata ,rega 
+577a 2020577d branch mouse_dpi_s201_store 
+
+mouse_set_s201_dpi_4:
+577b 6fe0c878 fetch 1 ,mem_sensor_s201_dpi_4 
+577c 1fe22200 copy pdata ,rega 
+
+mouse_dpi_s201_store:
+577d 5800c309 setarg 0xc309 
+577e 204069e4 call twspi_write 
+577f 1a227e00 copy rega ,pdata 
+5780 1fed7e00 lshift8 pdata ,pdata 
+5781 1fe0fe23 add pdata ,0x23 ,pdata 
+5782 204069e4 call twspi_write 
+5783 58000009 setarg 0x0009 
+5784 202069e4 branch twspi_write 
+
+mouse_seting_3212_dpi:
+5785 6fe0c690 fetch 1 ,mem_mouse_dpi 
+5786 c000578c beq mouse_dpi_level1 ,mouse_set_p3212_cpi0 
+5787 c000d78a beq mouse_dpi_level2 ,mouse_set_p3212_cpi1 
+5788 c001578e beq mouse_dpi_level3 ,mouse_set_p3212_cpi2 
+5789 c001d790 beq mouse_dpi_level4 ,mouse_set_p3212_cpi3 
+
+mouse_set_p3212_cpi1:
+578a 6fe0c86d fetch 1 ,mem_3212_dpi_1 
+578b 20205791 branch mouse_p3212_dpi 
+
+mouse_set_p3212_cpi0:
+578c 6fe0c86c fetch 1 ,mem_3212_dpi_0 
+578d 20205791 branch mouse_p3212_dpi 
+
+mouse_set_p3212_cpi2:
+578e 6fe0c86e fetch 1 ,mem_3212_dpi_2 
+578f 20205791 branch mouse_p3212_dpi 
+
+mouse_set_p3212_cpi3:
+5790 6fe0c86f fetch 1 ,mem_3212_dpi_3 
+
+mouse_p3212_dpi:
+5791 67e0c879 store 1 ,mem_mouse_cpi_count 
+5792 1fed7e00 lshift8 pdata ,pdata 
+5793 1fe22200 copy pdata ,rega 
+5794 1fe0fe0d add pdata ,mouse_p3212_dpi_xaddress ,pdata 
+5795 204069e4 call twspi_write 
+5796 1a227e00 copy rega ,pdata 
+5797 1fe0fe0e add pdata ,mouse_p3212_dpi_yaddress ,pdata 
+5798 202069e4 branch twspi_write 
+
+mouse_seting_ka8g2_dpi:
+5799 6fe0c690 fetch 1 ,mem_mouse_dpi 
+579a c00057a0 beq mouse_dpi_level1 ,mouse_set_pka8g2_cpi0 
+579b c000d79e beq mouse_dpi_level2 ,mouse_set_pka8g2_cpi1 
+579c c00157a2 beq mouse_dpi_level3 ,mouse_set_pka8g2_cpi2 
+579d c001d7a4 beq mouse_dpi_level4 ,mouse_set_pka8g2_cpi3 
+
+mouse_set_pka8g2_cpi1:
+579e 6fe0c871 fetch 1 ,mem_ka8g2_dpi_1 
+579f 20205791 branch mouse_p3212_dpi 
+
+mouse_set_pka8g2_cpi0:
+57a0 6fe0c870 fetch 1 ,mem_ka8g2_dpi_0 
+57a1 20205791 branch mouse_p3212_dpi 
+
+mouse_set_pka8g2_cpi2:
+57a2 6fe0c872 fetch 1 ,mem_ka8g2_dpi_2 
+57a3 20205791 branch mouse_p3212_dpi 
+
+mouse_set_pka8g2_cpi3:
+57a4 6fe0c873 fetch 1 ,mem_ka8g2_dpi_3 
+57a5 20205791 branch mouse_p3212_dpi 
+
+mouse_key:
+57a6 2040584c call mouse_check_firekey_gpio 
+57a7 6fe0c987 fetch 1 ,mem_fire_key_flag 
+57a8 243a5860 nbranch fire_key_press ,blank 
+57a9 6fe0c982 fetch 1 ,mem_fire_key_status 
+57aa 243a585f nbranch fire_key_process ,blank 
+57ab 20405888 call mouse_check_key_gpio 
+57ac 204057bc call mouse_ghost_key_check 
+57ad 2040552f call mouse_set_mult 
+57ae 204057b7 call mouse_24g_key 
+57af 1a227e00 copy rega ,pdata 
+57b0 6848c84e fetcht 1 ,mem_mouse_key_last 
+57b1 67e0c84e store 1 ,mem_mouse_key_last 
+57b2 67e0c846 store 1 ,mem_mouse_key 
+57b3 9842fe00 ixor temp ,pdata 
+57b4 1fe67c00 sub pdata ,0 ,null 
+57b5 20628000 rtn zero 
+57b6 20207dba branch enable_user 
+
+mouse_24g_key:
+57b7 c6930000 rtnmark0 mark_24g 
+57b8 1a227e00 copy rega ,pdata 
+57b9 207a0000 rtn blank 
+57ba 67e0c846 store 1 ,mem_mouse_key 
+57bb 20207dba branch enable_user 
+
+mouse_ghost_key_check:
+57bc 70497900 jam 0 ,mem_mouse_matrix_key_cow_count 
+57bd 70497a00 jam 0 ,mem_mouse_matrix_key_row_count 
+57be 70497b00 jam 0 ,mem_mouse_ghost_flag 
+57bf 1fe22400 copy pdata ,regb 
+57c0 6848c644 fetcht 1 ,mem_lbutton_gpio 
+57c1 6fe0c647 fetch 1 ,mem_bk_button_gpio 
+57c2 98467c00 isub temp ,null 
+57c3 2022d7cc branch mouse_matrix_ghost_key_l_bk ,zero 
+57c4 6fe0c648 fetch 1 ,mem_fw_button_gpio 
+57c5 98467c00 isub temp ,null 
+57c6 2022d7d1 branch mouse_matrix_ghost_key_l_fw ,zero 
+57c7 6848c645 fetcht 1 ,mem_mbutton_gpio 
+57c8 6fe0c647 fetch 1 ,mem_bk_button_gpio 
+57c9 98467c00 isub temp ,null 
+57ca 2022d7e0 branch mouse_ghost_key_mbk_rfw ,zero 
+57cb 202057e3 branch mouse_ghost_key_mfw_rbk 
+
+mouse_matrix_ghost_key_l_bk:
+57cc 6848c645 fetcht 1 ,mem_mbutton_gpio 
+57cd 6fe0c648 fetch 1 ,mem_fw_button_gpio 
+57ce 98467c00 isub temp ,null 
+57cf 2022d7d6 branch mouse_ghost_key_lbk_mfw ,zero 
+57d0 202057d9 branch mouse_ghost_key_lbk_rfw 
+
+mouse_matrix_ghost_key_l_fw:
+57d1 6848c645 fetcht 1 ,mem_mbutton_gpio 
+57d2 6fe0c647 fetch 1 ,mem_bk_button_gpio 
+57d3 98467c00 isub temp ,null 
+57d4 2022d7db branch mouse_ghost_key_lfw_mbk ,zero 
+57d5 202057de branch mouse_ghost_key_lfw_rbk 
+
+mouse_ghost_key_lbk_mfw:
+57d6 204057ef call mouse_ghost_key_check_l_bk 
+57d7 204057fb call mouse_ghost_key_check_m_fw 
+57d8 202057e5 branch mouse_ghost_key_check_next 
+
+mouse_ghost_key_lbk_rfw:
+57d9 204057ef call mouse_ghost_key_check_l_bk 
+57da 202057e1 branch mouse_ghost_key_rfw 
+
+mouse_ghost_key_lfw_mbk:
+57db 204057f8 call mouse_ghost_key_check_l_fw 
+57dc 204057f2 call mouse_ghost_key_check_m_bk 
+57dd 202057e5 branch mouse_ghost_key_check_next 
+
+mouse_ghost_key_lfw_rbk:
+57de 204057f8 call mouse_ghost_key_check_l_fw 
+57df 202057e4 branch mouse_ghost_key_rbk 
+
+mouse_ghost_key_mbk_rfw:
+57e0 204057f2 call mouse_ghost_key_check_m_bk 
+
+mouse_ghost_key_rfw:
+57e1 204057fe call mouse_ghost_key_check_r_fw 
+57e2 202057e5 branch mouse_ghost_key_check_next 
+
+mouse_ghost_key_mfw_rbk:
+57e3 204057fb call mouse_ghost_key_check_m_fw 
+
+mouse_ghost_key_rbk:
+57e4 204057f5 call mouse_ghost_key_check_r_bk 
+
+mouse_ghost_key_check_next:
+57e5 20405801 call mouse_ghost_key_check_bk_fw 
+57e6 20405804 call mouse_ghost_key_check_lmr 
+57e7 6fe0c97a fetch 1 ,mem_mouse_matrix_key_row_count 
+57e8 207a0000 rtn blank 
+57e9 6fe0c979 fetch 1 ,mem_mouse_matrix_key_cow_count 
+57ea 207a0000 rtn blank 
+57eb 70497b01 jam 1 ,mem_mouse_ghost_flag 
+57ec 6fe0c84e fetch 1 ,mem_mouse_key_last 
+57ed 1fe22200 copy pdata ,rega 
+57ee 20600000 rtn 
+
+mouse_ghost_key_check_l_bk:
+57ef 1a417e09 and regb ,mouse_l_bk_button ,pdata 
+57f0 c004d80c beq mouse_l_bk_button ,mouse_matrix_cow_more_than_one_key 
+57f1 20600000 rtn 
+
+mouse_ghost_key_check_m_bk:
+57f2 1a417e09 and regb ,mouse_l_bk_button ,pdata 
+57f3 c009580c beq mouse_m_bk_button ,mouse_matrix_cow_more_than_one_key 
+57f4 20600000 rtn 
+
+mouse_ghost_key_check_r_bk:
+57f5 1a417e09 and regb ,mouse_l_bk_button ,pdata 
+57f6 c005580c beq mouse_r_bk_button ,mouse_matrix_cow_more_than_one_key 
+57f7 20600000 rtn 
+
+mouse_ghost_key_check_l_fw:
+57f8 1a417e09 and regb ,mouse_l_bk_button ,pdata 
+57f9 c008d80c beq mouse_l_fw_button ,mouse_matrix_cow_more_than_one_key 
+57fa 20600000 rtn 
+
+mouse_ghost_key_check_m_fw:
+57fb 1a417e14 and regb ,mouse_m_fw_button ,pdata 
+57fc c00a580c beq mouse_m_fw_button ,mouse_matrix_cow_more_than_one_key 
+57fd 20600000 rtn 
+
+mouse_ghost_key_check_r_fw:
+57fe 1a417e14 and regb ,mouse_m_fw_button ,pdata 
+57ff c009580c beq mouse_r_fw_button ,mouse_matrix_cow_more_than_one_key 
+5800 20600000 rtn 
+
+mouse_ghost_key_check_bk_fw:
+5801 1a417e18 and regb ,mouse_bk_fw_button ,pdata 
+5802 c00c580a beq mouse_bk_fw_button ,mouse_matrix_row_more_than_one_key 
+5803 20600000 rtn 
+
+mouse_ghost_key_check_lmr:
+5804 18417e07 and temp ,mouse_lmr_button ,pdata 
+5805 c001d80a beq mouse_lr_button ,mouse_matrix_row_more_than_one_key 
+5806 c002d80a beq mouse_lm_button ,mouse_matrix_row_more_than_one_key 
+5807 c003580a beq mouse_rm_button ,mouse_matrix_row_more_than_one_key 
+5808 c003d80a beq mouse_lmr_button ,mouse_matrix_row_more_than_one_key 
+5809 20600000 rtn 
+
+mouse_matrix_row_more_than_one_key:
+580a 70497a01 jam 1 ,mem_mouse_matrix_key_row_count 
+580b 20600000 rtn 
+
+mouse_matrix_cow_more_than_one_key:
+580c 70497901 jam 1 ,mem_mouse_matrix_key_cow_count 
+580d 20600000 rtn 
+
+mouse_dpi_another_gpio_check:
+580e 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+580f c40b8000 rtnbit0 mouse_enable_double_dpi_key 
+5810 c3165816 bbit0 mouse_enable_another_dpi_key_connect_gnd ,mouse_dpi_another_gpio_connect_vin_check 
+
+mouse_dpi_another_gpio_connect_gnd_check:
+5811 6fe0c658 fetch 1 ,mem_dpi_another_button_gpio 
+5812 20405943 call mouse_gpio_config_output_high 
+5813 20405824 call mouse_dpi_another_check 
+5814 6848c658 fetcht 1 ,mem_dpi_another_button_gpio 
+5815 202055b5 branch mouse_gpio_config_input_pu 
+
+mouse_dpi_another_gpio_connect_vin_check:
+5816 6fe0c658 fetch 1 ,mem_dpi_another_button_gpio 
+5817 20405946 call mouse_gpio_config_output_low 
+5818 70498b00 jam mouse_dpi_another_key ,mem_mouse_key_temp_patch 
+5819 6848c658 fetcht 1 ,mem_dpi_another_button_gpio 
+581a 6fe0c988 fetch 1 ,mem_dpi_another_press_status 
+581b 2040583d call mouse_check_key_connect_vin_new 
+581c 20405828 call mouse_dpi_another_state_check 
+581d 6848c658 fetcht 1 ,mem_dpi_another_button_gpio 
+581e 202055b5 branch mouse_gpio_config_input_pu 
+
+mouse_dpi_another_down_new:
+581f 204055b5 call mouse_gpio_config_input_pu 
+5820 6fe0c989 fetch 1 ,mem_dpi_another_button_state 
+5821 c1008000 rtneq dpi_button_state_down 
+5822 70498901 jam dpi_button_state_down ,mem_dpi_another_button_state 
+5823 202056f7 branch mouse_dpi_process 
+
+mouse_dpi_another_check:
+5824 70498b00 jam mouse_dpi_another_key ,mem_mouse_key_temp_patch 
+5825 6848c658 fetcht 1 ,mem_dpi_another_button_gpio 
+5826 6fe0c988 fetch 1 ,mem_dpi_another_press_status 
+5827 20405833 call mouse_check_key_connect_gnd_new 
+
+mouse_dpi_another_state_check:
+5828 67e0c988 store 1 ,mem_dpi_another_press_status 
+5829 6fe0c98a fetch 1 ,mem_dpi_another_button_down_enable 
+582a 203a582f branch mouse_dpi_another_up ,blank 
+
+mouse_dpi_another_down:
+582b 6fe0c989 fetch 1 ,mem_dpi_another_button_state 
+582c c1008000 rtneq dpi_button_state_down 
+582d 70498901 jam dpi_button_state_down ,mem_dpi_another_button_state 
+582e 202056f7 branch mouse_dpi_process 
+
+mouse_dpi_another_up:
+582f 6fe0c989 fetch 1 ,mem_dpi_another_button_state 
+5830 c1000000 rtneq dpi_button_state_up 
+5831 70498900 jam dpi_button_state_up ,mem_dpi_another_button_state 
+5832 20600000 rtn 
+
+mouse_check_key_connect_gnd_new:
+5833 1fe3fe00 lshift pdata ,pdata 
+5834 1fe22400 copy pdata ,regb 
+5835 20406ee6 call gpio_get_bit 
+5836 7920a400 setflag true ,0 ,regb 
+5837 1a417e07 and regb ,0x07 ,pdata 
+5838 6848c98b fetcht 1 ,mem_mouse_key_temp_patch 
+5839 18420e00 copy temp ,queue 
+583a c003d848 beq 0x07 ,mouse_another_dpi_key_press 
+583b c000584a beq 0x00 ,mouse_another_dpi_key_release 
+583c 20600000 rtn 
+
+mouse_check_key_connect_vin_new:
+583d 1fe3fe00 lshift pdata ,pdata 
+583e 1fe22400 copy pdata ,regb 
+583f 204055b1 call mouse_gpio_config_input_pd 
+5840 20406ee6 call gpio_get_bit 
+5841 7920a400 setflag true ,0 ,regb 
+5842 1a417e07 and regb ,0x07 ,pdata 
+5843 6848c98b fetcht 1 ,mem_mouse_key_temp_patch 
+5844 18420e00 copy temp ,queue 
+5845 c003d848 beq 0x07 ,mouse_another_dpi_key_press 
+5846 c000584a beq 0x00 ,mouse_another_dpi_key_release 
+5847 20600000 rtn 
+
+mouse_another_dpi_key_press:
+5848 70498a01 jam 1 ,mem_dpi_another_button_down_enable 
+5849 20600000 rtn 
+
+mouse_another_dpi_key_release:
+584a 70498a00 jam 0 ,mem_dpi_another_button_down_enable 
+584b 20600000 rtn 
+
+mouse_check_firekey_gpio:
+584c da400000 arg 0 ,regb 
+584d 6fe0c657 fetch 1 ,mem_firebutton_gpio 
+584e c17f8000 rtneq gpio_disable 
+584f 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5850 c3175859 bbit0 mouse_enable_fire_key_connect_gnd ,mouse_check_firekey_connect_vin 
+
+mouse_check_firekey_connect_gnd:
+5851 6848c657 fetcht 1 ,mem_firebutton_gpio 
+5852 204055b5 call mouse_gpio_config_input_pu 
+5853 6848c657 fetcht 1 ,mem_firebutton_gpio 
+5854 20406ee6 call gpio_get_bit 
+5855 7920a400 setflag true ,0 ,regb 
+
+mouse_firekey_state_store:
+5856 1a427e00 copy regb ,pdata 
+5857 67e0c987 store 1 ,mem_fire_key_flag 
+5858 20600000 rtn 
+
+mouse_check_firekey_connect_vin:
+5859 6848c657 fetcht 1 ,mem_firebutton_gpio 
+585a 204055b1 call mouse_gpio_config_input_pd 
+585b 6848c657 fetcht 1 ,mem_firebutton_gpio 
+585c 20406ee6 call gpio_get_bit 
+585d 7d20a400 nsetflag true ,0 ,regb 
+585e 20205856 branch mouse_firekey_state_store 
+
+fire_key_process:
+585f c0025878 beq 4 ,fire_key_process_end 
+
+fire_key_press:
+5860 2040587b call firekey_clkn_bt_timer_check 
+5861 6fe24983 fetch 4 ,mem_fire_key_delay 
+5862 d84000a0 arg 0xa0 ,temp 
+5863 98408400 iadd temp ,temp 
+5864 1c427e00 copy clkn_bt ,pdata 
+5865 98467c00 isub temp ,null 
+5866 24610000 nrtn positive 
+5867 67e24983 store 4 ,mem_fire_key_delay 
+5868 6fe0c982 fetch 1 ,mem_fire_key_status 
+5869 c000586e beq 0 ,fire_key_process_start 
+586a c000d871 beq 1 ,fire_key_process_release1 
+586b c0015874 beq 2 ,fire_key_process_start2 
+586c c001d876 beq 3 ,fire_key_process_release2 
+586d 20600000 rtn 
+
+fire_key_process_start:
+586e 70498201 jam 1 ,mem_fire_key_status 
+
+fire_key_down:
+586f 70484601 jam 1 ,mem_mouse_key 
+5870 20207dba branch enable_user 
+
+fire_key_process_release1:
+5871 70498202 jam 2 ,mem_fire_key_status 
+
+fire_key_release:
+5872 70484600 jam 0 ,mem_mouse_key 
+5873 20207dba branch enable_user 
+
+fire_key_process_start2:
+5874 70498203 jam 3 ,mem_fire_key_status 
+5875 2020586f branch fire_key_down 
+
+fire_key_process_release2:
+5876 70498200 jam 0 ,mem_fire_key_status 
+5877 20205872 branch fire_key_release 
+
+fire_key_process_end:
+5878 70498200 jam 0 ,mem_fire_key_status 
+5879 70484600 jam 0 ,mem_mouse_key 
+587a 20600000 rtn 
+
+firekey_clkn_bt_timer_check:
+587b 684a4983 fetcht 4 ,mem_fire_key_delay 
+587c 1c427e00 copy clkn_bt ,pdata 
+587d 98467c00 isub temp ,null 
+587e 24415880 ncall firekey_clkn_bt_timer_timeout ,positive 
+587f 20600000 rtn 
+
+firekey_clkn_bt_timer_timeout:
+5880 58000000 setarg 0 
+5881 67e24983 store 4 ,mem_fire_key_delay 
+5882 20600000 rtn 
+
+mouse_key_check_once:
+5883 20405895 call mouse_check_key_gpio_once 
+5884 20405888 call mouse_check_key_gpio 
+5885 58000000 setarg 0x00 
+5886 67e1c96f store 3 ,mem_mouse_lkey_press_status 
+5887 20600000 rtn 
+
+mouse_check_key_gpio:
+5888 44bf400f bpatch patch0f_6 ,mem_patch0f 
+5889 6fe0c73f fetch 1 ,mem_sensor_shutdown_flag 
+588a 245a5895 ncall mouse_check_key_gpio_once ,blank 
+588b da200000 arg 0 ,rega 
+588c 20405898 call mouse_check_lkey_gpio 
+588d 204058a1 call mouse_check_rkey_gpio 
+588e 204058aa call mouse_check_mkey_gpio 
+588f 204058b3 call mouse_check_bkkey_gpio 
+5890 204058cf call mouse_check_fwkey_gpio 
+5891 2040584c call mouse_check_firekey_gpio 
+5892 204058ec call mouse_check_customerkey_gpio 
+5893 1a227e00 copy rega ,pdata 
+5894 20600000 rtn 
+
+mouse_check_key_gpio_once:
+5895 58030303 setarg 0x030303 
+5896 67e1c96f store 3 ,mem_mouse_lkey_press_status 
+5897 20600000 rtn 
+
+mouse_check_lkey_gpio:
+5898 6fe0c644 fetch 1 ,mem_lbutton_gpio 
+5899 20405943 call mouse_gpio_config_output_high 
+589a 70497700 jam mouse_l_key ,mem_mouse_key_temp 
+589b 6848c644 fetcht 1 ,mem_lbutton_gpio 
+589c 6fe0c96f fetch 1 ,mem_mouse_lkey_press_status 
+589d 20405925 call mouse_check_key_connect_gnd 
+589e 67e0c96f store 1 ,mem_mouse_lkey_press_status 
+589f 6848c644 fetcht 1 ,mem_lbutton_gpio 
+58a0 202055b5 branch mouse_gpio_config_input_pu 
+
+mouse_check_rkey_gpio:
+58a1 6fe0c646 fetch 1 ,mem_rbutton_gpio 
+58a2 20405943 call mouse_gpio_config_output_high 
+58a3 70497701 jam mouse_r_key ,mem_mouse_key_temp 
+58a4 6848c646 fetcht 1 ,mem_rbutton_gpio 
+58a5 6fe0c970 fetch 1 ,mem_mouse_rkey_press_status 
+58a6 20405925 call mouse_check_key_connect_gnd 
+58a7 67e0c970 store 1 ,mem_mouse_rkey_press_status 
+58a8 6848c646 fetcht 1 ,mem_rbutton_gpio 
+58a9 202055b5 branch mouse_gpio_config_input_pu 
+
+mouse_check_mkey_gpio:
+58aa 6fe0c645 fetch 1 ,mem_mbutton_gpio 
+58ab 20405943 call mouse_gpio_config_output_high 
+58ac 70497702 jam mouse_m_key ,mem_mouse_key_temp 
+58ad 6848c645 fetcht 1 ,mem_mbutton_gpio 
+58ae 6fe0c971 fetch 1 ,mem_mouse_mkey_press_status 
+58af 20405925 call mouse_check_key_connect_gnd 
+58b0 67e0c971 store 1 ,mem_mouse_mkey_press_status 
+58b1 6848c645 fetcht 1 ,mem_mbutton_gpio 
+58b2 202055b5 branch mouse_gpio_config_input_pu 
+
+mouse_check_bkkey_gpio:
+58b3 6fe0c647 fetch 1 ,mem_bk_button_gpio 
+58b4 c17f8000 rtneq gpio_disable 
+58b5 70497703 jam mouse_bk_key ,mem_mouse_key_temp 
+58b6 6fe0c972 fetch 1 ,mem_mouse_bkkey_press_status 
+58b7 1fe22600 copy pdata ,regc 
+58b8 6848c647 fetcht 1 ,mem_bk_button_gpio 
+58b9 6fe0c654 fetch 1 ,mem_matrix_public_gpio 
+58ba c07fd8c8 beq gpio_disable ,mouse_3io6key_bk_check 
+58bb 20406ee6 call gpio_get_bit 
+58bc 2020d8c4 branch mouse_check_bk_button_connect_gnd ,true 
+58bd 6848c654 fetcht 1 ,mem_matrix_public_gpio 
+58be 20406ef7 call gpio_out_active 
+58bf 6848c647 fetcht 1 ,mem_bk_button_gpio 
+58c0 6fe0c972 fetch 1 ,mem_mouse_bkkey_press_status 
+58c1 20405925 call mouse_check_key_connect_gnd 
+
+mouse_check_bkkey_gpio_end:
+58c2 67e0c972 store 1 ,mem_mouse_bkkey_press_status 
+58c3 202058df branch mouse_matrix_public_gpio_reset 
+
+mouse_check_bk_button_connect_gnd:
+58c4 6848c654 fetcht 1 ,mem_matrix_public_gpio 
+58c5 6fe0c972 fetch 1 ,mem_mouse_bkkey_press_status 
+58c6 20405925 call mouse_check_key_connect_gnd 
+58c7 202058c2 branch mouse_check_bkkey_gpio_end 
+
+mouse_3io6key_bk_check:
+58c8 6fe0c647 fetch 1 ,mem_bk_button_gpio 
+58c9 20405946 call mouse_gpio_config_output_low 
+58ca 6848c647 fetcht 1 ,mem_bk_button_gpio 
+58cb 20405931 call mouse_3io6key_check 
+58cc 67e0c972 store 1 ,mem_mouse_bkkey_press_status 
+58cd 6848c647 fetcht 1 ,mem_bk_button_gpio 
+58ce 202055b5 branch mouse_gpio_config_input_pu 
+
+mouse_check_fwkey_gpio:
+58cf 6fe0c648 fetch 1 ,mem_fw_button_gpio 
+58d0 c17f8000 rtneq gpio_disable 
+58d1 70497704 jam mouse_fw_key ,mem_mouse_key_temp 
+58d2 6fe0c973 fetch 1 ,mem_mouse_fwkey_press_status 
+58d3 1fe22600 copy pdata ,regc 
+58d4 6848c648 fetcht 1 ,mem_fw_button_gpio 
+58d5 6fe0c654 fetch 1 ,mem_matrix_public_gpio 
+58d6 c07fd8e5 beq gpio_disable ,mouse_3io6key_fw_check 
+58d7 20406ee6 call gpio_get_bit 
+58d8 2020d8e1 branch mouse_check_fw_button_connect_gnd ,true 
+58d9 6848c654 fetcht 1 ,mem_matrix_public_gpio 
+58da 20406ef7 call gpio_out_active 
+58db 6848c648 fetcht 1 ,mem_fw_button_gpio 
+58dc 6fe0c973 fetch 1 ,mem_mouse_fwkey_press_status 
+58dd 20405925 call mouse_check_key_connect_gnd 
+
+mouse_check_fwkey_gpio_end:
+58de 67e0c973 store 1 ,mem_mouse_fwkey_press_status 
+
+mouse_matrix_public_gpio_reset:
+58df 6848c654 fetcht 1 ,mem_matrix_public_gpio 
+58e0 202055b5 branch mouse_gpio_config_input_pu 
+
+mouse_check_fw_button_connect_gnd:
+58e1 6848c654 fetcht 1 ,mem_matrix_public_gpio 
+58e2 6fe0c973 fetch 1 ,mem_mouse_fwkey_press_status 
+58e3 20405925 call mouse_check_key_connect_gnd 
+58e4 202058de branch mouse_check_fwkey_gpio_end 
+
+mouse_3io6key_fw_check:
+58e5 6fe0c648 fetch 1 ,mem_fw_button_gpio 
+58e6 20405946 call mouse_gpio_config_output_low 
+58e7 6848c648 fetcht 1 ,mem_fw_button_gpio 
+58e8 20405931 call mouse_3io6key_check 
+58e9 67e0c973 store 1 ,mem_mouse_fwkey_press_status 
+58ea 6848c648 fetcht 1 ,mem_fw_button_gpio 
+58eb 202055b5 branch mouse_gpio_config_input_pu 
+
+mouse_check_customerkey_gpio:
+58ec 70496c00 jam 0 ,mem_customer_key 
+58ed 6fe0c656 fetch 1 ,mem_customer_key_gpio 
+58ee c17f8000 rtneq gpio_disable 
+58ef 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+58f0 c40b0000 rtnbit0 mouse_enable_keyboard 
+58f1 c297d8fd bbit1 mouse_enable_customer_key_connect_vin_or_matrix ,mouse_customer_key_connect_vin 
+
+mouse_customer_key_connect_gnd:
+58f2 70497707 jam mouse_customer_key ,mem_mouse_key_temp 
+58f3 6848c656 fetcht 1 ,mem_customer_key_gpio 
+58f4 6fe0c976 fetch 1 ,mem_mouse_customerkey_press_status 
+58f5 20405925 call mouse_check_key_connect_gnd 
+58f6 67e0c976 store 1 ,mem_mouse_customerkey_press_status 
+
+mouse_check_customerkey_gpio_next:
+58f7 1a227e00 copy rega ,pdata 
+58f8 c283d917 bbit1 mouse_customer_key ,mouse_customerkey_press 
+58f9 2040591a call mouse_customerkey_release 
+
+mouse_check_customerkey_gpio_exit:
+58fa 6fe0c96d fetch 1 ,mem_customer_data_trigger 
+58fb 67e0c96e store 1 ,mem_customer_data_trigger_last 
+58fc 20600000 rtn 
+
+mouse_customer_key_connect_vin:
+58fd 70497707 jam mouse_customer_key ,mem_mouse_key_temp 
+58fe 6fe0c976 fetch 1 ,mem_mouse_customerkey_press_status 
+58ff 1fe22600 copy pdata ,regc 
+5900 6848c656 fetcht 1 ,mem_customer_key_gpio 
+5901 6fe0c654 fetch 1 ,mem_matrix_public_gpio 
+5902 c07fd90f beq gpio_disable ,mouse_3io6key_customer_key_check_vin 
+5903 20406ee6 call gpio_get_bit 
+5904 2020d90b branch mouse_check_customer_button_connect_gnd ,true 
+5905 6848c654 fetcht 1 ,mem_matrix_public_gpio 
+5906 20406ef7 call gpio_out_active 
+5907 6848c656 fetcht 1 ,mem_customer_key_gpio 
+5908 6fe0c976 fetch 1 ,mem_mouse_customerkey_press_status 
+5909 20405925 call mouse_check_key_connect_gnd 
+590a 20205913 branch mouse_check_customerkey_gpio_over 
+
+mouse_check_customer_button_connect_gnd:
+590b 6848c654 fetcht 1 ,mem_matrix_public_gpio 
+590c 6fe0c976 fetch 1 ,mem_mouse_customerkey_press_status 
+590d 20405925 call mouse_check_key_connect_gnd 
+590e 20205913 branch mouse_check_customerkey_gpio_over 
+
+mouse_3io6key_customer_key_check_vin:
+590f 6fe0c656 fetch 1 ,mem_customer_key_gpio 
+5910 20405946 call mouse_gpio_config_output_low 
+5911 6848c656 fetcht 1 ,mem_customer_key_gpio 
+5912 20405931 call mouse_3io6key_check 
+
+mouse_check_customerkey_gpio_over:
+5913 67e0c976 store 1 ,mem_mouse_customerkey_press_status 
+5914 204058f7 call mouse_check_customerkey_gpio_next 
+5915 6848c656 fetcht 1 ,mem_customer_key_gpio 
+5916 202055b5 branch mouse_gpio_config_input_pu 
+
+mouse_customerkey_press:
+5917 70496d01 jam 1 ,mem_customer_data_trigger 
+5918 2040591d call mouse_customer_key_need_send 
+5919 202058fa branch mouse_check_customerkey_gpio_exit 
+
+mouse_customerkey_release:
+591a 70496d00 jam 0 ,mem_customer_data_trigger 
+591b 6fe0c96e fetch 1 ,mem_customer_data_trigger_last 
+591c 207a0000 rtn blank 
+
+mouse_customer_key_need_send:
+591d 70496c01 jam 1 ,mem_customer_key 
+591e 20600000 rtn 
+
+mouse_check_matrix_button_connect_gnd:
+591f 20406ee6 call gpio_get_bit 
+5920 6848c977 fetcht 1 ,mem_mouse_key_temp 
+5921 18420e00 copy temp ,queue 
+5922 2020d92f branch mouse_key_press ,true 
+
+mouse_key_release:
+5923 f93fa200 qset0 rega 
+5924 20600000 rtn 
+
+mouse_check_key_connect_gnd:
+5925 1fe3fe00 lshift pdata ,pdata 
+5926 1fe22400 copy pdata ,regb 
+5927 20406ee6 call gpio_get_bit 
+5928 7920a400 setflag true ,0 ,regb 
+
+mouse_check_key_connect_gnd_1:
+5929 1a417e07 and regb ,0x07 ,pdata 
+
+mouse_check_key_connect_gnd_next:
+592a 6848c977 fetcht 1 ,mem_mouse_key_temp 
+592b 18420e00 copy temp ,queue 
+592c c003d92f beq 0x07 ,mouse_key_press 
+592d c0005923 beq 0x00 ,mouse_key_release 
+592e 20600000 rtn 
+
+mouse_key_press:
+592f f9202200 qset1 rega 
+5930 20600000 rtn 
+
+mouse_3io6key_check:
+5931 44bfc00f bpatch patch0f_7 ,mem_patch0f 
+5932 1a627e00 copy regc ,pdata 
+5933 67e0c978 store 1 ,mem_mouse_key_status 
+5934 1fe3fe00 lshift pdata ,pdata 
+5935 1fe22400 copy pdata ,regb 
+5936 18422600 copy temp ,regc 
+5937 204055b1 call mouse_gpio_config_input_pd 
+5938 1a620400 copy regc ,temp 
+5939 20406ee6 call gpio_get_bit 
+593a 7d20a400 nsetflag true ,0 ,regb 
+593b 2040593d call mouse_check_press 
+593c 2020592a branch mouse_check_key_connect_gnd_next 
+
+mouse_check_press:
+593d 6848c978 fetcht 1 ,mem_mouse_key_status 
+593e 18410401 and_into 0x01 ,temp 
+593f 1a417e01 and regb ,0x01 ,pdata 
+5940 98467c00 isub temp ,null 
+5941 2422dabc nbranch mouse_current_mult_update ,zero 
+5942 20600000 rtn 
+
+mouse_gpio_config_output_high:
+5943 c17f8000 rtneq gpio_disable 
+5944 d840003f arg gpcfg_output_high ,temp 
+5945 20206f21 branch gpio_config_function_int 
+
+mouse_gpio_config_output_low:
+5946 c17f8000 rtneq gpio_disable 
+5947 d840003e arg gpcfg_output_low ,temp 
+5948 20206f21 branch gpio_config_function_int 
+
+mouse_init_sunt:
+5949 44c04010 bpatch patch10_0 ,mem_patch10 
+594a 204055f6 call mouse_sensor_spi_init 
+594b 20758000 rtn wake 
+
+mouse_init_sensor_wakeup:
+594c 204059e7 call mouse_sensor_poweron 
+
+mouse_init_sensor:
+594d 44c0c010 bpatch patch10_1 ,mem_patch10 
+594e 20405958 call mouse_read_sensor_id 
+594f c018595f beq p32xx_id1 ,mouse_init_p32xx_id2_judge 
+5950 c018d9c6 beq p3065_id1 ,mouse_init_p3065 
+5951 c02c59cf beq pka8g2_id1 ,mouse_ka8g2_id2_judge 
+5952 20405955 call mouse_twspi_reset 
+5953 20001af4 nop 6900 
+5954 2020594d branch mouse_init_sensor 
+
+mouse_twspi_reset:
+5955 6848c64c fetcht 1 ,mem_mouse_sensor_sclk_gpio 
+5956 204069c7 call twspi_reset 
+5957 202055fb branch mouse_spid_init_pin 
+
+mouse_read_sensor_id:
+5958 58000001 setarg pan_reg_pid_h 
+5959 204069e5 call twspi_read 
+595a 67e0c85a store 1 ,mem_sensor_id2 
+595b 58000000 setarg pan_reg_pid_l 
+595c 204069e5 call twspi_read 
+595d 67e0c859 store 1 ,mem_sensor_id1 
+595e 20600000 rtn 
+
+mouse_init_p32xx_id2_judge:
+595f 6fe0c85a fetch 1 ,mem_sensor_id2 
+5960 c02d596e beq p_mx8650 ,mouse_mx8650_init_param 
+5961 c06c5974 beq p8009_id2 ,mouse_8009_init_param 
+5962 c068d968 beq p3205_tj3t_id2 ,mouse_s210x_3205_3t_judge 
+5963 c069598c beq p3204_tj3l_id2 ,mouse_3204_3l_init_param 
+5964 c0015993 beq p3212_id2 ,mouse_3212_init_param 
+5965 c02a599c beq pka8_id2 ,mouse_ka8_init_param_check 
+5966 c02859c3 beq p6520a_id2 ,mouse_p6520_init_param 
+5967 2020594d branch mouse_init_sensor 
+
+mouse_s210x_3205_3t_judge:
+5968 58000049 setarg 0x49 
+5969 204069e5 call twspi_read 
+596a c050d96c beq 0xa1 ,mouse_s201x_init_param 
+596b 20205983 branch mouse_3205_3t_init_param 
+
+mouse_s201x_init_param:
+596c 7049570c jam s201x ,mem_config_sensor_type 
+596d 20600000 rtn 
+
+mouse_mx8650_init_param:
+596e 70495705 jam mx8650 ,mem_config_sensor_type 
+596f 204059da call mouse_sensor_reset 
+5970 20407c95 call delay_10ms 
+5971 da6048d6 arg mem_sensor_8650_init ,regc 
+5972 20405995 call mouse_sensor_wr_seq 
+5973 20205747 branch mouse_setting_sensor_type 
+
+mouse_8009_init_param:
+5974 58000016 setarg 0x16 
+5975 204069e5 call twspi_read 
+5976 1fe67cbd sub pdata ,0xbd ,null 
+5977 2422d949 nbranch mouse_init_sunt ,zero 
+5978 58000019 setarg 0x19 
+5979 204069e5 call twspi_read 
+597a 1fe67c55 sub pdata ,0x55 ,null 
+597b 2422d949 nbranch mouse_init_sunt ,zero 
+597c 5800001b setarg 0x1b 
+597d 204069e5 call twspi_read 
+597e 1fe67c1d sub pdata ,0x1d ,null 
+597f 2422d949 nbranch mouse_init_sunt ,zero 
+5980 70495706 jam p8009 ,mem_config_sensor_type 
+5981 da60491a arg mem_sensor_8009_init ,regc 
+5982 20205995 branch mouse_sensor_wr_seq 
+
+mouse_3205_3t_init_param:
+5983 70495700 jam p3205 ,mem_config_sensor_type 
+5984 da604890 arg mem_sensor_3205_init ,regc 
+5985 20405995 call mouse_sensor_wr_seq 
+5986 da60489a arg mem_sensor_32xx_init ,regc 
+5987 20405995 call mouse_sensor_wr_seq 
+5988 58000943 setarg 0x0943 
+5989 204069e4 call twspi_write 
+598a da6048b4 arg mem_sensor_32xx_init_1 ,regc 
+598b 20205995 branch mouse_sensor_wr_seq 
+
+mouse_3204_3l_init_param:
+598c 70495702 jam p3204 ,mem_config_sensor_type 
+598d da604886 arg mem_sensor_3204_init ,regc 
+598e 20405995 call mouse_sensor_wr_seq 
+598f da60489a arg mem_sensor_32xx_init ,regc 
+5990 20405995 call mouse_sensor_wr_seq 
+5991 da6048b4 arg mem_sensor_32xx_init_1 ,regc 
+5992 20205995 branch mouse_sensor_wr_seq 
+
+mouse_3212_init_param:
+5993 70495703 jam p3212 ,mem_config_sensor_type 
+5994 da60487c arg mem_sensor_3212_init ,regc 
+
+mouse_sensor_wr_seq:
+5995 efe10013 ifetch 2 ,regc 
+5996 d840ffff arg 0xffff ,temp 
+5997 98467c00 isub temp ,null 
+5998 20628000 rtn zero 
+5999 204069e4 call twspi_write 
+599a 1a60a602 increase 2 ,regc 
+599b 20205995 branch mouse_sensor_wr_seq 
+
+mouse_ka8_init_param_check:
+599c 204059d8 call mouse_sensor_disable_wp 
+599d 58009a5b setarg 0x9a5b 
+599e 204069e4 call twspi_write 
+599f 5800000d setarg 0x0d 
+59a0 204069e5 call twspi_read 
+59a1 1fe67c12 sub pdata ,0x12 ,null 
+59a2 2022d9b0 branch mouse_ka8ul_init_param ,zero 
+59a3 1fe67c0a sub pdata ,0x0a ,null 
+59a4 2422d9b3 nbranch mouse_ka8hd_sensor_judge ,zero 
+59a5 5800000e setarg 0x0e 
+59a6 204069e5 call twspi_read 
+59a7 1fe67ce5 sub pdata ,0xe5 ,null 
+59a8 2422d94d nbranch mouse_init_sensor ,zero 
+59a9 58000010 setarg 0x10 
+59aa 204069e5 call twspi_read 
+59ab 1fe67ca5 sub pdata ,0xa5 ,null 
+59ac 2022d9b0 branch mouse_ka8ul_init_param ,zero 
+59ad 204059c0 call mouse_enable_ka8_sensor_wp 
+
+mouse_ka8_init_param:
+59ae 70495708 jam ka8 ,mem_config_sensor_type 
+59af 20600000 rtn 
+
+mouse_ka8ul_init_param:
+59b0 70495709 jam ka8_ul ,mem_config_sensor_type 
+59b1 da6048fc arg mem_sensor_ka8ul_init ,regc 
+59b2 20205995 branch mouse_sensor_wr_seq 
+
+mouse_ka8hd_sensor_judge:
+59b3 1fe67c10 sub pdata ,0x10 ,null 
+59b4 2422d94d nbranch mouse_init_sensor ,zero 
+59b5 5800000e setarg 0x0e 
+59b6 204069e5 call twspi_read 
+59b7 1fe67cc5 sub pdata ,0xc5 ,null 
+59b8 2422d94d nbranch mouse_init_sensor ,zero 
+59b9 58000010 setarg 0x10 
+59ba 204069e5 call twspi_read 
+59bb 1fe67c38 sub pdata ,0x38 ,null 
+59bc 2422d94d nbranch mouse_init_sensor ,zero 
+
+mouse_ka8hd_init_param:
+59bd 204059c0 call mouse_enable_ka8_sensor_wp 
+59be 7049570a jam ka8_hd ,mem_config_sensor_type 
+59bf 20600000 rtn 
+
+mouse_enable_ka8_sensor_wp:
+59c0 5800005b setarg 0x005b 
+59c1 204069e4 call twspi_write 
+59c2 202059d6 branch mouse_sensor_enable_wp 
+
+mouse_p6520_init_param:
+59c3 70495707 jam p6520 ,mem_config_sensor_type 
+59c4 da60493a arg mem_sensor_p6520_init ,regc 
+59c5 20205995 branch mouse_sensor_wr_seq 
+
+mouse_init_p3065:
+59c6 204059e7 call mouse_sensor_poweron 
+59c7 6fe0c85a fetch 1 ,mem_sensor_id2 
+59c8 c03859cd beq p3065_xy_id2 ,mouse_p3065xy_init_param 
+59c9 c00059cb beq p3065_id2 ,mouse_p3065_init_param 
+59ca 2020594d branch mouse_init_sensor 
+
+mouse_p3065_init_param:
+59cb 70495701 jam p3065 ,mem_config_sensor_type 
+59cc 20600000 rtn 
+
+mouse_p3065xy_init_param:
+59cd 70495704 jam p3065_xy ,mem_config_sensor_type 
+59ce 20600000 rtn 
+
+mouse_ka8g2_id2_judge:
+59cf 204059e7 call mouse_sensor_poweron 
+59d0 6fe0c85a fetch 1 ,mem_sensor_id2 
+59d1 c02cd9d3 beq pka8g2_id2 ,mouse_ka8g2_init_param 
+59d2 2020595f branch mouse_init_p32xx_id2_judge 
+
+mouse_ka8g2_init_param:
+59d3 7049570b jam ka8g2 ,mem_config_sensor_type 
+59d4 da60492a arg mem_sensor_ka8g2_init ,regc 
+59d5 20205995 branch mouse_sensor_wr_seq 
+
+mouse_sensor_enable_wp:
+59d6 58000009 setarg 0x0009 
+59d7 202069e4 branch twspi_write 
+
+mouse_sensor_disable_wp:
+59d8 58005a09 setarg 0x5a09 
+59d9 202069e4 branch twspi_write 
+
+mouse_sensor_reset:
+59da d8408006 arg 0x8006 ,temp 
+59db 6fe0c957 fetch 1 ,mem_config_sensor_type 
+59dc c085d9de bne ka8g2 ,mouse_sensor_reset_end 
+59dd d8409706 arg 0x9706 ,temp 
+
+mouse_sensor_reset_end:
+59de 18427e00 copy temp ,pdata 
+59df 204069e4 call twspi_write 
+59e0 20002ee0 nop 12000 
+59e1 20600000 rtn 
+
+mouse_sensor_poweron_init:
+59e2 da604946 arg mem_sensor_poweron_init ,regc 
+59e3 6fe0c957 fetch 1 ,mem_config_sensor_type 
+59e4 c1858000 rtnne ka8g2 
+59e5 da60494e arg mem_sensor_ka8g2_poweron_init ,regc 
+59e6 20600000 rtn 
+
+mouse_sensor_poweron:
+59e7 44c14010 bpatch patch10_2 ,mem_patch10 
+59e8 204055f6 call mouse_sensor_spi_init 
+59e9 204059da call mouse_sensor_reset 
+59ea 204059e2 call mouse_sensor_poweron_init 
+59eb 20405995 call mouse_sensor_wr_seq 
+59ec 20205747 branch mouse_setting_sensor_type 
+
+mouse_sensor_powerdown:
+59ed 44c1c010 bpatch patch10_3 ,mem_patch10 
+59ee 20405949 call mouse_init_sunt 
+59ef 204055f6 call mouse_sensor_spi_init 
+59f0 d8400806 arg 0x0806 ,temp 
+59f1 6fe0c957 fetch 1 ,mem_config_sensor_type 
+59f2 c085d9f4 bne ka8g2 ,mouse_sensor_powerdown_end 
+59f3 d8401f06 arg 0x1f06 ,temp 
+
+mouse_sensor_powerdown_end:
+59f4 18427e00 copy temp ,pdata 
+59f5 202069e4 branch twspi_write 
+
+mouse_check_sensor_data:
+59f6 6fe0c420 fetch 1 ,mem_spi_write_flash_sm 
+59f7 c1800000 rtnne flash_sm_no_buys 
+59f8 6fe0c957 fetch 1 ,mem_config_sensor_type 
+59f9 c0005a02 beq p3205 ,mouse_p32xx_sensor_motion 
+59fa c000da02 beq p3065 ,mouse_p32xx_sensor_motion 
+59fb c0045a02 beq ka8 ,mouse_p32xx_sensor_motion 
+59fc c0015a02 beq p3204 ,mouse_p32xx_sensor_motion 
+59fd c001da26 beq p3212 ,mouse_p3212_sensor_motion 
+59fe c0025a02 beq p3065_xy ,mouse_p32xx_sensor_motion 
+59ff c0035a4b beq p8009 ,mouse_p8009_sensor_motion 
+5a00 c005da44 beq ka8g2 ,mouse_pka8g2_sensor_motion 
+5a01 20205a02 branch mouse_p32xx_sensor_motion 
+
+mouse_p32xx_sensor_motion:
+5a02 20405a6d call mouse_clear_sensor_data 
+5a03 78547c00 disable user 
+5a04 6fe0c659 fetch 1 ,mem_sensor_motion_gpio 
+5a05 c07fda09 beq gpio_disable ,mouse_p32xx_sensor_motion_2 
+5a06 6848c659 fetcht 1 ,mem_sensor_motion_gpio 
+5a07 20406ee6 call gpio_get_bit 
+5a08 24608000 nrtn true 
+
+mouse_p32xx_sensor_motion_2:
+5a09 58000000 setarg pan_reg_pid_l 
+5a0a 204069e5 call twspi_read 
+5a0b c0985a1c bne p32xx_id1 ,mouse_p3065_judge 
+
+mouse_p32xx_sensor_motion_1:
+5a0c 58000002 setarg pan_reg_motion_staus 
+5a0d 204069e5 call twspi_read 
+5a0e c4038000 rtnbit0 7 
+5a0f 20405a84 call mouse_read_sensor_common 
+5a10 6fe0c847 fetch 1 ,mem_mouse_x 
+5a11 20405a7c call mouse_data_extsign 
+5a12 67e14847 store 2 ,mem_mouse_x 
+5a13 6fe0c849 fetch 1 ,mem_mouse_y 
+5a14 20405a7c call mouse_data_extsign 
+5a15 67e14849 store 2 ,mem_mouse_y 
+5a16 6fe0c958 fetch 1 ,mem_config_sensor_angle 
+5a17 c0005a1e beq mouse_6clk_angle ,mouse_motion32xx_6clk_direction_selection 
+5a18 c000da20 beq mouse_9clk_angle ,mouse_motion32xx_9clk_direction_selection 
+5a19 c0015a22 beq mouse_12clk_angle ,mouse_motion32xx_12clk_direction_selection 
+5a1a c001da24 beq mouse_3clk_angle ,mouse_motion32xx_3clk_direction_selection 
+5a1b 20600000 rtn 
+
+mouse_p3065_judge:
+5a1c c018da0c beq p3065_id1 ,mouse_p32xx_sensor_motion_1 
+5a1d 20205955 branch mouse_twspi_reset 
+
+mouse_motion32xx_6clk_direction_selection:
+5a1e 20405a56 call mouse_motion_6clk_direction_dispose 
+5a1f 20205a8b branch mouse_sensor_sdio_low 
+
+mouse_motion32xx_9clk_direction_selection:
+5a20 20405a5e call mouse_motion_9clk_direction_dispose 
+5a21 20205a8b branch mouse_sensor_sdio_low 
+
+mouse_motion32xx_12clk_direction_selection:
+5a22 20405a5a call mouse_motion_12clk_direction_dispose 
+5a23 20205a8b branch mouse_sensor_sdio_low 
+
+mouse_motion32xx_3clk_direction_selection:
+5a24 20405a66 call mouse_motion_3clk_direction_dispose 
+5a25 20205a8b branch mouse_sensor_sdio_low 
+
+mouse_p3212_sensor_motion:
+5a26 20405a6d call mouse_clear_sensor_data 
+5a27 6fe0c659 fetch 1 ,mem_sensor_motion_gpio 
+5a28 c07fda2c beq gpio_disable ,mouse_p3212_sensor_motion_1 
+5a29 6848c659 fetcht 1 ,mem_sensor_motion_gpio 
+5a2a 20406ee6 call gpio_get_bit 
+5a2b 24608000 nrtn true 
+
+mouse_p3212_sensor_motion_1:
+5a2c 58000000 setarg pan_reg_pid_l 
+5a2d 204069e5 call twspi_read 
+5a2e c0985955 bne p32xx_id1 ,mouse_twspi_reset 
+
+mouse_p3212_sensor_motion_2:
+5a2f 58000002 setarg pan_reg_motion_staus 
+5a30 204069e5 call twspi_read 
+5a31 c4038000 rtnbit0 7 
+5a32 20405a84 call mouse_read_sensor_common 
+5a33 20405a42 call mouse_read_3212sensor_xy_high 
+5a34 67e0c84d store 1 ,mem_mouse_xy_h 
+5a35 1ff1fe00 rshift4 pdata ,pdata 
+5a36 20405a80 call mouse_data_extsign_bit3 
+5a37 67e0c848 store 1 ,mem_mouse_x + 1 
+5a38 6fe0c84d fetch 1 ,mem_mouse_xy_h 
+5a39 1fe17e0f and pdata ,0x0f ,pdata 
+5a3a 20405a80 call mouse_data_extsign_bit3 
+5a3b 67e0c84a store 1 ,mem_mouse_y + 1 
+5a3c 6fe0c958 fetch 1 ,mem_config_sensor_angle 
+5a3d c0005a56 beq mouse_6clk_angle ,mouse_motion_6clk_direction_dispose 
+5a3e c000da5e beq mouse_9clk_angle ,mouse_motion_9clk_direction_dispose 
+5a3f c0015a5a beq mouse_12clk_angle ,mouse_motion_12clk_direction_dispose 
+5a40 c001da66 beq mouse_3clk_angle ,mouse_motion_3clk_direction_dispose 
+5a41 20600000 rtn 
+
+mouse_read_3212sensor_xy_high:
+5a42 58000012 setarg 0x12 
+5a43 202069e5 branch twspi_read 
+
+mouse_pka8g2_sensor_motion:
+5a44 20405a6d call mouse_clear_sensor_data 
+5a45 6fe0c659 fetch 1 ,mem_sensor_motion_gpio 
+5a46 c07fda4a beq gpio_disable ,mouse_pka8g2_sensor_motion_1 
+5a47 6848c659 fetcht 1 ,mem_sensor_motion_gpio 
+5a48 20406ee6 call gpio_get_bit 
+5a49 24608000 nrtn true 
+
+mouse_pka8g2_sensor_motion_1:
+5a4a 20205a2f branch mouse_p3212_sensor_motion_2 
+
+mouse_p8009_sensor_motion:
+5a4b 20405a6d call mouse_clear_sensor_data 
+5a4c 78547c00 disable user 
+5a4d 58000002 setarg pan_reg_motion_staus 
+5a4e 204069e5 call twspi_read 
+5a4f c4038000 rtnbit0 7 
+5a50 58000008 setarg pan_reg_opration_state 
+5a51 204069e5 call twspi_read 
+5a52 203a5a0f branch mouse_p32xx_sensor_motion_1 + 3 ,blank 
+5a53 58000000 setarg 0 
+5a54 67e34847 store 6 ,mem_mouse_x 
+5a55 20600000 rtn 
+
+mouse_motion_6clk_direction_dispose:
+5a56 6fe14847 fetch 2 ,mem_mouse_x 
+5a57 1fe67e00 sub pdata ,0 ,pdata 
+5a58 67e14847 store 2 ,mem_mouse_x 
+5a59 20207dba branch enable_user 
+
+mouse_motion_12clk_direction_dispose:
+5a5a 6fe14849 fetch 2 ,mem_mouse_y 
+5a5b 1fe67e00 sub pdata ,0 ,pdata 
+5a5c 67e14849 store 2 ,mem_mouse_y 
+5a5d 20207dba branch enable_user 
+
+mouse_motion_9clk_direction_dispose:
+5a5e 6fe14849 fetch 2 ,mem_mouse_y 
+5a5f 1fe67e00 sub pdata ,0 ,pdata 
+5a60 67e14849 store 2 ,mem_mouse_y 
+5a61 6fe14847 fetch 2 ,mem_mouse_x 
+5a62 1fe67e00 sub pdata ,0 ,pdata 
+5a63 67e14847 store 2 ,mem_mouse_x 
+5a64 20405a68 call mouse_sensor_data_swap_places 
+5a65 20207dba branch enable_user 
+
+mouse_motion_3clk_direction_dispose:
+5a66 20405a68 call mouse_sensor_data_swap_places 
+5a67 20207dba branch enable_user 
+
+mouse_sensor_data_swap_places:
+5a68 6fe14849 fetch 2 ,mem_mouse_y 
+5a69 68494847 fetcht 2 ,mem_mouse_x 
+5a6a 67e14847 store 2 ,mem_mouse_x 
+5a6b 60494849 storet 2 ,mem_mouse_y 
+5a6c 20600000 rtn 
+
+mouse_clear_sensor_data:
+5a6d 6fe0c860 fetch 1 ,mem_mouse_move_flag 
+5a6e 205a5a84 call mouse_read_sensor_common ,blank 
+5a6f 70486001 jam 1 ,mem_mouse_move_flag 
+5a70 20600000 rtn 
+
+mouse_clear_sensor_data_by_reset:
+5a71 70495601 jam 1 ,mem_mouse_clear_sensor_data_flag 
+5a72 204029c9 call le_set_config_more_data 
+
+mouse_init_sensor_reset:
+5a73 20205949 branch mouse_init_sunt 
+
+mouse_data_xy_release:
+5a74 6fe0c659 fetch 1 ,mem_sensor_motion_gpio 
+5a75 c1ff8000 rtnne gpio_disable 
+5a76 6fe0c77d fetch 1 ,mem_mouse_long_mult_flag 
+5a77 c1808000 rtnne 1 
+5a78 58000000 setarg 0 
+5a79 67e0c77d store 1 ,mem_mouse_long_mult_flag 
+5a7a 67e24847 store 4 ,mem_mouse_x 
+5a7b 20205a73 branch mouse_init_sensor_reset 
+
+mouse_data_extsign:
+5a7c c4038000 rtnbit0 7 
+5a7d d840ff00 arg 0xff00 ,temp 
+5a7e 9841fe00 ior temp ,pdata 
+5a7f 20600000 rtn 
+
+mouse_data_extsign_bit3:
+5a80 c4018000 rtnbit0 3 
+5a81 d84000f0 arg 0xf0 ,temp 
+5a82 9841fe00 ior temp ,pdata 
+5a83 20600000 rtn 
+
+mouse_read_sensor_common:
+5a84 dfe00003 arg pan_reg_delta_x ,pdata 
+5a85 204069e5 call twspi_read 
+5a86 67e14847 store 2 ,mem_mouse_x 
+5a87 dfe00004 arg pan_reg_delta_y ,pdata 
+5a88 204069e5 call twspi_read 
+5a89 67e14849 store 2 ,mem_mouse_y 
+5a8a 20600000 rtn 
+
+mouse_sensor_sdio_low:
+5a8b 6848c64d fetcht 1 ,mem_mouse_sensor_sdio_gpio 
+5a8c 20406ee6 call gpio_get_bit 
+5a8d 20608000 rtn true 
+5a8e 5800000a setarg 0x0a 
+5a8f 204069e5 call twspi_read 
+5a90 200003e8 nop 1000 
+5a91 20205a8b branch mouse_sensor_sdio_low 
+
+mouse_set_sdio_high:
+5a92 58008100 setarg 0x8100 
+5a93 202069e4 branch twspi_write 
+
+mouse_bluetooth_fast_conn_init:
+5a94 70478fff jam 0xff ,mem_mouse_bluetooth_fast_conn_flag 
+
+mouse_ble_fast_conn_init:
+5a95 7043f334 jam 0x34 ,mem_xrecord_mode 
+5a96 580f0f0f setarg 0x0f0f0f 
+5a97 67e1c2db store 3 ,mem_le_lap 
+5a98 67e1c2de store 3 ,mem_le_lap + 3 
+5a99 202054a9 branch mouse_start_reconnect 
+
+mouse_buletooth_fast_conn_end:
+5a9a 44c24010 bpatch patch10_4 ,mem_patch10 
+5a9b 20405c6f call mouse_select_reconn_device 
+5a9c 20405aa8 call mouse_bluetooth_fast_conn_disable 
+5a9d 6fe0c666 fetch 1 ,mem_device_flag 
+5a9e c000daa1 beq mode_bt_device1 ,mouse_device1_check_auto_discover 
+5a9f c0015aa3 beq mode_bt_device2 ,mouse_device2_check_auto_discover 
+5aa0 20600000 rtn 
+
+mouse_device1_check_auto_discover:
+5aa1 6fe34668 fetch 6 ,mem_device1_addr 
+5aa2 20205aa4 branch mouse_device_check_auto_discover 
+
+mouse_device2_check_auto_discover:
+5aa3 6fe34675 fetch 6 ,mem_device2_addr 
+
+mouse_device_check_auto_discover:
+5aa4 684b46e6 fetcht 6 ,mem_mouse_compare_addr 
+5aa5 98467c00 isub temp ,null 
+5aa6 2022dc1a branch mouse_start_discovery ,zero 
+5aa7 202054a0 branch mouse_start_reconnect_device 
+
+mouse_bluetooth_fast_conn_disable:
+5aa8 70478f5a jam 0x5a ,mem_mouse_bluetooth_fast_conn_flag 
+5aa9 20600000 rtn 
+
+mouse_stop_bluetooth_mode:
+5aaa 6fe144e9 fetch 2 ,mem_ui_state_map 
+5aab c284c31f bbit1 ui_state_ble_connected ,app_ble_disconnect 
+5aac 20205c39 branch mouse_stop_discovery 
+
+mouse_disconnect:
+5aad 58000000 setarg 0 
+5aae 67e14781 store 2 ,mem_mouse_no_data_timer 
+5aaf 6fe144e9 fetch 2 ,mem_ui_state_map 
+5ab0 c284c31f bbit1 ui_state_ble_connected ,app_ble_disconnect 
+5ab1 20600000 rtn 
+
+mouse_check_125hz:
+5ab2 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5ab3 c40d8000 rtnbit0 mouse_enable_bt_125hz 
+
+mouse_bluetooth_125hz:
+5ab4 24345aba nbranch mouse_bluetooth_125hz_clear ,user 
+5ab5 6fe0c959 fetch 1 ,mem_bluetooth_125hz_cnt 
+5ab6 1fe0fe01 increase 1 ,pdata 
+5ab7 1fe17e0f and_into 0x0f ,pdata 
+5ab8 67e0c959 store 1 ,mem_bluetooth_125hz_cnt 
+5ab9 247a0000 nrtn blank 
+
+mouse_bluetooth_125hz_clear:
+5aba 70495900 jam 0 ,mem_bluetooth_125hz_cnt 
+5abb 20207dbc branch disable_user 
+
+mouse_current_mult_update:
+5abc 6fe0c659 fetch 1 ,mem_sensor_motion_gpio 
+5abd c1ff8000 rtnne gpio_disable 
+5abe 7040c000 jam 0 ,mem_lpm_mult 
+5abf 70477e1e jam 30 ,mem_mouse_current_mult_timer 
+5ac0 20600000 rtn 
+
+mouse_priority_bb_event:
+5ac1 44c2c010 bpatch patch10_5 ,mem_patch10 
+5ac2 1a627e00 copy regc ,pdata 
+5ac3 c00a5ad0 beq bt_evt_le_connected ,mouse_le_bb_event_connected 
+5ac4 c00adae0 beq bt_evt_le_disconnected ,mouse_le_bb_disconnected 
+5ac5 c0085c15 beq bt_evt_button_long_pressed ,mouse_bb_event_discovery_btn 
+5ac6 c018daed beq bt_evt_le_pairing_success ,mouse_le_pairing_success 
+5ac7 c014daef beq bt_evt_le_enc_info ,mouse_le_enc_info 
+5ac8 c0195af1 beq bt_evt_le_start_enc ,mouse_le_ll_start_encryt 
+5ac9 c01f4329 beq bt_evt_le_pairing_complete ,app_ble_store_reconn_info 
+5aca c0205afc beq bt_evt_le_parse_conn_papa_update_rsp ,mouse_le_conn_param_update_rsp_recieved 
+5acb c01ce084 beq bt_evt_24g_pairing_complete ,mouse_24g_pairing_complete 
+5acc c01d6053 beq bt_evt_24g_attempt_fail ,mouse_24g_attempt_fail 
+5acd c01e6075 beq bt_evt_24g_attempt_success ,mouse_24g_attempt_success 
+5ace c0225b10 beq bt_evt_le_parse_conn_param_accepted ,mouse_le_parse_conn_param_accepted 
+5acf 20600000 rtn 
+
+mouse_le_bb_event_connected:
+5ad0 2040618e call mouse_device_poweron_led_config 
+5ad1 70477d00 jam 0 ,mem_mouse_long_mult_flag 
+5ad2 20405a73 call mouse_init_sensor_reset 
+5ad3 70479401 jam 1 ,mem_mouse_le_bb_connected_flag 
+5ad4 20406042 call mouse_24g_first_store_reconn_info 
+5ad5 6fe0c795 fetch 1 ,mem_mouse_le_reconnect_flag 
+5ad6 243a5ad8 nbranch mouse_le_bb_event_connected_next ,blank 
+5ad7 70479614 jam 0x14 ,mem_mouse_send_secutiry_request_timer 
+
+mouse_le_bb_event_connected_next:
+5ad8 6fe143f1 fetch app_disc_rsn_size ,mem_app_disconn_reason_flag 
+5ad9 793ffe00 set0 app_disc_by_button ,pdata 
+5ada 67e143f1 store app_disc_rsn_size ,mem_app_disconn_reason_flag 
+5adb 70484500 jam 0 ,mem_mouse_direct_timer 
+5adc 6fe147be fetch 2 ,mem_le_battery_level_updata_timer_init 
+5add 67e147c0 store 2 ,mem_le_battery_level_updata_timer 
+5ade 20405c0b call mouse_no_data_timer_init 
+5adf 20205c39 branch mouse_stop_discovery 
+
+mouse_le_bb_disconnected:
+5ae0 58000000 setarg 0 
+5ae1 67e147c0 store 2 ,mem_le_battery_level_updata_timer 
+5ae2 70479400 jam 0 ,mem_mouse_le_bb_connected_flag 
+5ae3 d8400006 arg le_interval_7_5ms ,temp 
+5ae4 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5ae5 c28ddae7 bbit1 mouse_enable_bt_125hz ,mouse_le_bb_disconnected_next 
+5ae6 d8400007 arg le_interval_8_75ms ,temp 
+
+mouse_le_bb_disconnected_next:
+5ae7 604942d3 storet 2 ,mem_le_interval_min 
+5ae8 604942d5 storet 2 ,mem_le_interval_min + 2 
+5ae9 7047c200 jam le_lpm_enable ,mem_mouse_le_conn_param_reject 
+5aea 70495600 jam 0 ,mem_mouse_clear_sensor_data_flag 
+5aeb 204029cb call le_clr_config_more_data 
+5aec 20205b76 branch mouse_bb_disconnected 
+
+mouse_le_pairing_success:
+5aed d8e00002 arg ll_pairing_success_flag ,queue 
+5aee 20205af8 branch mouse_le_enable_connect_flag 
+
+mouse_le_enc_info:
+
+mouse_updata_le_param:
+5aef 70066f12 jam bt_cmd_le_update_conn ,mem_fifo_temp 
+5af0 20207834 branch ui_ipc_send_cmd 
+
+mouse_le_ll_start_encryt:
+5af1 6fe0c795 fetch 1 ,mem_mouse_le_reconnect_flag 
+5af2 c000daf4 beq 1 ,mouse_le_ll_reconn_start_encryt 
+5af3 20205af6 branch mouse_le_ll_enable_start_enc_flag 
+
+mouse_le_ll_reconn_start_encryt:
+5af4 20405aef call mouse_updata_le_param 
+5af5 70484414 jam 20 ,mem_le_start_encrypt_timer 
+
+mouse_le_ll_enable_start_enc_flag:
+5af6 d8e00001 arg ll_start_enc_flag ,queue 
+5af7 20205af8 branch mouse_le_enable_connect_flag 
+
+mouse_le_enable_connect_flag:
+5af8 6fe0c843 fetch 1 ,mem_le_connect_status_flag 
+5af9 f9207e00 qset1 pdata 
+5afa 67e0c843 store 1 ,mem_le_connect_status_flag 
+5afb 20600000 rtn 
+
+mouse_le_conn_param_update_rsp_recieved:
+5afc 6fe1433c fetch 2 ,mem_le_l2cap_signaling_conn_param_update_rsp_result 
+5afd c1000000 rtneq ble_signaling_connect_parameter_update_accepted 
+5afe 6fe0816a fetch 1 ,mem_le_tsniff 
+5aff 1feb7e00 rshift2 pdata ,pdata 
+5b00 1fe67c0c sub pdata ,le_interval_15ms ,null 
+5b01 20610000 rtn positive 
+5b02 58000009 setarg le_interval_11_25ms 
+5b03 67e142d3 store 2 ,mem_le_interval_min 
+5b04 67e142d5 store 2 ,mem_le_interval_min + 2 
+5b05 20405aef call mouse_updata_le_param 
+
+mouse_le_conn_param_lpm_disable:
+5b06 7047c201 jam le_lpm_disable ,mem_mouse_le_conn_param_reject 
+5b07 20600000 rtn 
+
+mouse_le_bb_event_connect_complete:
+5b08 6fe0c795 fetch 1 ,mem_mouse_le_reconnect_flag 
+5b09 247a0000 nrtn blank 
+5b0a 6fe0c398 fetch 1 ,mem_le_att_handle 
+5b0b 1fe67e22 sub pdata ,34 ,pdata 
+5b0c 24628000 nrtn zero 
+5b0d 70484400 jam 0 ,mem_le_start_encrypt_timer 
+
+mouse_le_write_enable:
+5b0e d8e00000 arg write_req_enable_flag ,queue 
+5b0f 20205af8 branch mouse_le_enable_connect_flag 
+
+mouse_le_parse_conn_param_accepted:
+5b10 6fe081a2 fetch 1 ,mem_le_new_conninterval 
+5b11 1fe67c0c sub pdata ,le_interval_15ms ,null 
+5b12 24215b06 nbranch mouse_le_conn_param_lpm_disable ,positive 
+5b13 67e142d3 store 2 ,mem_le_interval_min 
+5b14 67e142d5 store 2 ,mem_le_interval_min + 2 
+5b15 6fe081a4 fetch 1 ,mem_le_new_connslavelatency 
+5b16 203a5b1d branch mouse_le_lpm_mult_reinit ,blank 
+5b17 6848c96b fetcht 1 ,mem_lpm_mult_init 
+5b18 98467c00 isub temp ,null 
+5b19 20215b1d branch mouse_le_lpm_mult_reinit ,positive 
+5b1a 6fe081a4 fetch 1 ,mem_le_new_connslavelatency 
+5b1b 67e0c0c0 store 1 ,mem_lpm_mult 
+5b1c 20205b1f branch mouse_le_conn_param_lpm_enable 
+
+mouse_le_lpm_mult_reinit:
+5b1d 6fe0c96b fetch 1 ,mem_lpm_mult_init 
+5b1e 67e0c0c0 store 1 ,mem_lpm_mult 
+
+mouse_le_conn_param_lpm_enable:
+5b1f 7047c200 jam le_lpm_enable ,mem_mouse_le_conn_param_reject 
+5b20 20600000 rtn 
+
+mouse_le_clean_connect_flag:
+5b21 70484300 jam 0 ,mem_le_connect_status_flag 
+5b22 20600000 rtn 
+
+mouse_le:
+5b23 44c34010 bpatch patch10_6 ,mem_patch10 
+5b24 20402a28 call le_fifo_check_nearly_full 
+5b25 247a0000 nrtn blank 
+5b26 6fe0c78f fetch 1 ,mem_mouse_bluetooth_fast_conn_flag 
+5b27 c07fdb2b beq 0xff ,mouse_le_next 
+5b28 6fe0c843 fetch 1 ,mem_le_connect_status_flag 
+5b29 1fe17e03 and pdata ,0x03 ,pdata 
+5b2a c1818000 rtnne 0x03 
+
+mouse_le_next:
+5b2b 6fe0c956 fetch 1 ,mem_mouse_clear_sensor_data_flag 
+5b2c 205a5a71 call mouse_clear_sensor_data_by_reset ,blank 
+5b2d 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5b2e c280db5b bbit1 mouse_24g_pairing_flag ,mouse_le_send_empty_packet 
+5b2f c2805b5b bbit1 mouse_select_device_flag ,mouse_le_send_empty_packet 
+5b30 c282db5b bbit1 mouse_bt_discovery_button_down_flag ,mouse_le_send_empty_packet 
+5b31 c2835b5b bbit1 mouse_bt_discovery_button_long_down_flag ,mouse_le_send_empty_packet 
+5b32 20405601 call mouse_motion 
+5b33 20405ab2 call mouse_check_125hz 
+5b34 24740000 nrtn user 
+5b35 20405abc call mouse_current_mult_update 
+5b36 20405a74 call mouse_data_xy_release 
+5b37 204056b1 call mouse_wheel_trigger 
+5b38 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5b39 c30b5b3c bbit0 mouse_enable_keyboard ,mouse_le_send_mouse_data 
+5b3a 6fe0c96c fetch 1 ,mem_customer_key 
+5b3b c000db3d beq 1 ,mouse_le_send_keyboard_package_data 
+
+mouse_le_send_mouse_data:
+5b3c 20205b5d branch mouse_fill_mouse_data_le 
+
+mouse_le_send_keyboard_package_data:
+5b3d 6fe0c96d fetch 1 ,mem_customer_data_trigger 
+5b3e 203a5b4d branch mouse_le_release_keyboard_data ,blank 
+5b3f 6fe4472b fetch 8 ,mem_customer_key_press + 1 
+
+mouse_fill_keyboard_package_data_le:
+5b40 67e40670 store 8 ,mem_pdatatemp 
+5b41 6fe0c72a fetch 1 ,mem_customer_key_press 
+5b42 c001db4f beq kb_multikey_report_id ,mouse_fill_multimedia_key_data_le 
+5b43 c0015b52 beq kb_system_conctrl_report_id ,mouse_fill_systemctrl_key_data_le 
+5b44 7047b408 jam 8 ,mem_le_data_len 
+5b45 684947b5 fetcht 2 ,mem_le_keyboard_handle 
+
+mouse_fill_data_le:
+5b46 6fe0c7b4 fetch 1 ,mem_le_data_len 
+5b47 1fe22200 copy pdata ,rega 
+5b48 20402dee call le_att_malloc_tx_notify 
+5b49 6848c7b4 fetcht 1 ,mem_le_data_len 
+5b4a 18427200 copy temp ,loopcnt 
+5b4b d8c00670 arg mem_pdatatemp ,contr 
+5b4c 20207cda branch memcpy 
+
+mouse_le_release_keyboard_data:
+5b4d 6fe44734 fetch 8 ,mem_customer_key_release + 1 
+5b4e 20205b40 branch mouse_fill_keyboard_package_data_le 
+
+mouse_fill_multimedia_key_data_le:
+5b4f 7047b403 jam 3 ,mem_le_data_len 
+5b50 684947b7 fetcht 2 ,mem_le_multimedia_handle 
+5b51 20205b46 branch mouse_fill_data_le 
+
+mouse_fill_systemctrl_key_data_le:
+5b52 7047b402 jam 2 ,mem_le_data_len 
+5b53 684947b9 fetcht 2 ,mem_le_systemctrl_handle 
+5b54 20205b46 branch mouse_fill_data_le 
+
+mouse_fill_battery_level_le:
+5b55 da200001 arg 1 ,rega 
+5b56 684947bb fetcht 2 ,mem_le_battery_level_handle 
+5b57 20402dee call le_att_malloc_tx_notify 
+5b58 6fe0c7bd fetch 1 ,mem_le_battery_level_percentage 
+5b59 e7e08005 istore 1 ,contw 
+5b5a 20600000 rtn 
+
+mouse_le_send_empty_packet:
+5b5b 58000000 setarg 0 
+5b5c 67e3c846 store 7 ,mem_mouse_key 
+
+mouse_fill_mouse_data_le:
+5b5d 7047b407 jam 7 ,mem_le_data_len 
+5b5e 6fe3c846 fetch 7 ,mem_mouse_key 
+5b5f 67e38670 store 7 ,mem_pdatatemp 
+5b60 6849439b fetcht 2 ,mem_le_notify_handle 
+5b61 20205b46 branch mouse_fill_data_le 
+
+mouse_check_51cmd_adv:
+5b62 70479500 jam 0 ,mem_mouse_le_reconnect_flag 
+5b63 6fe1c79a fetch 3 ,mem_le_adv_ind 
+5b64 67e1c34d store 3 ,mem_le_adv_data + 4 
+5b65 20405b6b call mouse_le_check_adv_flag 
+5b66 58000005 setarg adv_flag_bredr_not_supported | adv_flag_limited_discoverable 
+5b67 e7e08006 istore 1 ,contr 
+5b68 d8c047a0 arg mem_le_adv_swift_pair ,contr 
+5b69 20405b72 call mouse_le_adv_data_update 
+5b6a 20207870 branch check_51cmd_adv 
+
+mouse_le_check_adv_flag:
+5b6b da204349 arg mem_le_adv_data ,rega 
+
+mouse_le_check_adv_flag_loop:
+5b6c efe08011 ifetch 1 ,rega 
+5b6d 207a0000 rtn blank 
+5b6e 98c0a200 iadd contr ,rega 
+5b6f efe08006 ifetch 1 ,contr 
+5b70 c1008000 rtneq 0x01 
+5b71 20205b6c branch mouse_le_check_adv_flag_loop 
+
+mouse_le_adv_data_update:
+5b72 d8a04354 arg mem_le_adv_data + 11 ,contw 
+5b73 df200013 arg 19 ,loopcnt 
+5b74 20407cda call memcpy 
+5b75 20202969 branch le_modified_name_adv 
+
+mouse_bb_disconnected:
+5b76 20405b7b call mouse_bb_discon_clear_stack 
+5b77 6fe143ef fetch app_disc_rsn_size ,mem_app_disconn_reason 
+5b78 c283db81 bbit1 app_disc_ble ,mouse4_0_event_bb_disconn 
+5b79 c28042fc bbit1 app_disc_by_button ,app_disconn_reason_clear 
+5b7a 20205c1a branch mouse_start_discovery 
+
+mouse_bb_discon_clear_stack:
+5b7b 58000000 setarg 0 
+5b7c 67e4484f store 8 ,mem_wheel_tb_old_pinlevel 
+5b7d e7e20005 istore 4 ,contw 
+5b7e 70486000 jam 0 ,mem_mouse_move_flag 
+5b7f 70429a00 jam 0 ,mem_ltk_exists 
+5b80 20600000 rtn 
+
+mouse4_0_event_bb_disconn:
+5b81 20405b21 call mouse_le_clean_connect_flag 
+5b82 6fe143ef fetch app_disc_rsn_size ,mem_app_disconn_reason 
+5b83 c28042fc bbit1 app_disc_by_button ,app_disconn_reason_clear 
+5b84 202054cd branch mouse_app_enter_hibernate 
+
+mouse_bb_event_timer:
+5b85 44c3c010 bpatch patch10_7 ,mem_patch10 
+5b86 2040614d call mouse_low_voltage_led_timer 
+5b87 2040553d call mouse_adc_read 
+5b88 20406110 call mouse_logo_led_on_timer 
+5b89 204061b1 call mouse_led_multi_timer 
+5b8a 2040611e call mouse_dpi_led_blink_delay_timer 
+5b8b 2040328e call g24_pair_timeout_timer 
+5b8c 20403531 call g24_reconn_timeout_timer 
+5b8d 20405fdd call mouse_24g_long_sleep_param_update_timer 
+5b8e 2040572c call mouse_dpi_key_check_long_press 
+5b8f 20405b9b call mouse_bt_discovery_check 
+5b90 20405bab call mouse_commbination_key_process 
+5b91 20405bce call mouse_check_discovery_timeout_timer 
+5b92 20405bd3 call mouse_check_direct_timeout_timer 
+5b93 20405be1 call mouse_le_enable_att_list_timer 
+5b94 20405bee call mouse_le_battery_updata_timer 
+5b95 20405be4 call mouse_le_send_smp_security_request_timer 
+5b96 20405bfb call mouse_check_reconnect_delay_long_sleep 
+5b97 20405bfe call mouse_current_mult_update_timer 
+5b98 204056b6 call mouse_wheel_trigger_timer 
+5b99 20405c0e call mouse_store_information_delay_timer 
+5b9a 20205c05 branch mouse_check_no_data_timeout_timer 
+
+mouse_bt_discovery_check:
+5b9b 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5b9c c29bdb9e bbit1 mouse_enable_pb_button_long_press_disconvery ,mouse_bt_discovery_by_pb_button 
+5b9d 20600000 rtn 
+
+mouse_bt_discovery_by_pb_button:
+5b9e 6fe0c97f fetch 1 ,mem_select_device_button_statue 
+5b9f c1808000 rtnne pb_button_state_down 
+5ba0 da60497c arg mem_bt_discovery_count ,regc 
+5ba1 da405ba3 arg mouse_long_button_bt_discovery ,regb 
+5ba2 202042e0 branch timer_single_step 
+
+mouse_long_button_bt_discovery:
+5ba3 6fe0c666 fetch 1 ,mem_device_flag 
+5ba4 c1000000 rtneq mode_24g_device 
+5ba5 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5ba6 c3830000 rtnbit1 mouse_bt_discovery_button_long_down_flag 
+5ba7 d8e00006 arg mouse_bt_discovery_button_long_down_flag ,queue 
+5ba8 20405f00 call mouse_enable_function_flag 
+5ba9 204042d0 call app_evt_button_long_pressed 
+5baa 20205c15 branch mouse_bb_event_discovery_btn 
+
+mouse_commbination_key_process:
+5bab 6fe0c666 fetch 1 ,mem_device_flag 
+5bac c0005bb1 beq mode_24g_device ,mouse_24g_commbination_key_process 
+5bad 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5bae c41a8000 rtnbit0 mouse_enable_commbination_key_by_bt_discovery 
+5baf 6848c727 fetcht 1 ,mem_mouse_commbination_key_bt 
+5bb0 20205bb4 branch mouse_commbination_key_start 
+
+mouse_24g_commbination_key_process:
+5bb1 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5bb2 c4190000 rtnbit0 mouse_enable_commbination_key_by_24g_pairing 
+5bb3 6848c728 fetcht 1 ,mem_mouse_commbination_key_24g 
+
+mouse_commbination_key_start:
+5bb4 6048c97e storet 1 ,mem_mouse_commbination_key 
+5bb5 20405888 call mouse_check_key_gpio 
+5bb6 1fe17e07 and pdata ,0x07 ,pdata 
+5bb7 6848c97e fetcht 1 ,mem_mouse_commbination_key 
+5bb8 98467c00 isub temp ,null 
+5bb9 2022dbc0 branch mouse_commbination_key_down ,zero 
+
+mouse_commbination_key_up:
+5bba 6fe0c4eb fetch 1 ,mem_ui_button_timeout 
+5bbb 67e0c981 store 1 ,mem_combination_ui_button_count 
+5bbc 6fe0c980 fetch 1 ,mem_commbination_key_statue 
+5bbd c1000000 rtneq commbination_key_state_up 
+5bbe 70498000 jam commbination_key_state_up ,mem_commbination_key_statue 
+5bbf 20600000 rtn 
+
+mouse_commbination_key_down:
+5bc0 20405bc5 call mouse_combination_ui_timer 
+5bc1 6fe0c980 fetch 1 ,mem_commbination_key_statue 
+5bc2 c1008000 rtneq commbination_key_state_down 
+5bc3 70498001 jam commbination_key_state_down ,mem_commbination_key_statue 
+5bc4 20600000 rtn 
+
+mouse_combination_ui_timer:
+5bc5 da406047 arg mouse_24g_start_pair_mode ,regb 
+5bc6 da604981 arg mem_combination_ui_button_count ,regc 
+5bc7 6fe0c666 fetch 1 ,mem_device_flag 
+5bc8 c00042e0 beq mode_24g_device ,timer_single_step 
+5bc9 da405ba3 arg mouse_long_button_bt_discovery ,regb 
+5bca 204042e0 call timer_single_step 
+5bcb 6fe0c981 fetch 1 ,mem_combination_ui_button_count 
+5bcc c000def2 beq 1 ,mouse_bt_discovery_button_down_enable 
+5bcd 20600000 rtn 
+
+mouse_check_discovery_timeout_timer:
+5bce da604790 arg mem_mouse_discovery_timer ,regc 
+5bcf da405bd1 arg mouse_check_discovery_timeout ,regb 
+5bd0 202042e7 branch timer_single_step_2b 
+
+mouse_check_discovery_timeout:
+5bd1 20405c39 call mouse_stop_discovery 
+5bd2 202054cd branch mouse_app_enter_hibernate 
+
+mouse_check_direct_timeout_timer:
+5bd3 da604845 arg mem_mouse_direct_timer ,regc 
+5bd4 da405bd9 arg mouse_check_direct_timeout ,regb 
+5bd5 204042e0 call timer_single_step 
+5bd6 6fe0c845 fetch 1 ,mem_mouse_direct_timer 
+5bd7 c000c313 beq 1 ,app_ble_stop_direct_adv 
+5bd8 20600000 rtn 
+
+mouse_check_direct_timeout:
+5bd9 6fe0c78f fetch 1 ,mem_mouse_bluetooth_fast_conn_flag 
+5bda c07fda9a beq 0xff ,mouse_buletooth_fast_conn_end 
+5bdb 6fe0c77f fetch 1 ,mem_reconn_times 
+5bdc 243a5f1b nbranch mouse_polling_device ,blank 
+5bdd 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5bde c299dc1a bbit1 mouse_enable_bt_reconnect_timeout_enter_discovery ,mouse_start_discovery 
+5bdf c29f603f bbit1 mouse_enable_24g_first_auto_pairing ,mouse_24g_first_bb_event_reconn_timeout 
+5be0 202054cd branch mouse_app_enter_hibernate 
+
+mouse_le_enable_att_list_timer:
+5be1 da604844 arg mem_le_start_encrypt_timer ,regc 
+5be2 da405b0e arg mouse_le_write_enable ,regb 
+5be3 202042e0 branch timer_single_step 
+
+mouse_le_send_smp_security_request_timer:
+5be4 6fe0c794 fetch 1 ,mem_mouse_le_bb_connected_flag 
+5be5 207a0000 rtn blank 
+5be6 da604796 arg mem_mouse_send_secutiry_request_timer ,regc 
+5be7 da405be9 arg mouse_le_pairing_sm_start_check ,regb 
+5be8 202042e0 branch timer_single_step 
+
+mouse_le_pairing_sm_start_check:
+5be9 6fe0c795 fetch 1 ,mem_mouse_le_reconnect_flag 
+5bea 247a0000 nrtn blank 
+5beb 6fe0c2fc fetch 1 ,mem_le_pairing_state 
+5bec c1800000 rtnne flag_le_pairing_null 
+5bed 20202fcd branch le_pairing_sm_start 
+
+mouse_le_battery_updata_timer:
+5bee 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5bef c39d8000 rtnbit1 mouse_enable_le_battery_service_cancel 
+5bf0 da6047c0 arg mem_le_battery_level_updata_timer ,regc 
+5bf1 da405bf3 arg mouse_le_battery_level_updata ,regb 
+5bf2 202042e0 branch timer_single_step 
+
+mouse_le_battery_level_updata:
+5bf3 6fe147be fetch 2 ,mem_le_battery_level_updata_timer_init 
+5bf4 67e147c0 store 2 ,mem_le_battery_level_updata_timer 
+5bf5 20205b55 branch mouse_fill_battery_level_le 
+
+mouse_le_enable_att_list:
+5bf6 6fe0c843 fetch 1 ,mem_le_connect_status_flag 
+5bf7 c3810000 rtnbit1 ll_pairing_success_flag 
+5bf8 20405aef call mouse_updata_le_param 
+5bf9 d8e00000 arg write_req_enable_flag ,queue 
+5bfa 20205af8 branch mouse_le_enable_connect_flag 
+
+mouse_check_reconnect_delay_long_sleep:
+5bfb da604792 arg mem_mouse_bluetooth_reconnect_timeout ,regc 
+5bfc da4054cd arg mouse_app_enter_hibernate ,regb 
+5bfd 202042e0 branch timer_single_step 
+
+mouse_current_mult_update_timer:
+5bfe da60477e arg mem_mouse_current_mult_timer ,regc 
+5bff da405c01 arg mouse_current_mult_reinit ,regb 
+5c00 202042e0 branch timer_single_step 
+
+mouse_current_mult_reinit:
+5c01 6fe0c96b fetch 1 ,mem_lpm_mult_init 
+5c02 67e0c0c0 store 1 ,mem_lpm_mult 
+5c03 70477d01 jam 1 ,mem_mouse_long_mult_flag 
+5c04 20600000 rtn 
+
+mouse_check_no_data_timeout_timer:
+5c05 da604781 arg mem_mouse_no_data_timer ,regc 
+5c06 da405c08 arg mouse_check_no_data_timeout ,regb 
+5c07 202042e7 branch timer_single_step_2b 
+
+mouse_check_no_data_timeout:
+5c08 6fe0c666 fetch 1 ,mem_device_flag 
+5c09 c0005ff2 beq mode_24g_device ,mouse_24g_hibernate_set 
+5c0a 20205aad branch mouse_disconnect 
+
+mouse_no_data_timer_init:
+5c0b 6fe14725 fetch 2 ,mem_mouse_no_data_timeout 
+5c0c 67e14781 store 2 ,mem_mouse_no_data_timer 
+5c0d 20600000 rtn 
+
+mouse_store_information_delay_timer:
+5c0e da6046f3 arg mem_store_information_delay_timer ,regc 
+5c0f da405c11 arg mouse_store_device_info_check ,regb 
+5c10 202042e0 branch timer_single_step 
+
+mouse_store_device_info_check:
+5c11 20405ca6 call mouse_store_device_info 
+5c12 6fe0c793 fetch 1 ,mem_mouse_need_soft_reset 
+5c13 243a5ed1 nbranch mouse_soft_reset ,blank 
+5c14 20600000 rtn 
+
+mouse_bb_event_discovery_btn:
+5c15 280ffe26 isolate1 mark_24g ,mark 
+5c16 2040e018 call mouse_24g_stop ,true 
+5c17 20405aad call mouse_disconnect 
+5c18 20405b21 call mouse_le_clean_connect_flag 
+5c19 20205c1a branch mouse_start_discovery 
+
+mouse_start_discovery:
+5c1a 44c44011 bpatch patch11_0 ,mem_patch11 
+5c1b 204061ab call mouse_device_discovery_led_config 
+5c1c 6fe144e9 fetch 2 ,mem_ui_state_map 
+5c1d 2feffe0b isolate1 ui_state_ble_adv ,pdata 
+5c1e 2040dc3e call mouse_stop_le_adv ,true 
+5c1f 20405aa8 call mouse_bluetooth_fast_conn_disable 
+5c20 6fe144e9 fetch 2 ,mem_ui_state_map 
+5c21 c285dc2a bbit1 ui_state_ble_adv ,mouse_start_discovery_norandom 
+5c22 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5c23 c3045c2a bbit0 mouse_enable_ble_random_addre ,mouse_start_discovery_norandom 
+5c24 68494695 fetcht 2 ,mem_random_addr_increase_count 
+5c25 18408401 increase 1 ,temp 
+5c26 60494695 storet 2 ,mem_random_addr_increase_count 
+5c27 604942dc storet 2 ,mem_le_lap + 1 
+5c28 180a7e00 random pdata 
+5c29 67e0c2db store 1 ,mem_le_lap 
+
+mouse_start_discovery_norandom:
+5c2a 6fe1c797 fetch 3 ,mem_mouse_le_lap_temp 
+5c2b 67e1c2de store 3 ,mem_le_lap + 3 
+5c2c 2040432d call app_lpm_mult_disable 
+5c2d 6fe14638 fetch 2 ,mem_mouse_discovery_timeout 
+5c2e 67e14790 store 2 ,mem_mouse_discovery_timer 
+5c2f 58000000 setarg 0 
+5c30 67e14781 store 2 ,mem_mouse_no_data_timer 
+5c31 67e147c0 store 2 ,mem_le_battery_level_updata_timer 
+5c32 67e0c845 store 1 ,mem_mouse_direct_timer 
+5c33 67e0c792 store 1 ,mem_mouse_bluetooth_reconnect_timeout 
+5c34 67e0c956 store 1 ,mem_mouse_clear_sensor_data_flag 
+5c35 d8e00002 arg mouse_store_eeprom_flag ,queue 
+5c36 20405f00 call mouse_enable_function_flag 
+5c37 20405ef4 call mouse_bt_discovery_button_down_disable 
+5c38 20205b62 branch mouse_check_51cmd_adv 
+
+mouse_stop_discovery:
+5c39 44c4c011 bpatch patch11_1 ,mem_patch11 
+5c3a d8e00006 arg mouse_bt_discovery_button_long_down_flag ,queue 
+5c3b 20405f04 call mouse_disable_function_flag 
+5c3c 70479200 jam 0 ,mem_mouse_bluetooth_reconnect_timeout 
+5c3d 20205c3e branch mouse_stop_le_adv 
+
+mouse_stop_le_adv:
+5c3e 58000000 setarg 0 
+5c3f 67e0c845 store 1 ,mem_mouse_direct_timer 
+5c40 67e14790 store 2 ,mem_mouse_discovery_timer 
+5c41 20207876 branch check_51cmd_stop_adv 
+
+mouse_store_remote_bdaddr:
+5c42 44c54011 bpatch patch11_2 ,mem_patch11 
+5c43 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5c44 c4010000 rtnbit0 mouse_store_eeprom_flag 
+5c45 d8e00002 arg mouse_store_eeprom_flag ,queue 
+5c46 20405f04 call mouse_disable_function_flag 
+5c47 20405c4a call mouse_check_device_addr 
+
+mouse_unplug_clean_bdaddr:
+5c48 20405c59 call mouse_before_store_reconn_info 
+5c49 20205ca3 branch mouse_store_device_info_delay 
+
+mouse_check_device_addr:
+5c4a 6fe08032 fetch 1 ,mem_record_bt_mode 
+5c4b c01a5c4d beq rec_4_mode ,mouse_check_le_device_addr 
+5c4c 20600000 rtn 
+
+mouse_check_le_device_addr:
+5c4d 67e0c95a store 1 ,mem_device_addr_temp 
+5c4e 6fe30178 fetch 6 ,mem_le_plap 
+
+mouse_check_bt_device_addr_common:
+5c4f 67e3495b store 6 ,mem_device_addr_temp + 1 
+5c50 6fe3c95a fetch 7 ,mem_device_addr_temp 
+5c51 d8c04667 arg mem_device1_type ,contr 
+5c52 df200003 arg 3 ,loopcnt 
+
+mouse_check_device_addr_end:
+5c53 e8438006 ifetcht 7 ,contr 
+5c54 98467c00 isub temp ,null 
+5c55 2022dc69 branch mouse_clean_addr ,zero 
+5c56 18c08c16 increase 22 ,contr 
+5c57 c2005c53 loop mouse_check_device_addr_end 
+5c58 20600000 rtn 
+
+mouse_before_store_reconn_info:
+5c59 da204667 arg mem_device1_type ,rega 
+5c5a 6fe0c666 fetch 1 ,mem_device_flag 
+5c5b 1fe0ffff increase -1 ,pdata 
+5c5c 1feffe1d mul32 pdata ,29 ,pdata 
+5c5d 9a20a200 iadd rega ,rega 
+5c5e 6fe08032 fetch 1 ,mem_record_bt_mode 
+5c5f e7e08011 istore 1 ,rega 
+5c60 c01a5c62 beq rec_4_mode ,mouse_store_le_device 
+5c61 20600000 rtn 
+
+mouse_store_le_device:
+5c62 6fe30178 fetch 6 ,mem_le_plap 
+5c63 e7e30005 istore 6 ,contw 
+5c64 d8c0428a arg mem_le_ltk ,contr 
+5c65 20407c8f call memcpy16 
+5c66 6fe342db fetch 6 ,mem_le_lap 
+5c67 e7e30005 istore 6 ,contw 
+5c68 20600000 rtn 
+
+mouse_clean_addr:
+5c69 18c08dfa increase -6 ,contr 
+5c6a 18c20a00 copy contr ,contw 
+5c6b 684b495b fetcht 6 ,mem_device_addr_temp + 1 
+5c6c 18408403 increase 3 ,temp 
+5c6d e0430005 istoret 6 ,contw 
+5c6e 20600000 rtn 
+
+mouse_select_reconn_device:
+5c6f da204667 arg mem_device1_type ,rega 
+5c70 6fe0c666 fetch 1 ,mem_device_flag 
+5c71 c1000000 rtneq mode_24g_device 
+5c72 1fe0ffff increase -1 ,pdata 
+5c73 1feffe1d mul32 pdata ,29 ,pdata 
+5c74 9a20a200 iadd rega ,rega 
+5c75 efe08011 ifetch 1 ,rega 
+5c76 67e0c3f3 store 1 ,mem_xrecord_mode 
+5c77 c01a5c79 beq rec_4_mode ,mouse_load_le_device 
+5c78 20600000 rtn 
+
+mouse_load_le_device:
+5c79 efe30006 ifetch 6 ,contr 
+
+mouse_load_le_device_end:
+5c7a 67e34116 store 6 ,mem_hci_plap 
+5c7b d8a0428a arg mem_le_ltk ,contw 
+5c7c 20407c8f call memcpy16 
+5c7d efe30006 ifetch 6 ,contr 
+5c7e 67e342db store 6 ,mem_le_lap 
+5c7f 20600000 rtn 
+
+mouse_app_initflag_check:
+5c80 44c5c011 bpatch patch11_3 ,mem_patch11 
+5c81 6fe1468e fetch 2 ,mem_store_flag 
+5c82 d840aa55 arg eeprom_init_flag ,temp 
+5c83 98467c00 isub temp ,null 
+5c84 2022dc8f branch mouse_load_device_info ,zero 
+
+mouse_app_initflag_check_next:
+5c85 6049468e storet 2 ,mem_store_flag 
+5c86 20405c9c call mouse_ble_init_address 
+5c87 6fe0c9a1 fetch 1 ,mem_device_flag_temp 
+5c88 67e0c666 store 1 ,mem_device_flag 
+5c89 6fe245e4 fetch 4 ,mem_24g_fast_conn_addr 
+5c8a 67e245e8 store 4 ,mem_24g_receiver_addr 
+5c8b 67e2458f store 4 ,mem_24g_addr 
+
+mouse_load_default_dpi:
+5c8c 6fe0c651 fetch 1 ,mem_config_sensor_dpi 
+5c8d 67e0c690 store 1 ,mem_mouse_dpi 
+5c8e 20600000 rtn 
+
+mouse_load_device_info:
+5c8f 20405c94 call mouse_otp_load_dpi 
+5c90 6fe24691 fetch 4 ,mem_mouse_24g_addr 
+5c91 67e245e8 store 4 ,mem_24g_receiver_addr 
+5c92 67e2458f store 4 ,mem_24g_addr 
+5c93 20600000 rtn 
+
+mouse_otp_load_dpi:
+5c94 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5c95 c4078000 rtnbit0 mouse_enable_load_and_store_dpi 
+5c96 6fe149fa fetch 2 ,mem_otp_offset_dpi 
+5c97 1fe22400 copy pdata ,regb 
+5c98 20405e51 call mouse_read_otp_dpi_common 
+5c99 6fe0c9d4 fetch 1 ,mem_mouse_dpi_temp 
+5c9a 205a5c8c call mouse_load_default_dpi ,blank 
+5c9b 20600000 rtn 
+
+mouse_ble_init_address:
+5c9c 6fe342db fetch 6 ,mem_le_lap 
+5c9d 67e3466e store 6 ,mem_device1_locall_addr 
+5c9e 1fe0ff00 add pdata ,0x0100 ,pdata 
+5c9f 67e3467b store 6 ,mem_device2_locall_addr 
+5ca0 1fe0ff00 add pdata ,0x0100 ,pdata 
+5ca1 67e34688 store 6 ,mem_device3_locall_addr 
+5ca2 20600000 rtn 
+
+mouse_store_device_info_delay:
+5ca3 6fe0c6f4 fetch 1 ,mem_store_information_delay_timer_init 
+5ca4 67e0c6f3 store 1 ,mem_store_information_delay_timer 
+5ca5 20600000 rtn 
+
+mouse_store_device_info:
+5ca6 44c64011 bpatch patch11_4 ,mem_patch11 
+5ca7 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5ca8 c289dcb1 bbit1 mouse_enable_eeprom ,mouse_store_eeprom_device_info 
+5ca9 c2895cb9 bbit1 mouse_enable_flash ,mouse_store_flash_device_info 
+5caa c28a5cc0 bbit1 mouse_enable_otp ,mouse_store_otp_device_info 
+5cab 20600000 rtn 
+
+mouse_store_dpi_info_check:
+5cac 44c6c011 bpatch patch11_5 ,mem_patch11 
+5cad 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5cae c289dcb5 bbit1 mouse_enable_eeprom ,mouse_store_eerpom_dpi 
+5caf c28a5d3c bbit1 mouse_enable_otp ,mouse_store_otp_dpi 
+5cb0 20600000 rtn 
+
+mouse_store_eeprom_device_info:
+5cb1 d8400080 arg 128 ,temp 
+5cb2 da204666 arg mem_device_flag ,rega 
+5cb3 da400000 arg mouse_info_eeprom_offect ,regb 
+5cb4 20206cd3 branch iicd_write_protect_eep_data 
+
+mouse_store_eerpom_dpi:
+5cb5 d8400001 arg 1 ,temp 
+5cb6 da204690 arg mem_mouse_dpi ,rega 
+5cb7 da40005a arg mouse_dpi_eeprom_offect ,regb 
+5cb8 20206cd3 branch iicd_write_protect_eep_data 
+
+mouse_store_flash_device_info:
+5cb9 20406c20 call spid_init_flash 
+5cba 20405d7b call mouse_spid_flash_release_form_powerdown 
+5cbb 20405d90 call mouse_flash_erase_sector 
+5cbc 20405d75 call mouse_information_flash_parameters 
+5cbd 20405d93 call mouse_spid_write_flash 
+5cbe 20405d82 call mouse_spid_flash_powerdown 
+5cbf 202055f6 branch mouse_sensor_spi_init 
+
+mouse_store_otp_device_info:
+5cc0 20405cc3 call mouse_write_otp_device_flag 
+5cc1 20405ce5 call mouse_write_otp_device_info 
+5cc2 20205d26 branch mouse_write_otp_le_addr_increase_count_info 
+
+mouse_write_otp_device_flag:
+5cc3 6a4149e2 fetchr regb ,2 ,mem_otp_offset_device_flag 
+5cc4 1a422600 copy regb ,regc 
+
+mouse_write_otp_device_flag_loop:
+5cc5 20405dc0 call mouse_read_otp_device_flag_common 
+5cc6 6fe0c9a1 fetch 1 ,mem_device_flag_temp 
+5cc7 203a5ccf branch mouse_device_flag_store ,blank 
+5cc8 67e0c9a0 store 1 ,mem_device_flag_last 
+5cc9 1a60a601 increase 1 ,regc 
+5cca 6fe149e4 fetch 2 ,mem_otp_offset_device_flag_end 
+5ccb 9a667c00 isub regc ,null 
+5ccc 24610000 nrtn positive 
+5ccd 1a622400 copy regc ,regb 
+5cce 20205cc5 branch mouse_write_otp_device_flag_loop 
+
+mouse_device_flag_store:
+5ccf 6fe0c9a0 fetch 1 ,mem_device_flag_last 
+5cd0 1fe17ef0 and pdata ,0xf0 ,pdata 
+5cd1 203a5cd8 branch mouse_device_flag_store_check ,blank 
+5cd2 6fe0c666 fetch 1 ,mem_device_flag 
+5cd3 67e0c9a2 store 1 ,mem_device_flag_value 
+
+mouse_devoce_flag_store_end:
+5cd4 df200001 arg 1 ,loopcnt 
+5cd5 1a622400 copy regc ,regb 
+5cd6 da2049a2 arg mem_device_flag_value ,rega 
+5cd7 20206b45 branch otp_write 
+
+mouse_device_flag_store_check:
+5cd8 6fe0c9a0 fetch 1 ,mem_device_flag_last 
+5cd9 6848c666 fetcht 1 ,mem_device_flag 
+5cda 98467c00 isub temp ,null 
+5cdb 20628000 rtn zero 
+5cdc 18520400 lshift4 temp ,temp 
+5cdd 9840fe00 iadd temp ,pdata 
+5cde 67e0c9a2 store 1 ,mem_device_flag_value 
+5cdf 1a627e00 copy regc ,pdata 
+5ce0 684949e2 fetcht 2 ,mem_otp_offset_device_flag 
+5ce1 98467c00 isub temp ,null 
+5ce2 2022dcd4 branch mouse_devoce_flag_store_end ,zero 
+5ce3 1a60a7ff increase -1 ,regc 
+5ce4 20205cd4 branch mouse_devoce_flag_store_end 
+
+mouse_write_otp_device_info:
+5ce5 6fe0c666 fetch 1 ,mem_device_flag 
+5ce6 c0005cea beq mode_24g_device ,mouse_write_otp_24g_addr 
+5ce7 c000dcfe beq mode_bt_device1 ,mouse_write_otp_le_device1 
+5ce8 c0015d12 beq mode_bt_device2 ,mouse_write_otp_le_device2 
+5ce9 20600000 rtn 
+
+mouse_write_otp_24g_addr:
+5cea 6a4149e6 fetchr regb ,2 ,mem_otp_offset_24g_addr 
+5ceb 1a422600 copy regb ,regc 
+
+mouse_otp_store_24g_addr_loop:
+5cec 20405e29 call mouse_read_otp_24g_addr_common 
+5ced 6fe249da fetch 4 ,mem_mouse_24g_addr_temp 
+5cee 203a5cf6 branch mouse_24g_addr_store ,blank 
+5cef 67e249d6 store 4 ,mem_mouse_24g_addr_last 
+5cf0 1a60a604 increase 4 ,regc 
+5cf1 6fe149e8 fetch 2 ,mem_otp_offset_24g_addr_end 
+5cf2 9a667c00 isub regc ,null 
+5cf3 24610000 nrtn positive 
+5cf4 1a622400 copy regc ,regb 
+5cf5 20205cec branch mouse_otp_store_24g_addr_loop 
+
+mouse_24g_addr_store:
+5cf6 6fe249d6 fetch 4 ,mem_mouse_24g_addr_last 
+5cf7 684a4691 fetcht 4 ,mem_mouse_24g_addr 
+5cf8 98467c00 isub temp ,null 
+5cf9 20628000 rtn zero 
+5cfa df200004 arg 4 ,loopcnt 
+5cfb da204691 arg mem_mouse_24g_addr ,rega 
+5cfc 1a622400 copy regc ,regb 
+5cfd 20206b45 branch otp_write 
+
+mouse_write_otp_le_device1:
+5cfe 6a4149ea fetchr regb ,2 ,mem_otp_offset_le_addr1 
+5cff 1a422600 copy regb ,regc 
+
+mouse_otp_store_le_addr1_loop:
+5d00 20405de1 call mouse_read_otp_le_addr1_common 
+5d01 6fe349a9 fetch 6 ,mem_mouse_le_addr1_temp 
+5d02 203a5d0a branch mouse_le_addr1_store ,blank 
+5d03 67e349a3 store 6 ,mem_mouse_le_addr1_last 
+5d04 1a60a606 increase 6 ,regc 
+5d05 6fe149ec fetch 2 ,mem_otp_offset_le_addr1_end 
+5d06 9a667c00 isub regc ,null 
+5d07 24610000 nrtn positive 
+5d08 1a622400 copy regc ,regb 
+5d09 20205d00 branch mouse_otp_store_le_addr1_loop 
+
+mouse_le_addr1_store:
+5d0a 6fe349a3 fetch 6 ,mem_mouse_le_addr1_last 
+5d0b 684b4668 fetcht 6 ,mem_device1_addr 
+5d0c 98467c00 isub temp ,null 
+5d0d 20628000 rtn zero 
+5d0e df200006 arg 6 ,loopcnt 
+5d0f da204668 arg mem_device1_addr ,rega 
+5d10 1a622400 copy regc ,regb 
+5d11 20206b45 branch otp_write 
+
+mouse_write_otp_le_device2:
+5d12 6a4149f2 fetchr regb ,2 ,mem_otp_offset_le_addr2 
+5d13 1a422600 copy regb ,regc 
+
+mouse_otp_store_le_addr2_loop:
+5d14 20405e05 call mouse_read_otp_le_addr2_common 
+5d15 6fe349c1 fetch 6 ,mem_mouse_le_addr2_temp 
+5d16 203a5d1e branch mouse_le_addr2_store ,blank 
+5d17 67e349bb store 6 ,mem_mouse_le_addr2_last 
+5d18 1a60a606 increase 6 ,regc 
+5d19 6fe149f4 fetch 2 ,mem_otp_offset_le_addr2_end 
+5d1a 9a667c00 isub regc ,null 
+5d1b 24610000 nrtn positive 
+5d1c 1a622400 copy regc ,regb 
+5d1d 20205d14 branch mouse_otp_store_le_addr2_loop 
+
+mouse_le_addr2_store:
+5d1e 6fe349bb fetch 6 ,mem_mouse_le_addr2_last 
+5d1f 684b4675 fetcht 6 ,mem_device2_addr 
+5d20 98467c00 isub temp ,null 
+5d21 20628000 rtn zero 
+5d22 df200006 arg 6 ,loopcnt 
+5d23 da204675 arg mem_device2_addr ,rega 
+5d24 1a622400 copy regc ,regb 
+5d25 20206b45 branch otp_write 
+
+mouse_write_otp_le_addr_increase_count_info:
+5d26 6fe0c666 fetch 1 ,mem_device_flag 
+5d27 c1000000 rtneq mode_24g_device 
+5d28 6a4149fe fetchr regb ,2 ,mem_otp_offset_le_addr_increase_count 
+5d29 1a422600 copy regb ,regc 
+
+mouse_otp_store_le_addr_increase_count_loop:
+5d2a 20405e3d call mouse_read_otp_le_addr_increase_count_common 
+5d2b 6fe149e0 fetch 2 ,mem_random_addr_increase_count_temp 
+5d2c 203a5d34 branch mouse_le_addr_increase_count_store ,blank 
+5d2d 67e149de store 2 ,mem_random_addr_increase_count_last 
+5d2e 1a60a602 increase 2 ,regc 
+5d2f 6fe14a00 fetch 2 ,mem_otp_offset_le_addr_increase_count_end 
+5d30 9a667c00 isub regc ,null 
+5d31 24610000 nrtn positive 
+5d32 1a622400 copy regc ,regb 
+5d33 20205d2a branch mouse_otp_store_le_addr_increase_count_loop 
+
+mouse_le_addr_increase_count_store:
+5d34 6fe149de fetch 2 ,mem_random_addr_increase_count_last 
+5d35 68494695 fetcht 2 ,mem_random_addr_increase_count 
+5d36 98467c00 isub temp ,null 
+5d37 20628000 rtn zero 
+5d38 df200002 arg 2 ,loopcnt 
+5d39 da204695 arg mem_random_addr_increase_count ,rega 
+5d3a 1a622400 copy regc ,regb 
+5d3b 20206b45 branch otp_write 
+
+mouse_store_otp_dpi:
+5d3c 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5d3d c4078000 rtnbit0 mouse_enable_load_and_store_dpi 
+5d3e 6a4149fa fetchr regb ,2 ,mem_otp_offset_dpi 
+5d3f 1a422600 copy regb ,regc 
+
+mouse_otp_store_dpi_loop:
+5d40 20405e51 call mouse_read_otp_dpi_common 
+5d41 6fe0c9d4 fetch 1 ,mem_mouse_dpi_temp 
+5d42 203a5d4a branch mouse_otp_dpi_store ,blank 
+5d43 67e0c9d3 store 1 ,mem_mouse_dpi_last 
+5d44 1a60a601 increase 1 ,regc 
+5d45 6fe149fc fetch 2 ,mem_otp_offset_dpi_end 
+5d46 9a667c00 isub regc ,null 
+5d47 24610000 nrtn positive 
+5d48 1a622400 copy regc ,regb 
+5d49 20205d40 branch mouse_otp_store_dpi_loop 
+
+mouse_otp_dpi_store:
+5d4a 6fe0c9d3 fetch 1 ,mem_mouse_dpi_last 
+5d4b 1fe17ef0 and pdata ,0xf0 ,pdata 
+5d4c 203a5d53 branch mouse_dpi_store_last ,blank 
+5d4d 6fe0c690 fetch 1 ,mem_mouse_dpi 
+5d4e 67e0c9d5 store 1 ,mem_mouse_otp_dpi_value 
+
+mouse_dpi_store_end:
+5d4f df200001 arg 1 ,loopcnt 
+5d50 1a622400 copy regc ,regb 
+5d51 da2049d5 arg mem_mouse_otp_dpi_value ,rega 
+5d52 20206b45 branch otp_write 
+
+mouse_dpi_store_last:
+5d53 6fe0c9d3 fetch 1 ,mem_mouse_dpi_last 
+5d54 6848c690 fetcht 1 ,mem_mouse_dpi 
+5d55 98467c00 isub temp ,null 
+5d56 20628000 rtn zero 
+5d57 18520400 lshift4 temp ,temp 
+5d58 9840fe00 iadd temp ,pdata 
+5d59 67e0c9d5 store 1 ,mem_mouse_otp_dpi_value 
+5d5a 1a627e00 copy regc ,pdata 
+5d5b 684949fa fetcht 2 ,mem_otp_offset_dpi 
+5d5c 98467c00 isub temp ,null 
+5d5d 2022dd4f branch mouse_dpi_store_end ,zero 
+5d5e 1a60a7ff increase -1 ,regc 
+5d5f 20205d4f branch mouse_dpi_store_end 
+
+mouse_load_eeprom_info_check:
+5d60 20406cbc call iicd_read_init_pin 
+5d61 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5d62 2feffe09 isolate1 mouse_enable_2k_eeprom ,pdata 
+5d63 2440ecc4 ncall clear_eeprom_size_2k ,true 
+5d64 20405d66 call mouse_eeprom_load_recon_info 
+5d65 20205c80 branch mouse_app_initflag_check 
+
+mouse_eeprom_load_recon_info:
+5d66 d8400080 arg 128 ,temp 
+5d67 da204666 arg mem_device_flag ,rega 
+5d68 da400000 arg mouse_info_eeprom_offect ,regb 
+5d69 20206ce1 branch iicd_read_eep_data 
+
+mouse_load_eeprom_dpi:
+5d6a d8400001 arg 1 ,temp 
+5d6b da204690 arg mem_mouse_dpi ,rega 
+5d6c da40005a arg mouse_dpi_eeprom_offect ,regb 
+5d6d 20206ce1 branch iicd_read_eep_data 
+
+mouse_load_flash_info_check:
+5d6e 20406c20 call spid_init_flash 
+5d6f 20405d7b call mouse_spid_flash_release_form_powerdown 
+5d70 20405d75 call mouse_information_flash_parameters 
+5d71 20406c4d call spid_read_flash 
+5d72 20405d82 call mouse_spid_flash_powerdown 
+5d73 20405c80 call mouse_app_initflag_check 
+5d74 202055f6 branch mouse_sensor_spi_init 
+
+mouse_information_flash_parameters:
+5d75 580046e6 setarg mem_mouse_information_end 
+5d76 d8404666 arg mem_mouse_information_start ,temp 
+5d77 98460400 isub temp ,temp 
+5d78 6fe1c6ec fetch 3 ,mem_flash_base 
+5d79 da204666 arg mem_mouse_information_start ,rega 
+5d7a 20600000 rtn 
+
+mouse_spid_flash_release_form_powerdown:
+5d7b 700678ab jam flash_command_release_from_powerdown ,mem_temp 
+
+mouse_spid_write_flash_cmd:
+5d7c 2040705b call delay_nop100 
+5d7d 20406c26 call spid_unlock_flash 
+5d7e da2046ef arg mem_write_flash_head_temp ,rega 
+5d7f 68488678 fetcht 1 ,mem_temp 
+5d80 20405d84 call mouse_spid_write_flash_cmd_common 
+5d81 2020705b branch delay_nop100 
+
+mouse_spid_flash_powerdown:
+5d82 700678b9 jam flash_command_powerdown ,mem_temp 
+5d83 20205d7c branch mouse_spid_write_flash_cmd 
+
+mouse_spid_write_flash_cmd_common:
+5d84 e0408011 istoret 1 ,rega 
+5d85 1ff10400 rshift16 pdata ,temp 
+5d86 e0408005 istoret 1 ,contw 
+5d87 1fec8400 rshift8 pdata ,temp 
+5d88 e0408005 istoret 1 ,contw 
+5d89 e7e08005 istore 1 ,contw 
+5d8a 1a227e00 deposit rega 
+5d8b 67f10084 store 2 ,core_spid_txaddr 
+5d8c 58000000 setarg 0 
+5d8d 67f10088 store 2 ,core_spid_rxlen 
+5d8e 70800602 jam spid_start ,core_misc_ctrl 
+5d8f 20206be0 branch wait_spid_done 
+
+mouse_flash_erase_sector:
+5d90 6fe1c6ec fetch 3 ,mem_flash_base 
+5d91 67e1c419 store 3 ,mem_spi_write_addr 
+5d92 20206bfa branch spid_flash_erase_sector + 2 
+
+mouse_spid_write_flash:
+5d93 1fe22600 copy pdata ,regc 
+5d94 1a227e00 copy rega ,pdata 
+5d95 1fe0fffc increase -4 ,pdata 
+5d96 1fe22400 copy pdata ,regb 
+5d97 efe20012 ifetch 4 ,regb 
+5d98 67e246ef store 4 ,mem_write_flash_head_temp 
+5d99 1a627e00 copy regc ,pdata 
+5d9a 20406c3c call spid_write_flash 
+5d9b 6fe246ef fetch 4 ,mem_write_flash_head_temp 
+5d9c e7e20012 istore 4 ,regb 
+5d9d 20600000 rtn 
+
+mouse_flash_power_down:
+5d9e 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5d9f c4090000 rtnbit0 mouse_enable_flash 
+5da0 20405d82 call mouse_spid_flash_powerdown 
+5da1 204069e0 call twspi_enable 
+5da2 6848c421 fetcht 1 ,mem_spi_cs_gpio 
+5da3 20406ef3 call gpio_out_inactive 
+5da4 6848c426 fetcht 1 ,mem_spi_hold_gpio 
+5da5 202055b1 branch mouse_gpio_config_input_pd 
+
+mouse_load_otp_info_check:
+5da6 20405e43 call mouse_read_otp_dpi 
+5da7 20405db4 call mouse_read_otp_device_flag 
+5da8 20405dcc call mouse_read_otp_device_info 
+5da9 20405e2f call mouse_read_otp_le_addr_increase_count_info 
+
+mouse_otp_load_app_initflag:
+5daa df200002 arg 2 ,loopcnt 
+5dab 6fe14a02 fetch 2 ,mem_otp_offset_app_initflag 
+5dac 1fe22400 copy pdata ,regb 
+5dad da20468e arg mem_store_flag ,rega 
+5dae 20406b74 call otp_read_data 
+5daf 20405c80 call mouse_app_initflag_check 
+
+mouse_otp_store_app_initflag:
+5db0 df200002 arg 2 ,loopcnt 
+5db1 da20468e arg mem_store_flag ,rega 
+5db2 6a414a02 fetchr regb ,2 ,mem_otp_offset_app_initflag 
+5db3 20206b45 branch otp_write 
+
+mouse_read_otp_device_flag:
+5db4 6a4149e2 fetchr regb ,2 ,mem_otp_offset_device_flag 
+5db5 1a422600 copy regb ,regc 
+
+mouse_read_otp_device_flag_loop:
+5db6 20405dc0 call mouse_read_otp_device_flag_common 
+5db7 6fe0c9a1 fetch 1 ,mem_device_flag_temp 
+5db8 203a5dc3 branch mouse_device_flag_load ,blank 
+5db9 67e0c9a0 store 1 ,mem_device_flag_last 
+5dba 1a60a601 increase 1 ,regc 
+5dbb 6fe149e4 fetch 2 ,mem_otp_offset_device_flag_end 
+5dbc 9a667c00 isub regc ,null 
+5dbd 24215dc3 nbranch mouse_device_flag_load ,positive 
+5dbe 1a622400 copy regc ,regb 
+5dbf 20205db6 branch mouse_read_otp_device_flag_loop 
+
+mouse_read_otp_device_flag_common:
+5dc0 df200001 arg 1 ,loopcnt 
+5dc1 da2049a1 arg mem_device_flag_temp ,rega 
+5dc2 20206b74 branch otp_read_data 
+
+mouse_device_flag_load:
+5dc3 6fe0c9a0 fetch 1 ,mem_device_flag_last 
+5dc4 1fe20400 copy pdata ,temp 
+5dc5 1fe17ef0 and pdata ,0xf0 ,pdata 
+5dc6 203a5dc9 branch mouse_device_flag_load_last ,blank 
+5dc7 1ff1fe00 rshift4 pdata ,pdata 
+5dc8 20205dca branch mouse_device_flag_load_end 
+
+mouse_device_flag_load_last:
+5dc9 18427e00 copy temp ,pdata 
+
+mouse_device_flag_load_end:
+5dca 67e0c666 store 1 ,mem_device_flag 
+5dcb 20600000 rtn 
+
+mouse_read_otp_device_info:
+5dcc 6fe0c666 fetch 1 ,mem_device_flag 
+5dcd c0005e1d beq mode_24g_device ,mouse_read_otp_24g_addr 
+5dce c000ddd1 beq mode_bt_device1 ,mouse_read_otp_le_device1 
+5dcf c0015dd3 beq mode_bt_device2 ,mouse_read_otp_le_device2 
+5dd0 20600000 rtn 
+
+mouse_read_otp_le_device1:
+5dd1 20405dd5 call mouse_read_otp_le_device1_addr 
+5dd2 20205de7 branch mouse_read_otp_le_device1_locall_addr 
+
+mouse_read_otp_le_device2:
+5dd3 20405df9 call mouse_read_otp_le_device2_addr 
+5dd4 20205e0b branch mouse_read_otp_le_device2_locall_addr 
+
+mouse_read_otp_le_device1_addr:
+5dd5 6a4149ea fetchr regb ,2 ,mem_otp_offset_le_addr1 
+5dd6 1a422600 copy regb ,regc 
+
+mouse_read_otp_le_device1_addr_loop:
+5dd7 20405de1 call mouse_read_otp_le_addr1_common 
+5dd8 6fe349a9 fetch 6 ,mem_mouse_le_addr1_temp 
+5dd9 203a5de4 branch mouse_le_addr1_load ,blank 
+5dda 67e349a3 store 6 ,mem_mouse_le_addr1_last 
+5ddb 1a60a606 increase 6 ,regc 
+5ddc 6fe149ec fetch 2 ,mem_otp_offset_le_addr1_end 
+5ddd 9a667c00 isub regc ,null 
+5dde 24215de4 nbranch mouse_le_addr1_load ,positive 
+5ddf 1a622400 copy regc ,regb 
+5de0 20205dd7 branch mouse_read_otp_le_device1_addr_loop 
+
+mouse_read_otp_le_addr1_common:
+5de1 df200006 arg 6 ,loopcnt 
+5de2 da2049a9 arg mem_mouse_le_addr1_temp ,rega 
+5de3 20206b74 branch otp_read_data 
+
+mouse_le_addr1_load:
+5de4 6fe349a3 fetch 6 ,mem_mouse_le_addr1_last 
+5de5 67e34668 store 6 ,mem_device1_addr 
+5de6 20600000 rtn 
+
+mouse_read_otp_le_device1_locall_addr:
+5de7 6a4149ee fetchr regb ,2 ,mem_otp_offset_le_locall_addr1 
+5de8 1a422600 copy regb ,regc 
+
+mouse_read_otp_le_device1_locall_addr_loop:
+5de9 20405df3 call mouse_read_otp_le_locall_addr1_common 
+5dea 6fe349b5 fetch 6 ,mem_mouse_le_locall_addr1_temp 
+5deb 203a5df6 branch mouse_le_locall_addr1_load ,blank 
+5dec 67e349af store 6 ,mem_mouse_le_locall_addr1_last 
+5ded 1a60a606 increase 6 ,regc 
+5dee 6fe149f0 fetch 2 ,mem_otp_offset_le_locall_addr1_end 
+5def 9a667c00 isub regc ,null 
+5df0 24215df6 nbranch mouse_le_locall_addr1_load ,positive 
+5df1 1a622400 copy regc ,regb 
+5df2 20205de9 branch mouse_read_otp_le_device1_locall_addr_loop 
+
+mouse_read_otp_le_locall_addr1_common:
+5df3 df200006 arg 6 ,loopcnt 
+5df4 da2049b5 arg mem_mouse_le_locall_addr1_temp ,rega 
+5df5 20206b74 branch otp_read_data 
+
+mouse_le_locall_addr1_load:
+5df6 6fe349af fetch 6 ,mem_mouse_le_locall_addr1_last 
+5df7 67e3466e store 6 ,mem_device1_locall_addr 
+5df8 20600000 rtn 
+
+mouse_read_otp_le_device2_addr:
+5df9 6a4149f2 fetchr regb ,2 ,mem_otp_offset_le_addr2 
+5dfa 1a422600 copy regb ,regc 
+
+mouse_read_otp_le_device2_addr_loop:
+5dfb 20405e05 call mouse_read_otp_le_addr2_common 
+5dfc 6fe349c1 fetch 6 ,mem_mouse_le_addr2_temp 
+5dfd 203a5e08 branch mouse_le_addr2_load ,blank 
+5dfe 67e349bb store 6 ,mem_mouse_le_addr2_last 
+5dff 1a60a606 increase 6 ,regc 
+5e00 6fe149f4 fetch 2 ,mem_otp_offset_le_addr2_end 
+5e01 9a667c00 isub regc ,null 
+5e02 24215e08 nbranch mouse_le_addr2_load ,positive 
+5e03 1a622400 copy regc ,regb 
+5e04 20205dfb branch mouse_read_otp_le_device2_addr_loop 
+
+mouse_read_otp_le_addr2_common:
+5e05 df200006 arg 6 ,loopcnt 
+5e06 da2049c1 arg mem_mouse_le_addr2_temp ,rega 
+5e07 20206b74 branch otp_read_data 
+
+mouse_le_addr2_load:
+5e08 6fe349bb fetch 6 ,mem_mouse_le_addr2_last 
+5e09 67e34675 store 6 ,mem_device2_addr 
+5e0a 20600000 rtn 
+
+mouse_read_otp_le_device2_locall_addr:
+5e0b 6a4149f6 fetchr regb ,2 ,mem_otp_offset_le_locall_addr2 
+5e0c 1a422600 copy regb ,regc 
+
+mouse_read_otp_le_device2_locall_addr_loop:
+5e0d 20405e17 call mouse_read_otp_le_locall_addr2_common 
+5e0e 6fe349cd fetch 6 ,mem_mouse_le_locall_addr2_temp 
+5e0f 203a5e1a branch mouse_le_locall_addr2_load ,blank 
+5e10 67e349c7 store 6 ,mem_mouse_le_locall_addr2_last 
+5e11 1a60a606 increase 6 ,regc 
+5e12 6fe149f8 fetch 2 ,mem_otp_offset_le_locall_addr2_end 
+5e13 9a667c00 isub regc ,null 
+5e14 24215e1a nbranch mouse_le_locall_addr2_load ,positive 
+5e15 1a622400 copy regc ,regb 
+5e16 20205e0d branch mouse_read_otp_le_device2_locall_addr_loop 
+
+mouse_read_otp_le_locall_addr2_common:
+5e17 df200006 arg 6 ,loopcnt 
+5e18 da2049cd arg mem_mouse_le_locall_addr2_temp ,rega 
+5e19 20206b74 branch otp_read_data 
+
+mouse_le_locall_addr2_load:
+5e1a 6fe349c7 fetch 6 ,mem_mouse_le_locall_addr2_last 
+5e1b 67e3467b store 6 ,mem_device2_locall_addr 
+5e1c 20600000 rtn 
+
+mouse_read_otp_24g_addr:
+5e1d 6a4149e6 fetchr regb ,2 ,mem_otp_offset_24g_addr 
+5e1e 1a422600 copy regb ,regc 
+
+mouse_read_otp_24g_addr_loop:
+5e1f 20405e29 call mouse_read_otp_24g_addr_common 
+5e20 6fe249da fetch 4 ,mem_mouse_24g_addr_temp 
+5e21 203a5e2c branch mouse_24g_addr_load ,blank 
+5e22 67e249d6 store 4 ,mem_mouse_24g_addr_last 
+5e23 1a60a604 increase 4 ,regc 
+5e24 6fe149e8 fetch 2 ,mem_otp_offset_24g_addr_end 
+5e25 9a667c00 isub regc ,null 
+5e26 24215e2c nbranch mouse_24g_addr_load ,positive 
+5e27 1a622400 copy regc ,regb 
+5e28 20205e1f branch mouse_read_otp_24g_addr_loop 
+
+mouse_read_otp_24g_addr_common:
+5e29 df200004 arg 4 ,loopcnt 
+5e2a da2049da arg mem_mouse_24g_addr_temp ,rega 
+5e2b 20206b74 branch otp_read_data 
+
+mouse_24g_addr_load:
+5e2c 6fe249d6 fetch 4 ,mem_mouse_24g_addr_last 
+5e2d 67e24691 store 4 ,mem_mouse_24g_addr 
+5e2e 20600000 rtn 
+
+mouse_read_otp_le_addr_increase_count_info:
+5e2f 6fe0c666 fetch 1 ,mem_device_flag 
+5e30 c1000000 rtneq mode_24g_device 
+5e31 6a4149fe fetchr regb ,2 ,mem_otp_offset_le_addr_increase_count 
+5e32 1a422600 copy regb ,regc 
+
+mouse_read_otp_le_addr_increase_count_loop:
+5e33 20405e3d call mouse_read_otp_le_addr_increase_count_common 
+5e34 6fe149e0 fetch 2 ,mem_random_addr_increase_count_temp 
+5e35 203a5e40 branch mouse_le_addr_increase_count_load ,blank 
+5e36 67e149de store 2 ,mem_random_addr_increase_count_last 
+5e37 1a60a602 increase 2 ,regc 
+5e38 6fe14a00 fetch 2 ,mem_otp_offset_le_addr_increase_count_end 
+5e39 9a667c00 isub regc ,null 
+5e3a 24215e40 nbranch mouse_le_addr_increase_count_load ,positive 
+5e3b 1a622400 copy regc ,regb 
+5e3c 20205e33 branch mouse_read_otp_le_addr_increase_count_loop 
+
+mouse_read_otp_le_addr_increase_count_common:
+5e3d df200002 arg 2 ,loopcnt 
+5e3e da2049e0 arg mem_random_addr_increase_count_temp ,rega 
+5e3f 20206b74 branch otp_read_data 
+
+mouse_le_addr_increase_count_load:
+5e40 6fe149e0 fetch 2 ,mem_random_addr_increase_count_temp 
+5e41 67e14695 store 2 ,mem_random_addr_increase_count 
+5e42 20600000 rtn 
+
+mouse_read_otp_dpi:
+5e43 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5e44 c307dc8c bbit0 mouse_enable_load_and_store_dpi ,mouse_load_default_dpi 
+5e45 6a4149fa fetchr regb ,2 ,mem_otp_offset_dpi 
+5e46 1a422600 copy regb ,regc 
+
+mouse_read_otp_dpi_loop:
+5e47 20405e51 call mouse_read_otp_dpi_common 
+5e48 6fe0c9d4 fetch 1 ,mem_mouse_dpi_temp 
+5e49 203a5e54 branch mouse_dpi_load ,blank 
+5e4a 67e0c9d3 store 1 ,mem_mouse_dpi_last 
+5e4b 1a60a601 increase 1 ,regc 
+5e4c 6fe149fc fetch 2 ,mem_otp_offset_dpi_end 
+5e4d 9a667c00 isub regc ,null 
+5e4e 24215e54 nbranch mouse_dpi_load ,positive 
+5e4f 1a622400 copy regc ,regb 
+5e50 20205e47 branch mouse_read_otp_dpi_loop 
+
+mouse_read_otp_dpi_common:
+5e51 df200001 arg 1 ,loopcnt 
+5e52 da2049d4 arg mem_mouse_dpi_temp ,rega 
+5e53 20206b74 branch otp_read_data 
+
+mouse_dpi_load:
+5e54 6fe0c9d3 fetch 1 ,mem_mouse_dpi_last 
+5e55 1fe20400 copy pdata ,temp 
+5e56 1fe17ef0 and pdata ,0xf0 ,pdata 
+5e57 203a5e5a branch mouse_dpi_load_last ,blank 
+5e58 1ff1fe00 rshift4 pdata ,pdata 
+5e59 20205e5b branch mouse_dpi_load_end 
+
+mouse_dpi_load_last:
+5e5a 18427e00 copy temp ,pdata 
+
+mouse_dpi_load_end:
+5e5b 67e0c690 store 1 ,mem_mouse_dpi 
+5e5c 20600000 rtn 
+
+mouse_idle:
+5e5d 44c74011 bpatch patch11_6 ,mem_patch11 
+5e5e 2040620e call mouse_low_voltage_led_no_enter_lpm 
+5e5f 204078aa call ui_check_paring_button 
+5e60 204056bb call mouse_dpi_check 
+5e61 2040580e call mouse_dpi_another_gpio_check 
+5e62 20405e66 call mouse_select_device_check 
+5e63 20405eb6 call mouse_check_select_device_by_switch 
+5e64 20405ee7 call mouse_bt_button_check 
+5e65 2020561c branch mouse_wheel_check 
+
+mouse_select_device_check:
+5e66 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5e67 c294de6b bbit1 mouse_enable_select_device_by_pb_button ,mouse_select_device_by_pb_button 
+5e68 c29bde6b bbit1 mouse_enable_pb_button_long_press_disconvery ,mouse_select_device_by_pb_button 
+5e69 20600000 rtn 
+
+mouse_select_device_by_pb_button_check_once:
+5e6a 70497503 jam 0x03 ,mem_mouse_pbkey_press_status 
+
+mouse_select_device_by_pb_button:
+5e6b 20405e6d call mouse_select_device_by_pb_button_check 
+5e6c 20205e7e branch mouse_select_device_by_pb_button_exit 
+
+mouse_select_device_by_pb_button_check:
+5e6d 44c7c011 bpatch patch11_7 ,mem_patch11 
+5e6e 6fe0c655 fetch 1 ,mem_config_select_device_button_gpio 
+5e6f c17f8000 rtneq gpio_disable 
+5e70 da200000 arg 0 ,rega 
+5e71 70497706 jam mouse_pb_key ,mem_mouse_key_temp 
+5e72 6848c655 fetcht 1 ,mem_config_select_device_button_gpio 
+5e73 20405e81 call mouse_pb_button_check 
+5e74 67e0c975 store 1 ,mem_mouse_pbkey_press_status 
+5e75 6fe0c654 fetch 1 ,mem_matrix_public_gpio 
+5e76 c07fde7c beq gpio_disable ,mouse_3io6key_pb_button_check_end 
+5e77 202058df branch mouse_matrix_public_gpio_reset 
+
+mouse_retransmit_select_device_by_pb_button:
+5e78 20405e6d call mouse_select_device_by_pb_button_check 
+5e79 1a227e00 copy rega ,pdata 
+5e7a c2835ea4 bbit1 mouse_pb_key ,mouse_select_device_button_down + 2 
+5e7b 20205e97 branch mouse_select_device_button_up 
+
+mouse_3io6key_pb_button_check_end:
+5e7c 6848c655 fetcht 1 ,mem_config_select_device_button_gpio 
+5e7d 204055b5 call mouse_gpio_config_input_pu 
+
+mouse_select_device_by_pb_button_exit:
+5e7e 1a227e00 copy rega ,pdata 
+5e7f c2835ea2 bbit1 mouse_pb_key ,mouse_select_device_button_down 
+5e80 20205e97 branch mouse_select_device_button_up 
+
+mouse_pb_button_check:
+5e81 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5e82 c296de8d bbit1 mouse_enable_pb_button_connect_gnd ,mouse_pb_button_connect_gnd 
+5e83 6fe0c975 fetch 1 ,mem_mouse_pbkey_press_status 
+5e84 1fe22600 copy pdata ,regc 
+5e85 6fe0c654 fetch 1 ,mem_matrix_public_gpio 
+5e86 c07fd931 beq gpio_disable ,mouse_3io6key_check 
+5e87 6fe0c97b fetch 1 ,mem_mouse_ghost_flag 
+5e88 243a5e8a nbranch mouse_select_device_by_pb_button_end ,blank 
+5e89 20205e8f branch mouse_pb_button_connect_matrix 
+
+mouse_select_device_by_pb_button_end:
+5e8a 70497f00 jam pb_button_state_up ,mem_select_device_button_statue 
+5e8b 70497500 jam 0 ,mem_mouse_pbkey_press_status 
+5e8c 20600000 rtn 
+
+mouse_pb_button_connect_gnd:
+5e8d 6fe0c975 fetch 1 ,mem_mouse_pbkey_press_status 
+5e8e 20205925 branch mouse_check_key_connect_gnd 
+
+mouse_pb_button_connect_matrix:
+5e8f 20406ee6 call gpio_get_bit 
+5e90 6848c654 fetcht 1 ,mem_matrix_public_gpio 
+5e91 2020de8d branch mouse_pb_button_connect_gnd ,true 
+5e92 6848c654 fetcht 1 ,mem_matrix_public_gpio 
+5e93 20406ef7 call gpio_out_active 
+5e94 6848c655 fetcht 1 ,mem_config_select_device_button_gpio 
+5e95 6fe0c975 fetch 1 ,mem_mouse_pbkey_press_status 
+5e96 20205925 branch mouse_check_key_connect_gnd 
+
+mouse_select_device_button_up:
+5e97 6fe0c97f fetch 1 ,mem_select_device_button_statue 
+5e98 c1000000 rtneq pb_button_state_up 
+5e99 70497f00 jam pb_button_state_up ,mem_select_device_button_statue 
+5e9a 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5e9b c39a0000 rtnbit1 mouse_enable_pb_button_short_press_enter_discovery 
+5e9c 6fe0c97c fetch 1 ,mem_bt_discovery_count 
+5e9d 1fe67c14 sub pdata ,20 ,null 
+5e9e 24415ec6 ncall mouse_ready_reconnection_by_button ,positive 
+5e9f 6fe0c4eb fetch 1 ,mem_ui_button_timeout 
+5ea0 67e0c97c store 1 ,mem_bt_discovery_count 
+5ea1 20600000 rtn 
+
+mouse_select_device_button_down:
+5ea2 20405eae call mouse_select_device_ghost_check 
+5ea3 20740000 rtn user 
+5ea4 6fe0c97f fetch 1 ,mem_select_device_button_statue 
+5ea5 c1008000 rtneq pb_button_state_down 
+5ea6 70497f01 jam pb_button_state_down ,mem_select_device_button_statue 
+5ea7 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5ea8 c29a5ba3 bbit1 mouse_enable_pb_button_short_press_enter_discovery ,mouse_long_button_bt_discovery 
+5ea9 6fe0c845 fetch 1 ,mem_mouse_direct_timer 
+5eaa 207a0000 rtn blank 
+5eab 6fe0c63c fetch 1 ,mem_mouse_direct_timeout 
+5eac 67e0c845 store 1 ,mem_mouse_direct_timer 
+5ead 20600000 rtn 
+
+mouse_select_device_ghost_check:
+5eae 78547c00 disable user 
+5eaf 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5eb0 c3968000 rtnbit1 mouse_enable_pb_button_connect_gnd 
+
+mouse_ghost_key_value_check:
+5eb1 6fe0c96f fetch 1 ,mem_mouse_lkey_press_status 
+5eb2 207a0000 rtn blank 
+5eb3 6fe0c970 fetch 1 ,mem_mouse_rkey_press_status 
+5eb4 207a0000 rtn blank 
+5eb5 20207dba branch enable_user 
+
+mouse_check_select_device_by_switch:
+5eb6 44c84012 bpatch patch12_0 ,mem_patch12 
+5eb7 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5eb8 c4150000 rtnbit0 mouse_enable_select_device_by_switch_gpio 
+5eb9 6848c65a fetcht 1 ,mem_device_switch_gpio 
+5eba 204055b5 call mouse_gpio_config_input_pu 
+5ebb 6848c65a fetcht 1 ,mem_device_switch_gpio 
+5ebc 20406ee6 call gpio_get_bit 
+5ebd 2020dec2 branch mouse_check_select_24g_device ,true 
+
+mouse_select_btdevice:
+5ebe 6fe0c666 fetch 1 ,mem_device_flag 
+5ebf c1008000 rtneq mode_bt_device1 
+5ec0 70466601 jam mode_bt_device1 ,mem_device_flag 
+5ec1 20205aaa branch mouse_stop_bluetooth_mode 
+
+mouse_check_select_24g_device:
+5ec2 6fe0c666 fetch 1 ,mem_device_flag 
+5ec3 c1000000 rtneq mode_24g_device 
+5ec4 70466600 jam mode_24g_device ,mem_device_flag 
+5ec5 20206018 branch mouse_24g_stop 
+
+mouse_ready_reconnection_by_button:
+5ec6 44c8c012 bpatch patch12_1 ,mem_patch12 
+5ec7 6fe0c71b fetch 1 ,mem_device_number 
+5ec8 c1008000 rtneq 1 
+5ec9 20405ed3 call mouse_select_device_number 
+5eca 6048c666 storet 1 ,mem_device_flag 
+
+mouse_store_device_number_before_reset:
+5ecb 20405eea call mouse_select_device_enable 
+5ecc 20405aaa call mouse_stop_bluetooth_mode 
+5ecd 204042d0 call app_evt_button_long_pressed 
+5ece 20405eec call mouse_select_device_disable 
+5ecf 70479301 jam 1 ,mem_mouse_need_soft_reset 
+5ed0 20205ca3 branch mouse_store_device_info_delay 
+
+mouse_soft_reset:
+5ed1 20405eea call mouse_select_device_enable 
+5ed2 20206ca3 branch soft_reset_chip 
+
+mouse_select_device_number:
+5ed3 6848c666 fetcht 1 ,mem_device_flag 
+5ed4 18408401 increase 1 ,temp 
+5ed5 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5ed6 c288deda bbit1 mouse_enable_24g ,mouse_select_device_number_24g 
+5ed7 18467c02 sub temp ,2 ,null 
+5ed8 24415ee1 ncall mouse_select_device_count_clean_bt ,positive 
+5ed9 20600000 rtn 
+
+mouse_select_device_number_24g:
+5eda 6fe0c71b fetch 1 ,mem_device_number 
+5edb 1fe0ffff increase -1 ,pdata 
+5edc 98467c00 isub temp ,null 
+5edd 24415edf ncall mouse_select_device_count_clean_24g ,positive 
+5ede 20600000 rtn 
+
+mouse_select_device_count_clean_24g:
+5edf d8400000 arg 0 ,temp 
+5ee0 20600000 rtn 
+
+mouse_select_device_count_clean_bt:
+5ee1 d8400001 arg 1 ,temp 
+5ee2 20600000 rtn 
+
+mouse_store_device_number2eeprom:
+5ee3 d8400001 arg 1 ,temp 
+5ee4 da204666 arg mem_device_flag ,rega 
+5ee5 da400000 arg 0 ,regb 
+5ee6 20206cd3 branch iicd_write_protect_eep_data 
+
+mouse_bt_button_check:
+5ee7 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5ee8 c41a0000 rtnbit0 mouse_enable_pb_button_short_press_enter_discovery 
+5ee9 20205e6b branch mouse_select_device_by_pb_button 
+
+mouse_select_device_enable:
+5eea d8e00000 arg mouse_select_device_flag ,queue 
+5eeb 20205f00 branch mouse_enable_function_flag 
+
+mouse_select_device_disable:
+5eec d8e00000 arg mouse_select_device_flag ,queue 
+5eed 20205f04 branch mouse_disable_function_flag 
+
+mouse_bt_cannel_reconn_enable:
+5eee d8e00003 arg mouse_bt_cannel_reconn_flag ,queue 
+5eef 20205f00 branch mouse_enable_function_flag 
+
+mouse_bt_cannel_reconn_disable:
+5ef0 d8e00003 arg mouse_bt_cannel_reconn_flag ,queue 
+5ef1 20205f04 branch mouse_disable_function_flag 
+
+mouse_bt_discovery_button_down_enable:
+5ef2 d8e00005 arg mouse_bt_discovery_button_down_flag ,queue 
+5ef3 20205f00 branch mouse_enable_function_flag 
+
+mouse_bt_discovery_button_down_disable:
+5ef4 d8e00005 arg mouse_bt_discovery_button_down_flag ,queue 
+5ef5 20205f04 branch mouse_disable_function_flag 
+
+mouse_adc_read_enable:
+5ef6 d8e00015 arg mouse_enable_adc ,queue 
+5ef7 20205f00 branch mouse_enable_function_flag 
+
+mouse_24g_set_250hz:
+5ef8 d8e00018 arg mouse_enable_24g_250hz ,queue 
+5ef9 20205f00 branch mouse_enable_function_flag 
+
+mouse_24g_search_dongle_enable:
+5efa d8e0000e arg mouse_enable_24g_search_dongle ,queue 
+5efb 20205f00 branch mouse_enable_function_flag 
+
+mouse_16m_enable:
+5efc d8e0000c arg mouse_enable_16m ,queue 
+5efd 20205f00 branch mouse_enable_function_flag 
+
+mouse_dpi_4level_enable:
+5efe d8e0001c arg mouse_enable_dpi_level_4 ,queue 
+5eff 20205f00 branch mouse_enable_function_flag 
+
+mouse_enable_function_flag:
+5f00 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5f01 f9207e00 qset1 pdata 
+5f02 67e44713 store mouse_flag_len ,mem_mouse_flag 
+5f03 20600000 rtn 
+
+mouse_disable_function_flag:
+5f04 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5f05 f93ffe00 qset0 pdata 
+5f06 67e44713 store mouse_flag_len ,mem_mouse_flag 
+5f07 20600000 rtn 
+
+mouse_customer_key_enable:
+5f08 58000000 setarg 0 
+5f09 67e4472a store 8 ,mem_customer_key_press 
+5f0a 67e44733 store 8 ,mem_customer_key_release 
+5f0b 6fe0c729 fetch 1 ,mem_mouse_customer_function 
+5f0c c0015f12 beq 2 ,mouse_customer_key_ctrl_alt_a 
+5f0d c001df14 beq 3 ,mouse_customer_ac_home 
+5f0e c0025f19 beq 4 ,mouse_customer_key_play 
+5f0f 58070008 setarg 0x070008 
+
+mouse_customer_standrad_key_set:
+5f10 67e4472b store 8 ,mem_customer_key_press + 1 
+5f11 20600000 rtn 
+
+mouse_customer_key_ctrl_alt_a:
+5f12 58040005 setarg 0x040005 
+5f13 20205f10 branch mouse_customer_standrad_key_set 
+
+mouse_customer_ac_home:
+5f14 58022303 setarg 0x022303 
+
+mouse_customer_media_key_set:
+5f15 67e4472a store 8 ,mem_customer_key_press 
+5f16 58000003 setarg 0x03 
+5f17 67e44733 store 8 ,mem_customer_key_release 
+5f18 20600000 rtn 
+
+mouse_customer_key_play:
+5f19 5800cd03 setarg 0x00cd03 
+5f1a 20205f15 branch mouse_customer_media_key_set 
+
+mouse_polling_device:
+5f1b 44c94012 bpatch patch12_2 ,mem_patch12 
+5f1c 6fe0c77f fetch 1 ,mem_reconn_times 
+5f1d 1fe0ffff increase -1 ,pdata 
+5f1e 67e0c77f store 1 ,mem_reconn_times 
+5f1f 6848c666 fetcht 1 ,mem_device_flag 
+5f20 18467c01 sub temp ,1 ,null 
+5f21 2442ded3 ncall mouse_select_device_number ,zero 
+5f22 6048c666 storet 1 ,mem_device_flag 
+5f23 20405ee3 call mouse_store_device_number2eeprom 
+5f24 20405c59 call mouse_before_store_reconn_info 
+5f25 202054a0 branch mouse_start_reconnect_device 
+
+mouse_drawing_optima:
+5f26 44c9c012 bpatch patch12_3 ,mem_patch12 
+5f27 6fe0c957 fetch 1 ,mem_config_sensor_type 
+5f28 c1018000 rtneq p3212 
+5f29 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5f2a c41c0000 rtnbit0 mouse_enable_smoother 
+5f2b 6fe24847 fetch 4 ,mem_mouse_x 
+5f2c 207a0000 rtn blank 
+5f2d 20405fcd call mouse_data_abs_check 
+5f2e 58000003 setarg 0x03 
+5f2f 20405fc3 call mouse_pdata_greater_than_check 
+5f30 205a5fbf call mouse_disable_asm ,blank 
+5f31 245a5fc1 ncall mouse_enable_asm ,blank 
+5f32 58000002 setarg 0x02 
+5f33 20405fc8 call mouse_data_less_than_check 
+5f34 205a5fbf call mouse_disable_asm ,blank 
+5f35 6fe0c861 fetch 1 ,mem_mouse_asm_flag 
+5f36 c000df3c beq 1 ,mouse_drawing_optima_modify 
+
+mouse_drawing_optima_init:
+5f37 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5f38 c41c0000 rtnbit0 mouse_enable_smoother 
+5f39 df200005 arg 5 ,loopcnt 
+5f3a d8a04861 arg mem_mouse_asm_flag ,contw 
+5f3b 20207ca1 branch clear_mem 
+
+mouse_drawing_optima_modify:
+5f3c 20405f50 call mouse_drawing_optima_xy_offset_modify 
+5f3d 6fe14862 fetch 2 ,mem_mouse_x_pre 
+5f3e 67e1070b store 2 ,mem_data_pre 
+5f3f 6fe14847 fetch 2 ,mem_mouse_x 
+5f40 67e1070d store 2 ,mem_data_current 
+5f41 20405f89 call mouse_drawing_optima_data_x 
+5f42 6fe1070b fetch 2 ,mem_data_pre 
+5f43 67e14862 store 2 ,mem_mouse_x_pre 
+5f44 6fe1070d fetch 2 ,mem_data_current 
+5f45 67e14847 store 2 ,mem_mouse_x 
+5f46 6fe14864 fetch 2 ,mem_mouse_y_pre 
+5f47 67e1070b store 2 ,mem_data_pre 
+5f48 6fe14849 fetch 2 ,mem_mouse_y 
+5f49 67e1070d store 2 ,mem_data_current 
+5f4a 20405f91 call mouse_drawing_optima_data_y 
+5f4b 6fe1070b fetch 2 ,mem_data_pre 
+5f4c 67e14864 store 2 ,mem_mouse_y_pre 
+5f4d 6fe1070d fetch 2 ,mem_data_current 
+5f4e 67e14849 store 2 ,mem_mouse_y 
+5f4f 20600000 rtn 
+
+mouse_drawing_optima_xy_offset_modify:
+5f50 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+5f51 c41c8000 rtnbit0 mouse_enable_xy_offset 
+5f52 44ca4012 bpatch patch12_4 ,mem_patch12 
+5f53 6fe14862 fetch 2 ,mem_mouse_x_pre 
+5f54 67e10712 store 2 ,mem_data_value 
+5f55 20405f64 call mouse_pre_xy_data_judge 
+5f56 67e14862 store 2 ,mem_mouse_x_pre 
+5f57 6fe14847 fetch 2 ,mem_mouse_x 
+5f58 67e10712 store 2 ,mem_data_value 
+5f59 20405f72 call mouse_current_xy_data_judge 
+5f5a 67e14847 store 2 ,mem_mouse_x 
+5f5b 6fe14864 fetch 2 ,mem_mouse_y_pre 
+5f5c 67e10712 store 2 ,mem_data_value 
+5f5d 20405f64 call mouse_pre_xy_data_judge 
+5f5e 67e14864 store 2 ,mem_mouse_y_pre 
+5f5f 6fe14849 fetch 2 ,mem_mouse_y 
+5f60 67e10712 store 2 ,mem_data_value 
+5f61 20405f72 call mouse_current_xy_data_judge 
+5f62 67e14849 store 2 ,mem_mouse_y 
+5f63 20600000 rtn 
+
+mouse_pre_xy_data_judge:
+5f64 6fe08713 fetch 1 ,mem_data_value + 1 
+5f65 203a5f67 branch mouse_pre_xy_pdata_offset ,blank 
+5f66 20205f6c branch mouse_pre_xy_ndata_offset 
+
+mouse_pre_xy_pdata_offset:
+5f67 6fe08712 fetch 1 ,mem_data_value 
+5f68 20405f7f call mouse_pre_xy_get_0_4_times 
+5f69 67e08712 store 1 ,mem_data_value 
+
+mouse_xy_data_offset_new:
+5f6a 6fe10712 fetch 2 ,mem_data_value 
+5f6b 20600000 rtn 
+
+mouse_pre_xy_ndata_offset:
+5f6c 6fe08712 fetch 1 ,mem_data_value 
+5f6d 20405fbb call mouse_pdata_invert 
+5f6e 20405f7f call mouse_pre_xy_get_0_4_times 
+5f6f 205a7dc8 call disable_blank ,blank 
+5f70 20405fb7 call mouse_pdata_get_new_value 
+5f71 20205f6a branch mouse_xy_data_offset_new 
+
+mouse_current_xy_data_judge:
+5f72 6fe08713 fetch 1 ,mem_data_value + 1 
+5f73 203a5f75 branch mouse_current_xy_pdata_offset ,blank 
+5f74 20205f79 branch mouse_current_xy_ndata_offset 
+
+mouse_current_xy_pdata_offset:
+5f75 6fe08712 fetch 1 ,mem_data_value 
+5f76 20405f84 call mouse_current_xy_get_0_6_times 
+5f77 67e08712 store 1 ,mem_data_value 
+5f78 20205f6a branch mouse_xy_data_offset_new 
+
+mouse_current_xy_ndata_offset:
+5f79 6fe08712 fetch 1 ,mem_data_value 
+5f7a 20405fbb call mouse_pdata_invert 
+5f7b 20405f84 call mouse_current_xy_get_0_6_times 
+5f7c 205a7dc8 call disable_blank ,blank 
+5f7d 20405fb7 call mouse_pdata_get_new_value 
+5f7e 20205f6a branch mouse_xy_data_offset_new 
+
+mouse_pre_xy_get_0_4_times:
+5f7f 1feffe04 mul32 pdata ,4 ,pdata 
+5f80 1fe6fc05 div pdata ,5 
+5f81 20407d62 call wait_div_end 
+5f82 1807fe00 quotient pdata 
+5f83 20600000 rtn 
+
+mouse_current_xy_get_0_6_times:
+5f84 1feffe0c mul32 pdata ,12 ,pdata 
+5f85 1fe6fc0a div pdata ,10 
+5f86 20407d62 call wait_div_end 
+5f87 1807fe00 quotient pdata 
+5f88 20600000 rtn 
+
+mouse_drawing_optima_data_x:
+5f89 6fe1070b fetch 2 ,mem_data_pre 
+5f8a 6849070d fetcht 2 ,mem_data_current 
+5f8b 9840fe00 iadd temp ,pdata 
+5f8c 6848c866 fetcht 1 ,mem_mouse_data_xtemp 
+5f8d 9840fe00 iadd temp ,pdata 
+5f8e 1fe10401 and pdata ,0x01 ,temp 
+5f8f 6048c866 storet 1 ,mem_mouse_data_xtemp 
+5f90 20205f99 branch mouse_drawing_optima_data 
+
+mouse_drawing_optima_data_y:
+5f91 6fe1070b fetch 2 ,mem_data_pre 
+5f92 6849070d fetcht 2 ,mem_data_current 
+5f93 9840fe00 iadd temp ,pdata 
+5f94 6848c867 fetcht 1 ,mem_mouse_data_ytemp 
+5f95 9840fe00 iadd temp ,pdata 
+5f96 1fe10401 and pdata ,0x01 ,temp 
+5f97 6048c867 storet 1 ,mem_mouse_data_ytemp 
+5f98 20205f99 branch mouse_drawing_optima_data 
+
+mouse_drawing_optima_data:
+5f99 67e1870f store 3 ,mem_data_sum 
+5f9a 2feffe10 isolate1 16 ,pdata 
+5f9b 2020dfa3 branch mouse_data_sum_overflow ,true 
+5f9c 6fe08710 fetch 1 ,mem_data_sum + 1 
+5f9d c07fdfaa beq 0xff ,mouse_data_sum_n 
+5f9e 6fe0870f fetch 1 ,mem_data_sum 
+
+mouse_data_store_pre:
+5f9f 1fe37e00 rshift pdata ,pdata 
+5fa0 67e1070b store 2 ,mem_data_pre 
+5fa1 67e1070d store 2 ,mem_data_current 
+5fa2 20600000 rtn 
+
+mouse_data_sum_overflow:
+5fa3 6fe08710 fetch 1 ,mem_data_sum + 1 
+5fa4 c0005fa7 beq 0 ,mouse_data_sum_overflow_p 
+5fa5 6fe1870f fetch 3 ,mem_data_sum 
+5fa6 20205f9f branch mouse_data_store_pre 
+
+mouse_data_sum_overflow_p:
+5fa7 70071100 jam 0 ,mem_data_sum + 2 
+5fa8 6fe0870f fetch 1 ,mem_data_sum 
+5fa9 20205f9f branch mouse_data_store_pre 
+
+mouse_data_sum_n:
+5faa 6fe0870f fetch 1 ,mem_data_sum 
+5fab 20405fb5 call mouse_pdata_get_half 
+5fac 67e0870b store 1 ,mem_data_pre 
+5fad 67e0870d store 1 ,mem_data_current 
+5fae 203a5fb3 branch mouse_data_zero ,blank 
+5faf 580000ff setarg 0xff 
+
+mouse_data_set_direction:
+5fb0 67e0870c store 1 ,mem_data_pre + 1 
+5fb1 67e0870e store 1 ,mem_data_current + 1 
+5fb2 20600000 rtn 
+
+mouse_data_zero:
+5fb3 58000000 setarg 0 
+5fb4 20205fb0 branch mouse_data_set_direction 
+
+mouse_pdata_get_half:
+5fb5 20405fbb call mouse_pdata_invert 
+5fb6 1fe37e00 rshift pdata ,pdata 
+
+mouse_pdata_get_new_value:
+5fb7 20405fbc call mouse_rega_in_out 
+5fb8 1fe67e00 sub pdata ,0 ,pdata 
+5fb9 67e08712 store 1 ,mem_data_value 
+5fba 20600000 rtn 
+
+mouse_pdata_invert:
+5fbb 1fe67e00 sub pdata ,0 ,pdata 
+
+mouse_rega_in_out:
+5fbc 67e08684 store 1 ,mem_rega 
+5fbd 6fe08684 fetch 1 ,mem_rega 
+5fbe 20600000 rtn 
+
+mouse_disable_asm:
+5fbf 70486100 jam 0 ,mem_mouse_asm_flag 
+5fc0 20600000 rtn 
+
+mouse_enable_asm:
+5fc1 70486101 jam 1 ,mem_mouse_asm_flag 
+5fc2 20600000 rtn 
+
+mouse_pdata_greater_than_check:
+5fc3 9a267c00 isub rega ,null 
+5fc4 24217dc8 nbranch disable_blank ,positive 
+5fc5 9a467c00 isub regb ,null 
+5fc6 24217dc8 nbranch disable_blank ,positive 
+5fc7 20207dca branch enable_blank 
+
+mouse_data_less_than_check:
+5fc8 9a267c00 isub rega ,null 
+5fc9 24610000 nrtn positive 
+5fca 9a467c00 isub regb ,null 
+5fcb 24610000 nrtn positive 
+5fcc 20207dca branch enable_blank 
+
+mouse_data_abs_check:
+5fcd 6fe14847 fetch 2 ,mem_mouse_x 
+5fce 20405fd4 call mouse_data_abs 
+5fcf 1fe22200 copy pdata ,rega 
+5fd0 6fe14849 fetch 2 ,mem_mouse_y 
+5fd1 20405fd4 call mouse_data_abs 
+5fd2 1fe22400 copy pdata ,regb 
+5fd3 20600000 rtn 
+
+mouse_data_abs:
+5fd4 67e1070d store 2 ,mem_data_current 
+5fd5 6fe0870e fetch 1 ,mem_data_current + 1 
+5fd6 c07fdfda beq 0xff ,mouse_data_reversal 
+5fd7 6fe0870d fetch 1 ,mem_data_current 
+
+mouse_data_abs_store:
+5fd8 1fe17eff and_into 0xff ,pdata 
+5fd9 20600000 rtn 
+
+mouse_data_reversal:
+5fda 6fe1070d fetch 2 ,mem_data_current 
+5fdb 1fe67e00 sub pdata ,0 ,pdata 
+5fdc 20205fd8 branch mouse_data_abs_store 
+
+mouse_24g_long_sleep_param_update_timer:
+5fdd da60461f arg mem_24g_long_sleep_param_update_timer ,regc 
+5fde da405fe0 arg mouse_24g_long_sleep_normal_param ,regb 
+5fdf 202042e0 branch timer_single_step 
+
+mouse_24g_long_sleep_normal_param:
+5fe0 6fe24613 fetch 4 ,mem_24g_long_sleep_set1 
+5fe1 67e245af store 4 ,mem_24g_enter_hibernate 
+5fe2 70477d01 jam 1 ,mem_mouse_long_mult_flag 
+5fe3 20600000 rtn 
+
+mouse_24g_long_sleep_set:
+5fe4 6fe0c740 fetch 1 ,mem_24g_long_sleep_set_level 
+5fe5 c0005fec beq 0x00 ,mouse_24g_long_sleep_set_30ms 
+5fe6 c000dfee beq 0x01 ,mouse_24g_long_sleep_set_50ms 
+5fe7 c0015fe9 beq 0x02 ,mouse_24g_long_sleep_set_80ms 
+5fe8 c001dff0 beq 0x03 ,mouse_24g_long_sleep_set_100ms 
+
+mouse_24g_long_sleep_set_80ms:
+5fe9 580ea600 setarg 0x0ea600 
+
+mouse_24g_long_sleep_set_end:
+5fea 67e24613 store 4 ,mem_24g_long_sleep_set1 
+5feb 20600000 rtn 
+
+mouse_24g_long_sleep_set_30ms:
+5fec 5805e740 setarg 0x05e740 
+5fed 20205fea branch mouse_24g_long_sleep_set_end 
+
+mouse_24g_long_sleep_set_50ms:
+5fee 580927c0 setarg 0x0927c0 
+5fef 20205fea branch mouse_24g_long_sleep_set_end 
+
+mouse_24g_long_sleep_set_100ms:
+5ff0 58124f80 setarg 0x124f80 
+5ff1 20205fea branch mouse_24g_long_sleep_set_end 
+
+mouse_24g_hibernate_set:
+5ff2 44cac012 bpatch patch12_5 ,mem_patch12 
+5ff3 70460000 jam 0 ,mem_24g_attempt_fail_flag 
+5ff4 20403647 call g24_transmit_next_packet 
+5ff5 5fffffff setarg -1 
+5ff6 67e245af store 4 ,mem_24g_enter_hibernate 
+5ff7 58000000 setarg 0 
+5ff8 67e3c846 store 7 ,mem_mouse_key 
+5ff9 70473f01 jam 1 ,mem_sensor_shutdown_flag 
+5ffa 204059ed call mouse_sensor_powerdown 
+5ffb 204054dc call mouse_setgpio_hibernate 
+5ffc 2020622b branch mouse_24g_long_sleep 
+
+mouse_wakeup_24g:
+5ffd 6fe0c73f fetch 1 ,mem_sensor_shutdown_flag 
+5ffe 245a6001 ncall mouse_wakeup_24g_from_long_sleep ,blank 
+5fff 70473f00 jam 0 ,mem_sensor_shutdown_flag 
+6000 20600000 rtn 
+
+mouse_wakeup_24g_from_long_sleep:
+6001 2040594c call mouse_init_sensor_wakeup 
+6002 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+6003 c41e0000 rtnbit0 mouse_enable_wheel_wake_up_cancel 
+
+mouse_wheel_gpio_init:
+6004 6fe0c64a fetch 1 ,mem_whee_a_data_gpio 
+6005 d8400040 arg gpcfg_pullup ,temp 
+6006 20406f21 call gpio_config_function_int 
+6007 6fe0c64b fetch 1 ,mem_whee_b_data_gpio 
+6008 d8400040 arg gpcfg_pullup ,temp 
+6009 20206f21 branch gpio_config_function_int 
+
+mouse_24g_transmit_start:
+600a 2040600e call mouse_24g_fast_conn_mode_check 
+600b 6fe0c73f fetch 1 ,mem_sensor_shutdown_flag 
+600c 243a6235 nbranch mouse_24g_short_sleep ,blank 
+600d 20203610 branch g24_transmit_start_next 
+
+mouse_24g_fast_conn_mode_check:
+600e 6fe245e8 fetch 4 ,mem_24g_receiver_addr 
+600f 684a45e4 fetcht 4 ,mem_24g_fast_conn_addr 
+6010 98467c00 isub temp ,null 
+6011 2022e013 branch mouse_soft_agc_enable ,zero 
+6012 20206016 branch mouse_soft_agc_disable 
+
+mouse_soft_agc_enable:
+6013 70414300 jam 0 ,mem_gain_fix 
+6014 704141aa jam tx_power_factory ,mem_tx_power 
+6015 20600000 rtn 
+
+mouse_soft_agc_disable:
+6016 704143ff jam 0xff ,mem_gain_fix 
+6017 20600000 rtn 
+
+mouse_24g_stop:
+6018 793f8026 set0 mark_24g ,mark 
+6019 7045fc00 jam state_24g_stop ,mem_24g_conn_sm 
+601a d8e00001 arg mouse_24g_pairing_flag ,queue 
+601b 20205f04 branch mouse_disable_function_flag 
+
+mouse_24g_start_mode:
+601c 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+601d c308e02a bbit0 mouse_enable_24g ,mouse_24g_mode_setup_error 
+601e 20406195 call mouse_device_24g_pair_led_config 
+601f 204054ac call mouse_wakeup_from_power_check 
+6020 20346067 branch mouse_24g_reconn_dongle_start ,user 
+6021 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+6022 c298602f bbit1 mouse_enable_auto_24g_paring ,mouse_24g_reconn_general_dongle 
+6023 c318e02f bbit0 mouse_enable_24g_power_on_pairing ,mouse_24g_reconn_general_dongle 
+6024 20405883 call mouse_key_check_once 
+6025 1a217e07 and rega ,0x07 ,pdata 
+6026 6848c728 fetcht 1 ,mem_mouse_commbination_key_24g 
+6027 98467c00 isub temp ,null 
+6028 2022e047 branch mouse_24g_start_pair_mode ,zero 
+6029 2020602f branch mouse_24g_reconn_general_dongle 
+
+mouse_24g_mode_setup_error:
+602a 6fe0c77f fetch 1 ,mem_reconn_times 
+602b 243a5f1b nbranch mouse_polling_device ,blank 
+602c 20600000 rtn 
+
+mouse_24g_first_start_auto_pair_mode:
+602d 204054ac call mouse_wakeup_from_power_check 
+602e 20346038 branch mouse_24g_first_start_reconn ,user 
+
+mouse_24g_reconn_general_dongle:
+602f 70466600 jam mode_24g_device ,mem_device_flag 
+6030 6fe14721 fetch 2 ,mem_mouse_24g_power_on_fast_conn_timer 
+6031 67e145de store 2 ,mem_24g_reconn_timeout 
+6032 7045e202 jam fast_conn_and_3_0_addr ,mem_24g_reconn_type 
+6033 20203534 branch g24_reconn_start 
+
+mouse_24g_start_auto_pair:
+6034 6fe145d6 fetch 2 ,mem_24g_pair_timeout_init 
+6035 67e145de store 2 ,mem_24g_reconn_timeout 
+6036 7045e204 jam pair_and_3_0_addr ,mem_24g_reconn_type 
+6037 20203534 branch g24_reconn_start 
+
+mouse_24g_first_start_reconn:
+6038 6fe0c666 fetch 1 ,mem_device_flag 
+6039 c0006067 beq mode_24g_device ,mouse_24g_reconn_dongle_start 
+603a 20405aa8 call mouse_bluetooth_fast_conn_disable 
+
+mouse_24g_first_bluetooth_reconnect:
+603b 20406018 call mouse_24g_stop 
+603c 70466601 jam mode_bt_device1 ,mem_device_flag 
+603d 20405c6f call mouse_select_reconn_device 
+603e 202054a0 branch mouse_start_reconnect_device 
+
+mouse_24g_first_bb_event_reconn_timeout:
+603f 204054ac call mouse_wakeup_from_power_check 
+6040 203454cd branch mouse_app_enter_hibernate ,user 
+6041 20205c1a branch mouse_start_discovery 
+
+mouse_24g_first_store_reconn_info:
+6042 204054ac call mouse_wakeup_from_power_check 
+6043 20740000 rtn user 
+6044 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+6045 c29f5ca3 bbit1 mouse_enable_24g_first_auto_pairing ,mouse_store_device_info_delay 
+6046 20600000 rtn 
+
+mouse_24g_start_pair_mode:
+6047 20406195 call mouse_device_24g_pair_led_config 
+6048 7045e200 jam 0 ,mem_24g_reconn_type 
+6049 d8e00001 arg mouse_24g_pairing_flag ,queue 
+604a 20405f00 call mouse_enable_function_flag 
+604b 58000000 setarg 0 
+604c 67e145de store 2 ,mem_24g_reconn_timeout 
+604d 20405c39 call mouse_stop_discovery 
+604e 70458901 jam type_ms ,mem_24g_data_type 
+604f 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+6050 c30b3291 bbit0 mouse_enable_keyboard ,g24_pair_start 
+6051 70458902 jam type_kb ,mem_24g_data_type 
+6052 20203291 branch g24_pair_start 
+
+mouse_24g_attempt_fail:
+6053 6fe0c600 fetch 1 ,mem_24g_attempt_fail_flag 
+6054 243a5ff2 nbranch mouse_24g_hibernate_set ,blank 
+6055 6fe0c5e2 fetch 1 ,mem_24g_reconn_type 
+6056 c001605f beq fast_conn_and_3_0_addr ,mouse_24g_fast_conn_attempt_fail 
+6057 c002606b beq pair_and_3_0_addr ,mouse_24g_auto_pair_attempt_fail 
+6058 c001e070 beq receiver_and_3_0_addr ,mouse_reconn_dongle_attempt_fail 
+
+mouse_24g_attempt_fail_enter_hibernate:
+6059 20406018 call mouse_24g_stop 
+605a 6fe0c77f fetch 1 ,mem_reconn_times 
+605b 243a5f1b nbranch mouse_polling_device ,blank 
+605c 6fe0c666 fetch 1 ,mem_device_flag 
+605d c00054cd beq mode_24g_device ,mouse_app_enter_hibernate 
+605e 20600000 rtn 
+
+mouse_24g_fast_conn_attempt_fail:
+605f 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+6060 c29f6034 bbit1 mouse_enable_24g_first_auto_pairing ,mouse_24g_start_auto_pair 
+6061 c2986034 bbit1 mouse_enable_auto_24g_paring ,mouse_24g_start_auto_pair 
+6062 c31d6067 bbit0 mouse_enable_24g_auto_pair_nerver_been_paired ,mouse_24g_reconn_dongle_start 
+6063 6fe24691 fetch 4 ,mem_mouse_24g_addr 
+6064 684a46e6 fetcht 4 ,mem_mouse_compare_addr 
+6065 98467c00 isub temp ,null 
+6066 2022e047 branch mouse_24g_start_pair_mode ,zero 
+
+mouse_24g_reconn_dongle_start:
+6067 6fe145dc fetch 2 ,mem_24g_reconn_timeout_init 
+6068 67e145de store 2 ,mem_24g_reconn_timeout 
+6069 7045e203 jam receiver_and_3_0_addr ,mem_24g_reconn_type 
+606a 20203534 branch g24_reconn_start 
+
+mouse_24g_auto_pair_attempt_fail:
+606b 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+606c c31f6059 bbit0 mouse_enable_24g_first_auto_pairing ,mouse_24g_attempt_fail_enter_hibernate 
+606d 6fe0c71b fetch 1 ,mem_device_number 
+606e c000e059 beq 1 ,mouse_24g_attempt_fail_enter_hibernate 
+606f 2020603b branch mouse_24g_first_bluetooth_reconnect 
+
+mouse_reconn_dongle_attempt_fail:
+6070 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+6071 c31f6059 bbit0 mouse_enable_24g_first_auto_pairing ,mouse_24g_attempt_fail_enter_hibernate 
+6072 c289e059 bbit1 mouse_enable_eeprom ,mouse_24g_attempt_fail_enter_hibernate 
+6073 c2896059 bbit1 mouse_enable_flash ,mouse_24g_attempt_fail_enter_hibernate 
+6074 20206035 branch mouse_24g_start_auto_pair + 1 
+
+mouse_24g_attempt_success:
+6075 6fe2458f fetch 4 ,mem_24g_addr 
+6076 67e245e8 store 4 ,mem_24g_receiver_addr 
+6077 67e24691 store 4 ,mem_mouse_24g_addr 
+6078 2040355a call g24_ch_syncword_crc8_init 
+6079 20405c0b call mouse_no_data_timer_init 
+607a 2040618e call mouse_device_poweron_led_config 
+607b 20405a73 call mouse_init_sensor_reset 
+607c 70477d00 jam 0 ,mem_mouse_long_mult_flag 
+607d 7045fc00 jam 0 ,mem_24g_conn_sm 
+607e 7045e200 jam 0 ,mem_24g_reconn_type 
+607f 6fe245e8 fetch 4 ,mem_24g_receiver_addr 
+6080 6fe245e4 fetch 4 ,mem_24g_fast_conn_addr 
+6081 98467c00 isub temp ,null 
+6082 20628000 rtn zero 
+6083 20206042 branch mouse_24g_first_store_reconn_info 
+
+mouse_24g_pairing_complete:
+6084 20405a73 call mouse_init_sensor_reset 
+6085 20405a84 call mouse_read_sensor_common 
+
+mouse_24g_pairing_complete_common:
+6086 2040618e call mouse_device_poweron_led_config 
+6087 20405c0b call mouse_no_data_timer_init 
+6088 d8e00001 arg mouse_24g_pairing_flag ,queue 
+6089 20405f04 call mouse_disable_function_flag 
+608a 58000000 setarg 0 
+608b 67e145d8 store 2 ,mem_24g_pair_timeout 
+608c 67e145de store 2 ,mem_24g_reconn_timeout 
+608d 67e0c5fc store 1 ,mem_24g_conn_sm 
+608e 67e0c860 store 1 ,mem_mouse_move_flag 
+608f 67e0c5e2 store 1 ,mem_24g_reconn_type 
+6090 6fe2458f fetch 4 ,mem_24g_addr 
+6091 67e245e8 store 4 ,mem_24g_receiver_addr 
+6092 67e24691 store 4 ,mem_mouse_24g_addr 
+6093 20205ca3 branch mouse_store_device_info_delay 
+
+mouse_24g_short_sleep_clear_wake:
+6094 20407de2 call clear_wake 
+6095 202023fd branch lpm_write_gpio_wakeup 
+
+mouse_24g_package_data:
+6096 44cb4012 bpatch patch12_6 ,mem_patch12 
+6097 c6930000 rtnmark0 mark_24g 
+6098 20405601 call mouse_motion 
+6099 24740000 nrtn user 
+609a 6fe0c77c fetch 1 ,mem_mouse_24g_long_sleep_flag 
+609b 70477c00 jam 0 ,mem_mouse_24g_long_sleep_flag 
+609c 245a6094 ncall mouse_24g_short_sleep_clear_wake ,blank 
+609d 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+609e c30b60a1 bbit0 mouse_enable_keyboard ,mouse_24g_mouse_package_data 
+609f 6fe0c96c fetch 1 ,mem_customer_key 
+60a0 243a60b6 nbranch mouse_24g_keyboard_package_data ,blank 
+
+mouse_24g_mouse_package_data:
+60a1 20405a74 call mouse_data_xy_release 
+60a2 6fe0c589 fetch 1 ,mem_24g_data_type 
+60a3 c280e0b0 bbit1 1 ,mouse_24g_mouse_package_data_now 
+60a4 6848c51a fetcht 1 ,mem_24g_txbuf + 1 
+60a5 6fe0c846 fetch 1 ,mem_mouse_key 
+60a6 9841fe00 ior temp ,pdata 
+60a7 67e0c846 store 1 ,mem_mouse_key 
+60a8 6848c51f fetcht 1 ,mem_24g_txbuf + 6 
+60a9 6fe0c84b fetch 1 ,mem_mouse_z 
+60aa 9840fe00 iadd temp ,pdata 
+60ab 67e0c84b store 1 ,mem_mouse_z 
+60ac 6848c520 fetcht 1 ,mem_24g_txbuf + 7 
+60ad 6fe0c84c fetch 1 ,mem_mouse_tz 
+60ae 9840fe00 iadd temp ,pdata 
+60af 67e0c84c store 1 ,mem_mouse_tz 
+
+mouse_24g_mouse_package_data_now:
+60b0 70458901 jam type_ms ,mem_24g_data_type 
+60b1 da200007 arg 7 ,rega 
+60b2 da404846 arg mem_mouse_key ,regb 
+60b3 6fe1484b fetch 2 ,mem_mouse_z 
+60b4 207a0000 rtn blank 
+60b5 202036db branch g24_transmit_by_interrupt_enable 
+
+mouse_24g_keyboard_package_data:
+60b6 70458902 jam type_kb ,mem_24g_data_type 
+60b7 da200009 arg 9 ,rega 
+60b8 6fe0c96d fetch 1 ,mem_customer_data_trigger 
+60b9 243a60bc nbranch mouse_customer_key_press ,blank 
+60ba da404733 arg mem_customer_key_release ,regb 
+60bb 20600000 rtn 
+
+mouse_customer_key_press:
+60bc da40472a arg mem_customer_key_press ,regb 
+60bd 20600000 rtn 
+
+mouse_24g_search_dongle_init:
+60be 58000000 setarg 0 
+60bf 67e1c6f8 store 3 ,mem_mouse_search_dongle_action 
+60c0 20600000 rtn 
+
+mouse_24g_search_dongle:
+60c1 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+60c2 c4070000 rtnbit0 mouse_enable_24g_search_dongle 
+60c3 6fe0c77d fetch 1 ,mem_mouse_long_mult_flag 
+60c4 207a0000 rtn blank 
+60c5 6fe0c602 fetch 1 ,mem_24g_abort_pac 
+60c6 207a0000 rtn blank 
+60c7 6fe0c6f5 fetch 1 ,mem_mouse_search_dongle_interval 
+60c8 1fe0fe01 increase 1 ,pdata 
+60c9 1fe17e03 and_into 3 ,pdata 
+60ca 67e0c6f5 store 1 ,mem_mouse_search_dongle_interval 
+60cb 247a0000 nrtn blank 
+60cc 7046f600 jam 0 ,mem_mouse_search_dongle_ch 
+
+mouse_24g_search_dongle_loop:
+60cd 44cbc012 bpatch patch12_7 ,mem_patch12 
+60ce 6fe0c6f6 fetch 1 ,mem_mouse_search_dongle_ch 
+60cf 1fe0fe01 increase 1 ,pdata 
+60d0 67e0c6f6 store 1 ,mem_mouse_search_dongle_ch 
+60d1 1fe67c08 sub pdata ,g24_ch_number ,null 
+60d2 242160d9 nbranch mouse_24g_search_dongle_loop_end ,positive 
+60d3 2040357f call g24_reconn_data_prep 
+60d4 20403651 call g24_transmit_receive_ack 
+60d5 242c60df nbranch mouse_24g_search_dongle_loop_retry ,sync 
+60d6 2437e0df nbranch mouse_24g_search_dongle_loop_retry ,user3 
+60d7 204060f2 call mouse_g24_ackpayload_parse 
+60d8 204060e9 call mouse_24g_search_dongle_success 
+
+mouse_24g_search_dongle_loop_end:
+60d9 2040357b call g24_txbuf_clear 
+60da 6fe0c6f7 fetch 1 ,mem_mouse_search_dongle_count 
+60db 1fe0fe01 increase 1 ,pdata 
+60dc 67e0c6f7 store 1 ,mem_mouse_search_dongle_count 
+60dd c00860e1 beq g24_ch_poll_count ,mouse_24g_search_dongle_check 
+60de 20600000 rtn 
+
+mouse_24g_search_dongle_loop_retry:
+60df 20403222 call g24_ch 
+60e0 202060cd branch mouse_24g_search_dongle_loop 
+
+mouse_24g_search_dongle_check:
+60e1 7046f700 jam 0 ,mem_mouse_search_dongle_count 
+60e2 6fe0c6f8 fetch 1 ,mem_mouse_search_dongle_action 
+60e3 c3800000 rtnbit1 g24_disconn_state 
+60e4 79207e00 set1 g24_disconn_state ,pdata 
+60e5 67e0c6f8 store 1 ,mem_mouse_search_dongle_action 
+60e6 6fe14723 fetch 2 ,mem_mouse_24g_search_dongle_time_init 
+60e7 67e14781 store 2 ,mem_mouse_no_data_timer 
+60e8 202059ed branch mouse_sensor_powerdown 
+
+mouse_24g_search_dongle_success:
+60e9 6fe0c602 fetch 1 ,mem_24g_abort_pac 
+60ea 203a60be branch mouse_24g_search_dongle_init ,blank 
+60eb 7046f700 jam 0 ,mem_mouse_search_dongle_count 
+60ec 6fe0c6f8 fetch 1 ,mem_mouse_search_dongle_action 
+60ed c4000000 rtnbit0 g24_disconn_state 
+60ee 793ffe00 set0 g24_disconn_state ,pdata 
+60ef 67e0c6f8 store 1 ,mem_mouse_search_dongle_action 
+60f0 20405c0b call mouse_no_data_timer_init 
+60f1 2020594c branch mouse_init_sensor_wakeup 
+
+mouse_g24_ackpayload_parse:
+60f2 2040366e call g24_ackpayload_parse 
+60f3 6fe0c4f8 fetch 1 ,mem_24g_rxbuf + 1 
+60f4 2fe1f008 compare 0x08 ,pdata ,0xf8 
+60f5 24608000 nrtn true 
+60f6 6fe0c4f9 fetch 1 ,mem_24g_rxbuf + 2 
+60f7 c07fdff2 beq 0xff ,mouse_24g_hibernate_set 
+60f8 20600000 rtn 
+
+mouse_g24_retransmit:
+60f9 6fe0c793 fetch 1 ,mem_mouse_need_soft_reset 
+60fa 247a0000 nrtn blank 
+60fb 20405e78 call mouse_retransmit_select_device_by_pb_button 
+60fc 204060fe call mouse_select_device_by_dpi_button_once 
+60fd 20203662 branch g24_retransmit0 
+
+mouse_select_device_by_dpi_button_once:
+60fe d8e0000c arg 12 ,queue 
+60ff 20407cef call timer_check 
+6100 247a0000 nrtn blank 
+6101 20406106 call mouse_dpi_check_once 
+6102 2040572c call mouse_dpi_key_check_long_press 
+
+mouse_g24_retransmit_100ms_timer_init:
+6103 d8e0000c arg 12 ,queue 
+6104 580000a0 setarg 160 
+6105 20207ce1 branch timer_init 
+
+mouse_dpi_check_once:
+6106 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+6107 c4140000 rtnbit0 mouse_enable_select_device_by_dpi_button 
+6108 202056bb branch mouse_dpi_check 
+
+mouse_24g_before_lpm_sleep:
+6109 6fe0c666 fetch 1 ,mem_device_flag 
+610a c0802421 bne mode_24g_device ,lpm_sleep_skip_cb_function 
+610b 6fe0c5ca fetch 1 ,mem_24g_disable_fec1 
+610c 207a0000 rtn blank 
+
+mouse_peripheral_clock_off:
+610d 70804202 jam 2 ,core_clksel 
+610e 708130f8 jam 0xf8 ,core_lpm_ctrl 
+610f 20600000 rtn 
+
+mouse_logo_led_on_timer:
+6110 6fe0c65c fetch 1 ,mem_mouse_logo_led_gpio 
+6111 c17f8000 rtneq gpio_disable 
+6112 6fe14781 fetch 2 ,mem_mouse_no_data_timer 
+6113 207a0000 rtn blank 
+6114 6fe14725 fetch 2 ,mem_mouse_no_data_timeout 
+6115 68494781 fetcht 2 ,mem_mouse_no_data_timer 
+6116 98460400 isub temp ,temp 
+6117 6fe1470f fetch 2 ,mem_mouse_logo_led_on_time_init 
+6118 98467e00 isub temp ,pdata 
+6119 2021611c branch mouse_logo_led_on ,positive 
+
+mouse_logo_led_off:
+611a 6848c65c fetcht 1 ,mem_mouse_logo_led_gpio 
+611b 202061e5 branch mouse_led_off 
+
+mouse_logo_led_on:
+611c 6848c65c fetcht 1 ,mem_mouse_logo_led_gpio 
+611d 202061e4 branch mouse_led_on 
+
+mouse_dpi_led_blink_delay_timer:
+611e da604711 arg mem_mouse_dpi_led_delay_count ,regc 
+611f da406121 arg mouse_dpi_led_blink_init ,regb 
+6120 202042e0 branch timer_single_step 
+
+mouse_dpi_led_blink_init:
+6121 44cc4013 bpatch patch13_0 ,mem_patch13 
+6122 6fe0c957 fetch 1 ,mem_config_sensor_type 
+6123 c001e131 beq p3212 ,mouse_dpi_led_blink_init_another 
+6124 c005e131 beq ka8g2 ,mouse_dpi_led_blink_init_another 
+6125 6848c690 fetcht 1 ,mem_mouse_dpi 
+6126 18408402 increase 2 ,temp 
+
+mouse_dpi_led_blink_init_next:
+6127 18467c03 sub temp ,3 ,null 
+6128 20416134 call mouse_dpi_led_blink_init_level_4 ,positive 
+6129 24416138 ncall mouse_dpi_led_blink_count_clean ,positive 
+612a 18427e00 copy temp ,pdata 
+612b 9fe0fe00 iadd pdata ,pdata 
+612c 67e0c70c store 1 ,mem_mouse_multi_led_blink_count 
+
+mouse_multi_dpi_led_blink_enable:
+612d 7046fe04 jam 4 ,mem_mouse_multi_led_blink_type 
+612e 20406185 call mouse_multi_dpi_led_blink_timer_init 
+612f 7046fc01 jam multi_led_blink ,mem_mouse_multi_led_type 
+6130 20206192 branch mouse_multi_led_enable 
+
+mouse_dpi_led_blink_init_another:
+6131 6848c690 fetcht 1 ,mem_mouse_dpi 
+6132 18408401 increase 1 ,temp 
+6133 20206127 branch mouse_dpi_led_blink_init_next 
+
+mouse_dpi_led_blink_init_level_4:
+6134 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+6135 c40e0000 rtnbit0 mouse_enable_dpi_level_4 
+6136 18408401 increase 1 ,temp 
+6137 20600000 rtn 
+
+mouse_dpi_led_blink_count_clean:
+6138 184085fd increase -3 ,temp 
+6139 20600000 rtn 
+
+mouse_dpi_led_blink_delay:
+613a 6fe0c661 fetch 1 ,mem_mouse_dpi_gpio 
+613b c17f8000 rtneq gpio_disable 
+613c 6fe14790 fetch 2 ,mem_mouse_discovery_timer 
+613d 247a0000 nrtn blank 
+613e 6fe145d8 fetch 2 ,mem_24g_pair_timeout 
+613f 247a0000 nrtn blank 
+6140 6fe145de fetch 2 ,mem_24g_reconn_timeout 
+6141 247a0000 nrtn blank 
+6142 6fe0c701 fetch 1 ,mem_mouse_multi_led_powon_timer 
+6143 247a0000 nrtn blank 
+6144 6fe0c712 fetch 1 ,mem_mouse_dpi_led_delay_count_init 
+6145 203a6121 branch mouse_dpi_led_blink_init ,blank 
+6146 67e0c711 store 1 ,mem_mouse_dpi_led_delay_count 
+6147 20600000 rtn 
+
+mouse_check_dpi_blink:
+6148 78547c00 disable user 
+6149 6fe0c6fe fetch 1 ,mem_mouse_multi_led_blink_type 
+614a 1fe67c04 sub pdata ,4 ,null 
+614b 24628000 nrtn zero 
+614c 20207dba branch enable_user 
+
+mouse_low_voltage_led_timer:
+614d 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+614e c4118000 rtnbit0 mouse_enable_low_led 
+614f c4020000 rtnbit0 mouse_low_voltage_flag 
+6150 6fe14790 fetch 2 ,mem_mouse_discovery_timer 
+6151 247a0000 nrtn blank 
+6152 6fe145d8 fetch 2 ,mem_24g_pair_timeout 
+6153 247a0000 nrtn blank 
+6154 6fe145de fetch 2 ,mem_24g_reconn_timeout 
+6155 247a0000 nrtn blank 
+6156 6fe0c701 fetch 1 ,mem_mouse_multi_led_powon_timer 
+6157 247a0000 nrtn blank 
+6158 20406148 call mouse_check_dpi_blink 
+6159 20740000 rtn user 
+615a 6fe0c70e fetch 1 ,mem_mouse_multi_low_led_blink_count 
+615b 203a6173 branch mouse_low_led_blink_count_init_judge ,blank 
+
+mouse_low_led_blink_timer:
+615c 6848c709 fetcht 1 ,mem_adc_low_volatage_led_timer_count 
+615d 18408401 increase 1 ,temp 
+615e 6048c709 storet 1 ,mem_adc_low_volatage_led_timer_count 
+615f 6fe0c707 fetch 1 ,mem_mouse_low_led_blink_timer 
+6160 98467c00 isub temp ,null 
+6161 2441616a ncall mouse_low_led_timer_count_clean ,positive 
+6162 6fe0c708 fetch 1 ,mem_mouse_low_led_blink_half_timer 
+6163 98467c00 isub temp ,null 
+6164 2421616e nbranch mouse_low_voltage_led_off_judge ,positive 
+
+mouse_low_voltage_led_on_judge:
+6165 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+6166 c29261d9 bbit1 mouse_enable_low_for_led ,mouse_device_led_on 
+6167 c29361d9 bbit1 mouse_enable_dpi_low_for_led ,mouse_device_led_on 
+
+mouse_low_voltage_led_on:
+6168 6848c660 fetcht 1 ,mem_mouse_low_voltage_alarm_gpio 
+6169 202061e4 branch mouse_led_on 
+
+mouse_low_led_timer_count_clean:
+616a 70470901 jam 1 ,mem_adc_low_volatage_led_timer_count 
+616b 6fe0c70e fetch 1 ,mem_mouse_multi_low_led_blink_count 
+616c 1fe0ffff increase -1 ,pdata 
+616d 67e0c70e store 1 ,mem_mouse_multi_low_led_blink_count 
+
+mouse_low_voltage_led_off_judge:
+616e 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+616f c29261eb bbit1 mouse_enable_low_for_led ,mouse_device_led_off 
+6170 c29361eb bbit1 mouse_enable_dpi_low_for_led ,mouse_device_led_off 
+
+mouse_low_voltage_led_off:
+6171 6848c660 fetcht 1 ,mem_mouse_low_voltage_alarm_gpio 
+6172 202061e5 branch mouse_led_off 
+
+mouse_low_led_blink_count_init_judge:
+6173 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+6174 c291616e bbit1 mouse_enable_low_led_blink_limit ,mouse_low_voltage_led_off_judge 
+6175 2040617e call mouse_multi_low_led_blink_count_init 
+6176 2020615c branch mouse_low_led_blink_timer 
+
+mouse_device_multi_led_parm_init:
+6177 7046fb00 jam 0 ,mem_mouse_multi_led_blink_enable 
+6178 204061fd call mouse_device_multi_led_all_off 
+6179 7046fe00 jam 0 ,mem_mouse_multi_led_blink_type 
+617a 6fe0c707 fetch 1 ,mem_mouse_low_led_blink_timer 
+617b 1fe37e00 rshift pdata ,pdata 
+617c 67e0c708 store 1 ,mem_mouse_low_led_blink_half_timer 
+617d 20600000 rtn 
+
+mouse_multi_low_led_blink_count_init:
+617e 6fe0c70d fetch 1 ,mem_mouse_multi_lowled_blink_count_init 
+617f 67e0c70e store 1 ,mem_mouse_multi_low_led_blink_count 
+6180 20600000 rtn 
+
+mouse_multi_led_blink_timer_init:
+6181 6fe0c6fe fetch 1 ,mem_mouse_multi_led_blink_type 
+6182 c000e188 beq 1 ,mouse_device_24g_led_blink_timer_init 
+6183 c001618a beq 2 ,mouse_device_le_discovery_led_blink_timer_init 
+6184 c001e18c beq 3 ,mouse_device_le_reconn_led_blink_timer_init 
+
+mouse_multi_dpi_led_blink_timer_init:
+6185 6fe0c705 fetch 1 ,mem_mouse_dpi_led_blink_timer_init 
+
+mouse_store_multi_led_blink_timer:
+6186 67e0c706 store 1 ,mem_mouse_multi_led_blink_timer 
+6187 20600000 rtn 
+
+mouse_device_24g_led_blink_timer_init:
+6188 6fe0c702 fetch 1 ,mem_mouse_multi_24gled_blink_timer_init 
+6189 20206186 branch mouse_store_multi_led_blink_timer 
+
+mouse_device_le_discovery_led_blink_timer_init:
+618a 6fe0c703 fetch 1 ,mem_mouse_multi_le_discovery_blink_timer_init 
+618b 20206186 branch mouse_store_multi_led_blink_timer 
+
+mouse_device_le_reconn_led_blink_timer_init:
+618c 6fe0c704 fetch 1 ,mem_mouse_multi_le_reconn_blink_timer_init 
+618d 20206186 branch mouse_store_multi_led_blink_timer 
+
+mouse_device_poweron_led_config:
+618e 44ccc013 bpatch patch13_1 ,mem_patch13 
+618f 6fe0c700 fetch 1 ,mem_mouse_multi_led_powon_timer_init 
+6190 67e0c701 store 1 ,mem_mouse_multi_led_powon_timer 
+6191 7046fc00 jam multi_led_on ,mem_mouse_multi_led_type 
+
+mouse_multi_led_enable:
+6192 7046fd00 jam off ,mem_mouse_multi_led_state 
+6193 7046fb01 jam on ,mem_mouse_multi_led_blink_enable 
+6194 20600000 rtn 
+
+mouse_device_24g_pair_led_config:
+6195 44cd4013 bpatch patch13_2 ,mem_patch13 
+6196 6fe0c666 fetch 1 ,mem_device_flag 
+6197 c1800000 rtnne mode_24g_device 
+6198 204061ae call mouse_multi_led_blink_enable_init 
+6199 7046fe01 jam 1 ,mem_mouse_multi_led_blink_type 
+619a 20406188 call mouse_device_24g_led_blink_timer_init 
+619b 6fe0c6ff fetch 1 ,mem_mouse_le_reconn_blink_limit 
+619c 207a0000 rtn blank 
+619d 6fe0c70a fetch 1 ,mem_mouse_multi_24gled_blink_count_init 
+619e 202061a9 branch mouse_device_led_blink_count_init 
+
+mouse_device_le_reconn_led_config:
+619f 6fe0c666 fetch 1 ,mem_device_flag 
+61a0 c1000000 rtneq mode_24g_device 
+61a1 204061ae call mouse_multi_led_blink_enable_init 
+61a2 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+61a3 c4108000 rtnbit0 mouse_enable_bt_reconn_led_effect 
+61a4 7046fe03 jam 3 ,mem_mouse_multi_led_blink_type 
+61a5 2040618c call mouse_device_le_reconn_led_blink_timer_init 
+61a6 6fe0c6ff fetch 1 ,mem_mouse_le_reconn_blink_limit 
+61a7 207a0000 rtn blank 
+61a8 6fe0c70b fetch 1 ,mem_mouse_multi_le_reconn_blink_count_init 
+
+mouse_device_led_blink_count_init:
+61a9 67e0c70c store 1 ,mem_mouse_multi_led_blink_count 
+61aa 20600000 rtn 
+
+mouse_device_discovery_led_config:
+61ab 7046ff00 jam 0 ,mem_mouse_le_reconn_blink_limit 
+61ac 7046fe02 jam 2 ,mem_mouse_multi_led_blink_type 
+61ad 2040618a call mouse_device_le_discovery_led_blink_timer_init 
+
+mouse_multi_led_blink_enable_init:
+61ae 7046fb01 jam 1 ,mem_mouse_multi_led_blink_enable 
+61af 7046fc01 jam multi_led_blink ,mem_mouse_multi_led_type 
+61b0 202061d8 branch mouse_device_multi_led_on 
+
+mouse_led_multi_timer:
+61b1 6fe0c6fb fetch 1 ,mem_mouse_multi_led_blink_enable 
+61b2 207a0000 rtn blank 
+61b3 6fe0c6fc fetch 1 ,mem_mouse_multi_led_type 
+61b4 c000e1bd beq multi_led_blink ,mouse_multi_led_type_blink 
+
+mouse_device_multi_led_type_on:
+61b5 6fe0c701 fetch 1 ,mem_mouse_multi_led_powon_timer 
+61b6 203a61ba branch mouse_device_poweron_led_off ,blank 
+61b7 1fe0ffff increase -1 
+61b8 67e0c701 store 1 ,mem_mouse_multi_led_powon_timer 
+61b9 202061d9 branch mouse_device_led_on 
+
+mouse_device_poweron_led_off:
+61ba 7046fb00 jam 0 ,mem_mouse_multi_led_blink_enable 
+61bb 2040617e call mouse_multi_low_led_blink_count_init 
+61bc 202061eb branch mouse_device_led_off 
+
+mouse_multi_led_type_blink:
+61bd 44cdc013 bpatch patch13_3 ,mem_patch13 
+61be 6fe0c6fe fetch 1 ,mem_mouse_multi_led_blink_type 
+61bf 207a0000 rtn blank 
+61c0 c00261c5 beq 4 ,mouse_device_led_blink_limit 
+61c1 202061c2 branch mouse_device_led_blink_judge 
+
+mouse_device_led_blink_judge:
+61c2 6fe0c6ff fetch 1 ,mem_mouse_le_reconn_blink_limit 
+61c3 c000e1c5 beq 1 ,mouse_device_led_blink_limit 
+61c4 202061c7 branch mouse_multi_led_type_blink_next 
+
+mouse_device_led_blink_limit:
+61c5 6fe0c70c fetch 1 ,mem_mouse_multi_led_blink_count 
+61c6 203a61e6 branch mouse_multi_led_off_judge ,blank 
+
+mouse_multi_led_type_blink_next:
+61c7 da604706 arg mem_mouse_multi_led_blink_timer ,regc 
+61c8 da4061ca arg mouse_multi_led_type_blink_start ,regb 
+61c9 202042e0 branch timer_single_step 
+
+mouse_multi_led_type_blink_start:
+61ca 6fe0c6fe fetch 1 ,mem_mouse_multi_led_blink_type 
+61cb c00261d2 beq 4 ,mouse_multi_led_blink_count_decrease 
+61cc 6fe0c6ff fetch 1 ,mem_mouse_le_reconn_blink_limit 
+61cd c000e1d2 beq 1 ,mouse_multi_led_blink_count_decrease 
+
+mouse_multi_led_blink:
+61ce 20406181 call mouse_multi_led_blink_timer_init 
+61cf 6fe0c6fd fetch 1 ,mem_mouse_multi_led_state 
+61d0 c000e1e8 beq on ,mouse_multi_led_off_judge_next 
+61d1 202061d6 branch mouse_multi_led_on_judge 
+
+mouse_multi_led_blink_count_decrease:
+61d2 6fe0c70c fetch 1 ,mem_mouse_multi_led_blink_count 
+61d3 1fe0ffff increase -1 
+61d4 67e0c70c store 1 ,mem_mouse_multi_led_blink_count 
+61d5 202061ce branch mouse_multi_led_blink 
+
+mouse_multi_led_on_judge:
+61d6 6fe0c6fe fetch 1 ,mem_mouse_multi_led_blink_type 
+61d7 c0026208 beq 4 ,mouse_multi_dpi_led_on_judge 
+
+mouse_device_multi_led_on:
+61d8 7046fd01 jam on ,mem_mouse_multi_led_state 
+
+mouse_device_led_on:
+61d9 44ce4013 bpatch patch13_4 ,mem_patch13 
+61da 6fe0c666 fetch 1 ,mem_device_flag 
+61db c00061df beq mode_24g_device ,mouse_device_24g_led_on 
+61dc c000e1e1 beq mode_bt_device1 ,mouse_device_bt1_led_on 
+61dd c00161e3 beq mode_bt_device2 ,mouse_device_bt2_led_on 
+61de 20600000 rtn 
+
+mouse_device_24g_led_on:
+61df 6848c65d fetcht 1 ,mem_mouse_1io2led_multi_24gled 
+61e0 202061e4 branch mouse_led_on 
+
+mouse_device_bt1_led_on:
+61e1 6848c65e fetcht 1 ,mem_mouse_1io2led_multi_bt1led 
+61e2 202061e4 branch mouse_led_on 
+
+mouse_device_bt2_led_on:
+61e3 6848c65f fetcht 1 ,mem_mouse_1io2led_multi_bt2led 
+
+mouse_led_on:
+61e4 20206ef7 branch gpio_out_active 
+
+mouse_led_off:
+61e5 20206ef3 branch gpio_out_inactive 
+
+mouse_multi_led_off_judge:
+61e6 7046fb00 jam 0 ,mem_mouse_multi_led_blink_enable 
+61e7 7046fe00 jam 0 ,mem_mouse_multi_led_blink_type 
+
+mouse_multi_led_off_judge_next:
+61e8 6fe0c6fe fetch 1 ,mem_mouse_multi_led_blink_type 
+61e9 c0026202 beq 4 ,mouse_multi_dpi_led_off_judge 
+
+mouse_device_multi_led_off:
+61ea 7046fd00 jam off ,mem_mouse_multi_led_state 
+
+mouse_device_led_off:
+61eb 44cec013 bpatch patch13_5 ,mem_patch13 
+61ec 6fe0c666 fetch 1 ,mem_device_flag 
+61ed c00061f1 beq mode_24g_device ,mouse_device_24g_led_off 
+61ee c000e1f5 beq mode_bt_device1 ,mouse_device_bt1_led_off 
+61ef c00161f9 beq mode_bt_device2 ,mouse_device_bt2_led_off 
+61f0 20600000 rtn 
+
+mouse_device_24g_led_off:
+61f1 6848c65d fetcht 1 ,mem_mouse_1io2led_multi_24gled 
+61f2 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+61f3 c31061e5 bbit0 mouse_enable_1io2led ,mouse_led_off 
+61f4 20206f0f branch gpio_set_high_impedance 
+
+mouse_device_bt1_led_off:
+61f5 6848c65e fetcht 1 ,mem_mouse_1io2led_multi_bt1led 
+61f6 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+61f7 c31061e5 bbit0 mouse_enable_1io2led ,mouse_led_off 
+61f8 20206f0f branch gpio_set_high_impedance 
+
+mouse_device_bt2_led_off:
+61f9 6848c65f fetcht 1 ,mem_mouse_1io2led_multi_bt2led 
+61fa 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+61fb c31061e5 bbit0 mouse_enable_1io2led ,mouse_led_off 
+61fc 20206f0f branch gpio_set_high_impedance 
+
+mouse_device_multi_led_all_off:
+61fd 204061f1 call mouse_device_24g_led_off 
+61fe 204061f5 call mouse_device_bt1_led_off 
+61ff 204061f9 call mouse_device_bt2_led_off 
+6200 2040616e call mouse_low_voltage_led_off_judge 
+6201 20206202 branch mouse_multi_dpi_led_off_judge 
+
+mouse_multi_dpi_led_off_judge:
+6202 7046fd00 jam off ,mem_mouse_multi_led_state 
+6203 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+6204 c292e1ea bbit1 mouse_enable_dpi_for_led ,mouse_device_multi_led_off 
+6205 c29361ea bbit1 mouse_enable_dpi_low_for_led ,mouse_device_multi_led_off 
+
+mouse_multi_dpi_led_off:
+6206 6848c661 fetcht 1 ,mem_mouse_dpi_gpio 
+6207 202061e5 branch mouse_led_off 
+
+mouse_multi_dpi_led_on_judge:
+6208 7046fd01 jam on ,mem_mouse_multi_led_state 
+6209 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+620a c292e1d8 bbit1 mouse_enable_dpi_for_led ,mouse_device_multi_led_on 
+620b c29361d8 bbit1 mouse_enable_dpi_low_for_led ,mouse_device_multi_led_on 
+
+mouse_multi_dpi_led_on:
+620c 6848c661 fetcht 1 ,mem_mouse_dpi_gpio 
+620d 202061e4 branch mouse_led_on 
+
+mouse_low_voltage_led_no_enter_lpm:
+620e 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+620f c4020000 rtnbit0 mouse_low_voltage_flag 
+6210 6fe0c709 fetch 1 ,mem_adc_low_volatage_led_timer_count 
+6211 6848c708 fetcht 1 ,mem_mouse_low_led_blink_half_timer 
+6212 1fe67c02 sub pdata ,temp ,null 
+6213 2021621b branch mouse_lpm_mode_clear ,positive 
+
+mouse_low_voltage_led_no_enter_lpm_next:
+6214 6fe0c666 fetch 1 ,mem_device_flag 
+6215 c0006218 beq mode_24g_device ,g24_transmit_by_interrupt_exit_check 
+6216 70409401 jam 1 ,mem_lpm_mode 
+6217 20600000 rtn 
+
+g24_transmit_by_interrupt_exit_check:
+6218 6fe44713 fetch mouse_flag_len ,mem_mouse_flag 
+6219 c38c0000 rtnbit1 mouse_enable_24g_250hz 
+621a 202036ca branch g24_transmit_by_interrupt_exit 
+
+mouse_lpm_mode_clear:
+621b 6fe0c666 fetch 1 ,mem_device_flag 
+621c c00036db beq mode_24g_device ,g24_transmit_by_interrupt_enable 
+621d 70409400 jam 0 ,mem_lpm_mode 
+621e 20600000 rtn 
+
+mouse_store_signal_rssi:
+621f 6fe08009 fetch 1 ,mem_rssi 
+6220 202035cb branch rssi_signal 
+
+mouse_le_transmit:
+6221 2040621f call mouse_store_signal_rssi 
+6222 202036e8 branch power_ctrl_start 
+
+mouse_le_set_lpm_mult:
+6223 6fe0c843 fetch 1 ,mem_le_connect_status_flag 
+6224 2fe00603 compare 3 ,pdata ,3 
+6225 2420fdc8 nbranch disable_blank ,true 
+6226 2040432b call app_lpm_mult_enable 
+6227 20207dca branch enable_blank 
+
+mouse_set_lpm_mult:
+6228 6fe144e9 fetch 2 ,mem_ui_state_map 
+6229 c284e223 bbit1 ui_state_ble_connected ,mouse_le_set_lpm_mult 
+622a 20600000 rtn 
+
+mouse_24g_long_sleep:
+622b 204036b4 call g24_lpm_wait 
+622c 24740000 nrtn user 
+622d 70477c01 jam 1 ,mem_mouse_24g_long_sleep_flag 
+622e 204036be call g24_setgpio_lpm_before 
+622f 70477200 jam 0 ,mem_mouse_24g_sleep_miss 
+6230 204062aa call mouse_24g_send_time_long_wake 
+6231 6fe0c73f fetch 1 ,mem_sensor_shutdown_flag 
+6232 245a54dc ncall mouse_setgpio_hibernate ,blank 
+6233 6fe245af fetch 4 ,mem_24g_enter_hibernate 
+6234 20203622 branch g24_long_seep2 
+
+mouse_24g_short_sleep:
+6235 6fe0c77b fetch 1 ,mem_mouse_sleep_deal_type 
+6236 203a3616 branch g24_short_sleep ,blank 
+6237 204036b4 call g24_lpm_wait 
+6238 24740000 nrtn user 
+6239 6fe0c772 fetch 1 ,mem_mouse_24g_sleep_miss 
+623a 70477200 jam 0 ,mem_mouse_24g_sleep_miss 
+623b 1fe67c00 sub pdata ,0 ,null 
+623c 2422e25c nbranch mouse_24g_short_sleep_last_miss ,zero 
+623d 68494622 fetcht 2 ,mem_24g_retransmit 
+623e 18467c00 sub temp ,0 ,null 
+623f 2022e252 branch mouse_24g_short_sleep_default ,zero 
+6240 6fe24767 fetch 4 ,mem_mouse_24g_tx_time_last_delt 
+6241 203a6252 branch mouse_24g_short_sleep_default ,blank 
+
+mouse_24g_short_sleep_notify:
+6242 684a4751 fetcht 4 ,mem_mouse_24g_tsniff 
+6243 98460400 isub temp ,temp 
+6244 604a4777 storet 4 ,mem_mouse_24g_sleep_miss_temp 
+6245 24216255 nbranch mouse_24g_short_sleep_long ,positive 
+6246 6fe1c608 fetch 3 ,mem_24g_short_sleep_set 
+6247 98467e00 isub temp ,pdata 
+6248 24216260 nbranch mouse_24g_short_sleep_2 ,positive 
+6249 d8400600 arg 0x600 ,temp 
+624a 98467c00 isub temp ,null 
+624b 24216260 nbranch mouse_24g_short_sleep_2 ,positive 
+
+mouse_24g_short_sleep2:
+624c 67e24773 store 4 ,mem_mouse_24g_sleep_time_temp 
+624d 20406259 call mouse_24g_miss_temp_clear 
+624e 6fe24773 fetch 4 ,mem_mouse_24g_sleep_time_temp 
+
+mouse_24g_short_sleep3:
+624f 20407d25 call clk2lpo 
+6250 604a40a9 storet 4 ,mem_sleep_counter 
+6251 2020241e branch lpm_sleep 
+
+mouse_24g_short_sleep_default:
+6252 20406259 call mouse_24g_miss_temp_clear 
+6253 6fe1c608 fetch 3 ,mem_24g_short_sleep_set 
+6254 2020624c branch mouse_24g_short_sleep2 
+
+mouse_24g_short_sleep_long:
+6255 18460400 sub temp ,0 ,temp 
+6256 6fe1c608 fetch 3 ,mem_24g_short_sleep_set 
+6257 9840fe00 iadd temp ,pdata 
+6258 2020624c branch mouse_24g_short_sleep2 
+
+mouse_24g_miss_temp_clear:
+6259 58000000 setarg 0 
+625a 67e24777 store 4 ,mem_mouse_24g_sleep_miss_temp 
+625b 20600000 rtn 
+
+mouse_24g_short_sleep_last_miss:
+625c 6fe24767 fetch 4 ,mem_mouse_24g_tx_time_last_delt 
+625d 684a4777 fetcht 4 ,mem_mouse_24g_sleep_miss_temp 
+625e 9840fe00 iadd temp ,pdata 
+625f 20206242 branch mouse_24g_short_sleep_notify 
+
+mouse_24g_short_sleep_2:
+6260 70477201 jam 1 ,mem_mouse_24g_sleep_miss 
+6261 20600000 rtn 
+
+mouse_24g_transmit_callback:
+6262 20406264 call mouse_24g_send_time_check 
+6263 20205ffd branch mouse_wakeup_24g 
+
+mouse_24g_send_time_check:
+6264 6fe0c77b fetch 1 ,mem_mouse_sleep_deal_type 
+6265 207a0000 rtn blank 
+6266 6fe0c618 fetch 1 ,mem_24g_transmit_by_interrupt 
+6267 c000e2a6 beq g24_tx_timer_int_enable ,mouse_24g_send_timer_first 
+6268 6fe0c760 fetch 1 ,mem_mouse_24g_tx_count 
+6269 203a62a6 branch mouse_24g_send_timer_first ,blank 
+626a 1b227e00 copy clkn ,pdata 
+626b 684b4761 fetcht 6 ,mem_mouse_24g_tx_time_last 
+626c 67e34761 store 6 ,mem_mouse_24g_tx_time_last 
+626d 20407d10 call clk_diff_rt 
+626e 67e24767 store 4 ,mem_mouse_24g_tx_time_last_delt 
+626f 6fe0c772 fetch 1 ,mem_mouse_24g_sleep_miss 
+6270 247a0000 nrtn blank 
+6271 6fe14622 fetch 2 ,mem_24g_retransmit 
+6272 247a0000 nrtn blank 
+6273 6fe24767 fetch 4 ,mem_mouse_24g_tx_time_last_delt 
+
+mouse_24g_send_time_check_1:
+6274 684ac76b fetcht 5 ,mem_mouse_24g_tx_time_sum 
+6275 9840fe00 iadd temp ,pdata 
+6276 67e2c76b store 5 ,mem_mouse_24g_tx_time_sum 
+6277 6848c760 fetcht 1 ,mem_mouse_24g_tx_count 
+6278 6fe0c770 fetch 1 ,mem_mouse_24g_tx_time_sum_count 
+6279 98467c00 isub temp ,null 
+627a 2022e27e branch mouse_24g_send_time_check_average ,zero 
+627b 18408401 increase 1 ,temp 
+627c 6048c760 storet 1 ,mem_mouse_24g_tx_count 
+627d 20600000 rtn 
+
+mouse_24g_send_time_check_average:
+627e 70476001 jam 1 ,mem_mouse_24g_tx_count 
+627f d8400000 arg 0 ,temp 
+6280 6fe2c76b fetch 5 ,mem_mouse_24g_tx_time_sum 
+6281 604ac76b storet 5 ,mem_mouse_24g_tx_time_sum 
+6282 6848c770 fetcht 1 ,mem_mouse_24g_tx_time_sum_count 
+6283 9846fc00 idiv temp 
+6284 20407d62 call wait_div_end 
+6285 1807a200 quotient rega 
+6286 6fe24751 fetch 4 ,mem_mouse_24g_tsniff 
+6287 6848c771 fetcht 1 ,mem_mouse_24g_tx_time_offset 
+6288 98460400 isub temp ,temp 
+6289 184085d8 increase -40 ,temp 
+628a 1a227e00 copy rega ,pdata 
+628b 98467e00 isub temp ,pdata 
+628c 20216299 branch mouse_24g_send_time_check_average_late ,positive 
+628d 1fe67e00 sub pdata ,0 ,pdata 
+628e 1feb7e00 rshift2 pdata ,pdata 
+628f 6849c608 fetcht 3 ,mem_24g_short_sleep_set 
+6290 98408400 iadd temp ,temp 
+6291 44cf4013 bpatch patch13_6 ,mem_patch13 
+6292 6fe1c75d fetch 3 ,mem_mouse_24g_short_sleep_set_init 
+6293 da201800 arg 0x1800 ,rega 
+6294 9a20fe00 iadd rega ,pdata 
+6295 98467c00 isub temp ,null 
+6296 242162a4 nbranch mouse_24g_send_time_check_average_min ,positive 
+6297 6049c608 storet 3 ,mem_24g_short_sleep_set 
+6298 20600000 rtn 
+
+mouse_24g_send_time_check_average_late:
+6299 1feb0400 rshift2 pdata ,temp 
+629a 6fe1c608 fetch 3 ,mem_24g_short_sleep_set 
+629b 98460400 isub temp ,temp 
+629c 44cfc013 bpatch patch13_7 ,mem_patch13 
+629d 6fe1c75d fetch 3 ,mem_mouse_24g_short_sleep_set_init 
+629e da201800 arg 0x1800 ,rega 
+629f 9a267e00 isub rega ,pdata 
+62a0 98467c00 isub temp ,null 
+62a1 202162a4 branch mouse_24g_send_time_check_average_min ,positive 
+62a2 6049c608 storet 3 ,mem_24g_short_sleep_set 
+62a3 20600000 rtn 
+
+mouse_24g_send_time_check_average_min:
+62a4 67e1c608 store 3 ,mem_24g_short_sleep_set 
+62a5 20600000 rtn 
+
+mouse_24g_send_timer_first:
+62a6 70476001 jam 1 ,mem_mouse_24g_tx_count 
+62a7 1b227e00 copy clkn ,pdata 
+62a8 67e34761 store 6 ,mem_mouse_24g_tx_time_last 
+62a9 20600000 rtn 
+
+mouse_24g_send_time_long_wake:
+62aa 58000000 setarg 0 
+62ab 67e0c760 store 1 ,mem_mouse_24g_tx_count 
+62ac 67e2c76b store 5 ,mem_mouse_24g_tx_time_sum 
+62ad 20600000 rtn 
+
+shutter_init:
+62ae 20407396 call enable_authrom 
+62af 20758000 rtn wake 
+62b0 58006327 setarg shutter_process_idle 
+62b1 67e143db store 2 ,mem_cb_idle_process 
+62b2 580062d9 setarg shutter_process_bb_event 
+62b3 67e143dd store 2 ,mem_cb_bb_event_process 
+62b4 5800638a setarg ble_shutter_receive_data 
+62b5 67e143df store 2 ,mem_cb_att_write 
+62b6 5800630e setarg shutter_le_bb_event_timer 
+62b7 67e143e3 store 2 ,mem_cb_event_timer 
+62b8 58006365 setarg shutter_key_change 
+62b9 67e14524 store 2 ,mem_cb_shutter_keycan 
+62ba 204062c2 call shutter_common_init 
+62bb 44d04014 bpatch patch14_0 ,mem_patch14 
+62bc 20406396 call shutter_load_buffer_config_form_datarom 
+
+shutter_power_switch:
+62bd 6fe0c51a fetch 1 ,mem_shutter_hard_soft_switch_case 
+62be c00062d0 beq hard_switch ,shutter_hart_swtich_power_on 
+62bf 6fe0c51b fetch 1 ,mem_shutter_soft_switch_button_gpio 
+62c0 67e0c4ec store 1 ,mem_ui_button_gpio 
+62c1 202063a1 branch ui_soft_swtich_init 
+
+shutter_common_init:
+62c2 5800632b setarg shutter_le_before_hibernate 
+62c3 67e143d5 store 2 ,mem_cb_before_hibernate 
+62c4 58006329 setarg shutter_process_lpm_before 
+62c5 67e143d7 store 2 ,mem_cb_before_lpm 
+62c6 58006340 setarg shutter_soft_swtich_power_on 
+62c7 67e1451f store 2 ,mem_shutter_soft_switch_poweron_callback_function 
+62c8 5800639a setarg shutter_soft_swtich_power_off 
+62c9 67e14521 store 2 ,mem_shutter_soft_switch_poweroff_callback_function 
+62ca 70415e07 jam 7 ,mem_version 
+62cb 20402969 call le_modified_name_adv 
+62cc 2040638d call shutter_init_param 
+62cd 20406ff7 call keyscan_key_init 
+62ce 204078ad call queue_init 
+62cf 202077ac branch ui_led_init_global 
+
+shutter_hart_swtich_power_on:
+62d0 7044ecff jam ui_button_gpio_disable ,mem_ui_button_gpio 
+62d1 70451c01 jam ss_state_power_on ,mem_shutter_soft_switch_power_state 
+62d2 20206340 branch shutter_start_reconnect 
+
+shutter_le_scale_lpm_lock:
+62d3 6fe0c51c fetch 1 ,mem_shutter_soft_switch_power_state 
+62d4 c0014308 beq ss_state_power_off ,app_get_lpm_wake_lock 
+62d5 204069b9 call l2cap_malloc_get_full_map 
+62d6 6fe0c441 fetch 1 ,mem_used_map 
+62d7 243a4308 nbranch app_get_lpm_wake_lock ,blank 
+62d8 2020430a branch app_put_lpm_wake_lock 
+
+shutter_process_bb_event:
+62d9 1a627e00 copy regc ,pdata 
+62da c00a62e2 beq bt_evt_le_connected ,ble_shutter_process_baseband_connect 
+62db c00ae2e6 beq bt_evt_le_disconnected ,ble_shutter_process_baseband_disconnect 
+62dc c01fe2e9 beq bt_evt_le_reconnect_complete ,ble_shutter_process_reconnect_complete 
+62dd c02062ef beq bt_evt_le_parse_conn_papa_update_rsp ,ble_shutter_process_parse_connect_parameter_update_response 
+62de c00863b6 beq bt_evt_button_long_pressed ,ui_soft_switch_botton_long_press 
+62df c01662f5 beq bt_evt_button_down ,shutter_process_soft_swtich_button_down 
+62e0 c016e300 beq bt_evt_button_up ,shutter_process_soft_swtich_button_up 
+62e1 20600000 rtn 
+
+ble_shutter_process_baseband_connect:
+62e2 2040632d call shutter_stop_bluetooth_discovery 
+62e3 58000000 setarg 0 
+62e4 67e144f8 store 2 ,mem_ble_shutter_reconn_timer 
+62e5 20204325 branch app_led_off 
+
+ble_shutter_process_baseband_disconnect:
+62e6 204078ad call queue_init 
+62e7 7044f100 jam 0 ,mem_ble_shutter_enable_notify 
+62e8 20206340 branch shutter_start_reconnect 
+
+ble_shutter_process_reconnect_complete:
+62e9 204078ad call queue_init 
+62ea 7044f101 jam 1 ,mem_ble_shutter_enable_notify 
+62eb 6fe44502 fetch 8 ,mem_ble_shutter_interval_min 
+62ec 67e442d3 store 8 ,mem_le_interval_min 
+62ed 2040432b call app_lpm_mult_enable 
+62ee 20202e93 branch le_l2cap_tx_update_req 
+
+ble_shutter_process_parse_connect_parameter_update_response:
+62ef 6fe1433c fetch 2 ,mem_le_l2cap_signaling_conn_param_update_rsp_result 
+62f0 c1000000 rtneq ble_signaling_connect_parameter_update_accepted 
+62f1 6fe4450a fetch 8 ,mem_ble_shutter_interval_min_new 
+62f2 207a0000 rtn blank 
+62f3 67e442d3 store 8 ,mem_le_interval_min 
+62f4 20202e93 branch le_l2cap_tx_update_req 
+
+shutter_process_soft_swtich_button_down:
+62f5 6fe0c51a fetch 1 ,mem_shutter_hard_soft_switch_case 
+62f6 c1000000 rtneq hard_switch 
+62f7 6fe0c51c fetch 1 ,mem_shutter_soft_switch_power_state 
+62f8 c1808000 rtnne ss_state_power_on 
+62f9 204062fb call shutter_store_currenct_led_state 
+62fa 20204323 branch app_led_on 
+
+shutter_store_currenct_led_state:
+62fb 7046bd01 jam 1 ,mem_shutter_soft_swtich_botton_down 
+62fc df20000b arg 11 ,loopcnt 
+62fd d8a046be arg mem_shutter_soft_swtich_led_struct_temp ,contw 
+62fe d8c046a7 arg mem_shutter_led_struct_app_led ,contr 
+62ff 20207cda branch memcpy 
+
+shutter_process_soft_swtich_button_up:
+6300 6fe0c51a fetch 1 ,mem_shutter_hard_soft_switch_case 
+6301 c1000000 rtneq hard_switch 
+6302 6fe0c51c fetch 1 ,mem_shutter_soft_switch_power_state 
+6303 c000e305 beq ss_state_power_on ,shutter_load_currenct_led_state 
+6304 202063b2 branch ui_soft_switch_botton_up 
+
+shutter_load_currenct_led_state:
+6305 6fe0c6bd fetch 1 ,mem_shutter_soft_swtich_botton_down 
+6306 c1808000 rtnne 1 
+6307 7046bd00 jam 0 ,mem_shutter_soft_swtich_botton_down 
+6308 6fe144e9 fetch 2 ,mem_ui_state_map 
+6309 c284c325 bbit1 ui_state_ble_connected ,app_led_off 
+630a df20000b arg 11 ,loopcnt 
+630b d8c046be arg mem_shutter_soft_swtich_led_struct_temp ,contr 
+630c d8a046a7 arg mem_shutter_led_struct_app_led ,contw 
+630d 20207cda branch memcpy 
+
+shutter_le_bb_event_timer:
+630e 20406311 call shutter_check_sleep_timer 
+630f 20406318 call shutter_check_power_off_timer 
+6310 20206322 branch ble_shutter_reconn_timer 
+
+shutter_check_sleep_timer:
+6311 da604518 arg mem_shutter_sleep_timer ,regc 
+6312 da406314 arg shutter_sleep_timeout ,regb 
+6313 202042e7 branch timer_single_step_2b 
+
+shutter_sleep_timeout:
+6314 70451c02 jam ss_state_power_off ,mem_shutter_soft_switch_power_state 
+6315 20404325 call app_led_off 
+6316 2040634e call shutter_disconnect_current_connection 
+6317 2020639e branch shutter_wait_power_off 
+
+shutter_check_power_off_timer:
+6318 da6046ca arg mem_shutter_power_off_timer ,regc 
+6319 da40631b arg shutter_check_power_off_timeout ,regb 
+631a 202042e0 branch timer_single_step 
+
+shutter_check_power_off_timeout:
+631b 6fe144e9 fetch 2 ,mem_ui_state_map 
+631c c284e39e bbit1 ui_state_ble_connected ,shutter_wait_power_off 
+631d 6fe0c6a7 fetch 1 ,mem_shutter_led_struct_app_led_type 
+631e c000e39e beq ui_led_state_blink_start ,shutter_wait_power_off 
+631f c002639e beq ui_led_state_blink_lighting ,shutter_wait_power_off 
+6320 c002e39e beq ui_led_state_blink_darking ,shutter_wait_power_off 
+6321 20204327 branch app_enter_hibernate 
+
+ble_shutter_reconn_timer:
+6322 6fe0c51c fetch 1 ,mem_shutter_soft_switch_power_state 
+6323 c1808000 rtnne ss_state_power_on 
+6324 da6044f8 arg mem_ble_shutter_reconn_timer ,regc 
+6325 da406331 arg shutter_start_bluetooth_discovery ,regb 
+6326 202042e7 branch timer_single_step_2b 
+
+shutter_process_idle:
+6327 20406376 call shutter_send_data_to_master 
+6328 20207027 branch keyscan_key_process 
+
+shutter_process_lpm_before:
+6329 20406f35 call gpio_set_before_lpm 
+632a 2020701b branch keyscan_process_lpm_before 
+
+shutter_le_before_hibernate:
+632b 20406f35 call gpio_set_before_lpm 
+632c 2020739a branch disable_authrom 
+
+shutter_stop_bluetooth_discovery:
+
+ble_shutter_stop_bluetooth_discovery:
+632d 6fe14514 fetch 2 ,mem_ble_shutter_connect_timeout 
+632e 67e14516 store 2 ,mem_shutter_sleep_timeout 
+632f 67e14518 store 2 ,mem_shutter_sleep_timer 
+6330 20204315 branch app_ble_stop_adv 
+
+shutter_start_bluetooth_discovery:
+6331 6fe0c51c fetch 1 ,mem_shutter_soft_switch_power_state 
+6332 c1808000 rtnne ss_state_power_on 
+
+ble_shutter_start_discovery:
+6333 6fe144e9 fetch 2 ,mem_ui_state_map 
+6334 c3848000 rtnbit1 ui_state_ble_connected 
+6335 6fe14512 fetch 2 ,mem_ble_shutter_discovery_timeout 
+6336 67e14516 store 2 ,mem_shutter_sleep_timeout 
+6337 67e14518 store 2 ,mem_shutter_sleep_timer 
+6338 6fe144f4 fetch 2 ,mem_ble_shutter_discovery_adv_interval 
+6339 204063c7 call shutter_ble_adv_interval_set 
+633a 20404321 call app_led_start_blink 
+633b 6fe244fe fetch 4 ,mem_ble_shutter_discovery_blink_on_time 
+633c 67e246aa store 4 ,mem_shutter_led_struct_app_led_on_time 
+633d 6fe144e9 fetch 2 ,mem_ui_state_map 
+633e c3858000 rtnbit1 ui_state_ble_adv 
+633f 20204317 branch app_ble_start_adv 
+
+shutter_soft_swtich_power_on:
+
+shutter_start_reconnect:
+6340 6fe0c51c fetch 1 ,mem_shutter_soft_switch_power_state 
+6341 c1808000 rtnne ss_state_power_on 
+
+ble_shutter_start_reconnect:
+6342 6fe144f8 fetch 2 ,mem_ble_shutter_reconn_timer 
+6343 684944f6 fetcht 2 ,mem_ble_shutter_reconn_timeout 
+6344 604944f8 storet 2 ,mem_ble_shutter_reconn_timer 
+6345 247a0000 nrtn blank 
+6346 6fe144f2 fetch 2 ,mem_ble_shutter_reconn_adv_interval 
+6347 204063c7 call shutter_ble_adv_interval_set 
+6348 20404321 call app_led_start_blink 
+6349 6fe244fa fetch 4 ,mem_ble_shutter_reconn_blink_on_time 
+634a 67e246aa store 4 ,mem_shutter_led_struct_app_led_on_time 
+634b 6fe144e9 fetch 2 ,mem_ui_state_map 
+634c c3858000 rtnbit1 ui_state_ble_adv 
+634d 20204317 branch app_ble_start_adv 
+
+shutter_disconnect_current_connection:
+634e 6fe144e9 fetch 2 ,mem_ui_state_map 
+634f c284c31f bbit1 ui_state_ble_connected ,app_ble_disconnect 
+6350 2020632d branch shutter_stop_bluetooth_discovery 
+
+shutter_check_data_enable:
+6351 20407dbc call disable_user 
+6352 6fe144e9 fetch 2 ,mem_ui_state_map 
+6353 c284e355 bbit1 ui_state_ble_connected ,shutter_check_ble_data_enable 
+6354 20600000 rtn 
+
+shutter_check_ble_data_enable:
+6355 6fe0c4f1 fetch 1 ,mem_ble_shutter_enable_notify 
+6356 207a0000 rtn blank 
+6357 20207dba branch enable_user 
+
+shutter_check_bluetooth_conn:
+6358 20407dbc call disable_user 
+6359 6fe144e9 fetch 2 ,mem_ui_state_map 
+635a c3848000 rtnbit1 ui_state_ble_connected 
+635b 20207dba branch enable_user 
+
+shutter_change_bluetooth_status_bt_disconn:
+
+ble_shutter_change_bluetooth_status_bt_disconn:
+635c 20206340 branch shutter_start_reconnect 
+
+shutter_check_send_data:
+635d 78567c00 disable user2 
+635e 6fe14516 fetch 2 ,mem_shutter_sleep_timeout 
+635f 67e14518 store 2 ,mem_shutter_sleep_timer 
+6360 20406358 call shutter_check_bluetooth_conn 
+6361 2034635c branch shutter_change_bluetooth_status_bt_disconn ,user 
+6362 20406351 call shutter_check_data_enable 
+6363 24740000 nrtn user 
+6364 20207dbe branch enable_user2 
+
+shutter_key_change:
+6365 2040635d call shutter_check_send_data 
+6366 24760000 nrtn user2 
+6367 1a227e00 deposit rega 
+6368 203a636c branch shutter_key_release ,blank 
+
+shutter_key_press:
+6369 20404323 call app_led_on 
+636a da60452e arg mem_key0_press ,regc 
+636b 2020636e branch push_queue_press_or_release 
+
+shutter_key_release:
+636c 20404325 call app_led_off 
+636d da604556 arg mem_key0_release ,regc 
+
+push_queue_press_or_release:
+636e dfe00005 arg max_queue_num ,pdata 
+636f 98effe00 imul32 queue ,pdata 
+6370 9a60a600 iadd regc ,regc 
+
+push_buffer_in_queue:
+6371 efe08013 ifetch 1 ,regc 
+6372 207a0000 rtn blank 
+6373 20406382 call queue_push_one_byte 
+6374 1a60a601 increase 1 ,regc 
+6375 20206371 branch push_buffer_in_queue 
+
+shutter_send_data_to_master:
+6376 6fe144e9 fetch 2 ,mem_ui_state_map 
+6377 c284e379 bbit1 ui_state_ble_connected ,pop_queue_to_ble_data 
+6378 20600000 rtn 
+
+pop_queue_to_ble_data:
+6379 20402a28 call le_fifo_check_nearly_full 
+637a 247a0000 nrtn blank 
+637b 20406385 call queue_pop_one_byte 
+637c 24740000 nrtn user 
+637d 1fe0ffff pincrease -1 
+637e 1feffe05 mul32 pdata ,shutter_ble_data_buffer ,pdata 
+637f d840457e arg mem_ble_data_buffer1 ,temp 
+6380 98408c00 iadd temp ,contr 
+6381 202063cb branch le_send_notify_from_list 
+
+queue_push_one_byte:
+6382 67e08670 store 1 ,mem_pdatatemp 
+6383 da200670 arg mem_pdatatemp ,rega 
+6384 202078b2 branch queue_push 
+
+queue_pop_one_byte:
+6385 da200670 arg mem_pdatatemp ,rega 
+6386 204078ca call queue_pop 
+6387 24740000 nrtn user 
+6388 6fe08670 fetch 1 ,mem_pdatatemp 
+6389 20600000 rtn 
+
+ble_shutter_receive_data:
+638a 6fe14398 fetch 2 ,mem_le_att_handle 
+638b c00c62e9 beq gatt_keyboard_write_handle ,ble_shutter_process_reconnect_complete 
+638c 20600000 rtn 
+
+shutter_init_param:
+638d 7046c902 jam 0x02 ,mem_shutter_power_off_timeout 
+638e 58200008 setarg 0x00200008 
+638f 67e24502 store 4 ,mem_ble_shutter_interval_min 
+6390 592c0005 setarg 0x012c0005 
+6391 e7e20005 istore 4 ,contw 
+6392 7042e117 jam 0x17 ,mem_le_local_mtu 
+6393 5800001b setarg 0x1b 
+6394 67e14332 store 2 ,mem_le_pairing_handle 
+6395 20202a41 branch le_set_fixed_ltk_justwork 
+
+shutter_load_buffer_config_form_datarom:
+6396 df200028 arg ble_key_value_list_size ,loopcnt 
+6397 d8a0457e arg mem_ble_data_buffer1 ,contw 
+6398 d8c094f9 arg ble_shutter_key_value_list_addr ,contr 
+6399 20207ccc branch memcpy_fast 
+
+shutter_soft_swtich_power_off:
+639a da200000 arg 0 ,rega 
+639b da6046b2 arg mem_shutter_power_off_led_style ,regc 
+639c 204077ca call ui_led_set_style_global 
+639d 2040634e call shutter_disconnect_current_connection 
+
+shutter_wait_power_off:
+639e 6fe0c6c9 fetch 1 ,mem_shutter_power_off_timeout 
+639f 67e0c6ca store 1 ,mem_shutter_power_off_timer 
+63a0 20600000 rtn 
+
+ui_soft_swtich_init:
+63a1 58000000 setarg ss_state_power_up 
+63a2 204063ad call ui_soft_swtich_init_power_on_time 
+63a3 7044e401 jam ui_button_state_up ,mem_ui_button_last_state 
+63a4 20407776 call ui_button_init 
+63a5 20407780 call ui_button_polling 
+
+ui_soft_switch_first_power_on:
+63a6 6fe0c6d0 fetch 1 ,mem_shutter_soft_switch_first_power_on 
+63a7 203a63aa branch ui_soft_swtich_init_next ,blank 
+63a8 6ff08132 fetch 1 ,core_lpm_isogate 
+63a9 c28263b9 bbit1 cold_wake ,ui_soft_switch_power_on 
+
+ui_soft_swtich_init_next:
+63aa 6fe144e9 fetch 2 ,mem_ui_state_map 
+63ab c3860000 rtnbit1 ui_state_btn_down 
+63ac 20204327 branch app_enter_hibernate 
+
+ui_soft_swtich_init_power_on_time:
+63ad 68494430 fetcht 2 ,mem_power_param_ptr 
+63ae e7e08002 istore 1 ,temp 
+63af efe08005 ifetch 1 ,contw 
+63b0 67e0c4eb store 1 ,mem_ui_button_timeout 
+63b1 20600000 rtn 
+
+ui_soft_switch_botton_up:
+63b2 6fe14430 fetch 2 ,mem_power_param_ptr 
+63b3 efe0803f ifetch 1 ,pdata 
+63b4 c1800000 rtnne ss_state_power_up 
+63b5 20204327 branch app_enter_hibernate 
+
+ui_soft_switch_botton_long_press:
+63b6 68494430 fetcht 2 ,mem_power_param_ptr 
+63b7 efe08002 ifetch 1 ,temp 
+63b8 c000e3c1 beq ss_state_power_on ,ui_soft_switch_power_off 
+
+ui_soft_switch_power_on:
+63b9 58000001 setarg ss_state_power_on 
+63ba 68494430 fetcht 2 ,mem_power_param_ptr 
+63bb e7e08002 istore 1 ,temp 
+63bc 18408c02 add temp ,ss_power_off_time ,contr 
+63bd efe08006 ifetch 1 ,contr 
+63be e7e0802b istore 1 ,mem_ui_button_timeout 
+63bf efe10006 ifetch 2 ,contr 
+63c0 20207d79 branch callback_func 
+
+ui_soft_switch_power_off:
+63c1 58000002 setarg ss_state_power_off 
+63c2 204063ad call ui_soft_swtich_init_power_on_time 
+63c3 18408c05 add temp ,ss_power_off_cb ,contr 
+63c4 efe10006 ifetch 2 ,contr 
+63c5 203a4327 branch app_enter_hibernate ,blank 
+63c6 20207d79 branch callback_func 
+
+shutter_ble_adv_interval_set:
+63c7 67e140a4 store 2 ,mem_lpm_interval 
+63c8 1fe0fffc increase -4 ,pdata 
+63c9 67e14389 store 2 ,mem_le_adv_interval 
+63ca 20600000 rtn 
+
+le_send_notify_from_list:
+63cb efe08006 ifetch 1 ,contr 
+63cc 1fe22200 copy pdata ,rega 
+63cd e8410006 ifetcht 2 ,contr 
+63ce 20407c6d call store_contr 
+63cf 20402dee call le_att_malloc_tx_notify 
+63d0 1a227200 copy rega ,loopcnt 
+63d1 20407c67 call get_contr 
+63d2 20207cda branch memcpy 
+
+shutter_le_uuid_table_conf:
+63d3 580093c0 setarg ble_shutter_gatt_list_addr 
+63d4 67e142f7 store 2 ,mem_ui_le_uuid_table 
+63d5 20600000 rtn 
+
+shutter_dy_le_uuid_table_conf:
+63d6 580046d2 setarg mem_shutter_le_uuid_sup 
+63d7 67e142f7 store 2 ,mem_ui_le_uuid_table 
+63d8 20600000 rtn 
+
+shutter_default_init:
+63d9 6fe146cb fetch 2 ,mem_shutter_key_conf0_temp 
+63da 67e14526 store 2 ,mem_shutter_key_conf0 
+63db 6fe0c6cd fetch 1 ,mem_shutter_led_struct_app_led_gpio_temp 
+63dc 67e0c6a9 store 1 ,mem_shutter_led_struct_app_led_gpio 
+63dd 67e0c6b4 store 1 ,mem_shutter_power_off_led_style_gpio 
+63de 6fe0c6ce fetch 1 ,mem_shutter_hard_soft_switch_case_temp 
+63df 67e0c51a store 1 ,mem_shutter_hard_soft_switch_case 
+63e0 6fe0c6cf fetch 1 ,mem_shutter_soft_switch_button_gpio_temp 
+63e1 67e0c51b store 1 ,mem_shutter_soft_switch_button_gpio 
+63e2 58000002 setarg 0x0002 
+63e3 67e1452e store 2 ,mem_key0_press 
+63e4 67e14533 store 2 ,mem_key1_press 
+63e5 58000006 setarg 0x0006 
+63e6 67e14556 store 2 ,mem_key0_release 
+63e7 67e1455b store 2 ,mem_key1_release 
+63e8 58000007 setarg 0x0007 
+63e9 67e14538 store 2 ,mem_key2_press 
+63ea 58000008 setarg 0x0008 
+63eb 67e14560 store 2 ,mem_key2_release 
+63ec 5800451c setarg mem_shutter_soft_switch_power_state 
+63ed 67e14430 store 2 ,mem_power_param_ptr 
+63ee 58201400 setarg 0x201400 
+63ef 67e1c51c store 3 ,mem_shutter_soft_switch_power_state 
+63f0 70409401 jam 0x01 ,mem_lpm_mode 
+63f1 58000100 setarg 0x0100 
+63f2 67e140a4 store 2 ,mem_lpm_interval 
+63f3 7040a608 jam 0x08 ,mem_lpm_overhead 
+63f4 7040c005 jam 0x05 ,mem_lpm_mult 
+63f5 7040c102 jam 0x02 ,mem_lpm_mult_timeout 
+63f6 58000096 setarg 0x0096 
+63f7 67e144fa store 2 ,mem_ble_shutter_reconn_blink_on_time 
+63f8 e7e10005 istore 2 ,contw 
+63f9 58000296 setarg 0x0296 
+63fa 67e144fe store 2 ,mem_ble_shutter_discovery_blink_on_time 
+63fb e7e10005 istore 2 ,contw 
+63fc 38000010 setsect 0 ,0x10 
+63fd 38048008 setsect 1 ,0x8008 
+63fe 380ac000 setsect 2 ,0x2c000 
+63ff 380c0004 setsect 3 ,0x04 
+6400 67e4450a store 8 ,mem_ble_shutter_interval_min_new 
+6401 7044ee01 jam 0x01 ,mem_ui_led_struct_num 
+6402 580046a7 setarg mem_shutter_led_struct_app_led 
+6403 67e144ef store 2 ,mem_ui_led_struct_ptr 
+6404 58000000 setarg 0x0000 
+6405 67e146a7 store 2 ,mem_shutter_led_struct_app_led 
+6406 380001a0 setsect 0 ,0x1a0 
+6407 38040068 setsect 1 ,0x68 
+6408 38080000 setsect 2 ,0x00 
+6409 380c0000 setsect 3 ,0x00 
+640a 67e446aa store 8 ,mem_shutter_led_struct_app_led_on_time 
+640b 58000301 setarg 0x0301 
+640c 67e146b2 store 2 ,mem_shutter_power_off_led_style 
+640d 380001a0 setsect 0 ,0x1a0 
+640e 380400e8 setsect 1 ,0xe8 
+640f 38080000 setsect 2 ,0x00 
+6410 380c0000 setsect 3 ,0x00 
+6411 67e446b5 store 8 ,mem_shutter_power_off_led_style_on_time 
+6412 5800000e setarg 0x000e 
+6413 67e144f2 store 2 ,mem_ble_shutter_reconn_adv_interval 
+6414 58000140 setarg 0x0140 
+6415 67e144f4 store 2 ,mem_ble_shutter_discovery_adv_interval 
+6416 67e14389 store 2 ,mem_le_adv_interval 
+6417 58000050 setarg 0x0050 
+6418 67e144f6 store 2 ,mem_ble_shutter_reconn_timeout 
+6419 70439307 jam 0x07 ,mem_le_adv_channel_map 
+641a 70438800 jam 0x00 ,mem_le_adv_enable 
+641b 380000fb setsect 0 ,0xfb 
+641c 3806c212 setsect 1 ,0x2c212 
+641d 3808800f setsect 2 ,0x800f 
+641e 380c0021 setsect 3 ,0x21 
+641f 67e443c0 store 8 ,mem_local_rx_max_octets 
+6420 38000bb8 setsect 0 ,0x0bb8 
+6421 380402ee setsect 1 ,0x02ee 
+6422 67e24512 store 4 ,mem_ble_shutter_discovery_timeout 
+6423 580045d8 setarg mem_queue_each_size 
+6424 67e143fb store 2 ,mem_queue_ptr 
+6425 58002001 setarg 0x2001 
+6426 67e145d8 store 2 ,mem_queue_each_size 
+6427 7043481f jam 0x1f ,mem_le_adv_data_len 
+6428 38010102 setsect 0 ,0x10102 
+6429 380480c1 setsect 1 ,0x80c1 
+642a 38098120 setsect 2 ,0x18120 
+642b 380c640c setsect 3 ,0x640c 
+642c 67e4c349 store 9 ,mem_le_adv_data 
+642d 380003c1 setsect 0 ,0x3c1 
+642e e7e10005 istore 2 ,contw 
+642f 7043681f jam 0x1f ,mem_le_scan_data_len 
+6430 3802090d setsect 0 ,0x2090d 
+6431 38074c15 setsect 1 ,0x34c15 
+6432 380a8532 setsect 2 ,0x28532 
+6433 380dd1d5 setsect 3 ,0x1d1d5 
+6434 67e4c369 store 9 ,mem_le_scan_data 
+6435 38026574 setsect 0 ,0x26574 
+6436 3804001c setsect 1 ,0x1c 
+6437 e7e18005 istore 3 ,contw 
+6438 58004523 setarg mem_shutter_keyscan 
+6439 67e1442c store 2 ,mem_keyscan_ptr 
+643a 70452302 jam 0x02 ,mem_shutter_key_num 
+643b 580045fd setarg mem_shutter_nv_data 
+643c 67e143f8 store 2 ,mem_nv_data_ptr 
+643d 7043fa05 jam 0x05 ,mem_nv_data_number 
+643e 6fe0c6d1 fetch 1 ,mem_shutter_dy_conf 
+643f c00063d3 beq shutter_type ,shutter_le_uuid_table_conf 
+6440 c000e3d6 beq shutter_dy_type ,shutter_dy_le_uuid_table_conf 
+6441 20600000 rtn 
+
+shutter_dy_6_key_conf:
+6442 6fe34ef4 fetch shutter_six_key ,mem_shutter_dy_key_conf 
+6443 67e34526 store shutter_six_key ,mem_shutter_key_conf0 
+6444 70452306 jam shutter_six_key ,mem_shutter_key_num 
+6445 58004523 setarg mem_shutter_key_num 
+6446 67e1442c store 2 ,mem_keyscan_ptr 
+6447 20600000 rtn 
+
+shutter_dy_7_key_conf:
+6448 6fe3cef4 fetch shutter_seven_key ,mem_shutter_dy_key_conf 
+6449 67e3c526 store shutter_seven_key ,mem_shutter_key_conf0 
+644a 70452307 jam shutter_seven_key ,mem_shutter_key_num 
+644b 58004523 setarg mem_shutter_key_num 
+644c 67e1442c store 2 ,mem_keyscan_ptr 
+644d 20600000 rtn 
+
+shutter_dy_8_key_conf:
+644e 6fe44ef4 fetch shutter_eight_key ,mem_shutter_dy_key_conf 
+644f 67e44526 store shutter_eight_key ,mem_shutter_key_conf0 
+6450 70452308 jam shutter_eight_key ,mem_shutter_key_num 
+6451 58004523 setarg mem_shutter_key_num 
+6452 67e1442c store 2 ,mem_keyscan_ptr 
+6453 20600000 rtn 
+
+shutter_dy_key_conf:
+6454 6fe0cef3 fetch 1 ,mem_shutter_key_num_conf 
+6455 c0036442 beq shutter_six_key ,shutter_dy_6_key_conf 
+6456 c003e448 beq shutter_seven_key ,shutter_dy_7_key_conf 
+6457 c004644e beq shutter_eight_key ,shutter_dy_8_key_conf 
+6458 20600000 rtn 
+
+shutter_dy_adv_conf:
+6459 44d0c014 bpatch patch14_1 ,mem_patch14 
+645a 6fe44f1a fetch 8 ,mem_shutter_ble_discovery_time_conf 
+645b 67e44512 store 8 ,mem_ble_shutter_discovery_timeout 
+645c 58000096 setarg 0x0096 
+645d 67e144f6 store 2 ,mem_ble_shutter_reconn_timeout 
+645e 6fe3cf6a fetch 7 ,mem_shutter_led_on_light_dark_led_conf 
+645f 67e3c6a7 store 7 ,mem_shutter_led_struct_app_led 
+6460 6fe3cf71 fetch 7 ,mem_shutter_led_off_light_dark_led_conf 
+6461 67e3c6b2 store 7 ,mem_shutter_power_off_led_style 
+6462 6fe24f78 fetch 4 ,mem_shutter_reconn_blink_on_time_conf 
+6463 67e244fa store 4 ,mem_ble_shutter_reconn_blink_on_time 
+6464 6fe24f7c fetch 4 ,mem_shutter_discovery_blink_on_time_conf 
+6465 67e244fe store 4 ,mem_ble_shutter_discovery_blink_on_time 
+6466 5800000e setarg 0x000e 
+6467 67e144f2 store 2 ,mem_ble_shutter_reconn_adv_interval 
+6468 58000140 setarg 0x0140 
+6469 67e144f4 store 2 ,mem_ble_shutter_discovery_adv_interval 
+646a 67e14389 store 2 ,mem_le_adv_interval 
+646b 6fe44f12 fetch 8 ,mem_ble_shutter_dy_interval_min_new 
+646c 67e4450a store 8 ,mem_ble_shutter_interval_min_new 
+646d 20600000 rtn 
+
+shutter_dy_init:
+646e 20407396 call enable_authrom 
+646f 20758000 rtn wake 
+6470 20406454 call shutter_dy_key_conf 
+6471 20406459 call shutter_dy_adv_conf 
+6472 58006484 setarg shutter_dy_process_idle 
+6473 67e143db store 2 ,mem_cb_idle_process 
+6474 580064df setarg shutter_dy_process_bb_event 
+6475 67e143dd store 2 ,mem_cb_bb_event_process 
+6476 580066c5 setarg ble_shutter_dy_receive_data 
+6477 67e143df store 2 ,mem_cb_att_write 
+6478 580064b5 setarg shutter_dy_le_bb_event_timer 
+6479 67e143e3 store 2 ,mem_cb_event_timer 
+647a 58006505 setarg shutter_dy_key_change 
+647b 67e14524 store 2 ,mem_cb_shutter_keycan 
+647c 204062c2 call shutter_common_init 
+647d 6fe14f97 fetch 2 ,mem_shutter_le_pairing_handle 
+647e 67e14332 store 2 ,mem_le_pairing_handle 
+647f 6fe4450a fetch 8 ,mem_ble_shutter_interval_min_new 
+6480 67e44502 store 8 ,mem_ble_shutter_interval_min 
+6481 2040648e call shutter_dy_iphone_every_move_max_set 
+6482 44d14014 bpatch patch14_2 ,mem_patch14 
+6483 202062bd branch shutter_power_switch 
+
+shutter_dy_process_idle:
+6484 2040649b call shutter_dy_shutter_send_data_to_master 
+6485 d8e00009 arg key_scan_timer ,queue 
+6486 20407cef call timer_check 
+6487 247a0000 nrtn blank 
+6488 58000020 setarg 0x20 
+6489 d8e00009 arg key_scan_timer ,queue 
+648a 20407ce1 call timer_init 
+648b 78547c00 disable user 
+648c 2040701b call keyscan_process_lpm_before 
+648d 2020656e branch shutter_dy_keyscan_key_process 
+
+shutter_dy_iphone_every_move_max_set:
+648e 5800001f setarg 0x1f 
+648f 1feffe0a mul32 pdata ,every_payload_len ,pdata 
+6490 d8404c12 arg mem_shutter_mousekey_value_list ,temp 
+6491 9840a200 iadd temp ,rega 
+6492 1a20a203 increase 3 ,rega 
+6493 d8400062 arg iphone_once_max_move_value ,temp 
+6494 e0408011 istoret 1 ,rega 
+6495 1a20a20b increase 11 ,rega 
+6496 dfe00fff arg 0xfff ,pdata 
+6497 98467e00 isub temp ,pdata 
+6498 1ff27e00 lshift4 pdata ,pdata 
+6499 e7e10011 istore 2 ,rega 
+649a 20600000 rtn 
+
+shutter_dy_shutter_send_data_to_master:
+649b 6fe144e9 fetch 2 ,mem_ui_state_map 
+649c c284e4a0 bbit1 ui_state_ble_connected ,shutter_dy_pop_queue_to_ble_data 
+649d d8a045da arg mem_queue_curr_num ,contw 
+649e df200023 arg 35 ,loopcnt 
+649f 20207ca1 branch clear_mem 
+
+shutter_dy_pop_queue_to_ble_data:
+64a0 20402a28 call le_fifo_check_nearly_full 
+64a1 247a0000 nrtn blank 
+64a2 204078fa call queue_empty 
+64a3 207a0000 rtn blank 
+64a4 684a49f6 fetcht 4 ,mem_key_send_clk 
+64a5 1c427e00 copy clkn_bt ,pdata 
+64a6 98460400 isub temp ,temp 
+64a7 20628000 rtn zero 
+64a8 242164ac nbranch shutter_dy_pop_queue_to_ble_data2 ,positive 
+64a9 6fe0c9f5 fetch 1 ,mem_send_data_delay 
+64aa 98467c00 isub temp ,null 
+64ab 20610000 rtn positive 
+
+shutter_dy_pop_queue_to_ble_data2:
+64ac 1c427e00 copy clkn_bt ,pdata 
+64ad 67e249f6 store 4 ,mem_key_send_clk 
+64ae 20406385 call queue_pop_one_byte 
+64af 24740000 nrtn user 
+64b0 1fe0ffff pincrease -1 
+64b1 1feffe0a mul32 pdata ,10 ,pdata 
+64b2 d8404c12 arg mem_shutter_mousekey_value_list ,temp 
+64b3 98408c00 iadd temp ,contr 
+64b4 202063cb branch le_send_notify_from_list 
+
+shutter_dy_le_bb_event_timer:
+64b5 20406858 call shutter_dy_shutter_1s_timer 
+64b6 2040676c call shutter_dy_link_key_loop_timer 
+64b7 2040675a call shutter_dy_long_key_volume_timer 
+64b8 204064bc call shutter_dy_iphone_move_mid_timer 
+64b9 204064d3 call shutter_dy_clear_key_state_timer 
+64ba 20406311 call shutter_check_sleep_timer 
+64bb 202064d9 branch shutter_dy_check_power_off_timer 
+
+shutter_dy_iphone_move_mid_timer:
+64bc da604ed1 arg mem_shutter_move_mid_timer ,regc 
+64bd da4064bf arg shutter_dy_iphone_move_mid_timeout ,regb 
+64be 202042e0 branch timer_single_step 
+
+shutter_dy_iphone_move_mid_timeout:
+64bf 204078fa call queue_empty 
+64c0 247a0000 nrtn blank 
+64c1 6fe148bc fetch 2 ,mem_key_value_xmem 
+64c2 247a0000 nrtn blank 
+
+shutter_dy_iphone_move_mid:
+64c3 20406730 call shutter_dy_check_iphone 
+64c4 203a64cd branch shutter_dy_android_like_loaction_mid ,blank 
+64c5 18e27e00 copy queue ,pdata 
+64c6 2fe00e04 compare 0x04 ,pdata ,0x07 
+64c7 2020e4cf branch shutter_dy_iphone_up_mid ,true 
+64c8 18e27e00 copy queue ,pdata 
+64c9 2fe00e01 compare 0x01 ,pdata ,0x07 
+64ca 2020e4d1 branch shutter_dy_iphone_like_mid ,true 
+64cb da604ec6 arg mem_shutter_iphone_move_mid ,regc 
+64cc 20206371 branch push_buffer_in_queue 
+
+shutter_dy_android_like_loaction_mid:
+64cd da604eda arg mem_shutter_android_move_mid ,regc 
+64ce 20206371 branch push_buffer_in_queue 
+
+shutter_dy_iphone_up_mid:
+64cf da604edf arg mem_shutter_iphone_up_mid ,regc 
+64d0 20206371 branch push_buffer_in_queue 
+
+shutter_dy_iphone_like_mid:
+64d1 da604ee9 arg mem_shutter_iphone_like_mid ,regc 
+64d2 20206371 branch push_buffer_in_queue 
+
+shutter_dy_clear_key_state_timer:
+64d3 da604c0f arg mem_shutter_like_timeout ,regc 
+64d4 da4064d6 arg shutter_dy_clear_key_state_timeout ,regb 
+64d5 202042e0 branch timer_single_step 
+
+shutter_dy_clear_key_state_timeout:
+64d6 df20000a arg shutter_key_conf_sate_bytes ,loopcnt 
+64d7 d8a04a04 arg mem_shutter_key_state1 ,contw 
+64d8 20207ca1 branch clear_mem 
+
+shutter_dy_check_power_off_timer:
+64d9 da6046ca arg mem_shutter_power_off_timer ,regc 
+64da da4064dc arg shutter_dy_check_power_off_timeout ,regb 
+64db 202042e0 branch timer_single_step 
+
+shutter_dy_check_power_off_timeout:
+64dc 6fe144e9 fetch 2 ,mem_ui_state_map 
+64dd c284e39e bbit1 ui_state_ble_connected ,shutter_wait_power_off 
+64de 20204327 branch app_enter_hibernate 
+
+shutter_dy_process_bb_event:
+64df 1a627e00 copy regc ,pdata 
+64e0 c00a64f4 beq bt_evt_le_connected ,ble_shutter_dy_process_baseband_connect 
+64e1 c00ae4ef beq bt_evt_le_disconnected ,ble_shutter_dy_process_baseband_disconnect 
+64e2 c018e4e6 beq bt_evt_le_pairing_success ,ble_shutter_dy_pairing_success 
+64e3 c1200000 rtneq bt_evt_le_parse_conn_papa_update_rsp 
+64e4 c01966c8 beq bt_evt_le_start_enc ,shutter_dy_le_find_service_hand_by_uuid 
+64e5 202062d9 branch shutter_process_bb_event 
+
+ble_shutter_dy_pairing_success:
+64e6 704ed201 jam 1 ,mem_shutter_pairing_success 
+64e7 20406783 call shutter_dy_clear_move_config 
+64e8 6fe14f84 fetch 2 ,mem_android_initial_move_x 
+64e9 67e14ebe store 2 ,mem_shutter_move_data_x 
+64ea 68494f86 fetcht 2 ,mem_android_initial_move_y 
+64eb 58000fff setarg 0xfff 
+64ec 98467e00 isub temp ,pdata 
+64ed 67e14ec0 store 2 ,mem_shutter_move_data_y 
+64ee 20600000 rtn 
+
+ble_shutter_dy_process_baseband_disconnect:
+64ef 704ebb00 jam 0 ,mem_shutter_le_conned 
+64f0 704ed200 jam 0 ,mem_shutter_pairing_success 
+64f1 204065ad call shutter_dy_move_mode_disable 
+64f2 20406500 call shutter_dy_over_clear 
+64f3 202062e6 branch ble_shutter_process_baseband_disconnect 
+
+ble_shutter_dy_process_baseband_connect:
+64f4 1c427e00 copy clkn_bt ,pdata 
+64f5 67e249f6 store 4 ,mem_key_send_clk 
+64f6 20406729 call shutter_dy_remote_not_iphone 
+64f7 202062e2 branch ble_shutter_process_baseband_connect 
+
+shutter_dy_check_send_data:
+64f8 78567c00 disable user2 
+64f9 6fe14516 fetch 2 ,mem_shutter_sleep_timeout 
+64fa 67e14518 store 2 ,mem_shutter_sleep_timer 
+64fb 20406358 call shutter_check_bluetooth_conn 
+64fc 2034635c branch shutter_change_bluetooth_status_bt_disconn ,user 
+64fd 20406351 call shutter_check_data_enable 
+64fe 24740000 nrtn user 
+64ff 20207dbe branch enable_user2 
+
+shutter_dy_over_clear:
+6500 704ed500 jam 0 ,mem_last_press_key_value 
+6501 20600000 rtn 
+
+shutter_dy_key_value_filter:
+6502 18e27e00 copy queue ,pdata 
+6503 c1808000 rtnne shutter_like_key_num 
+6504 2020650c branch shutter_dy_key_press_next 
+
+shutter_dy_key_change:
+6505 204064f8 call shutter_dy_check_send_data 
+6506 24760000 nrtn user2 
+6507 1a227e00 deposit rega 
+6508 203a6537 branch shutter_dy_shutter_key_release ,blank 
+
+shutter_dy_key_press:
+6509 44d1c014 bpatch patch14_3 ,mem_patch14 
+650a 6fe0cfaf fetch 1 ,mem_shutter_link_loop_flag 
+650b 243a6502 nbranch shutter_dy_key_value_filter ,blank 
+
+shutter_dy_key_press_next:
+650c 704c1001 jam 1 ,mem_shutter_key_pressed 
+650d 20404323 call app_led_on 
+650e 2040652c call shutter_dy_key_press_clk 
+650f 20406561 call shutter_dy_jude_queue_size 
+6510 20216500 branch shutter_dy_over_clear ,positive 
+6511 18e27e00 copy queue ,pdata 
+6512 6848ced5 fetcht 1 ,mem_last_press_key_value 
+6513 98467c00 isub temp ,null 
+6514 2442e526 ncall shutter_dy_iphone_check_move_mid ,zero 
+6515 18e27e00 copy queue ,pdata 
+6516 67e0ced5 store 1 ,mem_last_press_key_value 
+6517 6848ced8 fetcht 1 ,mem_move_mode_key_index 
+6518 98467c00 isub temp ,null 
+6519 2022e524 branch shutter_dy_key_move_to_specify_location ,zero 
+651a 6fe0ced9 fetch 1 ,mem_move_mode_trigger_enable 
+651b 243a651f nbranch shutter_dy_move_set ,blank 
+
+shutter_dy_page_set:
+651c 20406732 call shutter_dy_le_get_press_ptr 
+651d dfe0000a arg max_queue_new_press ,pdata 
+651e 2020655a branch shutter_dy_push_queue_press_or_release 
+
+shutter_dy_move_set:
+651f 2040677f call shutter_dy_jude_clear_move_config 
+6520 18e27e00 copy queue ,pdata 
+6521 c000e51c beq shutter_like_key_num ,shutter_dy_page_set 
+6522 20406642 call shutter_dy_check_move_data 
+6523 202065f4 branch shutter_dy_move_to_specify_location 
+
+shutter_dy_key_move_to_specify_location:
+6524 704ed601 jam 1 ,mem_shutter_first_move 
+6525 202065f4 branch shutter_dy_move_to_specify_location 
+
+shutter_dy_iphone_check_move_mid:
+6526 44d24014 bpatch patch14_4 ,mem_patch14 
+6527 6fe0ced9 fetch 1 ,mem_move_mode_trigger_enable 
+6528 203a64c3 branch shutter_dy_iphone_move_mid ,blank 
+6529 18e27e00 copy queue ,pdata 
+652a c000e4c3 beq shutter_like_key_num ,shutter_dy_iphone_move_mid 
+652b 20600000 rtn 
+
+shutter_dy_key_press_clk:
+652c dfe0000a arg shutter_key_conf_sate_bytes ,pdata 
+652d 98effe00 imul32 queue ,pdata 
+652e da6049fa arg mem_shutter_key_state0 ,regc 
+652f 9a60a600 iadd regc ,regc 
+6530 1c427e00 copy clkn_bt ,pdata 
+6531 e7e20013 istore key_state_press_clk_length ,regc 
+6532 1a60a604 increase key_state_press_count_offset ,regc 
+6533 efe08013 ifetch 1 ,regc 
+6534 1fe0fe01 increase 1 ,pdata 
+6535 e7e08013 istore 1 ,regc 
+6536 20600000 rtn 
+
+shutter_dy_shutter_key_release:
+6537 44d2c014 bpatch patch14_5 ,mem_patch14 
+6538 6fe0ced9 fetch 1 ,mem_move_mode_trigger_enable 
+6539 205a654b call shutter_dy_key_release_led ,blank 
+
+shutter_dy_shutter_key_release_time:
+653a dfe0000a arg shutter_key_conf_sate_bytes ,pdata 
+653b 98effe00 imul32 queue ,pdata 
+653c da6049fa arg mem_shutter_key_state0 ,regc 
+653d 9a60a600 iadd regc ,regc 
+653e e8420013 ifetcht 4 ,regc 
+653f 18467c00 sub temp ,0 ,null 
+6540 20628000 rtn zero 
+6541 1c427e00 copy clkn_bt ,pdata 
+6542 98460400 isub temp ,temp 
+6543 24417806 ncall ui_timer_timeout ,positive 
+6544 1a608c09 add regc ,key_state_longpress_offset ,contr 
+6545 efe08006 ifetch 1 ,contr 
+6546 243a6566 nbranch shutter_dy_push_queue_long_release ,blank 
+6547 1a60a605 increase key_state_release_clk_offset ,regc 
+6548 1c427e00 copy clkn_bt ,pdata 
+6549 e7e20013 istore key_state_release_clk_length ,regc 
+654a 20600000 rtn 
+
+shutter_dy_key_release_led:
+654b 6fe0cfaf fetch 1 ,mem_shutter_link_loop_flag 
+654c 243a4323 nbranch app_led_on ,blank 
+654d 20204325 branch app_led_off 
+
+shutter_dy_push_queue_release:
+654e 1a608c04 add regc ,4 ,contr 
+654f efe08006 ifetch 1 ,contr 
+6550 20206551 branch shutter_dy_push_queue_release1 
+
+shutter_dy_push_queue_release1:
+6551 2040656b call shutter_clear_dy_key_state 
+6552 6fe0ced9 fetch 1 ,mem_move_mode_trigger_enable 
+6553 243a655d nbranch shutter_dy_move_mode_queue_release ,blank 
+
+shutter_dy_push_queue_release1_next:
+6554 20406561 call shutter_dy_jude_queue_size 
+6555 20216500 branch shutter_dy_over_clear ,positive 
+6556 20406738 call shutter_dy_le_get_release_ptr 
+6557 18e27e00 copy queue ,pdata 
+6558 c001e740 beq shutter_photo_key_num ,shutter_dy_le_get_release_ptr_volume 
+6559 dfe0000f arg max_queue_num_release ,pdata 
+
+shutter_dy_push_queue_press_or_release:
+655a 98effe00 imul32 queue ,pdata 
+655b 9a60a600 iadd regc ,regc 
+655c 20206371 branch push_buffer_in_queue 
+
+shutter_dy_move_mode_queue_release:
+655d 18e27e00 copy queue ,pdata 
+655e c000e554 beq shutter_like_key_num ,shutter_dy_push_queue_release1_next 
+655f c001e554 beq shutter_photo_key_num ,shutter_dy_push_queue_release1_next 
+6560 20600000 rtn 
+
+shutter_dy_jude_queue_size:
+6561 20407902 call queue_get_size 
+6562 e8408006 ifetcht 1 ,contr 
+6563 98467e00 isub temp ,pdata 
+6564 1fe67c0a sub pdata ,max_queue_new_press ,null 
+6565 20600000 rtn 
+
+shutter_dy_push_queue_long_release:
+6566 704ed001 jam 1 ,mem_shutter_long_key_released_flag 
+6567 2040656b call shutter_clear_dy_key_state 
+6568 da604abe arg mem_key0_long_release ,regc 
+6569 dfe00003 arg max_queue_num_long_release ,pdata 
+656a 2020655a branch shutter_dy_push_queue_press_or_release 
+
+shutter_clear_dy_key_state:
+656b df20000a arg shutter_key_conf_sate_bytes ,loopcnt 
+656c 1a620a00 copy regc ,contw 
+656d 20207ca1 branch clear_mem 
+
+shutter_dy_keyscan_key_process:
+656e 6fe148bc fetch 2 ,mem_key_value_xmem 
+656f 67e1442e store 2 ,mem_key_value_retention 
+6570 204065be call shutter_dy_keyscan_key_process_next 
+6571 6fe1442e fetch 2 ,mem_key_value_retention 
+6572 67e148bc store 2 ,mem_key_value_xmem 
+6573 d8e00000 arg 0 ,queue 
+6574 6fe0c523 fetch 1 ,mem_shutter_key_num 
+6575 1fe27200 copy pdata ,loopcnt 
+6576 da6049fa arg mem_shutter_key_state0 ,regc 
+
+shutter_dy_keyscan_key_check_release_loop:
+6577 1f227e00 copy loopcnt ,pdata 
+6578 67e10678 store 2 ,mem_temp 
+6579 1a627e00 copy regc ,pdata 
+657a 67e1068c store 2 ,mem_regc 
+657b 18e27e00 copy queue ,pdata 
+657c 67e1067a store 2 ,mem_temp + 2 
+657d 204065b4 call shutter_dy_keyscan_key_check_release 
+657e 6fe1068c fetch 2 ,mem_regc 
+657f 1fe22600 copy pdata ,regc 
+6580 6fe1067a fetch 2 ,mem_temp + 2 
+6581 1fe20e00 copy pdata ,queue 
+6582 2040658b call shutter_dy_keyscan_key_check_long_press 
+6583 6fe1067a fetch 2 ,mem_temp + 2 
+6584 1fe08e01 add pdata ,1 ,queue 
+6585 6fe1068c fetch 2 ,mem_regc 
+6586 1fe0a60a add pdata ,shutter_key_conf_sate_bytes ,regc 
+6587 6fe10678 fetch 2 ,mem_temp 
+6588 1fe27200 copy pdata ,loopcnt 
+6589 c2006577 loop shutter_dy_keyscan_key_check_release_loop 
+658a 20600000 rtn 
+
+shutter_dy_keyscan_key_check_long_press:
+658b efe20013 ifetch key_state_press_clk_length ,regc 
+658c 207a0000 rtn blank 
+658d 1fe20400 copy pdata ,temp 
+658e 1c427e00 copy clkn_bt ,pdata 
+658f 98460400 isub temp ,temp 
+6590 24610000 nrtn positive 
+6591 580009c4 setarg 2500 
+6592 98467c00 isub temp ,null 
+6593 20610000 rtn positive 
+6594 1c427e00 copy clkn_bt ,pdata 
+6595 e7e20013 istore 4 ,regc 
+6596 1a60a609 increase key_state_longpress_offset ,regc 
+6597 58000001 setarg 1 
+6598 e7e08013 istore key_state_longpress_length ,regc 
+6599 6fe0ced0 fetch 1 ,mem_shutter_long_key_released_flag 
+659a 207a0000 rtn blank 
+659b 704ed000 jam 0 ,mem_shutter_long_key_released_flag 
+659c 44d34014 bpatch patch14_6 ,mem_patch14 
+659d 20406755 call shutter_dy_long_key_function 
+659e 6fe0ced7 fetch 1 ,mem_move_mode_set 
+659f c00065a2 beq move_combine_key ,shutter_dy_key_long_press_set_key_normal 
+65a0 c000e5a5 beq move_single_key ,shutter_dy_key_long_press_set_move_trigger 
+65a1 20600000 rtn 
+
+shutter_dy_key_long_press_set_key_normal:
+65a2 204065af call shutter_dy_long_press_android_or_ios 
+65a3 dfe00003 arg max_queue_num_long ,pdata 
+65a4 2020655a branch shutter_dy_push_queue_press_or_release 
+
+shutter_dy_key_long_press_set_move_trigger:
+65a5 18e27e00 copy queue ,pdata 
+65a6 6848ced8 fetcht 1 ,mem_move_mode_key_index 
+65a7 98467c00 isub temp ,null 
+65a8 2422e5a2 nbranch shutter_dy_key_long_press_set_key_normal ,zero 
+65a9 6fe0ced9 fetch 1 ,mem_move_mode_trigger_enable 
+65aa 79407e00 setflip 0 ,pdata 
+65ab 67e0ced9 store 1 ,mem_move_mode_trigger_enable 
+65ac 247a0000 nrtn blank 
+
+shutter_dy_move_mode_disable:
+65ad 704ed900 jam 0 ,mem_move_mode_trigger_enable 
+65ae 20204325 branch app_led_off 
+
+shutter_dy_long_press_android_or_ios:
+65af da604aa9 arg mem_key0_long_press ,regc 
+65b0 20406730 call shutter_dy_check_iphone 
+65b1 207a0000 rtn blank 
+65b2 da604bd0 arg mem_key0_long_press_i ,regc 
+65b3 20600000 rtn 
+
+shutter_dy_keyscan_key_check_release:
+65b4 1a60a405 add regc ,key_state_release_clk_offset ,regb 
+65b5 efe20012 ifetch key_state_release_clk_length ,regb 
+65b6 207a0000 rtn blank 
+65b7 1fe20400 copy pdata ,temp 
+65b8 1c427e00 copy clkn_bt ,pdata 
+65b9 98460400 isub temp ,temp 
+65ba 24417806 ncall ui_timer_timeout ,positive 
+65bb 580003e8 setarg 1000 
+65bc 98467c00 isub temp ,null 
+65bd 2020654e branch shutter_dy_push_queue_release 
+
+shutter_dy_keyscan_key_process_next:
+65be 6fe1442c fetch 2 ,mem_key_num_ptr 
+65bf efe0803f ifetch 1 ,pdata 
+65c0 207a0000 rtn blank 
+65c1 58000000 setarg 0 
+65c2 67e106f1 store 2 ,mem_key_value_temp 
+65c3 20407003 call keyscan_scan_key 
+65c4 243477a5 nbranch lpm_button_clean_wake_lock ,user 
+65c5 204077a3 call lpm_button_get_wake_lock 
+65c6 78547c00 disable user 
+65c7 6fe0c388 fetch 1 ,mem_le_adv_enable 
+65c8 247a0000 nrtn blank 
+65c9 44d3c014 bpatch patch14_7 ,mem_patch14 
+65ca 6fe0ced7 fetch 1 ,mem_move_mode_set 
+65cb c000e5cf beq move_single_key ,shutter_dy_skip_check_combine_key 
+65cc 20406628 call shutter_dy_check_combine_key_release 
+65cd 204065dc call shutter_dy_check_combine_key 
+65ce 20740000 rtn user 
+
+shutter_dy_skip_check_combine_key:
+65cf 204065d5 call shutter_dy_single_key_led 
+65d0 6fe106f1 fetch 2 ,mem_key_value_temp 
+65d1 67e106f8 store 2 ,mem_key_value_temp4 
+65d2 7006fa00 jam 0 ,mem_key_value_temp6 
+65d3 18000e00 force 0 ,queue 
+65d4 2020703b branch keyscan_key_lp1 
+
+shutter_dy_single_key_led:
+65d5 6fe0ced5 fetch 1 ,mem_last_press_key_value 
+65d6 6848ced8 fetcht 1 ,mem_move_mode_key_index 
+65d7 98467c00 isub temp ,null 
+65d8 2022c323 branch app_led_on ,zero 
+65d9 6fe0ced9 fetch 1 ,mem_move_mode_trigger_enable 
+65da 243a4325 nbranch app_led_off ,blank 
+65db 20600000 rtn 
+
+shutter_dy_check_combine_key:
+65dc d8e00000 arg 0 ,queue 
+
+shutter_dy_check_combine_key_loop:
+65dd da404ad3 arg mem_combine_key0 ,regb 
+65de dfe00002 arg 2 ,pdata 
+65df 98effe00 imul32 queue ,pdata 
+65e0 9a40a400 iadd regb ,regb 
+65e1 efe10012 ifetch 2 ,regb 
+65e2 207a0000 rtn blank 
+65e3 684906f1 fetcht 2 ,mem_key_value_temp 
+65e4 9842fc00 ixor temp ,null 
+65e5 2022e5e8 branch shutter_dy_check_combine_key_parse ,zero 
+65e6 18e08e01 increase 1 ,queue 
+65e7 202065dd branch shutter_dy_check_combine_key_loop 
+
+shutter_dy_check_combine_key_parse:
+65e8 67e14adf store 2 ,mem_combine_key_state0 
+65e9 20404323 call app_led_on 
+65ea da604ae1 arg mem_combine_key0_press ,regc 
+65eb dfe0000a arg max_queue_num_combinekey ,pdata 
+65ec 98effe00 imul32 queue ,pdata 
+65ed 9a60a600 iadd regc ,regc 
+65ee 204065f0 call shutter_dy_push_buffer_in_queue 
+65ef 20206633 branch shutter_dy_combine_key_enableuser 
+
+shutter_dy_push_buffer_in_queue:
+65f0 2040677f call shutter_dy_jude_clear_move_config 
+65f1 efe08013 ifetch 1 ,regc 
+65f2 207a0000 rtn blank 
+65f3 20406642 call shutter_dy_check_move_data 
+
+shutter_dy_move_to_specify_location:
+65f4 2040677f call shutter_dy_jude_clear_move_config 
+65f5 20406609 call shutter_dy_move_down_left_corner 
+65f6 20406614 call shutter_dy_move_x_max 
+65f7 2040661e call shutter_dy_move_y_max 
+65f8 dfe00005 arg 0x05 ,pdata 
+65f9 20406382 call queue_push_one_byte 
+65fa 20406730 call shutter_dy_check_iphone 
+65fb 207a0000 rtn blank 
+65fc 7049f578 jam 120 ,mem_send_data_delay 
+65fd dfe00006 arg 0x06 ,pdata 
+65fe 20206382 branch queue_push_one_byte 
+
+shutter_dy_move_down_left_corner_count_set:
+65ff 6848ceba fetcht 1 ,mem_shutter_back_count 
+6600 20406730 call shutter_dy_check_iphone 
+6601 207a0000 rtn blank 
+6602 6848cebd fetcht 1 ,mem_shutter_iphone_beyond_y_count 
+6603 18408401 increase 1 ,temp 
+6604 6fe0ced6 fetch 1 ,mem_shutter_first_move 
+6605 207a0000 rtn blank 
+6606 6848ceba fetcht 1 ,mem_shutter_back_count 
+6607 704ed600 jam 0 ,mem_shutter_first_move 
+6608 20600000 rtn 
+
+shutter_dy_move_down_left_corner:
+6609 204065ff call shutter_dy_move_down_left_corner_count_set 
+660a 18427e00 copy temp ,pdata 
+660b 207a0000 rtn blank 
+660c 67e0cec3 store 1 ,mem_shutter_back_count_cache 
+
+shutter_dy_move_down_left_corner_loop:
+660d dfe00013 arg 0x13 ,pdata 
+660e 20406382 call queue_push_one_byte 
+660f 6fe0cec3 fetch 1 ,mem_shutter_back_count_cache 
+6610 1fe0ffff increase -1 ,pdata 
+6611 67e0cec3 store 1 ,mem_shutter_back_count_cache 
+6612 207a0000 rtn blank 
+6613 2020660d branch shutter_dy_move_down_left_corner_loop 
+
+shutter_dy_move_x_max:
+6614 6fe0cebc fetch 1 ,mem_shutter_iphone_beyond_x_count 
+6615 207a0000 rtn blank 
+6616 67e0cec4 store 1 ,mem_shutter_iphone_beyond_x_cache 
+
+shutter_dy_move_x_max_number:
+6617 dfe00020 arg 0x20 ,pdata 
+6618 20406382 call queue_push_one_byte 
+6619 6fe0cec4 fetch 1 ,mem_shutter_iphone_beyond_x_cache 
+661a 1fe0ffff increase -1 ,pdata 
+661b 67e0cec4 store 1 ,mem_shutter_iphone_beyond_x_cache 
+661c 207a0000 rtn blank 
+661d 20206617 branch shutter_dy_move_x_max_number 
+
+shutter_dy_move_y_max:
+661e 6fe0cebd fetch 1 ,mem_shutter_iphone_beyond_y_count 
+661f 207a0000 rtn blank 
+6620 67e0cec5 store 1 ,mem_shutter_iphone_beyond_y_cache 
+
+shutter_dy_move_y_max_number:
+6621 dfe00021 arg 0x21 ,pdata 
+6622 20406382 call queue_push_one_byte 
+6623 6fe0cec5 fetch 1 ,mem_shutter_iphone_beyond_y_cache 
+6624 1fe0ffff increase -1 ,pdata 
+6625 67e0cec5 store 1 ,mem_shutter_iphone_beyond_y_cache 
+6626 207a0000 rtn blank 
+6627 20206621 branch shutter_dy_move_y_max_number 
+
+shutter_dy_check_combine_key_release:
+6628 6fe14adf fetch 2 ,mem_combine_key_state0 
+6629 207a0000 rtn blank 
+662a 684906f1 fetcht 2 ,mem_key_value_temp 
+662b 18467c00 sub temp ,0 ,null 
+662c 2022e636 branch shutter_dy_check_combine_key_release_all ,zero 
+662d 98467c00 isub temp ,null 
+662e 20628000 rtn zero 
+662f 60494adf storet 2 ,mem_combine_key_state0 
+6630 6fe14ed3 fetch 2 ,mem_combine_key_release_value 
+6631 98467c00 isub temp ,null 
+6632 2042c325 call app_led_off ,zero 
+
+shutter_dy_combine_key_enableuser:
+6633 6fe106f1 fetch 2 ,mem_key_value_temp 
+6634 67e1442e store 2 ,mem_key_value_retention 
+6635 20207dba branch enable_user 
+
+shutter_dy_check_combine_key_release_all:
+6636 704ed001 jam 1 ,mem_shutter_long_key_released_flag 
+6637 20404325 call app_led_off 
+6638 da604b1d arg mem_combine_key_release ,regc 
+6639 204065f0 call shutter_dy_push_buffer_in_queue 
+663a 58000000 setarg 0 
+663b 67e14adf store 2 ,mem_combine_key_state0 
+663c 7048ae32 jam 50 ,mem_shutter_1s_timer 
+663d 20406633 call shutter_dy_combine_key_enableuser 
+663e 6fe0c523 fetch 1 ,mem_shutter_key_num 
+663f 1feff20a mul32 pdata ,shutter_key_conf_sate_bytes ,loopcnt 
+6640 d8a049fa arg mem_shutter_key_state0 ,contw 
+6641 20207ca1 branch clear_mem 
+
+shutter_dy_check_move_data:
+6642 44d44015 bpatch patch15_0 ,mem_patch15 
+6643 6fe0ced7 fetch 1 ,mem_move_mode_set 
+6644 c000e647 beq move_single_key ,shutter_dy_check_move_data_single_key 
+6645 c000664d beq move_combine_key ,shutter_dy_check_move_data_combine_key 
+6646 20600000 rtn 
+
+shutter_dy_check_move_data_single_key:
+6647 18e27e00 copy queue ,pdata 
+6648 c002e676 beq shutter_left_key_num ,shutter_dy_move_left 
+6649 c0006693 beq shutter_right_key_num ,shutter_dy_move_right 
+664a c002669b beq shutter_up_key_num ,shutter_dy_move_up 
+664b c00166be beq shutter_down_key_num ,shutter_dy_move_down 
+664c 20600000 rtn 
+
+shutter_dy_check_move_data_combine_key:
+664d efe08013 ifetch 1 ,regc 
+664e c000e676 beq 0x01 ,shutter_dy_move_left 
+664f c0016693 beq 0x02 ,shutter_dy_move_right 
+6650 c001e69b beq 0x03 ,shutter_dy_move_up 
+6651 c00266be beq 0x04 ,shutter_dy_move_down 
+6652 c002e654 beq 0x05 ,shutter_dy_get_move_data 
+6653 20600000 rtn 
+
+shutter_dy_get_move_data:
+6654 20406730 call shutter_dy_check_iphone 
+6655 243a665e nbranch shutter_dy_get_move_data_iphone ,blank 
+6656 58000004 setarg 4 
+6657 1feffe0a mul32 pdata ,every_payload_len ,pdata 
+6658 d8404c12 arg mem_shutter_mousekey_value_list ,temp 
+6659 98408a00 iadd temp ,contw 
+665a 18a08a03 increase 3 ,contw 
+665b 6fe1cb27 fetch 3 ,mem_shutter_move_data 
+665c e7e18005 istore 3 ,contw 
+665d 20600000 rtn 
+
+shutter_dy_get_move_data_iphone:
+665e 58000004 setarg 4 
+665f 1feffe0a mul32 pdata ,every_payload_len ,pdata 
+6660 d8404c12 arg mem_shutter_mousekey_value_list ,temp 
+6661 98408a00 iadd temp ,contw 
+6662 18a08a03 increase 3 ,contw 
+6663 6fe14ebe fetch 2 ,mem_shutter_move_data_x 
+6664 e7e18005 istore 3 ,contw 
+6665 18a08a07 increase 7 ,contw 
+6666 6fe14ec0 fetch 2 ,mem_shutter_move_data_y 
+6667 1ff27e00 lshift4 pdata ,pdata 
+6668 1fed7e00 lshift8 pdata ,pdata 
+6669 e7e18005 istore 3 ,contw 
+666a 20600000 rtn 
+
+shutter_dy_move_x_empty_check:
+666b 6fe0cebc fetch 1 ,mem_shutter_iphone_beyond_x_count 
+666c 207a0000 rtn blank 
+666d 1fe0ffff increase -1 ,pdata 
+666e 67e0cebc store 1 ,mem_shutter_iphone_beyond_x_count 
+666f dfe00062 arg iphone_once_max_move_value ,pdata 
+6670 20600000 rtn 
+
+shutter_dy_every_move_size_set:
+6671 d840000a arg android_every_move_size ,temp 
+6672 20406730 call shutter_dy_check_iphone 
+6673 207a0000 rtn blank 
+6674 d8400007 arg iphone_every_move_size ,temp 
+6675 20600000 rtn 
+
+shutter_dy_move_left:
+6676 20406671 call shutter_dy_every_move_size_set 
+6677 6fe14ebe fetch 2 ,mem_shutter_move_data_x 
+6678 98467c00 isub temp ,null 
+6679 2441666b ncall shutter_dy_move_x_empty_check ,positive 
+667a 24610000 nrtn positive 
+667b 98467e00 isub temp ,pdata 
+
+shutter_dy_move_store_x:
+667c 67e14ebe store 2 ,mem_shutter_move_data_x 
+
+shutter_dy_move_data_store:
+667d 44d4c015 bpatch patch15_1 ,mem_patch15 
+667e 6fe14ebe fetch 2 ,mem_shutter_move_data_x 
+667f 68494ec0 fetcht 2 ,mem_shutter_move_data_y 
+6680 184d0400 lshift8 temp ,temp 
+6681 18520400 lshift4 temp ,temp 
+6682 9840fe00 iadd temp ,pdata 
+6683 67e1cb27 store 3 ,mem_shutter_move_data 
+6684 20206654 branch shutter_dy_get_move_data 
+
+shutter_dy_move_x_check_max:
+6685 6fe14ebe fetch 2 ,mem_shutter_move_data_x 
+6686 d8400062 arg iphone_once_max_move_value ,temp 
+6687 98460400 isub temp ,temp 
+6688 24610000 nrtn positive 
+6689 18427e00 copy temp ,pdata 
+668a 6848cebc fetcht 1 ,mem_shutter_iphone_beyond_x_count 
+668b 18467c03 sub temp ,0x03 ,null 
+668c 2022e690 branch shutter_dy_clear_move_x ,zero 
+668d 18408401 increase 1 ,temp 
+668e 6048cebc storet 1 ,mem_shutter_iphone_beyond_x_count 
+668f 2020667c branch shutter_dy_move_store_x 
+
+shutter_dy_clear_move_x:
+6690 704ebc00 jam 0 ,mem_shutter_iphone_beyond_x_count 
+6691 dfe00000 arg 0 ,pdata 
+6692 2020667c branch shutter_dy_move_store_x 
+
+shutter_dy_move_right:
+6693 20406730 call shutter_dy_check_iphone 
+6694 245a6685 ncall shutter_dy_move_x_check_max ,blank 
+6695 20406671 call shutter_dy_every_move_size_set 
+6696 6fe14ebe fetch 2 ,mem_shutter_move_data_x 
+
+shutter_dy_move_right_next:
+6697 9840fe00 iadd temp ,pdata 
+6698 d8400fff arg 0xfff ,temp 
+6699 20407d6c call ceiling 
+669a 2020667c branch shutter_dy_move_store_x 
+
+shutter_dy_move_up:
+669b 20406671 call shutter_dy_every_move_size_set 
+669c 6fe14ec0 fetch 2 ,mem_shutter_move_data_y 
+669d 98467e00 isub temp ,pdata 
+669e 67e14ec0 store 2 ,mem_shutter_move_data_y 
+
+shutter_dy_move_y_check_max:
+669f 68494ec0 fetcht 2 ,mem_shutter_move_data_y 
+66a0 20406730 call shutter_dy_check_iphone 
+66a1 203a667d branch shutter_dy_move_data_store ,blank 
+66a2 58000fff setarg 0xfff 
+66a3 98467e00 isub temp ,pdata 
+66a4 d8400062 arg iphone_once_max_move_value ,temp 
+66a5 98460400 isub temp ,temp 
+66a6 2421667d nbranch shutter_dy_move_data_store ,positive 
+66a7 58000fff setarg 0xfff 
+66a8 98467e00 isub temp ,pdata 
+66a9 6848cebd fetcht 1 ,mem_shutter_iphone_beyond_y_count 
+66aa 18467c05 sub temp ,0x05 ,null 
+66ab 2022e6af branch shutter_dy_clear_move_y ,zero 
+66ac 18408401 increase 1 ,temp 
+66ad 6048cebd storet 1 ,mem_shutter_iphone_beyond_y_count 
+66ae 202066bc branch shutter_dy_move_store_y 
+
+shutter_dy_clear_move_y:
+66af 704ebd00 jam 0 ,mem_shutter_iphone_beyond_y_count 
+
+shutter_dy_android_move_y_empty_check:
+66b0 58000fff setarg 0xfff 
+66b1 202066bc branch shutter_dy_move_store_y 
+
+shutter_dy_move_y_empty_check:
+66b2 20406730 call shutter_dy_check_iphone 
+66b3 203a66b0 branch shutter_dy_android_move_y_empty_check ,blank 
+66b4 6fe0cebd fetch 1 ,mem_shutter_iphone_beyond_y_count 
+66b5 203a66b0 branch shutter_dy_android_move_y_empty_check ,blank 
+66b6 1fe0ffff increase -1 ,pdata 
+66b7 67e0cebd store 1 ,mem_shutter_iphone_beyond_y_count 
+66b8 58000fff setarg 0xfff 
+66b9 d8400062 arg iphone_once_max_move_value ,temp 
+66ba 98467e00 isub temp ,pdata 
+66bb 9a20fe00 iadd rega ,pdata 
+
+shutter_dy_move_store_y:
+66bc 67e14ec0 store 2 ,mem_shutter_move_data_y 
+66bd 2020667d branch shutter_dy_move_data_store 
+
+shutter_dy_move_down:
+66be 20406671 call shutter_dy_every_move_size_set 
+66bf 6fe14ec0 fetch 2 ,mem_shutter_move_data_y 
+
+shutter_dy_move_down_next:
+66c0 9840fe00 iadd temp ,pdata 
+66c1 d8400fff arg 0xfff ,temp 
+66c2 98462200 isub temp ,rega 
+66c3 202166b2 branch shutter_dy_move_y_empty_check ,positive 
+66c4 202066bc branch shutter_dy_move_store_y 
+
+ble_shutter_dy_receive_data:
+66c5 6fe14398 fetch 2 ,mem_le_att_handle 
+66c6 c01262e9 beq gatt_keyboard_write_handle_new ,ble_shutter_process_reconnect_complete 
+66c7 20600000 rtn 
+
+shutter_dy_le_find_service_hand_by_uuid:
+66c8 da200017 arg 23 ,rega 
+66c9 da400004 arg le_l2cap_cid_att ,regb 
+66ca 204029fb call le_fifo_malloc_tx_l2cap 
+66cb 58000006 setarg attop_find_by_type_value_request 
+66cc e7e08005 istore 1 ,contw 
+66cd 58000001 setarg 0x0001 
+66ce e7e10005 istore 2 ,contw 
+66cf 5800ffff setarg 0xffff 
+66d0 e7e10005 istore 2 ,contw 
+66d1 58002800 setarg 0x2800 
+66d2 e7e10005 istore 2 ,contw 
+66d3 d8c049e4 arg mem_dy_le_search_service_uuid ,contr 
+66d4 20207c8f branch memcpy16 
+
+shutter_dy_le_parse_att:
+66d5 44d54015 bpatch patch15_2 ,mem_patch15 
+66d6 1a220c00 copy rega ,contr 
+66d7 efe18006 ifetch 3 ,contr 
+66d8 67e1c397 store 3 ,mem_le_att_opcode 
+66d9 c003e704 beq attop_find_by_type_value_response ,shutter_dy_le_parse_att_find_by_type_value_rsp 
+66da c000e725 beq attop_error_response ,shutter_dy_le_parse_error_rsp 
+66db c00566f4 beq attop_read_request ,shutter_dy_le_parse_att_read_request 
+66dc c00666de beq attop_read_blob_request ,shutter_dy_le_parse_att_read_blob_request 
+66dd 20202b96 branch le_parse_att2 
+
+shutter_dy_le_parse_att_read_blob_request:
+66de efe10006 ifetch 2 ,contr 
+66df 67e106b5 store 2 ,mem_le_att_offset 
+66e0 98002200 iforce rega 
+66e1 68494398 fetcht 2 ,mem_le_att_handle 
+66e2 6fe14332 fetch 2 ,mem_le_pairing_handle 
+66e3 98467c00 isub temp ,null 
+66e4 2422ad50 nbranch le_send_att_read_blob_response ,zero 
+66e5 20406730 call shutter_dy_check_iphone 
+66e6 243a66e9 nbranch shutter_dy_le_parse_att_read_blob_request_ios ,blank 
+66e7 684949e0 fetcht 2 ,mem_shutter_le_map_len_android 
+66e8 202066ea branch shutter_dy_le_parse_att_read_blob_request2 
+
+shutter_dy_le_parse_att_read_blob_request_ios:
+66e9 684949e2 fetcht 2 ,mem_shutter_le_map_len_ios 
+
+shutter_dy_le_parse_att_read_blob_request2:
+66ea d8c048be arg mem_shutter_le_hid_map ,contr 
+66eb 20407c6d call store_contr 
+66ec 18427e00 copy temp ,pdata 
+66ed 9a267e00 isub rega ,pdata 
+66ee 24212e03 nbranch le_send_att_error_response_notfound ,positive 
+66ef 1fe0fe01 increase 1 ,pdata 
+66f0 1fe67c17 sub pdata ,23 ,null 
+66f1 20212d59 branch le_send_att_read_blob_response_less ,positive 
+66f2 18007e17 force 23 ,pdata 
+66f3 20202d59 branch le_send_att_read_blob_response_less 
+
+shutter_dy_le_parse_att_read_request:
+66f4 68494398 fetcht 2 ,mem_le_att_handle 
+66f5 6fe0c321 fetch 1 ,mem_le_configuration 
+66f6 c281e6f8 bbit1 bit_ble_read_auth ,shutter_dy_le_send_att_read_response_check_auth 
+66f7 20202d1d branch le_send_att_read_response 
+
+shutter_dy_le_send_att_read_response_check_auth:
+66f8 6fe14332 fetch 2 ,mem_le_pairing_handle 
+66f9 98467c00 isub temp ,null 
+66fa 2422ad1d nbranch le_send_att_read_response ,zero 
+66fb 20402dc7 call le_check_encrypt_state 
+66fc 243466fe nbranch shutter_dy_le_send_att_read_response ,user 
+66fd 20202d46 branch le_send_att_read_response_error_insufficient_auth 
+
+shutter_dy_le_send_att_read_response:
+66fe 6fe14332 fetch 2 ,mem_le_pairing_handle 
+66ff 98467c00 isub temp ,null 
+6700 2422ad1d nbranch le_send_att_read_response ,zero 
+6701 d8c048be arg mem_shutter_le_hid_map ,contr 
+6702 18007e17 force 23 ,pdata 
+6703 20202d2d branch le_send_att_read_response_less 
+
+shutter_dy_le_parse_att_find_by_type_value_rsp:
+
+shutter_dy_le_remote_iphone:
+6704 44d5c015 bpatch patch15_3 ,mem_patch15 
+6705 704eba05 jam 5 ,mem_shutter_back_count 
+6706 7049f401 jam 1 ,mem_iphone_flag 
+6707 704ec201 jam 1 ,mem_last_shutter_le_iphone_flag 
+6708 7049f5f0 jam 240 ,mem_send_data_delay 
+6709 704ed10a jam 10 ,mem_shutter_move_mid_timer 
+670a 704ed601 jam 1 ,mem_shutter_first_move 
+670b 204067bf call shutter_dy_load_move_config_info 
+670c 6fe0ced2 fetch 1 ,mem_shutter_pairing_success 
+670d 207a0000 rtn blank 
+670e 20406783 call shutter_dy_clear_move_config 
+670f d8400062 arg iphone_once_max_move_value ,temp 
+6710 6fe14f88 fetch 2 ,mem_iphone_initial_move_x 
+6711 da204ebe arg mem_shutter_move_data_x ,rega 
+6712 da404ebc arg mem_shutter_iphone_beyond_x_count ,regb 
+6713 2040671e call shutter_dy_iphone_move_initial_set 
+6714 d8400062 arg iphone_once_max_move_value ,temp 
+6715 6fe14f8a fetch 2 ,mem_iphone_initial_move_y 
+6716 da204ec0 arg mem_shutter_move_data_y ,rega 
+6717 da404ebd arg mem_shutter_iphone_beyond_y_count ,regb 
+6718 2040671e call shutter_dy_iphone_move_initial_set 
+6719 58000fff setarg 0xfff 
+671a 68494ec0 fetcht 2 ,mem_shutter_move_data_y 
+671b 98467e00 isub temp ,pdata 
+671c 67e14ec0 store 2 ,mem_shutter_move_data_y 
+671d 20600000 rtn 
+
+shutter_dy_iphone_move_initial_set:
+671e 9846fc00 idiv temp 
+671f 20407d62 call wait_div_end 
+6720 1807fe00 quotient pdata 
+6721 18070400 remainder temp 
+6722 e7e08012 istore 1 ,regb 
+6723 e0410011 istoret 2 ,rega 
+6724 20600000 rtn 
+
+shutter_dy_le_parse_error_rsp:
+6725 18c08dfe increase -2 ,contr 
+6726 efe08006 ifetch 1 ,contr 
+6727 c003672e beq attop_find_by_type_value_request ,shutter_dy_not_iphone_read_conf 
+6728 20600000 rtn 
+
+shutter_dy_remote_not_iphone:
+6729 704eba01 jam 1 ,mem_shutter_back_count 
+672a 7049f400 jam 0 ,mem_iphone_flag 
+672b 704ec200 jam 0 ,mem_last_shutter_le_iphone_flag 
+672c 7049f50a jam 10 ,mem_send_data_delay 
+672d 20600000 rtn 
+
+shutter_dy_not_iphone_read_conf:
+672e 20406729 call shutter_dy_remote_not_iphone 
+672f 202067bf branch shutter_dy_load_move_config_info 
+
+shutter_dy_check_iphone:
+6730 6fe0c9f4 fetch 1 ,mem_iphone_flag 
+6731 20600000 rtn 
+
+shutter_dy_le_get_press_ptr:
+6732 da604f24 arg mem_dy_key0_press ,regc 
+6733 20406730 call shutter_dy_check_iphone 
+6734 207a0000 rtn blank 
+6735 7049f578 jam 120 ,mem_send_data_delay 
+6736 da604b2b arg mem_key0_press_i ,regc 
+6737 20600000 rtn 
+
+shutter_dy_le_get_release_ptr:
+
+shutter_dy_le_get_release_ptr_set:
+6738 da604a40 arg mem_key0_release_new ,regc 
+6739 20406730 call shutter_dy_check_iphone 
+673a 207a0000 rtn blank 
+673b da604b67 arg mem_key0_release_new_i ,regc 
+673c 7049f50c jam 12 ,mem_send_data_delay 
+673d 18e27e00 copy queue ,pdata 
+673e c1008000 rtneq shutter_like_key_num 
+673f 20600000 rtn 
+
+shutter_dy_le_get_release_ptr_volume:
+6740 44d64015 bpatch patch15_4 ,mem_patch15 
+6741 6fe0cc0e fetch 1 ,mem_key3_press_count 
+6742 79407e00 setflip 0 ,pdata 
+6743 67e0cc0e store 1 ,mem_key3_press_count 
+6744 c0006749 beq 0 ,shutter_dy_le_get_release_ptr_set_volume_inc 
+6745 c000e747 beq 1 ,shutter_dy_le_get_release_ptr_set_volume_dec 
+6746 20600000 rtn 
+
+shutter_dy_le_get_release_ptr_set_volume_dec:
+6747 20406750 call shutter_dy_le_get_vol_dec_ptr 
+6748 20206371 branch push_buffer_in_queue 
+
+shutter_dy_le_get_release_ptr_set_volume_inc:
+6749 2040674b call shutter_dy_le_get_vol_inc_ptr 
+674a 20206371 branch push_buffer_in_queue 
+
+shutter_dy_le_get_vol_inc_ptr:
+674b da604a6d arg mem_key3_release_new ,regc 
+674c 20406730 call shutter_dy_check_iphone 
+674d 207a0000 rtn blank 
+674e da604b94 arg mem_key3_release_new_i ,regc 
+674f 20600000 rtn 
+
+shutter_dy_le_get_vol_dec_ptr:
+6750 da604bfa arg mem_key3_release_new_t ,regc 
+6751 20406730 call shutter_dy_check_iphone 
+6752 207a0000 rtn blank 
+6753 da604c04 arg mem_key3_release_new_i_t ,regc 
+6754 20600000 rtn 
+
+shutter_dy_long_key_function:
+6755 18e27e00 copy queue ,pdata 
+6756 c000e777 beq shutter_like_key_num ,shutter_dy_link_key_long_press 
+6757 c0016765 beq shutter_down_key_num ,shutter_dy_loop_send_volume_dec_page 
+6758 c0026761 beq shutter_up_key_num ,shutter_dy_loop_send_volume_inc_page 
+6759 20600000 rtn 
+
+shutter_dy_long_key_volume_timer:
+675a da604f9d arg mem_shutter_volume_timer ,regc 
+675b da40675d arg shutter_dy_long_key_volume_timeout ,regb 
+675c 202042e0 branch timer_single_step 
+
+shutter_dy_long_key_volume_timeout:
+675d 704f9d04 jam 4 ,mem_shutter_volume_timer 
+675e 6fe0cc0e fetch 1 ,mem_key3_press_count 
+675f 203a6761 branch shutter_dy_loop_send_volume_inc_page ,blank 
+6760 20206765 branch shutter_dy_loop_send_volume_dec_page 
+
+shutter_dy_loop_send_volume_inc_page:
+6761 704c0e00 jam 0 ,mem_key3_press_count 
+6762 704f9d04 jam 4 ,mem_shutter_volume_timer 
+6763 da604ab5 arg mem_key4_long_press ,regc 
+6764 20206371 branch push_buffer_in_queue 
+
+shutter_dy_loop_send_volume_dec_page:
+6765 704c0e01 jam 1 ,mem_key3_press_count 
+6766 704f9d04 jam 4 ,mem_shutter_volume_timer 
+6767 da604aaf arg mem_key2_long_press ,regc 
+6768 20206371 branch push_buffer_in_queue 
+
+shutter_dy_clear_volume_timer:
+6769 704c0e00 jam 0 ,mem_key3_press_count 
+676a 704f9d00 jam 0 ,mem_shutter_volume_timer 
+676b 20600000 rtn 
+
+shutter_dy_link_key_loop_timer:
+676c da604f9e arg mem_shutter_link_timer ,regc 
+676d da40676f arg shutter_dy_link_key_loop_timeout ,regb 
+676e 202042e0 branch timer_single_step 
+
+shutter_dy_link_key_loop_timeout:
+676f 704f9e02 jam 2 ,mem_shutter_link_timer 
+6770 20406772 call shutter_dy_link_data_android_or_ios 
+6771 20206371 branch push_buffer_in_queue 
+
+shutter_dy_link_data_android_or_ios:
+6772 da604f9f arg mem_shutter_link_data ,regc 
+6773 20406730 call shutter_dy_check_iphone 
+6774 207a0000 rtn blank 
+6775 da604fa7 arg mem_shutter_link_data_i ,regc 
+6776 20600000 rtn 
+
+shutter_dy_link_key_long_press:
+6777 6fe0cfaf fetch 1 ,mem_shutter_link_loop_flag 
+6778 243a677c nbranch shutter_dy_clear_link_key_timer ,blank 
+6779 704faf01 jam 1 ,mem_shutter_link_loop_flag 
+677a 704f9e02 jam 2 ,mem_shutter_link_timer 
+677b 20600000 rtn 
+
+shutter_dy_clear_link_key_timer:
+677c 704faf00 jam 0 ,mem_shutter_link_loop_flag 
+677d 704f9e00 jam 0 ,mem_shutter_link_timer 
+677e 20600000 rtn 
+
+shutter_dy_jude_clear_move_config:
+677f 6fe0cebb fetch 1 ,mem_shutter_le_conned 
+6780 247a0000 nrtn blank 
+6781 704ebb01 jam 1 ,mem_shutter_le_conned 
+6782 2020667d branch shutter_dy_move_data_store 
+
+shutter_dy_clear_move_config:
+6783 58000000 setarg 0 
+6784 67e3cebc store 7 ,mem_move_config 
+6785 20600000 rtn 
+
+shutter_dy_write_otp_convert_data:
+6786 20406730 call shutter_dy_check_iphone 
+6787 c000e78e beq 0x01 ,shutter_dy_store_ios_config_data 
+6788 c00067a0 beq 0x00 ,shutter_dy_store_android_config 
+6789 20600000 rtn 
+
+shutter_dy_read_otp_convert_data:
+678a 6fe0cf90 fetch 1 ,mem_otp_last_shutter_le_iphone_flag 
+678b c000e7a7 beq 0x01 ,shutter_dy_get_ios_config 
+678c c00067b9 beq 0x00 ,shutter_dy_get_android_config 
+678d 20600000 rtn 
+
+shutter_dy_store_ios_config_data:
+678e 6fe0cebc fetch 1 ,mem_shutter_iphone_beyond_x_count 
+678f 1feffe62 mul32 pdata ,iphone_once_max_move_value ,pdata 
+6790 1fe20400 copy pdata ,temp 
+6791 6fe14ebe fetch 2 ,mem_shutter_move_data_x 
+6792 9840fe00 iadd temp ,pdata 
+6793 67e14f8c store 2 ,mem_otp_shutter_move_data_x 
+6794 6fe0cebd fetch 1 ,mem_shutter_iphone_beyond_y_count 
+6795 1feffe62 mul32 pdata ,iphone_once_max_move_value ,pdata 
+6796 1fe20400 copy pdata ,temp 
+6797 6fe14ec0 fetch 2 ,mem_shutter_move_data_y 
+6798 1fe22200 copy pdata ,rega 
+6799 58000fff setarg 0xfff 
+679a 9a267e00 isub rega ,pdata 
+679b 9840fe00 iadd temp ,pdata 
+679c 67e14f8e store 2 ,mem_otp_shutter_move_data_y 
+679d 20406730 call shutter_dy_check_iphone 
+679e 67e0cf90 store 1 ,mem_otp_last_shutter_le_iphone_flag 
+679f 20600000 rtn 
+
+shutter_dy_store_android_config:
+67a0 6fe14ebe fetch 2 ,mem_shutter_move_data_x 
+67a1 67e14f8c store 2 ,mem_otp_shutter_move_data_x 
+67a2 6fe14ec0 fetch 2 ,mem_shutter_move_data_y 
+67a3 67e14f8e store 2 ,mem_otp_shutter_move_data_y 
+67a4 20406730 call shutter_dy_check_iphone 
+67a5 67e0cf90 store 1 ,mem_otp_last_shutter_le_iphone_flag 
+67a6 20600000 rtn 
+
+shutter_dy_get_ios_config:
+67a7 6fe14f8c fetch 2 ,mem_otp_shutter_move_data_x 
+67a8 1fe6fc62 div pdata ,iphone_once_max_move_value 
+67a9 20407d62 call wait_div_end 
+67aa 1807fe00 quotient pdata 
+67ab 18070400 remainder temp 
+67ac 67e0cebc store 1 ,mem_shutter_iphone_beyond_x_count 
+67ad 18427e00 copy temp ,pdata 
+67ae 67e14ebe store 2 ,mem_shutter_move_data_x 
+67af 6fe14f8e fetch 2 ,mem_otp_shutter_move_data_y 
+67b0 1fe6fc62 div pdata ,iphone_once_max_move_value 
+67b1 20407d62 call wait_div_end 
+67b2 1807fe00 quotient pdata 
+67b3 18070400 remainder temp 
+67b4 67e0cebd store 1 ,mem_shutter_iphone_beyond_y_count 
+67b5 58000fff setarg 0xfff 
+67b6 98467e00 isub temp ,pdata 
+67b7 67e14ec0 store 2 ,mem_shutter_move_data_y 
+67b8 20600000 rtn 
+
+shutter_dy_get_android_config:
+67b9 6fe14f8c fetch 2 ,mem_otp_shutter_move_data_x 
+67ba 67e14ebe store 2 ,mem_shutter_move_data_x 
+67bb 6fe14f8e fetch 2 ,mem_otp_shutter_move_data_y 
+67bc 67e14ec0 store 2 ,mem_shutter_move_data_y 
+67bd 20600000 rtn 
+
+shutter_dy_store_move_config_info:
+67be 2020683c branch shutter_dy_campare_effective_addr_write_otp 
+
+shutter_dy_load_move_config_info:
+67bf 20206823 branch shutter_dy_campare_effective_addr_read_otp 
+
+shutter_dy_shutter_uart_config_loop:
+67c0 204067e2 call shutter_dy_update_read_check_addr 
+67c1 6fe14f93 fetch 2 ,mem_otp_read_offset_addr 
+67c2 2040684f call shutter_dy_shutter_read_move_config_from_otp_addr 
+67c3 704f9b00 jam 0 ,mem_shutter_first_read_flag 
+67c4 6fe2cf8c fetch 5 ,mem_otp_move_config 
+67c5 704f9c00 jam 0 ,mem_shutter_valid_data_flag 
+67c6 704f9900 jam 0 ,mem_shutter_temp_count 
+67c7 204067e6 call shutter_dy_campare_otp_data 
+67c8 6fe0cf99 fetch 1 ,mem_shutter_temp_count 
+67c9 c1000000 rtneq 0 
+67ca 202067c0 branch shutter_dy_shutter_uart_config_loop 
+
+shutter_dy_shutter_get_first_read_addr:
+67cb 6fe14f80 fetch 2 ,mem_shutter_efuse_start_offset 
+67cc 1fe0fffb increase -5 ,pdata 
+67cd 67e14f93 store 2 ,mem_otp_read_offset_addr 
+67ce 20600000 rtn 
+
+shutter_dy_shutter_next_read_addr:
+67cf 6fe14f93 fetch 2 ,mem_otp_read_offset_addr 
+67d0 1fe0fffb increase -5 ,pdata 
+67d1 67e14f93 store 2 ,mem_otp_read_offset_addr 
+67d2 20600000 rtn 
+
+shutter_dy_shutter_last_read_addr:
+67d3 6fe14f93 fetch 2 ,mem_otp_read_offset_addr 
+67d4 1fe0fe05 pincrease 5 
+67d5 67e14f93 store 2 ,mem_otp_read_offset_addr 
+67d6 20600000 rtn 
+
+shutter_dy_shutter_read_ios_android_addr:
+67d7 6fe14f95 fetch 2 ,mem_otp_read_ios_android_addr 
+67d8 1fe0fe05 pincrease 5 
+67d9 67e14f95 store 2 ,mem_otp_read_ios_android_addr 
+67da 6fe14f95 fetch 2 ,mem_otp_read_ios_android_addr 
+67db 1fe20400 copy pdata ,temp 
+67dc 6fe14f80 fetch 2 ,mem_shutter_efuse_start_offset 
+67dd 98467e00 isub temp ,pdata 
+67de d8400005 arg shutter_para_total_num ,temp 
+67df 98467c00 isub temp ,null 
+67e0 24216806 nbranch shutter_dy_shutter_not_find_ios_or_android ,positive 
+67e1 20600000 rtn 
+
+shutter_dy_update_read_check_addr:
+67e2 6fe0cf9b fetch 1 ,mem_shutter_first_read_flag 
+67e3 c000e7cb beq 0x01 ,shutter_dy_shutter_get_first_read_addr 
+67e4 c00067cf beq 0x00 ,shutter_dy_shutter_next_read_addr 
+67e5 20600000 rtn 
+
+shutter_dy_campare_otp_data:
+67e6 da400000 arg 0x0 ,regb 
+67e7 1a420400 copy regb ,temp 
+67e8 6fe14f8c fetch 2 ,mem_otp_shutter_move_data_x 
+67e9 a843fe00 icompare 0xffff ,temp 
+67ea 2440e7f6 ncall shutter_dy_set_shutter_valid_data_flag ,true 
+67eb da400000 arg 0x0 ,regb 
+67ec 1a420400 copy regb ,temp 
+67ed 6fe14f8e fetch 2 ,mem_otp_shutter_move_data_y 
+67ee a843fe00 icompare 0xffff ,temp 
+67ef 2440e7f6 ncall shutter_dy_set_shutter_valid_data_flag ,true 
+67f0 da400000 arg 0x0 ,regb 
+67f1 1a420400 copy regb ,temp 
+67f2 6fe0cf90 fetch 1 ,mem_otp_last_shutter_le_iphone_flag 
+67f3 a841fe00 icompare 0xff ,temp 
+67f4 2440e7f6 ncall shutter_dy_set_shutter_valid_data_flag ,true 
+67f5 20600000 rtn 
+
+shutter_dy_set_shutter_valid_data_flag:
+67f6 6fe0cf99 fetch 1 ,mem_shutter_temp_count 
+67f7 1fe0fe01 pincrease 1 
+67f8 67e0cf99 store 1 ,mem_shutter_temp_count 
+67f9 20600000 rtn 
+
+shutter_dy_shutter_judge_ios_or_android:
+67fa 704f9901 jam 1 ,mem_shutter_temp_count 
+67fb 204067d7 call shutter_dy_shutter_read_ios_android_addr 
+67fc 6fe14f95 fetch 2 ,mem_otp_read_ios_android_addr 
+67fd 2040684f call shutter_dy_shutter_read_move_config_from_otp_addr 
+67fe 20406730 call shutter_dy_check_iphone 
+67ff 1fe20400 copy pdata ,temp 
+6800 6fe0cf90 fetch 1 ,mem_otp_last_shutter_le_iphone_flag 
+6801 a841fe00 icompare 0xff ,temp 
+6802 2040e821 call shutter_dy_clear_temp_count ,true 
+6803 6fe0cf99 fetch 1 ,mem_shutter_temp_count 
+6804 c1000000 rtneq 0 
+6805 202067fa branch shutter_dy_shutter_judge_ios_or_android 
+
+shutter_dy_shutter_not_find_ios_or_android:
+6806 44d6c015 bpatch patch15_5 ,mem_patch15 
+6807 20406821 call shutter_dy_clear_temp_count 
+6808 20406730 call shutter_dy_check_iphone 
+6809 203a680b branch shutter_dy_shutter_android_save_init_loaction ,blank 
+680a 20206812 branch shutter_dy_shutter_ios_save_init_loaction 
+
+shutter_dy_shutter_android_save_init_loaction:
+680b 6fe14f84 fetch 2 ,mem_android_initial_move_x 
+680c 67e14ebe store 2 ,mem_shutter_move_data_x 
+680d 68494f86 fetcht 2 ,mem_android_initial_move_y 
+680e 58000fff setarg 0xfff 
+680f 98467e00 isub temp ,pdata 
+6810 67e14ec0 store 2 ,mem_shutter_move_data_y 
+6811 202067be branch shutter_dy_store_move_config_info 
+
+shutter_dy_shutter_ios_save_init_loaction:
+6812 d8400062 arg iphone_once_max_move_value ,temp 
+6813 6fe14f88 fetch 2 ,mem_iphone_initial_move_x 
+6814 da204ebe arg mem_shutter_move_data_x ,rega 
+6815 da404ebc arg mem_shutter_iphone_beyond_x_count ,regb 
+6816 2040671e call shutter_dy_iphone_move_initial_set 
+6817 d8400062 arg iphone_once_max_move_value ,temp 
+6818 6fe14f8a fetch 2 ,mem_iphone_initial_move_y 
+6819 da204ec0 arg mem_shutter_move_data_y ,rega 
+681a da404ebd arg mem_shutter_iphone_beyond_y_count ,regb 
+681b 2040671e call shutter_dy_iphone_move_initial_set 
+681c 58000fff setarg 0xfff 
+681d 68494ec0 fetcht 2 ,mem_shutter_move_data_y 
+681e 98467e00 isub temp ,pdata 
+681f 67e14ec0 store 2 ,mem_shutter_move_data_y 
+6820 202067be branch shutter_dy_store_move_config_info 
+
+shutter_dy_clear_temp_count:
+6821 704f9900 jam 0 ,mem_shutter_temp_count 
+6822 20600000 rtn 
+
+shutter_dy_campare_effective_addr_read_otp:
+6823 44d74015 bpatch patch15_6 ,mem_patch15 
+6824 704f9b01 jam 1 ,mem_shutter_first_read_flag 
+6825 204067c0 call shutter_dy_shutter_uart_config_loop 
+6826 6fe14f82 fetch 2 ,mem_shutter_efuse_end_offset 
+6827 1fe20400 copy pdata ,temp 
+6828 6fe14f93 fetch 2 ,mem_otp_read_offset_addr 
+6829 98467e00 isub temp ,pdata 
+682a d8400000 arg 0x0 ,temp 
+682b 98467c00 isub temp ,null 
+682c 24610000 nrtn positive 
+682d 6fe14f93 fetch 2 ,mem_otp_read_offset_addr 
+682e 1fe20400 copy pdata ,temp 
+682f 6fe14f80 fetch 2 ,mem_shutter_efuse_start_offset 
+6830 1fe0fffb increase -5 ,pdata 
+6831 98467e00 isub temp ,pdata 
+6832 6fe14f93 fetch 2 ,mem_otp_read_offset_addr 
+6833 67e14f95 store 2 ,mem_otp_read_ios_android_addr 
+6834 204067fa call shutter_dy_shutter_judge_ios_or_android 
+6835 6fe14f95 fetch 2 ,mem_otp_read_ios_android_addr 
+6836 2442e84f ncall shutter_dy_shutter_read_move_config_from_otp_addr ,zero 
+6837 704f9900 jam 0 ,mem_shutter_temp_count 
+6838 204067e6 call shutter_dy_campare_otp_data 
+6839 6fe0cf99 fetch 1 ,mem_shutter_temp_count 
+683a c1000000 rtneq 0 
+683b 2020678a branch shutter_dy_read_otp_convert_data 
+
+shutter_dy_campare_effective_addr_write_otp:
+683c 44d7c015 bpatch patch15_7 ,mem_patch15 
+683d 704f9b01 jam 1 ,mem_shutter_first_read_flag 
+683e 204067c0 call shutter_dy_shutter_uart_config_loop 
+683f 68494f82 fetcht 2 ,mem_shutter_efuse_end_offset 
+6840 6fe14f93 fetch 2 ,mem_otp_read_offset_addr 
+6841 98467e00 isub temp ,pdata 
+6842 d8400000 arg 0x0 ,temp 
+6843 98467c00 isub temp ,null 
+6844 24610000 nrtn positive 
+6845 68494f93 fetcht 2 ,mem_otp_read_offset_addr 
+6846 6fe14f80 fetch 2 ,mem_shutter_efuse_start_offset 
+6847 98467e00 isub temp ,pdata 
+6848 d8400000 arg 0x0 ,temp 
+6849 98467c00 isub temp ,null 
+684a 24610000 nrtn positive 
+684b 6fe14f93 fetch 2 ,mem_otp_read_offset_addr 
+684c 67e14f91 store 2 ,mem_otp_write_offset_addr 
+684d 20406786 call shutter_dy_write_otp_convert_data 
+684e 20206854 branch shutter_dy_shutter_write_move_config_to_otp_addr 
+
+shutter_dy_shutter_read_move_config_from_otp_addr:
+684f 44d84016 bpatch patch16_0 ,mem_patch16 
+6850 1fe22400 copy pdata ,regb 
+6851 df200005 arg shutter_para_total_num ,loopcnt 
+6852 da204f8c arg mem_otp_move_config ,rega 
+6853 20206b74 branch otp_read_data 
+
+shutter_dy_shutter_write_move_config_to_otp_addr:
+6854 df200005 arg shutter_para_total_num ,loopcnt 
+6855 da204f8c arg mem_otp_move_config ,rega 
+6856 6a414f91 fetchr regb ,2 ,mem_otp_write_offset_addr 
+6857 20206b45 branch otp_write 
+
+shutter_dy_shutter_1s_timer:
+6858 da6048ae arg mem_shutter_1s_timer ,regc 
+6859 da4067be arg shutter_dy_store_move_config_info ,regb 
+685a 202042e0 branch timer_single_step 
+
+p_crc16_ccitt_false:
+685b 6fe10912 fetch 2 ,mem_adv_crc_false_initvalue 
+
+p_crc16_ccitt_false_loop:
+685c e8408013 ifetcht 1 ,regc 
+685d 1a60a601 increase 1 ,regc 
+685e 184d0400 lshift8 temp ,temp 
+685f 9842fe00 ixor temp ,pdata 
+
+p_crc16_for_byte:
+6860 1f222400 copy loopcnt ,regb 
+6861 df200008 arg 8 ,loopcnt 
+
+p_crc16_for_byte_loop:
+6862 2feffe0f isolate1 15 ,pdata 
+6863 1fe3fe00 lshift pdata ,pdata 
+6864 2420e867 nbranch p_crc16_for_byte_continue ,true 
+6865 68490914 fetcht 2 ,mem_crc16_polynomial 
+6866 9842fe00 ixor temp ,pdata 
+
+p_crc16_for_byte_continue:
+6867 c2006862 loop p_crc16_for_byte_loop 
+6868 1a427200 copy regb ,loopcnt 
+6869 c200685c loop p_crc16_ccitt_false_loop 
+686a 67e10912 store 2 ,mem_adv_crc_false_initvalue 
+686b 20600000 rtn 
+
+rf_debug_rx_gpio_low:
+686c 6fe0c43f fetch 1 ,mem_rf_debug_rx_gpio 
+
+rf_debug_gpio_low:
+686d d840003e arg gpcfg_output_low ,temp 
+686e 20206f20 branch gpio_config_function 
+
+rf_debug_rx_on_line:
+
+rf_debug_rx_gpio_high:
+686f 6fe0c43f fetch 1 ,mem_rf_debug_rx_gpio 
+
+rf_debug_gpio_high:
+6870 d840003f arg gpcfg_output_high ,temp 
+6871 20206f20 branch gpio_config_function 
+
+rf_debug_rx_gpio_h_l_h:
+6872 2040686f call rf_debug_rx_gpio_high 
+
+rf_debug_rx_gpio_l_h:
+6873 2040686c call rf_debug_rx_gpio_low 
+6874 2020686f branch rf_debug_rx_gpio_high 
+
+rf_debug_rx_gpio_l_h_l:
+
+rf_debug_shutdown_radio_line:
+6875 20406873 call rf_debug_rx_gpio_l_h 
+
+rf_debug_rx_crc_line:
+6876 2020686c branch rf_debug_rx_gpio_low 
+
+rf_debug_rx_sync_line:
+6877 20206873 branch rf_debug_rx_gpio_l_h 
+
+rf_debug_rx_crc_fail_line:
+6878 20406873 call rf_debug_rx_gpio_l_h 
+6879 20206875 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:
+687a 2020686c branch rf_debug_rx_gpio_low 
+
+rf_debug_tx_off_line:
+
+rf_debug_tx_gpio_low:
+687b 6fe0c440 fetch 1 ,mem_rf_debug_tx_gpio 
+687c 2020686d branch rf_debug_gpio_low 
+
+rf_debug_tx_on_line:
+
+rf_debug_tx_gpio_high:
+687d 6fe0c440 fetch 1 ,mem_rf_debug_tx_gpio 
+687e 20206870 branch rf_debug_gpio_high 
+
+rf_debug_tx_gpio_l_h_l:
+687f 2040687b call rf_debug_tx_gpio_low 
+6880 2040687d call rf_debug_tx_gpio_high 
+6881 2020687b branch rf_debug_tx_gpio_low 
+
+hci_init:
+6882 20800000 clear_stack 
+6883 204070d7 call wdt_set_disable 
+6884 2040688d call hci_init_clksel_xtal 
+6885 2040688f call hci_init_uart_default_config 
+6886 204068a3 call hci_init_uart_config 
+6887 204068bf call hci_init_pwm_default_config 
+6888 204068c3 call hci_init_pwm 
+6889 70070f01 jam 1 ,mem_hci_command_complete_num_hci_command_packet 
+688a 70070c04 jam hci_h4_type_event ,mem_hci_event_head_type 
+
+hci_process_loop:
+688b 204068ce call hci_process_check_uart_rx 
+688c 2020688b branch hci_process_loop 
+
+hci_init_clksel_xtal:
+688d 70804204 jam clksel_xtal ,core_clksel 
+688e 20600000 rtn 
+
+hci_init_uart_default_config:
+688f 20406893 call hci_init_uart_default_config_tx 
+6890 20406897 call hci_init_uart_default_config_rx 
+6891 2040689b call hci_init_uart_default_config_rts 
+6892 2020689f branch hci_init_uart_default_config_cts 
+
+hci_init_uart_default_config_tx:
+6893 6fe0c4f1 fetch 1 ,mem_hci_uart_tx_gpio 
+6894 247a0000 nrtn blank 
+6895 7044f107 jam hci_uart_tx_gpio_num ,mem_hci_uart_tx_gpio 
+6896 20600000 rtn 
+
+hci_init_uart_default_config_rx:
+6897 6fe0c4f2 fetch 1 ,mem_hci_uart_rx_gpio 
+6898 247a0000 nrtn blank 
+6899 7044f206 jam hci_uart_rx_gpio_num ,mem_hci_uart_rx_gpio 
+689a 20600000 rtn 
+
+hci_init_uart_default_config_rts:
+689b 6fe0c4f3 fetch 1 ,mem_hci_uart_rts_gpio 
+689c 247a0000 nrtn blank 
+689d 7044f309 jam hci_uart_rts_gpio_num ,mem_hci_uart_rts_gpio 
+689e 20600000 rtn 
+
+hci_init_uart_default_config_cts:
+689f 6fe0c4f4 fetch 1 ,mem_hci_uart_cts_gpio 
+68a0 247a0000 nrtn blank 
+68a1 7044f40a jam hci_uart_cts_gpio_num ,mem_hci_uart_cts_gpio 
+68a2 20600000 rtn 
+
+hci_init_uart_config:
+68a3 58000c00 setarg mem_h5rx_buf 
+68a4 67e10670 store 2 ,mem_pdatatemp 
+68a5 58000eff setarg mem_h5rx_buf_end 
+68a6 e7e10005 istore 2 ,contw 
+68a7 58000f00 setarg mem_h5tx_buf 
+68a8 e7e10005 istore 2 ,contw 
+68a9 58000fff setarg mem_h5tx_buf_end 
+68aa e7e10005 istore 2 ,contw 
+68ab 6fe40670 fetch 8 ,mem_pdatatemp 
+68ac 20406d68 call uarta_init_dma_mem 
+68ad 20406d82 call uart_clock_select_main_freq_crystal 
+68ae d841c200 arg 115200 ,temp 
+68af 20406d75 call uarta_calc_baud_rate_config 
+68b0 6fe0c4f1 fetch 1 ,mem_hci_uart_tx_gpio 
+68b1 d8400008 arg gpcfg_uart_txd ,temp 
+68b2 20406f21 call gpio_config_function_int 
+68b3 6fe0c4f2 fetch 1 ,mem_hci_uart_rx_gpio 
+68b4 d8400049 arg gpcfg_uart_rxd | gpcfg_pullup ,temp 
+68b5 20406f21 call gpio_config_function_int 
+68b6 6fe0c4f3 fetch 1 ,mem_hci_uart_rts_gpio 
+68b7 d840000a arg gpcfg_uart_rts ,temp 
+68b8 20406f21 call gpio_config_function_int 
+68b9 6fe0c4f4 fetch 1 ,mem_hci_uart_cts_gpio 
+68ba d840000b arg gpcfg_uart_cts ,temp 
+68bb 20406f21 call gpio_config_function_int 
+68bc d8400081 arg fun_uart_control_enable | fun_uart_control_setting_rate_baud ,temp 
+68bd 60588060 storet 1 ,core_uart_ctrl 
+68be 20207d76 branch clean_xmem 
+
+hci_init_pwm_default_config:
+68bf 6fe0c4f5 fetch 1 ,mem_hci_pwm_12mhz_gpio 
+68c0 247a0000 nrtn blank 
+68c1 7044f50c jam hci_pmw_12mhz_gpio_num ,mem_hci_pwm_12mhz_gpio 
+68c2 20600000 rtn 
+
+hci_init_pwm:
+68c3 6fe0c4f5 fetch 1 ,mem_hci_pwm_12mhz_gpio 
+68c4 d8400010 arg gpcfg_pwm_out0 ,temp 
+68c5 20406f21 call gpio_config_function_int 
+68c6 da200040 arg 0x40 ,rega 
+68c7 20407055 call pwm_init 
+68c8 da200000 arg 0 ,rega 
+68c9 da400000 arg 0 ,regb 
+68ca 58000000 setarg 0 
+68cb 2040707a call pwm_duty_cycle_set 
+68cc d8e00000 arg 0 ,queue 
+68cd 202070c0 branch pwm_set_select 
+
+hci_process_check_uart_rx:
+68ce 6ff10112 fetch 2 ,core_uart_rxitems 
+68cf 1fe0a3fc add pdata ,-4 ,rega 
+68d0 24610000 nrtn positive 
+68d1 20406d96 call uarta_prepare_rx 
+68d2 efe08003 ifetch 1 ,contru 
+68d3 c000e8d6 beq hci_h4_type_cmd ,hci_parse_packet_cmd 
+68d4 20407c95 call delay_10ms 
+68d5 20206d9e branch uarta_clear_current_rx 
+
+hci_parse_packet_cmd:
+68d6 efe10003 ifetch 2 ,contru 
+68d7 67e10710 store 2 ,mem_hci_opcode 
+68d8 d84003ff arg 0x3ff ,temp 
+68d9 98410400 iand temp ,temp 
+68da 60490709 storet 2 ,mem_hci_opcode_ocf 
+68db 1feb7e00 rshift2 pdata ,pdata 
+68dc 1fecfe00 rshift8 pdata ,pdata 
+68dd 67e0870b store 1 ,mem_hci_opcode_ogf 
+68de efe08003 ifetch 1 ,contru 
+68df 1fe0ffff pincrease -1 
+68e0 9a267c00 isub rega ,null 
+68e1 20610000 rtn positive 
+68e2 204068e4 call hci_parse_complete_packet 
+68e3 2020693f branch hci_drop_current_packet 
+
+hci_parse_complete_packet:
+68e4 6fe0870b fetch 1 ,mem_hci_opcode_ogf 
+68e5 c01fe8e7 beq hci_ogf_vendor_specific_debug ,hci_parse_packet_cmd_ogf_vendorspecific_debug 
+68e6 2020692b branch hci_send_event_command_complete_error_command_nuknown 
+
+hci_parse_packet_cmd_ogf_vendorspecific_debug:
+68e7 44da4016 bpatch patch16_4 ,mem_patch16 
+68e8 6fe08709 fetch 1 ,mem_hci_opcode_ocf 
+68e9 c000692a beq hci_vendor_cmd_reset ,hci_normal_reply 
+68ea c000e8f2 beq hci_vendor_cmd_chipid ,phci_grp_vendor_chipid 
+68eb c00168f7 beq hci_vendor_cmd_baud ,phci_grp_vendor_baud 
+68ec c001e905 beq hci_vendor_cmd_patch ,phci_grp_vendor_patch 
+68ed c002690f beq hci_vendor_cmd_patch_done ,phci_grp_vendor_done 
+68ee c002e92a beq hci_vendor_cmd_echo ,hci_normal_reply 
+68ef c0086920 beq hci_vendor_cmd_mem ,phci_grp_vendor_mem 
+68f0 c00a6926 beq hci_vendor_cmd_set_flow_control ,phci_grp_vendor_flow_control 
+68f1 2020692a branch hci_normal_reply 
+
+phci_grp_vendor_chipid:
+68f2 70071200 jam command_succeeded ,mem_hci_command_complete_return_parameter 
+68f3 6ff10000 fetch 2 ,core_chipid 
+68f4 67e10713 store 2 ,mem_hci_command_complete_return_parameter_chip_id 
+68f5 df200003 arg 3 ,loopcnt 
+68f6 20206932 branch hci_send_event_command_complete 
+
+phci_grp_vendor_baud:
+68f7 efe10003 ifetch 2 ,contu 
+68f8 67f10052 store 2 ,core_uart_baud 
+68f9 20600000 rtn 
+
+phci_grp_vendor_patch_common:
+68fa efe08003 ifetch 1 ,contu 
+68fb 1fe20400 copy pdata ,temp 
+68fc 67f08024 store 1 ,core_ucode_low 
+68fd efe08003 ifetch 1 ,contu 
+68fe 98408400 iadd temp ,temp 
+68ff 79207e07 set1 7 ,pdata 
+6900 67f08023 store 1 ,core_ucode_ctrl 
+6901 efe08003 ifetch 1 ,contu 
+6902 98408400 iadd temp ,temp 
+6903 1fe27200 copy pdata ,loopcnt 
+6904 20600000 rtn 
+
+phci_grp_vendor_patch:
+6905 204068fa call phci_grp_vendor_patch_common 
+
+phci_grp_vendor_patch_loop:
+6906 efe08003 ifetch 1 ,contu 
+6907 67f08025 store 1 ,core_ucode_data 
+6908 98408400 iadd temp ,temp 
+6909 c2006906 loop phci_grp_vendor_patch_loop 
+
+phci_grp_vendor_patch_check_sum:
+690a 184104ff and temp ,0xff ,temp 
+690b efe08003 ifetch 1 ,contu 
+690c 98467c00 isub temp ,null 
+690d 2422e91e nbranch phci_grp_vendor_patch_bad ,zero 
+690e 2020692a branch hci_normal_reply 
+
+phci_grp_vendor_done:
+690f df200020 arg 0x20 ,loopcnt 
+6910 d8a04000 arg mem_patch00 ,contw 
+6911 d8400000 arg 0 ,temp 
+
+phci_grp_vendor_done_loop:
+6912 efe08003 ifetch 1 ,contu 
+6913 e7e08005 istore 1 ,contw 
+6914 98408400 iadd temp ,temp 
+6915 c2006912 loop phci_grp_vendor_done_loop 
+6916 184104ff and temp ,0xff ,temp 
+6917 efe08003 ifetch 1 ,contu 
+6918 98467c00 isub temp ,null 
+6919 2422e91e nbranch phci_grp_vendor_patch_bad ,zero 
+691a 70802300 jam 0 ,core_ucode_ctrl 
+691b 2040692a call hci_normal_reply 
+691c 20406dae call wait_uarttx 
+691d 20202001 branch soft_reset 
+
+phci_grp_vendor_patch_bad:
+691e 70802300 jam 0 ,core_ucode_ctrl 
+691f 2020692b branch hci_send_event_command_complete_error_command_nuknown 
+
+phci_grp_vendor_mem:
+6920 efe08003 ifetch 1 ,contu 
+6921 1fe27200 copy pdata ,loopcnt 
+6922 efe10003 ifetch 2 ,contu 
+6923 1fe20a00 copy pdata ,contw 
+6924 20406ddd call uart_copy_rx_bytes 
+6925 2020692a branch hci_normal_reply 
+
+phci_grp_vendor_flow_control:
+6926 6ff08060 fetch 1 ,core_uart_ctrl 
+6927 79207e04 set1 bit_uart_control_flow_control ,pdata 
+6928 67f08060 store 1 ,core_uart_ctrl 
+6929 2020692a branch hci_normal_reply 
+
+hci_normal_reply:
+692a 2020692f branch hci_send_event_command_complete_without_payload 
+
+hci_send_event_command_complete_error_command_nuknown:
+692b 70071201 jam command_unknown ,mem_hci_command_complete_return_parameter 
+692c 20206930 branch hci_send_event_command_complete_without_payload + 1 
+
+hci_send_event_command_complete_error_command_disallowed:
+692d 7007120c jam command_disallowed ,mem_hci_command_complete_return_parameter 
+692e 20206930 branch hci_send_event_command_complete_without_payload + 1 
+
+hci_send_event_command_complete_without_payload:
+692f 70071200 jam command_succeeded ,mem_hci_command_complete_return_parameter 
+6930 df200001 arg 1 ,loopcnt 
+6931 20206932 branch hci_send_event_command_complete 
+
+hci_send_event_command_complete:
+6932 70070d0e jam hci_event_command_complete ,mem_hci_event_head_event_code 
+6933 1f20fe03 add loopcnt ,3 ,pdata 
+6934 67e0870e store 1 ,mem_hci_event_para_total_length 
+6935 2040693b call hci_prepare_send_event 
+6936 6fe1870f fetch 3 ,mem_hci_command_complete_num_hci_command_packet 
+6937 e7e18003 istore 3 ,contwu 
+6938 d8c00712 arg mem_hci_command_complete_return_parameter ,contr 
+6939 20406dc4 call uart_copy_tx_bytes 
+693a 20206da4 branch uarta_send_register_pop 
+
+hci_prepare_send_event:
+693b 20406da2 call uarta_prepare_tx_register_push 
+693c 6fe1870c fetch 3 ,mem_hci_event_head_type 
+693d e7e18003 istore 3 ,contwu 
+693e 20600000 rtn 
+
+hci_drop_current_packet:
+693f 20406d96 call uarta_prepare_rx 
+6940 18608603 increase 3 ,contru 
+6941 efe08003 ifetch 1 ,contru 
+6942 98608600 iadd contru ,contru 
+6943 20206d9c branch uarta_rxdone 
+
+cmd_exit:
+6944 70411400 jam 0 ,mem_hci_cmd 
+6945 20600000 rtn 
+
+l2cap_init:
+6946 2035e94b branch l2cap_init_wake ,wake 
+6947 58004450 setarg mem_l2cap_xmem_end 
+6948 d8a04441 arg mem_l2cap_xmem_start ,contw 
+6949 98a67200 isub contw ,loopcnt 
+694a 20407ca1 call clear_mem 
+
+l2cap_init_wake:
+694b 20600000 rtn 
+
+check_l2cap_map:
+694c d8e00000 arg 0 ,queue 
+694d da400000 arg 0 ,regb 
+
+check_l2cap_map_loop:
+694e 18e67c07 sub queue ,7 ,null 
+694f 24610000 nrtn positive 
+6950 aa2fffff qisolate1 rega 
+6951 2020e953 branch check_l2cap_map_used ,true 
+6952 20206957 branch check_l2cap_map_used2 
+
+check_l2cap_map_used:
+6953 18427e00 copy temp ,pdata 
+6954 203a6957 branch check_l2cap_map_used2 ,blank 
+6955 f9202400 qset1 regb 
+6956 184085ff increase -1 ,temp 
+
+check_l2cap_map_used2:
+6957 18e08e01 increase 1 ,queue 
+6958 2020694e branch check_l2cap_map_loop 
+
+ble_l2cap_malloc:
+6959 6b01433f fetchr regd ,2 ,mem_ble_l2cap_tx_buff0_ptr 
+695a 6d614341 fetchr rege ,2 ,mem_ble_l2cap_tx_buff_size_ptr 
+695b 20407dbc call disable_user 
+695c 2020695d branch host_l2cap_malloc 
+
+host_l2cap_malloc:
+695d 44db4016 bpatch patch16_6 ,mem_patch16 
+695e 204069a9 call l2cap_malloc_is_fifo_full 
+695f 243a235a nbranch assert ,blank 
+6960 204069b9 call l2cap_malloc_get_full_map 
+6961 df200008 arg 8 ,loopcnt 
+
+host_l2cap_malloc_loop:
+6962 6848c441 fetcht 1 ,mem_used_map 
+6963 1f260e08 sub loopcnt ,8 ,queue 
+6964 a84fffff qisolate1 temp 
+6965 2020e96a branch host_l2cap_malloc_next_buffer ,true 
+6966 20406971 call host_l2cap_malloc_check_buffer_enough 
+6967 2421696a nbranch host_l2cap_malloc_next_buffer ,positive 
+6968 20406987 call host_l2cap_malloc_into_fifo 
+6969 2020696e branch host_l2cap_malloc_succ 
+
+host_l2cap_malloc_next_buffer:
+696a 1d627e00 copy rege ,pdata 
+696b 9b00b000 iadd regd ,regd 
+696c c2006962 loop host_l2cap_malloc_loop 
+696d 2020235a branch assert 
+
+host_l2cap_malloc_succ:
+696e 1b027e00 copy regd ,pdata 
+696f 1b020a00 copy regd ,contw 
+6970 20600000 rtn 
+
+host_l2cap_malloc_check_buffer_enough:
+6971 44dbc016 bpatch patch16_7 ,mem_patch16 
+6972 1f260e08 sub loopcnt ,8 ,queue 
+6973 d8400000 arg 0 ,temp 
+6974 d9600000 arg 0 ,timeup 
+
+host_l2cap_malloc_check_buffer_enough_loop:
+6975 18e27e00 copy queue ,pdata 
+6976 c0046982 beq 8 ,host_l2cap_malloc_check_buffer_enough_end 
+6977 6fe0c441 fetch 1 ,mem_used_map 
+6978 afefffff qisolate1 pdata 
+6979 2020e982 branch host_l2cap_malloc_check_buffer_enough_end ,true 
+697a f9201600 qset1 timeup 
+697b 1d627e00 copy rege ,pdata 
+697c 98408400 iadd temp ,temp 
+697d 18e08e01 increase 1 ,queue 
+697e 1a227e00 copy rega ,pdata 
+697f 98467c00 isub temp ,null 
+6980 2022e982 branch host_l2cap_malloc_check_buffer_enough_end ,zero 
+6981 20216975 branch host_l2cap_malloc_check_buffer_enough_loop ,positive 
+
+host_l2cap_malloc_check_buffer_enough_end:
+6982 18427e00 copy temp ,pdata 
+6983 9a267c00 isub rega ,null 
+6984 24628000 nrtn zero 
+6985 f9201600 qset1 timeup 
+6986 20600000 rtn 
+
+host_l2cap_malloc_into_fifo:
+6987 44dc4017 bpatch patch17_0 ,mem_patch17 
+6988 204069a9 call l2cap_malloc_is_fifo_full 
+6989 243a235a nbranch assert ,blank 
+698a 204069af call l2cap_malloc_is_fifo_empty 
+698b 203a6990 branch host_l2cap_malloc_into_fifo_no_push ,blank 
+698c 6fe4c445 fetch 9 ,mem_tx_fifo1 
+698d 67e4c442 store 9 ,mem_tx_fifo0 
+698e 58000000 setarg 0 
+698f e7e18005 istore 3 ,contw 
+
+host_l2cap_malloc_into_fifo_no_push:
+6990 6160c44b storer timeup ,1 ,mem_tx_fifo3_map 
+6991 6301444c storer regd ,2 ,mem_tx_fifo3_ptr 
+6992 20600000 rtn 
+
+l2cap_malloc_fifo_out:
+6993 44dcc017 bpatch patch17_1 ,mem_patch17 
+6994 204069b2 call l2cap_malloc_fifo_get_first_ptr 
+6995 18c08c01 increase 1 ,contr 
+6996 efe10006 ifetch 2 ,contr 
+6997 20600000 rtn 
+
+l2cap_malloc_free:
+6998 44dd4017 bpatch patch17_2 ,mem_patch17 
+6999 204069b2 call l2cap_malloc_fifo_get_first_ptr 
+699a 18c20a00 copy contr ,contw 
+699b 18c20400 copy contr ,temp 
+699c 58000000 setarg 0 
+699d e7e18005 istore 3 ,contw 
+699e 20600000 rtn 
+
+l2cap_malloc_discard:
+699f 44ddc017 bpatch patch17_3 ,mem_patch17 
+69a0 204069af call l2cap_malloc_is_fifo_empty 
+69a1 203a235a branch assert ,blank 
+69a2 6fe1c448 fetch 3 ,mem_tx_fifo2 
+69a3 67e1c44b store 3 ,mem_tx_fifo3 
+69a4 6fe1c445 fetch 3 ,mem_tx_fifo1 
+69a5 67e1c448 store 3 ,mem_tx_fifo2 
+69a6 6fe1c442 fetch 3 ,mem_tx_fifo0 
+69a7 67e1c445 store 3 ,mem_tx_fifo1 
+69a8 20600000 rtn 
+
+l2cap_malloc_is_fifo_full:
+69a9 44de4017 bpatch patch17_4 ,mem_patch17 
+69aa 6fe1c442 fetch 3 ,mem_tx_fifo0 
+69ab 20600000 rtn 
+
+l2cap_malloc_is_fifo_nearly_full:
+69ac 44dec017 bpatch patch17_5 ,mem_patch17 
+69ad 6fe1c445 fetch 3 ,mem_tx_fifo1 
+69ae 20600000 rtn 
+
+l2cap_malloc_is_fifo_empty:
+69af 44df4017 bpatch patch17_6 ,mem_patch17 
+69b0 6fe1c44b fetch 3 ,mem_tx_fifo3 
+69b1 20600000 rtn 
+
+l2cap_malloc_fifo_get_first_ptr:
+69b2 204069af call l2cap_malloc_is_fifo_empty 
+69b3 203a69b7 branch l2cap_malloc_fifo_get_first_ptr_empty ,blank 
+69b4 d8c04442 arg mem_tx_fifo0 ,contr 
+
+l2cap_malloc_free_loop:
+69b5 efe18006 ifetch 3 ,contr 
+69b6 203a69b5 branch l2cap_malloc_free_loop ,blank 
+
+l2cap_malloc_fifo_get_first_ptr_empty:
+69b7 18c08dfd increase -3 ,contr 
+69b8 20600000 rtn 
+
+l2cap_malloc_get_full_map:
+69b9 44dfc017 bpatch patch17_7 ,mem_patch17 
+69ba df200004 arg 4 ,loopcnt 
+69bb d8c04442 arg mem_tx_fifo0_map ,contr 
+69bc d8400000 arg 0 ,temp 
+
+l2cap_malloc_get_full_map_loop:
+69bd efe18006 ifetch 3 ,contr 
+69be 1fe17eff and pdata ,0xff ,pdata 
+69bf 98418400 ior temp ,temp 
+69c0 c20069bd loop l2cap_malloc_get_full_map_loop 
+69c1 6048c441 storet 1 ,mem_used_map 
+69c2 20600000 rtn 
+
+l2cap_lpm_get_wake_lock:
+69c3 d8e0000c arg wake_lock_l2cap_tx ,queue 
+69c4 202024e7 branch lpm_get_wake_lock 
+
+l2cap_lpm_put_wake_lock:
+69c5 d8e0000c arg wake_lock_l2cap_tx ,queue 
+69c6 202024eb branch lpm_put_wake_lock 
+
+twspi_reset:
+69c7 44e0c018 bpatch patch18_1 ,mem_patch18 
+69c8 18467cff sub temp ,ui_button_gpio_disable ,null 
+69c9 20628000 rtn zero 
+69ca 18427e00 copy temp ,pdata 
+69cb 1fe17eff and_into 0xff ,pdata 
+69cc 1fe67c0f sub pdata ,gpio_number + -1 ,null 
+69cd 242169d9 nbranch twspi_reset_ext ,positive 
+69ce d8a08070 arg core_gpio_conf ,contw 
+
+twspi_reset_next:
+69cf 98a08a00 iadd contw ,contw 
+69d0 18a22200 copy contw ,rega 
+69d1 d840003e arg gpcfg_output_low ,temp 
+69d2 e0408005 istoret 1 ,contw 
+69d3 204069dc call twspi_disable 
+69d4 2000001e nop 30 
+69d5 1a220a00 copy rega ,contw 
+69d6 d840003f arg gpcfg_output_high ,temp 
+69d7 e0408005 istoret 1 ,contw 
+69d8 202069e0 branch twspi_enable 
+
+twspi_reset_ext:
+69d9 d8a080d4 arg core_gpio_conf_hi ,contw 
+69da 1fe0fff0 increase -16 ,pdata 
+69db 202069cf branch twspi_reset_next 
+
+twspi_disable:
+69dc 6ff08081 fetch 1 ,core_spid_delay 
+69dd 1fe17e7f and_into 0x7f ,pdata 
+69de 67f08081 store 1 ,core_spid_delay 
+69df 20600000 rtn 
+
+twspi_enable:
+69e0 6ff08081 fetch 1 ,core_spid_delay 
+69e1 1fe1fe80 or_into 0x80 ,pdata 
+69e2 67f08081 store 1 ,core_spid_delay 
+69e3 20600000 rtn 
+
+twspi_write:
+69e4 20206bd0 branch spid_write_reg 
+
+twspi_read:
+69e5 20206bd7 branch spid_read_reg 
+
+aes_disable:
+69e6 6ff0806f fetch 1 ,core_bist_ctrl 
+69e7 793ffe07 set0 aes_en ,pdata 
+69e8 67f0806f store 1 ,core_bist_ctrl 
+69e9 20600000 rtn 
+
+read_function_aes:
+69ea 243469ee nbranch read_function ,user 
+69eb 6ff0806f fetch 1 ,core_bist_ctrl 
+69ec 79207e07 set1 aes_en ,pdata 
+69ed 67f0806f store 1 ,core_bist_ctrl 
+
+read_function:
+69ee 18427c00 copy temp ,null 
+69ef 2022e9f1 branch read_fuction_zero ,zero 
+69f0 1a627a00 copy regc ,pc 
+
+read_fuction_zero:
+69f1 2fcc0000 isolate0 0 ,null 
+69f2 20206b00 branch set_ucode_status 
+
+get_block_header:
+69f3 18000404 force 4 ,temp 
+
+get_block_header0:
+69f4 da2001e7 arg mem_ucode_buf ,rega 
+69f5 204069e6 call aes_disable 
+69f6 204069ee call read_function 
+69f7 da2055aa arg 0x55aa ,rega 
+69f8 6fe101e7 fetch 2 ,mem_ucode_buf 
+69f9 e8410006 ifetcht 2 ,contr 
+69fa 9a267c00 isub rega ,null 
+69fb 20600000 rtn 
+
+read_first_block:
+69fc 20546a0e call load_aes_reinit ,user 
+69fd d8400002 arg 2 ,temp 
+69fe da2043c8 arg mem_ucode_ptr ,rega 
+69ff 204069ee call read_function 
+6a00 6fe143c8 fetch 2 ,mem_ucode_ptr 
+
+read_first_block_cont:
+6a01 67e101e0 store 2 ,mem_addr_mi 
+6a02 20546a04 call get_iv ,user 
+6a03 20600000 rtn 
+
+get_iv:
+6a04 d8400010 arg 16 ,temp 
+6a05 da2001ed arg mem_ucode_keybuf ,rega 
+6a06 204069e6 call aes_disable 
+6a07 204069ee call read_function 
+
+set_iv:
+6a08 d8c001ed arg mem_ucode_keybuf ,contr 
+6a09 df200010 arg 16 ,loopcnt 
+6a0a 20407353 call aes_load_data 
+6a0b 204072da call aes_init 
+6a0c 2040736f call aes_clear_data 
+6a0d 202072d4 branch do_aes_cbc 
+
+load_aes_reinit:
+6a0e 70802300 jam 0x0 ,core_ucode_ctrl 
+6a0f 204069e6 call aes_disable 
+6a10 2020736f branch aes_clear_data 
+
+load_storage:
+6a11 58000000 setarg 0 
+6a12 67e10699 store 2 ,mem_queue 
+6a13 7856fc00 disable match 
+6a14 204069f3 call get_block_header 
+6a15 24628000 nrtn zero 
+6a16 7836fc00 enable match 
+6a17 58008000 setarg 0x8000 
+6a18 67f18022 store 3 ,core_ucode_hi 
+6a19 da208025 arg core_ucode_data ,rega 
+6a1a 204069ea call read_function_aes 
+6a1b 70802300 jam 0x0 ,core_ucode_ctrl 
+6a1c 6fe081dd fetch 1 ,mem_ucode_status 
+6a1d c4000000 rtnbit0 0 
+
+load_storage_loop:
+6a1e d8400006 arg 6 ,temp 
+6a1f 204069f4 call get_block_header0 
+6a20 2422ea2e nbranch load_data_checksum_compare ,zero 
+6a21 ea210006 ifetchr rega ,2 ,contr 
+6a22 204069ee call read_function 
+6a23 20406a25 call load_data_checksum_calc 
+6a24 20206a1e branch load_storage_loop 
+
+load_data_checksum_calc:
+6a25 6fe10699 fetch 2 ,mem_queue 
+6a26 df200006 arg 6 ,loopcnt 
+6a27 d8c001e7 arg mem_ucode_buf ,contr 
+6a28 20407dcc call cal_sum 
+6a29 6f2101e9 fetchr loopcnt ,2 ,mem_ucode_len 
+6a2a 1a220c00 copy rega ,contr 
+6a2b 20407dcc call cal_sum 
+6a2c 67e10699 store 2 ,mem_queue 
+6a2d 20600000 rtn 
+
+load_data_checksum_compare:
+6a2e 6fe0821c fetch 1 ,mem_otp_load_check_sum 
+6a2f c02d6a3c beq 0x5a ,load_data_checksum_ok 
+6a30 da20aa55 arg 0xaa55 ,rega 
+6a31 6fe101e7 fetch 2 ,mem_ucode_buf 
+6a32 9a267c00 isub rega ,null 
+6a33 2422ea3e nbranch load_data_checksum_compare_fail ,zero 
+6a34 da2055aa arg 0x55aa ,rega 
+6a35 6fe101e9 fetch 2 ,mem_ucode_len 
+6a36 9a267c00 isub rega ,null 
+6a37 2422ea3e nbranch load_data_checksum_compare_fail ,zero 
+6a38 6fe101eb fetch 2 ,mem_sched_addr 
+6a39 68490699 fetcht 2 ,mem_queue 
+6a3a 98467c00 isub temp ,null 
+6a3b 2422ea3e nbranch load_data_checksum_compare_fail ,zero 
+
+load_data_checksum_ok:
+6a3c 7920220f set1 15 ,rega 
+6a3d 202069f1 branch read_fuction_zero 
+
+load_data_checksum_compare_fail:
+6a3e 7001dd00 jam 0 ,mem_ucode_status 
+6a3f 20600000 rtn 
+
+loadcode_lock_load_ucode:
+6a40 1fe17eff and pdata ,0xff ,pdata 
+6a41 1ff1fe00 rshift4 pdata ,pdata 
+6a42 67e0c3cb store 1 ,mem_device_option 
+6a43 20206a59 branch loadcode_load_key 
+
+loadcode_lock:
+6a44 6ff10143 fetch 2 ,core_ucode_flag 
+6a45 243a6a40 nbranch loadcode_lock_load_ucode ,blank 
+6a46 20406a59 call loadcode_load_key 
+6a47 6fe143cb fetch 2 ,mem_device_option 
+6a48 207a0000 rtn blank 
+6a49 20406a4b call loadcode_set_lock 
+6a4a 202023ba branch lpm_write_lock 
+
+loadcode_set_lock:
+6a4b 6fe0c3cb fetch 1 ,mem_device_option 
+6a4c 207a0000 rtn blank 
+6a4d 1fe1040f and pdata ,0xf ,temp 
+6a4e 6048c3cb storet 1 ,mem_device_option 
+6a4f 1ff1fe00 rshift4 pdata ,pdata 
+6a50 9842fe00 ixor temp ,pdata 
+6a51 c087ebc2 bne 0xf ,app_lpm_mpu_lock_24g_ble 
+6a52 20206b8d branch app_lpm_lock_check 
+
+load_otp_hv_vsel:
+6a53 6fe08219 fetch 1 ,mem_otp_hv_sel 
+6a54 245a23e0 ncall lpm_save_sel_hv ,blank 
+6a55 6fe0821a fetch 1 ,mem_otp_ldo_vsel 
+6a56 207a0000 rtn blank 
+6a57 67e0c0c9 store 1 ,mem_lpm_ldo_sel 
+6a58 202023e4 branch lpm_write_io_vsel 
+
+loadcode_load_key:
+6a59 78547c00 disable user 
+6a5a 6fe0c3ca fetch 1 ,mem_ucode_flag 
+6a5b c4018000 rtnbit0 otp_uflag_aes 
+6a5c 20406aad call loadcode_check_otp_lock 
+6a5d dfe00ff0 arg otp_offset_ucode_key_l ,pdata 
+6a5e 9a40a400 iadd regb ,regb 
+6a5f 18007210 force 16 ,loopcnt 
+6a60 da2001ed arg mem_ucode_keybuf ,rega 
+6a61 20406b74 call otp_read_data 
+6a62 70800608 jam otp_key_lock ,core_misc_ctrl 
+6a63 d8c001ed arg mem_ucode_keybuf ,contr 
+6a64 2040735f call load_key 
+6a65 d8a001ed arg mem_ucode_keybuf ,contw 
+6a66 20407c99 call memset0_16 
+6a67 20207dba branch enable_user 
+
+loadcode:
+6a68 70805025 jam 0x25 ,core_clkoff 
+6a69 20406b3a call enable_otp_read 
+6a6a da400000 arg otp_offset_patch_ptr ,regb 
+6a6b 1800720b force 11 ,loopcnt 
+6a6c da2043c8 arg mem_ucode_ptr ,rega 
+6a6d 20406b75 call otp_read_data1 
+6a6e 6ee2c3c8 fetchr regf ,5 ,mem_ucode_ptr 
+6a6f 6fe0c3ca fetch 1 ,mem_ucode_flag 
+6a70 c3026a78 bbit0 otp_uflag_bist ,loadcode_nobist 
+6a71 70806f07 jam 0x7 ,core_bist_ctrl 
+
+loadcode_bistwait:
+6a72 6ff0815e fetch 1 ,core_bist_done 
+6a73 c083ea72 bne 7 ,loadcode_bistwait 
+6a74 6ff08160 fetch 1 ,core_bist_fail 
+6a75 1ff27e00 lshift4 pdata ,pdata 
+6a76 67f0806f store 1 ,core_bist_ctrl 
+6a77 20206a7b branch loadcode_otp 
+
+loadcode_nobist:
+6a78 20406af5 call set_bistfix 
+6a79 20407d76 call clean_xmem 
+6a7a 20407d74 call clean_smem 
+
+loadcode_otp:
+6a7b 66e2c3c8 storer regf ,5 ,mem_ucode_ptr 
+6a7c 20406aad call loadcode_check_otp_lock 
+6a7d dfe00fd0 arg otp_offset_adc_param_l ,pdata 
+6a7e 9a40a400 iadd regb ,regb 
+6a7f df200020 arg 32 ,loopcnt 
+6a80 da2001fd arg mem_otp_temp ,rega 
+6a81 20406b74 call otp_read_data 
+6a82 20406a53 call load_otp_hv_vsel 
+6a83 20406a44 call loadcode_lock 
+6a84 6fe0c3ca fetch 1 ,mem_ucode_flag 
+6a85 c301ea8f bbit0 otp_uflag_aes ,loadcode_unenc 
+6a86 6848c3cc fetcht 1 ,mem_peripheral_lock_flag 
+6a87 dfe00000 arg 0 ,pdata 
+6a88 79207e06 set1 otp_not_limit ,pdata 
+6a89 79207e07 set1 otp_limit ,pdata 
+6a8a 98412200 iand temp ,rega 
+6a8b 1a267c00 sub rega ,0 ,null 
+6a8c 2022eaf1 branch loadcode_error ,zero 
+6a8d 9a267c00 isub rega ,null 
+6a8e 2022eaf1 branch loadcode_error ,zero 
+
+loadcode_unenc:
+6a8f 70003000 jam 0 ,mem_loadcode_times 
+6a90 da606b1e arg otp_load_code ,regc 
+
+loadcode_otp_loop:
+6a91 20406ae5 call loadcode_timeout 
+6a92 24216af1 nbranch loadcode_error ,positive 
+6a93 6fe143c8 fetch 2 ,mem_ucode_ptr 
+6a94 203a6a9c branch loadcode_otp_end ,blank 
+6a95 20406a01 call read_first_block_cont 
+6a96 20406a11 call load_storage 
+6a97 2436ea9c nbranch loadcode_otp_end ,match 
+6a98 6fe081dd fetch 1 ,mem_ucode_status 
+6a99 2fe00603 compare 3 ,pdata ,3 
+6a9a 2420ea91 nbranch loadcode_otp_loop ,true 
+6a9b 20406aaa call run_otp_code 
+
+loadcode_otp_end:
+6a9c 20406b37 call disable_otp 
+6a9d 70003000 jam 0 ,mem_loadcode_times 
+
+loadcode_iic_loop:
+6a9e 20406ae5 call loadcode_timeout 
+6a9f 24216af1 nbranch loadcode_error ,positive 
+6aa0 20406ad7 call iicd_load_gpio_init 
+6aa1 20406cc4 call clear_eeprom_size_2k 
+6aa2 6fe0c3ca fetch 1 ,mem_ucode_flag 
+6aa3 c2816abd bbit1 otp_uflag_skip_eep ,loadcode_spi 
+6aa4 20406adf call loadcode_iic_by_eeprom 
+6aa5 2436eab4 nbranch loadcode_iic_eeprom_2k ,match 
+6aa6 6fe081dd fetch 1 ,mem_ucode_status 
+6aa7 2fe00603 compare 3 ,pdata ,3 
+6aa8 2420ea9e nbranch loadcode_iic_loop ,true 
+6aa9 20206abd branch loadcode_spi 
+
+run_otp_code:
+6aaa 580001ff setarg 0x1ff 
+6aab dfa00000 arg 0 ,pc 
+6aac 20600000 rtn 
+
+loadcode_check_otp_lock:
+6aad da401000 arg otp_offset_h ,regb 
+6aae 6ff08144 fetch 1 ,core_peripheral_lock 
+6aaf c283eab2 bbit1 otp_limit ,loadcode_otp_lock 
+6ab0 6fe0c3cc fetch 1 ,mem_peripheral_lock_flag 
+6ab1 c4038000 rtnbit0 otp_limit 
+
+loadcode_otp_lock:
+6ab2 da400000 arg 0 ,regb 
+6ab3 20600000 rtn 
+
+loadcode_iic_eeprom_2k:
+6ab4 20406cc1 call set_eeprom_size_2k 
+6ab5 6fe0c3ca fetch 1 ,mem_ucode_flag 
+6ab6 c2816abd bbit1 otp_uflag_skip_eep ,loadcode_spi 
+6ab7 20406adf call loadcode_iic_by_eeprom 
+6ab8 2436eabd nbranch loadcode_spi ,match 
+6ab9 6fe081dd fetch 1 ,mem_ucode_status 
+6aba 2fe00603 compare 3 ,pdata ,3 
+6abb 2420ea9e nbranch loadcode_iic_loop ,true 
+6abc 20206acd branch loadcode_hci 
+
+loadcode_spi:
+6abd 70003000 jam 0 ,mem_loadcode_times 
+
+loadcode_spi_loop:
+6abe 20406ae5 call loadcode_timeout 
+6abf 24216af1 nbranch loadcode_error ,positive 
+6ac0 6fe0c3ca fetch 1 ,mem_ucode_flag 
+6ac1 c280eacd bbit1 otp_uflag_skip_flash ,loadcode_hci 
+6ac2 20406c20 call spid_init_flash 
+6ac3 200000c8 nop 200 
+6ac4 20406c2f call spid_flash_release_form_powerdown 
+6ac5 20000064 nop 100 
+6ac6 da606c6c arg spid_load_flash ,regc 
+6ac7 204069fc call read_first_block 
+6ac8 20406a11 call load_storage 
+6ac9 2436eacd nbranch loadcode_hci ,match 
+6aca 6fe081dd fetch 1 ,mem_ucode_status 
+6acb 2fe00603 compare 3 ,pdata ,3 
+6acc 2420eabe nbranch loadcode_spi_loop ,true 
+
+loadcode_hci:
+6acd 20406ad1 call clear_key_buf 
+6ace 6fe0c3ca fetch 1 ,mem_ucode_flag 
+6acf c4000000 rtnbit0 otp_uflag_hci 
+6ad0 20206882 branch hci_init 
+
+clear_key_buf:
+6ad1 d8a001ed arg mem_ucode_keybuf ,contw 
+6ad2 20407c99 call memset0_16 
+6ad3 18007004 force regidx_key ,regext_index 
+6ad4 20407370 call aes_clear 
+6ad5 70805021 jam 0x21 ,core_clkoff 
+6ad6 20600000 rtn 
+
+iicd_load_gpio_init:
+6ad7 6fe0c429 fetch 1 ,mem_eeprom_sda_gpio 
+6ad8 6848c428 fetcht 1 ,mem_eeprom_scl_gpio 
+6ad9 98467c00 isub temp ,null 
+6ada 2422ecbc nbranch iicd_read_init_pin ,zero 
+
+iicd_load_default_gpio:
+6adb 70442704 jam 4 ,mem_eeprom_wp_gpio 
+6adc 70442817 jam 23 ,mem_eeprom_scl_gpio 
+6add 70442916 jam 22 ,mem_eeprom_sda_gpio 
+6ade 20206cbc branch iicd_read_init_pin 
+
+loadcode_iic_by_eeprom:
+6adf 58000000 setarg 0x0 
+6ae0 67e101e0 store 2 ,mem_addr_mi 
+6ae1 da606ce7 arg iicd_read_eep ,regc 
+6ae2 20406ca5 call iic_init_600khz 
+6ae3 204069fc call read_first_block 
+6ae4 20206a11 branch load_storage 
+
+loadcode_timeout:
+6ae5 20406aeb call loadcode_error_delay 
+6ae6 6fe08030 fetch 1 ,mem_loadcode_times 
+6ae7 1fe0fe01 increase 1 ,pdata 
+6ae8 1fe67c03 sub pdata ,3 ,null 
+6ae9 67e08030 store 1 ,mem_loadcode_times 
+6aea 20600000 rtn 
+
+loadcode_error_delay:
+6aeb 6fe08030 fetch 1 ,mem_loadcode_times 
+6aec 207a0000 rtn blank 
+6aed 6fe0821b fetch 1 ,mem_otp_load_delay 
+6aee 207a0000 rtn blank 
+6aef 1fe27200 copy pdata ,loopcnt 
+6af0 20207c96 branch delay_ms_wait 
+
+loadcode_error:
+6af1 20406ad1 call clear_key_buf 
+6af2 204069e6 call aes_disable 
+6af3 20407d7c call ice_break 
+6af4 20600000 rtn 
+
+set_bistfix:
+6af5 1fe17ee0 and_into 0xe0 ,pdata 
+6af6 1fe37e00 rshift pdata ,pdata 
+6af7 67f0806f store 1 ,core_bist_ctrl 
+6af8 58000001 setarg 1 
+6af9 d8c043cd arg mem_bistfix_val ,contr 
+
+set_bistfix_loop:
+6afa e8410006 ifetcht 2 ,contr 
+6afb 6059004c storet 2 ,core_lpm_reg 
+6afc 67f08020 store 1 ,core_set_bistfix 
+6afd 1fe3fe00 lshift pdata ,pdata 
+6afe c301eafa bbit0 3 ,set_bistfix_loop 
+6aff 20600000 rtn 
+
+set_ucode_status:
+6b00 6fe081dd fetch 1 ,mem_ucode_status 
+6b01 1fe3fe00 lshift pdata ,pdata 
+6b02 7920fe00 setflag true ,0 ,pdata 
+6b03 2a2c000f isolate0 15 ,rega 
+6b04 20608000 rtn true 
+6b05 67e081dd store 1 ,mem_ucode_status 
+6b06 20600000 rtn 
+
+decrypt_code:
+6b07 6ff0806f fetch 1 ,core_bist_ctrl 
+6b08 c4038000 rtnbit0 aes_en 
+6b09 20206b0d branch decrypt_code_skip 
+
+decrypt_code_loop:
+6b0a 6ff08128 fetch 1 ,core_dma_status 
+6b0b afefffff qisolate1 pdata 
+6b0c 20608000 rtn true 
+
+decrypt_code_skip:
+6b0d 6ff08108 fetch 1 ,core_misc_status 
+6b0e c300eb0a bbit0 1 ,decrypt_code_loop 
+6b0f 204072d4 call do_aes_cbc 
+6b10 20206b0a branch decrypt_code_loop 
+
+load_ucode:
+6b11 6fe140f0 fetch 2 ,mem_patch_ptr 
+6b12 207a0000 rtn blank 
+6b13 70802380 jam 0x80 ,core_ucode_ctrl 
+6b14 70802200 jam 0 ,core_ucode_hi 
+6b15 70802400 jam 0 ,core_ucode_low 
+6b16 684940f2 fetcht 2 ,mem_patch_len 
+6b17 184bf200 lshift2 temp ,loopcnt 
+6b18 98000c00 iforce contr 
+
+load_ucode_loop:
+6b19 efe08006 ifetch 1 ,contr 
+6b1a 67f08025 store 1 ,core_ucode_data 
+6b1b c2006b19 loop load_ucode_loop 
+6b1c 70802300 jam 0x0 ,core_ucode_ctrl 
+6b1d 20600000 rtn 
+
+otp_load_code:
+6b1e 18427200 copy temp ,loopcnt 
+6b1f 6fe101e0 fetch 2 ,mem_addr_mi 
+6b20 98408400 iadd temp ,temp 
+6b21 604901e0 storet 2 ,mem_addr_mi 
+6b22 98002400 iforce regb 
+6b23 1a225c00 copy rega ,nap 
+6b24 70800610 jam init_key ,core_misc_ctrl 
+6b25 20406b74 call otp_read_data 
+6b26 1dc22200 copy nap ,rega 
+6b27 2a2c000f isolate0 15 ,rega 
+6b28 20608000 rtn true 
+6b29 205a7dc6 call enable_true ,blank 
+6b2a 20206b00 branch set_ucode_status 
+
+otp_enable_chgpump25:
+6b2b 708ac801 jam 0x1 ,core_chgpump_ctrl 
+6b2c 2000012c nop 300 
+6b2d 708ac805 jam 0x5 ,core_chgpump_ctrl 
+6b2e 20000064 nop 100 
+6b2f 708ac825 jam 0x25 ,core_chgpump_ctrl 
+6b30 200003e8 nop 1000 
+6b31 708ac827 jam 0x27 ,core_chgpump_ctrl 
+6b32 2000012c nop 300 
+6b33 20600000 rtn 
+
+otp_enable_chgpump65:
+6b34 20406b2b call otp_enable_chgpump25 
+6b35 708ac83f jam 0x3f ,core_chgpump_ctrl 
+6b36 20600000 rtn 
+
+disable_otp:
+6b37 70804783 jam 0x83 ,core_otp_ctrl 
+
+otp_disable_chgpump:
+6b38 708ac800 jam 0 ,core_chgpump_ctrl 
+6b39 20600000 rtn 
+
+enable_otp_read:
+6b3a 20406b2b call otp_enable_chgpump25 
+
+otp_reset:
+6b3b 70804782 jam 0x82 ,core_otp_ctrl 
+6b3c 2000000c nop 12 
+6b3d 70804780 jam 0x80 ,core_otp_ctrl 
+6b3e 70804782 jam 0x82 ,core_otp_ctrl 
+6b3f 20000096 nop 150 
+6b40 20600000 rtn 
+
+otp_set_addr:
+6b41 1a49a400 lshift3 regb ,regb 
+6b42 62510044 storer regb ,2 ,core_otp_addr 
+6b43 70804600 jam 0 ,core_otp_din 
+6b44 20600000 rtn 
+
+otp_write:
+6b45 44e24018 bpatch patch18_4 ,mem_patch18 
+6b46 20406b34 call otp_enable_chgpump65 
+6b47 20406b41 call otp_set_addr 
+6b48 20406b3b call otp_reset 
+
+otp_program:
+6b49 e8408011 ifetcht 1 ,rega 
+6b4a 1a20a201 increase 1 ,rega 
+6b4b 18000e00 force 0 ,queue 
+
+otp_program_bit:
+6b4c a84c0000 qisolate0 temp 
+6b4d 2020eb6c branch otp_skip_0 ,true 
+6b4e 6ff08046 fetch 1 ,core_otp_din 
+6b4f 79207e06 set1 6 ,pdata 
+6b50 79207e07 set1 7 ,pdata 
+6b51 67f08046 store 1 ,core_otp_din 
+6b52 70804702 jam 0x02 ,core_otp_ctrl 
+6b53 70804782 jam 0x82 ,core_otp_ctrl 
+6b54 793ffe07 set0 7 ,pdata 
+6b55 67f08046 store 1 ,core_otp_din 
+6b56 7080478a jam 0x8a ,core_otp_ctrl 
+6b57 2000000b nop 11 
+6b58 708047ca jam 0xca ,core_otp_ctrl 
+6b59 20000021 nop 33 
+6b5a 7080474a jam 0x4a ,core_otp_ctrl 
+6b5b 2000002c nop 44 
+6b5c 708047ca jam 0xca ,core_otp_ctrl 
+6b5d 20000016 nop 22 
+6b5e 7080478a jam 0x8a ,core_otp_ctrl 
+6b5f 20000021 nop 33 
+6b60 70804782 jam 0x82 ,core_otp_ctrl 
+6b61 20000001 nop 1 
+6b62 70804792 jam 0x92 ,core_otp_ctrl 
+6b63 2000000a nop 10 
+6b64 708047b2 jam 0xb2 ,core_otp_ctrl 
+6b65 6ff08007 fetch 1 ,core_otp_rdata 
+6b66 70804792 jam 0x92 ,core_otp_ctrl 
+6b67 20000001 nop 1 
+6b68 70804782 jam 0x82 ,core_otp_ctrl 
+6b69 20000001 nop 1 
+6b6a afec0000 qisolate0 pdata 
+6b6b 2020eb4c branch otp_program_bit ,true 
+
+otp_skip_0:
+6b6c 6ff10044 fetch 2 ,core_otp_addr 
+6b6d 1fe0fe01 increase 1 ,pdata 
+6b6e 67f10044 store 2 ,core_otp_addr 
+6b6f 18e08e01 increase 1 ,queue 
+6b70 28e01e08 compare 8 ,queue ,0xf 
+6b71 2420eb4c nbranch otp_program_bit ,true 
+6b72 c2006b49 loop otp_program 
+6b73 20206b38 branch otp_disable_chgpump 
+
+otp_read_data:
+6b74 44e2c018 bpatch patch18_5 ,mem_patch18 
+
+otp_read_data1:
+6b75 20406b41 call otp_set_addr 
+6b76 708047a2 jam 0xa2 ,core_otp_ctrl 
+6b77 1a40a408 increase 8 ,regb 
+6b78 d8e00000 arg 0 ,queue 
+6b79 5fffffff setarg -1 
+
+otp_read_data_loop:
+6b7a 68588007 fetcht 1 ,core_otp_rdata 
+6b7b e0408011 istoret 1 ,rega 
+6b7c 984c7e00 bcrc temp 
+6b7d 70800620 jam shift_key ,core_misc_ctrl 
+6b7e 62510044 storer regb ,2 ,core_otp_addr 
+6b7f 2a2ffe0f isolate1 15 ,rega 
+6b80 2020eb83 branch otp_read_noinc ,true 
+6b81 1a20a201 increase 1 ,rega 
+6b82 20206b89 branch otp_read_unenc 
+
+otp_read_noinc:
+6b83 24346b89 nbranch otp_read_unenc ,user 
+6b84 18e08e01 increase 1 ,queue 
+6b85 28e01e00 compare 0 ,queue ,0xf 
+6b86 2420eb89 nbranch otp_read_unenc ,true 
+6b87 204072d4 call do_aes_cbc 
+6b88 70800610 jam init_key ,core_misc_ctrl 
+
+otp_read_unenc:
+6b89 1a40a408 increase 8 ,regb 
+6b8a c2006b7a loop otp_read_data_loop 
+6b8b 70804782 jam 0x82 ,core_otp_ctrl 
+6b8c 20600000 rtn 
+
+app_lpm_lock_check:
+6b8d 6fe0c3cb fetch 1 ,mem_device_option 
+6b8e c0056b9e beq dvc_op_module ,app_lpm_module_lock 
+6b8f c0026b9f beq dvc_op_dongle ,app_lpm_dongle_lock 
+6b90 c0046ba3 beq dvc_op_mouse ,app_lpm_mouse_lock 
+6b91 c004eba7 beq dvc_op_shutter ,app_lpm_shutter_lock 
+6b92 c0036ba7 beq dvc_op_shutter_dy ,app_lpm_shutter_lock 
+6b93 c0066b9e beq dvc_op_hci_boot ,app_lpm_hciboot_lock 
+6b94 c006ebb1 beq dvc_op_remote_car ,app_lpm_car_lock_application_and_ble 
+6b95 c0076bab beq dvc_op_car ,app_lpm_car_lock 
+6b96 c005eb99 beq dvc_op_mesh ,app_lpm_mesh_lock 
+6b97 c007eb9d beq dvc_op_keyboard ,app_lpm_kb_lock 
+6b98 20206bc2 branch app_lpm_mpu_lock_24g_ble 
+
+app_lpm_mesh_lock:
+6b99 dfe043b2 arg car_init ,pdata 
+6b9a d8406858 arg shutter_dy_shutter_1s_timer ,temp 
+6b9b 20406bb7 call app_mpu_s0_lock 
+6b9c 20206bae branch app_lpm_lock_mesh 
+
+app_lpm_kb_lock:
+6b9d 20206bae branch app_lpm_lock_mesh 
+
+app_lpm_module_lock:
+
+app_lpm_hciboot_lock:
+6b9e 20206bbf branch app_lpm_mpu_lock_24g 
+
+app_lpm_dongle_lock:
+6b9f dfe05099 arg module_init ,pdata 
+6ba0 d8406858 arg shutter_dy_shutter_1s_timer ,temp 
+6ba1 20406bb7 call app_mpu_s0_lock 
+6ba2 20206bae branch app_lpm_lock_mesh 
+
+app_lpm_mouse_lock:
+6ba3 dfe043b2 arg car_init ,pdata 
+6ba4 d84053dc arg module_set_state ,temp 
+6ba5 20406bb7 call app_mpu_s0_lock 
+6ba6 20206bae branch app_lpm_lock_mesh 
+
+app_lpm_shutter_lock:
+6ba7 dfe043b2 arg car_init ,pdata 
+6ba8 d8404770 arg remote_car_moto_data_enable_user ,temp 
+6ba9 20406bb7 call app_mpu_s0_lock 
+6baa 20206bae branch app_lpm_lock_mesh 
+
+app_lpm_car_lock:
+6bab dfe047b7 arg dongle_init ,pdata 
+6bac d8406858 arg shutter_dy_shutter_1s_timer ,temp 
+6bad 20406bb7 call app_mpu_s0_lock 
+
+app_lpm_lock_mesh:
+6bae dfe03728 arg ali_mesh_access_layer_resolve_message ,pdata 
+6baf d8404292 arg ali_mesh_upper_transport_layer_init_queue_param ,temp 
+6bb0 20206bbc branch app_mpu_s1_lock 
+
+app_lpm_car_lock_application_and_ble:
+6bb1 dfe047b7 arg dongle_init ,pdata 
+6bb2 d8406858 arg shutter_dy_shutter_1s_timer ,temp 
+6bb3 20406bb7 call app_mpu_s0_lock 
+6bb4 dfe02acb arg le_adv ,pdata 
+6bb5 d840310d arg le_send_ll_one_lenth ,temp 
+6bb6 20206bbc branch app_mpu_s1_lock 
+
+app_mpu_s0_lock:
+6bb7 18500400 lshift16 temp ,temp 
+6bb8 9841fe00 ior temp ,pdata 
+6bb9 202023cf branch lpm_write_mpu_s0 
+
+app_lpm_mpu_lock_ble:
+6bba dfe02b8f arg le_parse_att ,pdata 
+6bbb d840310d arg le_send_ll_one_lenth ,temp 
+
+app_mpu_s1_lock:
+6bbc 18500400 lshift16 temp ,temp 
+6bbd 9841fe00 ior temp ,pdata 
+6bbe 202023d6 branch lpm_write_mpu_s1 
+
+app_lpm_mpu_lock_24g:
+6bbf dfe03112 arg g24_prep ,pdata 
+6bc0 d84036df arg g24_factory_check ,temp 
+6bc1 20206bbc branch app_mpu_s1_lock 
+
+app_lpm_mpu_lock_24g_ble:
+6bc2 20406bbf call app_lpm_mpu_lock_24g 
+6bc3 dfe02b8f arg le_parse_att ,pdata 
+6bc4 d840310d arg le_send_ll_one_lenth ,temp 
+6bc5 20206bb7 branch app_mpu_s0_lock 
+
+spid_init:
+6bc6 44e34018 bpatch patch18_6 ,mem_patch18 
+
+spid_init_common:
+6bc7 6fe0c3f5 fetch 1 ,mem_spi_init_clk 
+6bc8 67f08080 store 1 ,core_spid_ctrl 
+6bc9 6fe0c3f6 fetch 1 ,mem_spi_init_delay_time 
+6bca 67f08081 store 1 ,core_spid_delay 
+6bcb 580001de setarg mem_spid_tbuf 
+6bcc 67f10084 store 2 ,core_spid_txaddr 
+6bcd 580001e3 setarg mem_spid_rbuf 
+6bce 67f10086 store 2 ,core_spid_rxaddr 
+6bcf 202069dc branch twspi_disable 
+
+spid_write_reg:
+6bd0 79207e07 set1 7 ,pdata 
+6bd1 67e101de store 2 ,mem_spid_tbuf 
+6bd2 44e3c018 bpatch patch18_7 ,mem_patch18 
+6bd3 70808202 jam 2 ,core_spid_txlen 
+6bd4 70808800 jam 0 ,core_spid_rxlen 
+6bd5 70800602 jam spid_start ,core_misc_ctrl 
+6bd6 20206be0 branch wait_spid_done 
+
+spid_read_reg:
+6bd7 18000401 force 1 ,temp 
+
+spid_read_regs:
+6bd8 67e081de store 1 ,mem_spid_tbuf 
+6bd9 44e44019 bpatch patch19_0 ,mem_patch19 
+6bda 70808201 jam 1 ,core_spid_txlen 
+6bdb 60590088 storet 2 ,core_spid_rxlen 
+6bdc 70800602 jam spid_start ,core_misc_ctrl 
+6bdd 20406be0 call wait_spid_done 
+6bde 6fe081e3 fetch 1 ,mem_spid_rbuf 
+6bdf 20600000 rtn 
+
+wait_spid_done:
+6be0 20000005 nop 5 
+6be1 6ff08128 fetch 1 ,core_dma_status 
+6be2 c301ebe0 bbit0 spid_done ,wait_spid_done 
+6be3 20600000 rtn 
+
+flash_write:
+6be4 78547c00 disable user 
+6be5 1fe22400 copy pdata ,regb 
+6be6 6fe0c420 fetch 1 ,mem_spi_write_flash_sm 
+6be7 c1800000 rtnne flash_sm_no_buys 
+6be8 78347c00 enable user 
+6be9 1a427e00 copy regb ,pdata 
+6bea 20206bf2 branch spid_flash_write_start 
+
+flash_write_spi_sm_timer:
+6beb 6fe0c420 fetch 1 ,mem_spi_write_flash_sm 
+6bec c000ebf2 beq flash_sm_start ,spid_flash_write_start 
+6bed c0016bf8 beq flash_sm_erase_sector ,spid_flash_erase_sector 
+6bee c001ec00 beq flash_sm_wait_erase_sector ,spid_flash_wait_erase_sector 
+6bef c0026c04 beq flash_sm_write_data ,spid_flash_write_data 
+6bf0 c002ec0b beq flash_sm_wait_write_data ,spid_flash_wait_write_data 
+6bf1 20600000 rtn 
+
+spid_flash_write_start:
+6bf2 67e1c419 store 3 ,mem_spi_write_addr 
+6bf3 1a227e00 copy rega ,pdata 
+6bf4 67e1441c store 2 ,mem_spi_write_ptr 
+6bf5 6049441e storet 2 ,mem_spi_write_len 
+6bf6 70442002 jam flash_sm_erase_sector ,mem_spi_write_flash_sm 
+6bf7 20206c20 branch spid_init_flash 
+
+spid_flash_erase_sector:
+6bf8 20406c20 call spid_init_flash 
+6bf9 70442003 jam flash_sm_wait_erase_sector ,mem_spi_write_flash_sm 
+6bfa 20406c26 call spid_unlock_flash 
+6bfb da2001de arg mem_spid_tbuf ,rega 
+6bfc 70808204 jam 4 ,core_spid_txlen 
+6bfd 6fe1c419 fetch 3 ,mem_spi_write_addr 
+6bfe d8400020 arg flash_command_sector_erase ,temp 
+6bff 20206c40 branch spid_write_flash_common 
+
+spid_flash_wait_erase_sector:
+6c00 20406c20 call spid_init_flash 
+6c01 20406c63 call wait_spid_flash_done 
+6c02 70442004 jam flash_sm_write_data ,mem_spi_write_flash_sm 
+6c03 20600000 rtn 
+
+spid_flash_write_data:
+6c04 44e4c019 bpatch patch19_1 ,mem_patch19 
+6c05 20406c20 call spid_init_flash 
+6c06 70442005 jam flash_sm_wait_write_data ,mem_spi_write_flash_sm 
+6c07 20406c26 call spid_unlock_flash 
+6c08 20406c18 call spid_flash_data_preserve 
+6c09 20406c3c call spid_write_flash 
+6c0a 20206c13 branch spid_flash_data_recover 
+
+spid_flash_wait_write_data:
+6c0b 20406c20 call spid_init_flash 
+6c0c 20406c26 call spid_unlock_flash 
+6c0d 58000005 setarg flash_read_satus 
+6c0e 20406bd7 call spid_read_reg 
+6c0f c3800000 rtnbit1 flash_status_wip 
+6c10 70442000 jam flash_sm_no_buys ,mem_spi_write_flash_sm 
+6c11 6fe143e7 fetch 2 ,mem_cb_spi_flash_write_complate 
+6c12 20207d79 branch callback_func 
+
+spid_flash_data_recover:
+6c13 6fe20678 fetch 4 ,mem_temp 
+6c14 6849441c fetcht 2 ,mem_spi_write_ptr 
+
+spid_flash_data_recover_comm:
+6c15 184085fc increase -4 ,temp 
+6c16 e7e20002 istore 4 ,temp 
+6c17 20600000 rtn 
+
+spid_flash_data_preserve:
+6c18 6849441c fetcht 2 ,mem_spi_write_ptr 
+6c19 18422200 copy temp ,rega 
+6c1a 184085fc increase -4 ,temp 
+6c1b efe20002 ifetch 4 ,temp 
+6c1c 67e20678 store 4 ,mem_temp 
+6c1d 6849441e fetcht 2 ,mem_spi_write_len 
+6c1e 6fe1c419 fetch 3 ,mem_spi_write_addr 
+6c1f 20600000 rtn 
+
+spid_init_flash:
+6c20 44e54019 bpatch patch19_2 ,mem_patch19 
+6c21 20406c8b call spi_gpio_init 
+6c22 204069dc call twspi_disable 
+6c23 58000000 setarg 0 
+6c24 67e201de store 4 ,mem_spid_tbuf 
+6c25 20600000 rtn 
+
+spid_unlock_flash:
+6c26 7001de06 jam flash_command_write_enable ,mem_spid_tbuf 
+
+spid_sendcmd_common:
+6c27 58000000 setarg 0 
+6c28 67f10088 store 2 ,core_spid_rxlen 
+6c29 58000001 setarg 1 
+6c2a 67f10082 store 2 ,core_spid_txlen 
+6c2b 580001de setarg mem_spid_tbuf 
+6c2c 67f10084 store 2 ,core_spid_txaddr 
+6c2d 70800602 jam spid_start ,core_misc_ctrl 
+6c2e 20206be0 branch wait_spid_done 
+
+spid_flash_release_form_powerdown:
+6c2f 7001deab jam flash_command_release_from_powerdown ,mem_spid_tbuf 
+6c30 20206c27 branch spid_sendcmd_common 
+
+spid_flash_powerdown:
+6c31 7001deb9 jam flash_command_powerdown ,mem_spid_tbuf 
+6c32 20206c27 branch spid_sendcmd_common 
+
+spid_write_flash_data:
+6c33 67e18670 store 3 ,mem_pdatatemp 
+6c34 60490678 storet 2 ,mem_temp 
+6c35 62210684 storer rega ,2 ,mem_rega 
+6c36 475ac036 bpatchx patch36_5 ,mem_patch36 
+6c37 20406c26 call spid_unlock_flash 
+6c38 6fe18670 fetch 3 ,mem_pdatatemp 
+6c39 68490678 fetcht 2 ,mem_temp 
+6c3a 6a210684 fetchr rega ,2 ,mem_rega 
+6c3b 20206c3c branch spid_write_flash 
+
+spid_write_flash:
+6c3c 18408404 increase 4 ,temp 
+6c3d 60590082 storet 2 ,core_spid_txlen 
+6c3e d8400002 arg flash_command_write_data ,temp 
+6c3f 1a20a3fc increase -4 ,rega 
+
+spid_write_flash_common:
+6c40 e0408011 istoret 1 ,rega 
+6c41 1ff10400 rshift16 pdata ,temp 
+6c42 e0408005 istoret 1 ,contw 
+6c43 1fec8400 rshift8 pdata ,temp 
+6c44 e0408005 istoret 1 ,contw 
+6c45 e7e08005 istore 1 ,contw 
+6c46 1a227e00 deposit rega 
+6c47 67f10084 store 2 ,core_spid_txaddr 
+6c48 58000000 setarg 0 
+6c49 67f10088 store 2 ,core_spid_rxlen 
+6c4a 70800602 jam spid_start ,core_misc_ctrl 
+6c4b 20406be0 call wait_spid_done 
+6c4c 20206c63 branch wait_spid_flash_done 
+
+spid_read_flash:
+6c4d 60590088 storet 2 ,core_spid_rxlen 
+6c4e 1ff10400 rshift16 pdata ,temp 
+6c4f 604881df storet 1 ,mem_addr_hi 
+6c50 1fec8400 rshift8 pdata ,temp 
+6c51 604881e0 storet 1 ,mem_addr_mi 
+6c52 67e081e1 store 1 ,mem_addr_lo 
+6c53 58000004 setarg 4 
+6c54 67f10082 store 2 ,core_spid_txlen 
+6c55 7001de03 jam flash_command_read_data ,mem_spid_tbuf 
+6c56 580001de setarg mem_spid_tbuf 
+6c57 67f10084 store 2 ,core_spid_txaddr 
+6c58 1a227e00 deposit rega 
+6c59 67f10086 store 2 ,core_spid_rxaddr 
+6c5a 6ff08080 fetch 1 ,core_spid_ctrl 
+6c5b 2a2c000f isolate0 15 ,rega 
+6c5c 7920fe06 setflag true ,6 ,pdata 
+6c5d 67f08080 store 1 ,core_spid_ctrl 
+6c5e 70800602 jam spid_start ,core_misc_ctrl 
+
+spid_read_flash_wait:
+6c5f 6ff08128 fetch 1 ,core_dma_status 
+6c60 c283ec5f bbit1 7 ,spid_read_flash_wait 
+6c61 d8e00003 arg spid_done ,queue 
+6c62 20206be0 branch wait_spid_done 
+
+wait_spid_flash_done:
+6c63 580007d0 setarg 2000 
+6c64 2040235c call sleep 
+6c65 20406c26 call spid_unlock_flash 
+6c66 580001e3 setarg mem_spid_rbuf 
+6c67 67f10086 store 2 ,core_spid_rxaddr 
+6c68 58000005 setarg flash_read_satus 
+6c69 20406bd7 call spid_read_reg 
+6c6a c2806c63 bbit1 flash_status_wip ,wait_spid_flash_done 
+6c6b 20600000 rtn 
+
+spid_load_flash:
+6c6c 60590088 storet 2 ,core_spid_rxlen 
+6c6d 58000004 setarg 4 
+6c6e 67f10082 store 2 ,core_spid_txlen 
+6c6f 7001de03 jam 3 ,mem_spid_tbuf 
+6c70 580001de setarg mem_spid_tbuf 
+6c71 67f10084 store 2 ,core_spid_txaddr 
+6c72 1a227e00 deposit rega 
+6c73 67f10086 store 2 ,core_spid_rxaddr 
+6c74 6ff08080 fetch 1 ,core_spid_ctrl 
+6c75 2a2c000f isolate0 15 ,rega 
+6c76 7920fe06 setflag true ,6 ,pdata 
+6c77 67f08080 store 1 ,core_spid_ctrl 
+6c78 70800602 jam spid_start ,core_misc_ctrl 
+
+spi_load_flash_wait:
+6c79 6ff08128 fetch 1 ,core_dma_status 
+6c7a c283ec79 bbit1 7 ,spi_load_flash_wait 
+6c7b d8e00003 arg spid_done ,queue 
+6c7c 20406b07 call decrypt_code 
+6c7d 20406be0 call wait_spid_done 
+6c7e 2feffe02 isolate1 spid_crcok ,pdata 
+6c7f 20406b00 call set_ucode_status 
+6c80 6fe081df fetch 1 ,mem_addr_hi 
+6c81 1ff02400 lshift16 pdata ,regb 
+6c82 6fe101e0 fetch 2 ,mem_addr_mi 
+6c83 1ff0fe00 byteswap pdata ,pdata 
+6c84 9a41fe00 ior regb ,pdata 
+6c85 9840fe00 iadd temp ,pdata 
+6c86 67e081e1 store 1 ,mem_addr_lo 
+6c87 1fecfe00 rshift8 pdata ,pdata 
+6c88 1ff0fe00 byteswap pdata ,pdata 
+6c89 67e101df store 2 ,mem_addr_hi 
+6c8a 20600000 rtn 
+
+spi_gpio_init:
+6c8b 6fe0c421 fetch 1 ,mem_spi_cs_gpio 
+6c8c 6848c423 fetcht 1 ,mem_spi_so_gpio 
+6c8d 98467c00 isub temp ,null 
+6c8e 2422ec90 nbranch spi_pin_set ,zero 
+6c8f 20406c9c call spi_gpio_default_init 
+
+spi_pin_set:
+6c90 6fe0c421 fetch 1 ,mem_spi_cs_gpio 
+6c91 d8400020 arg gpcfg_spid_ncs ,temp 
+6c92 20406f21 call gpio_config_function_int 
+6c93 6fe0c424 fetch 1 ,mem_spi_sclk_gpio 
+6c94 d8400021 arg gpcfg_spid_sck ,temp 
+6c95 20406f21 call gpio_config_function_int 
+6c96 6fe0c422 fetch 1 ,mem_spi_si_gpio 
+6c97 d8400022 arg gpcfg_spid_mosi ,temp 
+6c98 20406f21 call gpio_config_function_int 
+6c99 6fe0c423 fetch 1 ,mem_spi_so_gpio 
+6c9a d840001f arg gpcfg_spid_miso ,temp 
+6c9b 20206f21 branch gpio_config_function_int 
+
+spi_gpio_default_init:
+6c9c 70442101 jam 1 ,mem_spi_cs_gpio 
+6c9d 70442203 jam 3 ,mem_spi_si_gpio 
+6c9e 70442300 jam 0 ,mem_spi_so_gpio 
+6c9f 70442402 jam 2 ,mem_spi_sclk_gpio 
+6ca0 7044250b jam 11 ,mem_spi_wp_gpio 
+6ca1 7044260a jam 10 ,mem_spi_hold_gpio 
+6ca2 20600000 rtn 
+
+soft_reset_chip:
+6ca3 70801001 jam 1 ,core_reset 
+6ca4 20600000 rtn 
+
+iic_init_600khz:
+6ca5 70808b05 jam 5 ,core_iicd_scl_low 
+6ca6 70808c07 jam 7 ,core_iicd_scl_high 
+6ca7 70808d07 jam 7 ,core_iicd_start_setup 
+6ca8 70808e07 jam 7 ,core_iicd_start_hold 
+6ca9 70808f07 jam 7 ,core_iicd_stop_setup 
+6caa 70809005 jam 5 ,core_iicd_data_setup 
+6cab 70809100 jam 0 ,core_iicd_data_hold 
+6cac 20600000 rtn 
+
+iic_init_360khz:
+6cad 70808b0c jam 12 ,core_iicd_scl_low 
+6cae 70808c0d jam 13 ,core_iicd_scl_high 
+6caf 70808d0d jam 13 ,core_iicd_start_setup 
+6cb0 70808e0d jam 13 ,core_iicd_start_hold 
+6cb1 70808f0d jam 13 ,core_iicd_stop_setup 
+6cb2 7080900c jam 12 ,core_iicd_data_setup 
+6cb3 70809100 jam 0 ,core_iicd_data_hold 
+6cb4 20600000 rtn 
+
+iicd_init_pin:
+6cb5 20406cd8 call iicd_eeprom_write_enable 
+
+iicd_init_pin_scl_sda:
+6cb6 6fe0c428 fetch 1 ,mem_eeprom_scl_gpio 
+6cb7 d840006c arg gpcfg_iic_scl | gpcfg_pullup ,temp 
+6cb8 20406f21 call gpio_config_function_int 
+6cb9 6fe0c429 fetch 1 ,mem_eeprom_sda_gpio 
+6cba d840006d arg gpcfg_iic_sda | gpcfg_pullup ,temp 
+6cbb 20206f21 branch gpio_config_function_int 
+
+iicd_read_init_pin:
+6cbc 20406cdf call iicd_eeprom_write_disable 
+6cbd 20206cb6 branch iicd_init_pin_scl_sda 
+
+wait_iicd_done:
+6cbe 6ff08128 fetch 1 ,core_dma_status 
+6cbf c302ecbe bbit0 iicd_done ,wait_iicd_done 
+6cc0 20600000 rtn 
+
+set_eeprom_size_2k:
+6cc1 79200028 set1 mark_eeprom_size ,mark 
+6cc2 7043f408 jam 0x08 ,mem_eeprom_block_size 
+6cc3 20600000 rtn 
+
+clear_eeprom_size_2k:
+6cc4 793f8028 set0 mark_eeprom_size ,mark 
+6cc5 7043f420 jam 0x20 ,mem_eeprom_block_size 
+6cc6 20600000 rtn 
+
+iicd_read_eep_data_size_2k:
+6cc7 6fe0c3eb fetch 1 ,mem_eeprom_base 
+6cc8 9a40fe00 iadd regb ,pdata 
+6cc9 67e081e0 store 1 ,mem_addr_mi 
+6cca 20206cce branch iicd_read_eep_size_2k 
+
+iicd_read_eep_size_2k_lcadcode:
+6ccb 6fe101e0 fetch 2 ,mem_addr_mi 
+6ccc 1ff0fe00 byteswap pdata ,pdata 
+6ccd 67e081e0 store 1 ,mem_addr_mi 
+
+iicd_read_eep_size_2k:
+6cce 58000003 setarg 3 
+6ccf 67f10092 store 2 ,core_iicd_txlen 
+6cd0 7001dfa0 jam 0xa0 ,mem_iicd_tbuf 
+6cd1 7001e1a1 jam 0xa1 ,mem_iicd_tbuf + 2 
+6cd2 20206ced branch iicd_read_eep_common 
+
+iicd_write_protect_eep_data:
+6cd3 60490678 storet 2 ,mem_temp 
+6cd4 20406cd8 call iicd_eeprom_write_enable 
+6cd5 68490678 fetcht 2 ,mem_temp 
+6cd6 20406d07 call iicd_write_eep_data 
+6cd7 20206cdf branch iicd_eeprom_write_disable 
+
+iicd_eeprom_write_enable:
+6cd8 6fe0c427 fetch 1 ,mem_eeprom_wp_gpio 
+6cd9 c17f8000 rtneq gpio_disable 
+6cda c3036cdd bbit0 6 ,iicd_wp_gpio_output_low 
+6cdb 580249f0 setarg 150000 
+6cdc 2040235c call sleep 
+
+iicd_wp_gpio_output_low:
+6cdd 6848c427 fetcht 1 ,mem_eeprom_wp_gpio 
+6cde 20206ef7 branch gpio_out_active 
+
+iicd_eeprom_write_disable:
+6cdf 6848c427 fetcht 1 ,mem_eeprom_wp_gpio 
+6ce0 20206ef3 branch gpio_out_inactive 
+
+iicd_read_eep_data:
+6ce1 44e5c019 bpatch patch19_3 ,mem_patch19 
+6ce2 c5146cc7 bmark1 mark_eeprom_size ,iicd_read_eep_data_size_2k 
+6ce3 6fe143eb fetch 2 ,mem_eeprom_base 
+6ce4 9a40fe00 iadd regb ,pdata 
+6ce5 1ff0fe00 byteswap pdata ,pdata 
+6ce6 67e101e0 store 2 ,mem_addr_mi 
+
+iicd_read_eep:
+6ce7 44e64019 bpatch patch19_4 ,mem_patch19 
+6ce8 c5146ccb bmark1 mark_eeprom_size ,iicd_read_eep_size_2k_lcadcode 
+6ce9 58000004 setarg 4 
+6cea 67f10092 store 2 ,core_iicd_txlen 
+6ceb 7001dfa0 jam 0xa0 ,mem_iicd_tbuf 
+6cec 7001e2a1 jam 0xa1 ,mem_iicd_tbuf + 3 
+
+iicd_read_eep_common:
+6ced 580001df setarg mem_iicd_tbuf 
+6cee 67f10094 store 2 ,core_iicd_txaddr 
+6cef 60590098 storet 2 ,core_iicd_rxlen 
+6cf0 62310096 storer rega ,2 ,core_iicd_rxaddr 
+6cf1 58000002 setarg 2 
+6cf2 2a2c000f isolate0 15 ,rega 
+6cf3 7920fe00 setflag true ,0 ,pdata 
+6cf4 67f0808a store 1 ,core_iicd_ctrl 
+6cf5 70800604 jam iicd_start ,core_misc_ctrl 
+6cf6 d8e00005 arg iicd_done ,queue 
+6cf7 20406b07 call decrypt_code 
+6cf8 20406cbe call wait_iicd_done 
+6cf9 2feffe04 isolate1 iicd_crcok ,pdata 
+6cfa 20406b00 call set_ucode_status 
+6cfb c5146d02 bmark1 mark_eeprom_size ,iicd_read_eep_load_code_size_2k 
+
+iicd_inc_addr:
+6cfc 6fe101e0 fetch 2 ,mem_addr_mi 
+6cfd 1ff0fe00 byteswap pdata ,pdata 
+6cfe 9840fe00 iadd temp ,pdata 
+6cff 1ff0fe00 byteswap pdata ,pdata 
+6d00 67e101e0 store 2 ,mem_addr_mi 
+6d01 20600000 rtn 
+
+iicd_read_eep_load_code_size_2k:
+6d02 6fe081e0 fetch 1 ,mem_addr_mi 
+6d03 9840fe00 iadd temp ,pdata 
+6d04 1ff0fe00 byteswap pdata ,pdata 
+6d05 67e101e0 store 2 ,mem_addr_mi 
+6d06 20600000 rtn 
+
+iicd_write_eep_data:
+6d07 6fe143eb fetch 2 ,mem_eeprom_base 
+6d08 9a40fe00 iadd regb ,pdata 
+6d09 67e10670 store 2 ,mem_pdatatemp 
+6d0a 44e6c019 bpatch patch19_5 ,mem_patch19 
+6d0b 60490678 storet 2 ,mem_temp 
+6d0c 6221068f storer rega ,2 ,mem_contr 
+
+iicd_write_eep_loop:
+6d0d 20406d1c call iicd_eep_transparency 
+6d0e 68490688 fetcht 2 ,mem_regb 
+6d0f 6a21068f fetchr rega ,2 ,mem_contr 
+6d10 6fe10670 fetch 2 ,mem_pdatatemp 
+6d11 20406d3d call iicd_write_eep 
+6d12 6fe10688 fetch 2 ,mem_regb 
+6d13 6849068f fetcht 2 ,mem_contr 
+6d14 98408400 iadd temp ,temp 
+6d15 6049068f storet 2 ,mem_contr 
+6d16 68490670 fetcht 2 ,mem_pdatatemp 
+6d17 98408400 iadd temp ,temp 
+6d18 60490670 storet 2 ,mem_pdatatemp 
+6d19 6fe10678 fetch 2 ,mem_temp 
+6d1a 243a6d0d nbranch iicd_write_eep_loop ,blank 
+6d1b 20600000 rtn 
+
+iicd_eep_transparency:
+6d1c 44e74019 bpatch patch19_6 ,mem_patch19 
+6d1d 6fe0c3f4 fetch 1 ,mem_eeprom_block_size 
+6d1e 1fe0ffff increase -1 ,pdata 
+6d1f 68490670 fetcht 2 ,mem_pdatatemp 
+6d20 9841fe00 ior temp ,pdata 
+6d21 1fe0fe01 increase 1 ,pdata 
+6d22 67e1868c store 3 ,mem_regc 
+6d23 6fe10678 fetch 2 ,mem_temp 
+6d24 9840fe00 iadd temp ,pdata 
+6d25 6849868c fetcht 3 ,mem_regc 
+6d26 98467e00 isub temp ,pdata 
+6d27 24216d2e nbranch iicd_eep_deal_short_packet ,positive 
+6d28 67e10678 store 2 ,mem_temp 
+6d29 6fe1868c fetch 3 ,mem_regc 
+6d2a 68490670 fetcht 2 ,mem_pdatatemp 
+6d2b 98467e00 isub temp ,pdata 
+6d2c 67e10688 store 2 ,mem_regb 
+6d2d 20600000 rtn 
+
+iicd_eep_deal_short_packet:
+6d2e 6fe10678 fetch 2 ,mem_temp 
+6d2f 67e10688 store 2 ,mem_regb 
+6d30 58000000 setarg 0 
+6d31 67e10678 store 2 ,mem_temp 
+6d32 20600000 rtn 
+
+iicd_write_eep_size_2k:
+6d33 1a427e00 copy regb ,pdata 
+6d34 18408402 increase 2 ,temp 
+6d35 60590092 storet 2 ,core_iicd_txlen 
+6d36 1a20a3fe increase -2 ,rega 
+6d37 e8418011 ifetcht 3 ,rega 
+6d38 18422400 copy temp ,regb 
+6d39 d84000a0 arg 0xa0 ,temp 
+6d3a e0408011 istoret 1 ,rega 
+6d3b e7e08005 istore 1 ,contw 
+6d3c 20206d4a branch iicd_write_eep_common 
+
+iicd_write_eep:
+6d3d 1fe22400 copy pdata ,regb 
+6d3e 44e7c019 bpatch patch19_7 ,mem_patch19 
+6d3f c5146d33 bmark1 mark_eeprom_size ,iicd_write_eep_size_2k 
+6d40 1a427e00 copy regb ,pdata 
+6d41 18408403 increase 3 ,temp 
+6d42 60590092 storet 2 ,core_iicd_txlen 
+6d43 1a20a3fd increase -3 ,rega 
+6d44 e8418011 ifetcht 3 ,rega 
+6d45 18422400 copy temp ,regb 
+6d46 d84000a0 arg 0xa0 ,temp 
+6d47 e0408011 istoret 1 ,rega 
+6d48 1ff0fe00 byteswap pdata ,pdata 
+6d49 e7e10005 istore 2 ,contw 
+
+iicd_write_eep_common:
+6d4a 62310094 storer rega ,2 ,core_iicd_txaddr 
+6d4b 58000000 setarg 0 
+6d4c 67f10098 store 2 ,core_iicd_rxlen 
+6d4d 70808a01 jam 1 ,core_iicd_ctrl 
+6d4e 70800604 jam iicd_start ,core_misc_ctrl 
+6d4f 20406cbe call wait_iicd_done 
+6d50 e2418011 istorer regb ,3 ,rega 
+
+iic_check_eeprom_standby:
+6d51 44e8401a bpatch patch1a_0 ,mem_patch1a 
+6d52 7001e200 jam 0 ,mem_iicd_tbuf + 3 
+
+iic_check_eeprom_standby_wait:
+6d53 58000001 setarg 1 
+6d54 67f10092 store 2 ,core_iicd_txlen 
+6d55 7001dfa0 jam 0xa0 ,mem_iicd_tbuf 
+6d56 580001df setarg mem_iicd_tbuf 
+6d57 67f10094 store 2 ,core_iicd_txaddr 
+6d58 58000000 setarg 0 
+6d59 67f10098 store 2 ,core_iicd_rxlen 
+6d5a 67f10096 store 2 ,core_iicd_rxaddr 
+6d5b 58000003 setarg 3 
+6d5c 67f0808a store 1 ,core_iicd_ctrl 
+6d5d 70800604 jam iicd_start ,core_misc_ctrl 
+6d5e 20406cbe call wait_iicd_done 
+6d5f 6ff08128 fetch 1 ,core_dma_status 
+6d60 c4030000 rtnbit0 iicd_ack 
+6d61 200005dc nop 1500 
+6d62 6fe081e2 fetch 1 ,mem_iicd_tbuf + 3 
+6d63 1fe0fe01 increase 1 ,pdata 
+6d64 67e081e2 store 1 ,mem_iicd_tbuf + 3 
+6d65 1fe67c28 sub pdata ,40 ,null 
+6d66 24610000 nrtn positive 
+6d67 20206d53 branch iic_check_eeprom_standby_wait 
+
+uarta_init_dma_mem:
+6d68 20407dba call enable_user 
+6d69 20206d6a branch uart_init_dma_mem 
+
+uart_init_dma_mem:
+6d6a 1ff10400 rshift16 pdata ,temp 
+6d6b 20546d8e call uarta_init_rx ,user 
+6d6c 1fef7e00 rshift32 pdata ,pdata 
+6d6d 1ff10400 rshift16 pdata ,temp 
+6d6e 20546d8a call uarta_init_tx ,user 
+6d6f 6ff10050 fetch 2 ,core_clkoff 
+6d70 793ffe0f set0 clock_off_uart ,pdata 
+6d71 67f10050 store 2 ,core_clkoff 
+6d72 20600000 rtn 
+
+uarta_init_baud_rate:
+6d73 67f10052 store uart_baud_len ,core_uart_baud 
+6d74 20600000 rtn 
+
+uarta_calc_baud_rate_config:
+6d75 20406d77 call uart_calc_baud_rate_config 
+6d76 20206d73 branch uarta_init_baud_rate 
+
+uart_calc_baud_rate_config:
+6d77 20406d7c call uart_calc_baud_rate_config_choice_uart_clock 
+6d78 9846fc00 idiv temp 
+6d79 20407d62 call wait_div_end 
+6d7a 1807fe00 quotient pdata 
+6d7b 20600000 rtn 
+
+uart_calc_baud_rate_config_choice_uart_clock:
+6d7c 6ff08043 fetch 1 ,core_uart_clksel 
+6d7d c3006d80 bbit0 uart_clock_select_bit ,uart_calc_baud_rate_config_choice_uart_clock_crystal 
+6d7e 5adc6c00 setarg uart_clock_freq_48m 
+6d7f 20600000 rtn 
+
+uart_calc_baud_rate_config_choice_uart_clock_crystal:
+6d80 596e3600 setarg uart_clock_freq_24m 
+6d81 20600000 rtn 
+
+uart_clock_select_main_freq_crystal:
+6d82 6ff08043 fetch 1 ,core_uart_clksel 
+6d83 1fe17efe and pdata ,uart_clock_select_crystal ,pdata 
+6d84 67f08043 store 1 ,core_uart_clksel 
+6d85 20600000 rtn 
+
+uart_clock_select_main_freq_dpll:
+6d86 6ff08043 fetch 1 ,core_uart_clksel 
+6d87 1fe1fe01 or pdata ,uart_clock_select_dpll ,pdata 
+6d88 67f08043 store 1 ,core_uart_clksel 
+6d89 20600000 rtn 
+
+uarta_init_tx:
+6d8a 67f1005a store 2 ,core_uart_tsaddr 
+6d8b 67f1005e store 2 ,core_uart_twptr 
+6d8c 6059005c storet 2 ,core_uart_teaddr 
+6d8d 20600000 rtn 
+
+uarta_init_rx:
+6d8e 67f10054 store 2 ,core_uart_rsaddr 
+6d8f 67f10058 store 2 ,core_uart_rrptr 
+6d90 60590056 storet 2 ,core_uart_readdr 
+6d91 20600000 rtn 
+
+uarta_prepare_tx:
+6d92 6951005a fetchr contus ,2 ,core_uart_tsaddr 
+6d93 6a11005c fetchr contue ,2 ,core_uart_teaddr 
+6d94 6871005e fetchr contu ,2 ,core_uart_twptr 
+6d95 20600000 rtn 
+
+uarta_prepare_rx:
+6d96 69510054 fetchr contus ,2 ,core_uart_rsaddr 
+6d97 6a110056 fetchr contue ,2 ,core_uart_readdr 
+6d98 68710058 fetchr contu ,2 ,core_uart_rrptr 
+6d99 20600000 rtn 
+
+uarta_send:
+6d9a 6071005e storer contu ,2 ,core_uart_twptr 
+6d9b 20600000 rtn 
+
+uarta_rxdone:
+6d9c 60710058 storer contu ,2 ,core_uart_rrptr 
+6d9d 20600000 rtn 
+
+uarta_clear_current_rx:
+6d9e 20406d96 call uarta_prepare_rx 
+6d9f 6ff10112 fetch 2 ,core_uart_rxitems 
+6da0 98608600 iadd contu ,contu 
+6da1 20206d9c branch uarta_rxdone 
+
+uarta_prepare_tx_register_push:
+6da2 20406da6 call uart_register_push 
+6da3 20206d92 branch uarta_prepare_tx 
+
+uarta_send_register_pop:
+6da4 20406d9a call uarta_send 
+6da5 20206daa branch uart_register_pop 
+
+uart_register_push:
+6da6 60610697 storer contu ,2 ,mem_contu 
+6da7 61410695 storer contus ,2 ,mem_contue 
+6da8 62010693 storer contue ,2 ,mem_contus 
+6da9 20600000 rtn 
+
+uart_register_pop:
+6daa 68610697 fetchr contu ,2 ,mem_contu 
+6dab 69410695 fetchr contus ,2 ,mem_contue 
+6dac 6a010693 fetchr contue ,2 ,mem_contus 
+6dad 20600000 rtn 
+
+wait_uarttx:
+6dae 6ff1010e fetch 2 ,core_uart_txitems 
+6daf 243a6dae nbranch wait_uarttx ,blank 
+6db0 20600000 rtn 
+
+uart_copy_tx_bytes_fast:
+6db1 1f227e00 deposit loopcnt 
+6db2 207a0000 rtn blank 
+
+uart_copy_tx_bytes_fast_loop:
+6db3 1f20f3f8 increase -8 ,loopcnt 
+6db4 20416dbe call uart_tx_8_bytes ,positive 
+6db5 20628000 rtn zero 
+6db6 20216db3 branch uart_copy_tx_bytes_fast_loop ,positive 
+6db7 1f20f208 increase 8 ,loopcnt 
+
+uart_copy_tx_bytes_fast_loop_four:
+6db8 1f20f3fc increase -4 ,loopcnt 
+6db9 20416dc1 call uart_tx_4_bytes ,positive 
+6dba 20628000 rtn zero 
+6dbb 20216db8 branch uart_copy_tx_bytes_fast_loop_four ,positive 
+6dbc 1f20f204 increase 4 ,loopcnt 
+6dbd 20206dc4 branch uart_copy_tx_bytes 
+
+uart_tx_8_bytes:
+6dbe efe40006 ifetch 8 ,contr 
+6dbf e7e40003 istore 8 ,contu 
+6dc0 20600000 rtn 
+
+uart_tx_4_bytes:
+6dc1 efe20006 ifetch 4 ,contr 
+6dc2 e7e20003 istore 4 ,contu 
+6dc3 20600000 rtn 
+
+uart_copy_tx_bytes:
+6dc4 1f227e00 deposit loopcnt 
+6dc5 207a0000 rtn blank 
+
+uart_copy_tx_bytes_loop:
+6dc6 efe08006 ifetch 1 ,contr 
+6dc7 e7e08003 istore 1 ,contu 
+6dc8 c2006dc6 loop uart_copy_tx_bytes_loop 
+6dc9 20600000 rtn 
+
+uart_copy_rx_bytes_fast:
+6dca 1f227e00 deposit loopcnt 
+6dcb 207a0000 rtn blank 
+
+uart_copy_rx_bytes_fast_loop:
+6dcc 1f20f3f8 increase -8 ,loopcnt 
+6dcd 20416dd7 call uart_rx_8_bytes ,positive 
+6dce 20628000 rtn zero 
+6dcf 20216dcc branch uart_copy_rx_bytes_fast_loop ,positive 
+6dd0 1f20f208 increase 8 ,loopcnt 
+
+uart_copy_rx_bytes_fast_loop_four:
+6dd1 1f20f3fc increase -4 ,loopcnt 
+6dd2 20416dda call uart_rx_4_bytes ,positive 
+6dd3 20628000 rtn zero 
+6dd4 20216dd1 branch uart_copy_rx_bytes_fast_loop_four ,positive 
+6dd5 1f20f204 increase 4 ,loopcnt 
+6dd6 20206ddd branch uart_copy_rx_bytes 
+
+uart_rx_8_bytes:
+6dd7 efe40003 ifetch 8 ,contu 
+6dd8 e7e40005 istore 8 ,contw 
+6dd9 20600000 rtn 
+
+uart_rx_4_bytes:
+6dda efe20003 ifetch 4 ,contu 
+6ddb e7e20005 istore 4 ,contw 
+6ddc 20600000 rtn 
+
+uart_copy_rx_bytes:
+6ddd 1f227e00 deposit loopcnt 
+6dde 207a0000 rtn blank 
+
+uart_copy_rx_bytes_loop:
+6ddf efe08003 ifetch 1 ,contu 
+6de0 e7e08005 istore 1 ,contw 
+6de1 c2006ddf loop uart_copy_rx_bytes_loop 
+6de2 20600000 rtn 
+
+app_store_nvram_event:
+6de3 70066f3d jam bt_evt_store_nvram ,mem_fifo_temp 
+6de4 2020782b branch ui_ipc_send_event 
+
+check_51cmd_update_device_record:
+6de5 44e8c01a bpatch patch1a_1 ,mem_patch1a 
+6de6 6fe0c3fa fetch 1 ,mem_nv_data_number 
+6de7 207a0000 rtn blank 
+6de8 20406e87 call check_nvram 
+6de9 2042ee8d call init_device_list ,zero 
+6dea 20407dc0 call disable_user2 
+6deb 20406e18 call nvram_find_addr_from_bd_list 
+
+write_device_record:
+6dec 6fe0c3fa fetch 1 ,mem_nv_data_number 
+6ded 1fe22600 icopy regc 
+6dee 684943f8 fetcht 2 ,mem_nv_data_ptr 
+6def 60490033 storet 2 ,mem_list_item_ptr 
+
+write_device_loop_find:
+6df0 1a627e00 copy regc ,pdata 
+6df1 203a6de3 branch app_store_nvram_event ,blank 
+6df2 1a60a7ff increase -1 ,regc 
+6df3 18422200 copy temp ,rega 
+6df4 efe08011 ifetch 1 ,rega 
+6df5 68488031 fetcht 1 ,mem_select_list_item 
+6df6 98467c00 isub temp ,null 
+6df7 2042ee00 call set_index_finded_device ,zero 
+6df8 20216dfc branch write_device_loop_find0 ,positive 
+6df9 efe08011 ifetch 1 ,rega 
+6dfa 1fe0fe01 increase 1 ,pdata 
+6dfb e7e08011 istore 1 ,rega 
+
+write_device_loop_find0:
+6dfc 68490033 fetcht 2 ,mem_list_item_ptr 
+6dfd 18408422 increase nv_data_len ,temp 
+6dfe 60490033 storet 2 ,mem_list_item_ptr 
+6dff 20206df0 branch write_device_loop_find 
+
+set_index_finded_device:
+6e00 58000000 setarg 0 
+6e01 e7e08011 istore 1 ,rega 
+6e02 6fe08032 fetch 1 ,mem_temp_reconn_record 
+6e03 e7e08005 istore 1 ,contw 
+6e04 c099ee0d bne rec_3_mode ,set_index_finded_device_ble_mode 
+
+set_index_find_device_master_addr:
+6e05 efe30006 ifetch 6 ,contr 
+6e06 e7e40005 istore 8 ,contw 
+6e07 58000000 setarg 0 
+6e08 e7e40005 istore 8 ,contw 
+6e09 1a420c00 copy regb ,contr 
+
+store_rec_data_common:
+6e0a 20407c8f call memcpy16 
+6e0b 18007c01 force 1 ,null 
+6e0c 20600000 rtn 
+
+set_index_finded_device_ble_mode:
+6e0d c01b6e11 beq rec_4_mode_random_resolvable_private_address ,set_index_finded_device_irk 
+6e0e c01bee15 beq rec_4_mode_random_non_resolvable_private_address ,set_index_finded_device_ediv 
+6e0f da40428a arg mem_le_ltk ,regb 
+6e10 20206e05 branch set_index_find_device_master_addr 
+
+set_index_finded_device_irk:
+6e11 d8c0430d arg mem_le_irk ,contr 
+6e12 20407c8f call memcpy16 
+
+store_ble_rec_data_common:
+6e13 d8c0428a arg mem_le_ltk ,contr 
+6e14 20206e0a branch store_rec_data_common 
+
+set_index_finded_device_ediv:
+6e15 d8c04305 arg mem_le_rand ,contr 
+6e16 20407c8f call memcpy16 
+6e17 20206e13 branch store_ble_rec_data_common 
+
+nvram_find_addr_from_bd_list:
+6e18 44e9401a bpatch patch1a_2 ,mem_patch1a 
+6e19 20407dbc call disable_user 
+6e1a 6fe0c3fa fetch 1 ,mem_nv_data_number 
+6e1b 207a0000 rtn blank 
+6e1c 44e9c01a bpatch patch1a_3 ,mem_patch1a 
+6e1d 6fe144e9 fetch 2 ,mem_ui_state_map 
+6e1e c4048000 rtnbit0 ui_state_ble_connected 
+
+find_addr_from_bd_list_ble_mode:
+6e1f 6fe0c2cb fetch 1 ,mem_le_conn_peer_addr_type 
+6e20 c0006e34 beq master_public_addr ,find_addr_from_bd_list_public_device_addr 
+6e21 6fe0817d fetch 1 ,mem_le_plap + 5 
+6e22 2fe180c0 compare 0xc0 ,pdata ,0xc0 
+6e23 2020ee27 branch find_addr_from_bd_list_static_addr ,true 
+6e24 2fe18040 compare 0x40 ,pdata ,0xc0 
+6e25 2020ee39 branch find_addr_from_bd_list_random_addr ,true 
+6e26 20206e2e branch find_addr_from_bd_list_random_non_resolvable_private_address_sc_or_legacy 
+
+find_addr_from_bd_list_static_addr:
+6e27 20366e2b branch find_addr_from_bd_list_static_addr_reconnect ,user2 
+6e28 6fe0c2c2 fetch 1 ,mem_le_preq_init_key_distribution 
+6e29 c300ee34 bbit0 le_initator_irk_bit ,find_addr_from_bd_list_public_device_addr 
+6e2a 20206e2e branch find_addr_from_bd_list_static_addr_sc_or_legacy 
+
+find_addr_from_bd_list_static_addr_reconnect:
+6e2b 20406e34 call find_addr_from_bd_list_public_device_addr 
+6e2c 20740000 rtn user 
+6e2d 20206e2e 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:
+6e2e 6fe0c2fe fetch 1 ,mem_le_pairing_mode 
+6e2f c283ee31 bbit1 le_pairing_mode_secure_connect_bit ,find_addr_from_bd_list_random_non_resolvable_private_address_sc 
+6e30 20206e37 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:
+6e31 6fe30178 fetch 6 ,mem_le_plap 
+6e32 67e44305 store 8 ,mem_le_rand 
+6e33 20206e37 branch find_addr_from_bd_list_random_non_resolvable_private_address 
+
+find_addr_from_bd_list_public_device_addr:
+6e34 70003235 jam rec_4_mode_static_address ,mem_temp_reconn_record 
+6e35 6fe30178 fetch 6 ,mem_le_plap 
+6e36 20206e3b branch find_addr_from_bd_list_common 
+
+find_addr_from_bd_list_random_non_resolvable_private_address:
+6e37 70003237 jam rec_4_mode_random_non_resolvable_private_address ,mem_temp_reconn_record 
+6e38 20206e3b branch find_addr_from_bd_list_common 
+
+find_addr_from_bd_list_random_addr:
+6e39 70003236 jam rec_4_mode_random_resolvable_private_address ,mem_temp_reconn_record 
+6e3a 20206e3b branch find_addr_from_bd_list_common 
+
+find_addr_from_bd_list_common:
+6e3b 44ea401a bpatch patch1a_4 ,mem_patch1a 
+6e3c 6fe143f8 fetch 2 ,mem_nv_data_ptr 
+6e3d e840803f ifetcht 1 ,pdata 
+6e3e 1fe0fe01 pincrease 1 
+6e3f 67e10033 store 2 ,mem_list_item_ptr 
+6e40 60488031 storet 1 ,mem_select_list_item 
+6e41 6fe0c3fa fetch 1 ,mem_nv_data_number 
+6e42 1fe22600 icopy regc 
+
+nvram_find_addr_from_list:
+6e43 6fe10033 fetch 2 ,mem_list_item_ptr 
+6e44 1fe22200 copy pdata ,rega 
+6e45 20406e53 call nvram_find_addr_from_list_compare 
+6e46 20740000 rtn user 
+6e47 68490033 fetcht 2 ,mem_list_item_ptr 
+6e48 18408422 increase nv_data_len ,temp 
+6e49 60490033 storet 2 ,mem_list_item_ptr 
+6e4a 184085ff increase -1 ,temp 
+6e4b efe08002 ifetch 1 ,temp 
+6e4c 67e08031 store 1 ,mem_select_list_item 
+6e4d 1a60a7ff increase -1 ,regc 
+6e4e 2422ee43 nbranch nvram_find_addr_from_list ,zero 
+6e4f 6fe0c3fa fetch 1 ,mem_nv_data_number 
+6e50 1fe0ffff pincrease decreased_one 
+6e51 67e08031 store 1 ,mem_select_list_item 
+6e52 20600000 rtn 
+
+nvram_find_addr_from_list_compare:
+6e53 6fe08032 fetch 1 ,mem_temp_reconn_record 
+6e54 c099ee5a bne rec_3_mode ,find_addr_from_list_compare_ble_mode 
+
+find_master_addr_from_list_compare:
+6e55 da400032 arg mem_temp_reconn_record ,regb 
+6e56 df200007 arg 7 ,loopcnt 
+6e57 20407d64 call string_compare 
+6e58 2022fdba branch enable_user ,zero 
+6e59 20600000 rtn 
+
+find_addr_from_list_compare_ble_mode:
+6e5a c01b6e5d beq rec_4_mode_random_resolvable_private_address ,find_irk_form_list_compare 
+6e5b c01bee78 beq rec_4_mode_random_non_resolvable_private_address ,find_ediv_form_list_compare 
+6e5c 20206e55 branch find_master_addr_from_list_compare 
+
+find_irk_form_list_compare:
+6e5d e8408011 ifetcht 1 ,rega 
+6e5e 98467c00 isub temp ,null 
+6e5f 24628000 nrtn zero 
+6e60 d8a006a1 arg mem_le_prand ,contw 
+6e61 df200010 arg 16 ,loopcnt 
+6e62 20407ca1 call clear_mem 
+6e63 6fe1817b fetch 3 ,mem_le_plap + 3 
+6e64 67e186a1 store 3 ,mem_le_prand 
+6e65 20406e6f call genernate_master_macaddress 
+6e66 6fe106be fetch 2 ,mem_le_aes_128 + 13 
+6e67 1ff0fe00 byteswap pdata ,pdata 
+6e68 1fed0400 lshift8 pdata ,temp 
+6e69 efe08006 ifetch 1 ,contr 
+6e6a 9840fe00 iadd temp ,pdata 
+6e6b 68498178 fetcht 3 ,mem_le_plap 
+6e6c 98467c00 isub temp ,null 
+6e6d 2022fdba branch enable_user ,zero 
+6e6e 20600000 rtn 
+
+genernate_master_macaddress:
+6e6f d8c006a1 arg mem_le_prand ,contr 
+6e70 20407361 call load_data128 
+6e71 efe08011 ifetch 1 ,rega 
+6e72 20407362 call load_regext 
+6e73 18006c38 force 0x38 ,aes_ctrl 
+6e74 18006c00 force 0x0 ,aes_ctrl 
+6e75 204072cf call wait_aes 
+6e76 d8a006b1 arg mem_le_aes_128 ,contw 
+6e77 20207375 branch store_aes_result 
+
+find_ediv_form_list_compare:
+6e78 e8408011 ifetcht 1 ,rega 
+6e79 98467c00 isub temp ,null 
+6e7a 24628000 nrtn zero 
+6e7b 18c22200 copy contr ,rega 
+6e7c 18c0a608 add contr ,8 ,regc 
+6e7d da404305 arg mem_le_rand ,regb 
+6e7e df200008 arg 8 ,loopcnt 
+6e7f 20407d64 call string_compare 
+6e80 2022fdba branch enable_user ,zero 
+6e81 1a622200 copy regc ,rega 
+6e82 da40430d arg mem_le_irk ,regb 
+6e83 df200008 arg 8 ,loopcnt 
+6e84 20407d64 call string_compare 
+6e85 2022fdba branch enable_user ,zero 
+6e86 20600000 rtn 
+
+check_nvram:
+6e87 6fe143f8 fetch 2 ,mem_nv_data_ptr 
+6e88 e840803f ifetcht 1 ,pdata 
+6e89 1fe0fe22 pincrease nv_data_len 
+6e8a efe0803f ifetch 1 ,pdata 
+6e8b 98467c00 isub temp ,null 
+6e8c 20600000 rtn 
+
+init_device_list:
+6e8d 6fe0c3fa fetch 1 ,mem_nv_data_number 
+6e8e 1fe27200 icopy loopcnt 
+6e8f 684943f8 fetcht 2 ,mem_nv_data_ptr 
+6e90 58000000 setarg 0 
+
+init_device_list_loop:
+6e91 e7e08002 istore 1 ,temp 
+6e92 18408422 increase nv_data_len ,temp 
+6e93 1fe0fe01 pincrease 1 
+6e94 c2006e91 loop init_device_list_loop 
+6e95 20600000 rtn 
+
+load_device_list_mode_4:
+6e96 20407dbe call enable_user2 
+6e97 20406e18 call nvram_find_addr_from_bd_list 
+6e98 24346ea1 nbranch clear_ltk_exists ,user 
+6e99 6fe10033 fetch 2 ,mem_list_item_ptr 
+6e9a 1fe08c01 add pdata ,1 ,contr 
+6e9b d8a0430d arg mem_le_irk ,contw 
+6e9c 20407c8f call memcpy16 
+6e9d d8a0428a arg mem_le_ltk ,contw 
+6e9e 20407c8f call memcpy16 
+6e9f 70429a01 jam 1 ,mem_ltk_exists 
+6ea0 20600000 rtn 
+
+clear_ltk_exists:
+6ea1 70429a00 jam 0 ,mem_ltk_exists 
+6ea2 20600000 rtn 
+
+eeprom_store_le_reconn_info:
+6ea3 70003234 jam rec_4_mode ,mem_record_bt_mode 
+6ea4 20206ea5 branch eeprom_store_reconn_info 
+
+eeprom_store_reconn_info:
+6ea5 6fe0c3cb fetch 1 ,mem_device_option 
+6ea6 c0056de5 beq dvc_op_module ,check_51cmd_update_device_record 
+6ea7 c0045c42 beq dvc_op_mouse ,mouse_store_remote_bdaddr 
+6ea8 20600000 rtn 
+
+get_gpio_wakeup_index:
+6ea9 18417e1f and temp ,0x1f ,pdata 
+6eaa 1fe37e00 rshift pdata ,pdata 
+6eab d8a00016 arg mem_gpio_wakeup_cfg ,contw 
+6eac 98a08a00 iadd contw ,contw 
+6ead de0000f0 arg 0xf0 ,alarm 
+6eae 284c0000 isolate0 0 ,temp 
+6eaf 20608000 rtn true 
+6eb0 de00000f arg 0xf ,alarm 
+6eb1 20600000 rtn 
+
+gpio_set_wake_by_current_state:
+6eb2 44eac01a bpatch patch1a_5 ,mem_patch1a 
+6eb3 79200407 set1 gpio_active_bit ,temp 
+6eb4 20406ee6 call gpio_get_bit 
+6eb5 7d208407 nsetflag true ,gpio_active_bit ,temp 
+
+gpio_set_wake:
+6eb6 44eb401a bpatch patch1a_6 ,mem_patch1a 
+6eb7 18467cff sub temp ,ui_button_gpio_disable ,null 
+6eb8 20628000 rtn zero 
+6eb9 d9000004 arg 4 ,debug 
+6eba 284ffe07 isolate1 gpio_active_bit ,temp 
+6ebb 2020eebd branch gpio_set_wake_high ,true 
+6ebc d9000002 arg 2 ,debug 
+
+gpio_set_wake_high:
+6ebd 20406ea9 call get_gpio_wakeup_index 
+6ebe 284c0000 isolate0 0 ,temp 
+6ebf 2020eec1 branch gpio_set_wake_low4bit ,true 
+6ec0 19121000 lshift4 debug ,debug 
+
+gpio_set_wake_low4bit:
+6ec1 efe08005 ifetch 1 ,contw 
+6ec2 9e017e00 iand alarm ,pdata 
+6ec3 9901fe00 ior debug ,pdata 
+6ec4 e7e08005 istore 1 ,contw 
+6ec5 20600000 rtn 
+
+gpio_set_low_pullup:
+6ec6 44ebc01a bpatch patch1a_7 ,mem_patch1a 
+6ec7 18467cff sub temp ,ui_button_gpio_disable ,null 
+6ec8 20628000 rtn zero 
+6ec9 d9000001 arg 1 ,debug 
+6eca 20406ea9 call get_gpio_wakeup_index 
+6ecb 284c0000 isolate0 0 ,temp 
+6ecc 2020eece branch gpio_set_low_pullup_low4bit ,true 
+6ecd 19121000 lshift4 debug ,debug 
+
+gpio_set_low_pullup_low4bit:
+6ece efe08005 ifetch 1 ,contw 
+6ecf 9e017e00 iand alarm ,pdata 
+6ed0 9901fe00 ior debug ,pdata 
+6ed1 e7e08005 istore 1 ,contw 
+6ed2 20600000 rtn 
+
+gpio_clr_wake:
+6ed3 44ec401b bpatch patch1b_0 ,mem_patch1b 
+6ed4 18467cff sub temp ,ui_button_gpio_disable ,null 
+6ed5 20628000 rtn zero 
+6ed6 20406ea9 call get_gpio_wakeup_index 
+6ed7 efe08005 ifetch 1 ,contw 
+6ed8 9e017e00 iand alarm ,pdata 
+6ed9 e7e08005 istore 1 ,contw 
+6eda 20600000 rtn 
+
+gpio_config_input_nowake:
+6edb 20406ed3 call gpio_clr_wake 
+6edc 20206ee0 branch gpio_config_input_without_wake 
+
+gpio_config_input:
+6edd 18467cff sub temp ,ui_button_gpio_disable ,null 
+6ede 20628000 rtn zero 
+6edf 2455eeb6 ncall gpio_set_wake ,wake 
+
+gpio_config_input_without_wake:
+6ee0 20406f14 call gpio_addr 
+6ee1 58000000 setarg 0 
+6ee2 284ffe07 isolate1 gpio_active_bit ,temp 
+6ee3 7d20fe06 nsetflag true ,6 ,pdata 
+6ee4 7920fe07 setflag true ,7 ,pdata 
+6ee5 20206f0d branch gpio_write 
+
+gpio_get_bit:
+6ee6 44ecc01b bpatch patch1b_1 ,mem_patch1b 
+6ee7 d8a0811c arg core_gpio_in ,contw 
+6ee8 18410e07 and temp ,0x07 ,queue 
+6ee9 18497e00 rshift3 temp ,pdata 
+6eea 1fe17e03 and_into 3 ,pdata 
+6eeb 98a08a00 iadd contw ,contw 
+6eec efe08005 ifetch 1 ,contw 
+6eed 284ffe07 isolate1 gpio_active_bit ,temp 
+6eee 2020eef1 branch gpio_get_bit_reverse ,true 
+6eef afec0000 qisolate0 pdata 
+6ef0 20600000 rtn 
+
+gpio_get_bit_reverse:
+6ef1 afefffff qisolate1 pdata 
+6ef2 20600000 rtn 
+
+gpio_out_inactive:
+6ef3 18467cff sub temp ,ui_button_gpio_disable ,null 
+6ef4 20628000 rtn zero 
+6ef5 2fcffe07 isolate1 gpio_active_bit ,null 
+6ef6 20206efa branch gpio_out_flag 
+
+gpio_config_output:
+
+gpio_out_active:
+6ef7 18467cff sub temp ,ui_button_gpio_disable ,null 
+6ef8 20628000 rtn zero 
+6ef9 2fcc0007 isolate0 gpio_active_bit ,null 
+
+gpio_out_flag:
+6efa 58000000 setarg 0 
+6efb 7d20fe07 nsetflag true ,gpio_active_bit ,pdata 
+6efc 98428400 ixor temp ,temp 
+
+gpio_out:
+6efd 20406f14 call gpio_addr 
+6efe 5800003f setarg gpcfg_output_high 
+6eff 284ffe07 isolate1 gpio_active_bit ,temp 
+6f00 7920fe00 setflag true ,0 ,pdata 
+6f01 20206f0d branch gpio_write 
+
+gpio_check_active:
+6f02 18467cff sub temp ,ui_button_gpio_disable ,null 
+6f03 2022fdc4 branch disable_true ,zero 
+6f04 20406f14 call gpio_addr 
+6f05 efe08005 ifetch 1 ,contw 
+6f06 c2806f09 bbit1 0 ,gpio_check_active_high 
+6f07 284c0007 isolate0 gpio_active_bit ,temp 
+6f08 20600000 rtn 
+
+gpio_check_active_high:
+6f09 284ffe07 isolate1 gpio_active_bit ,temp 
+6f0a 20600000 rtn 
+
+gpio_set_analog:
+6f0b 20406f14 call gpio_addr 
+6f0c 580000c0 setarg gpcfg_no_ie 
+
+gpio_write:
+6f0d e7e08005 istore 1 ,contw 
+6f0e 20600000 rtn 
+
+gpio_set_high_impedance:
+6f0f 18467cff sub temp ,ui_button_gpio_disable ,null 
+6f10 20628000 rtn zero 
+6f11 20406f14 call gpio_addr 
+6f12 58000000 setarg gpcfg_high_impedance 
+6f13 20206f0d branch gpio_write 
+
+gpio_addr:
+6f14 18417e3f and temp ,0x3f ,pdata 
+6f15 1fe67c0f sub pdata ,gpio_number + -1 ,null 
+6f16 24216f1a nbranch gpio_addr_ext ,positive 
+6f17 d8a08070 arg core_gpio_conf ,contw 
+
+gpio_addr_next:
+6f18 98a08a00 iadd contw ,contw 
+6f19 20600000 rtn 
+
+gpio_addr_ext:
+6f1a d8a080d4 arg core_gpio_conf_hi ,contw 
+6f1b 1fe0fff0 increase -16 ,pdata 
+6f1c 20206f18 branch gpio_addr_next 
+
+gpio_config_param:
+6f1d 1fe104ff and pdata ,0xff ,temp 
+6f1e 1fecfe00 rshift8 pdata ,pdata 
+6f1f 20206f21 branch gpio_config_function_int 
+
+gpio_config_function:
+6f20 c4038000 rtnbit0 gpio_active_bit 
+
+gpio_config_function_int:
+6f21 1fe17e3f and_into 0x3f ,pdata 
+6f22 1fe67c0f sub pdata ,gpio_number + -1 ,null 
+6f23 24216f28 nbranch gpio_config_function_int_ext ,positive 
+6f24 d8a08070 arg core_gpio_conf ,contw 
+
+gpio_config_function_int_next:
+6f25 98a08a00 iadd contw ,contw 
+6f26 e0408005 istoret 1 ,contw 
+6f27 20600000 rtn 
+
+gpio_config_function_int_ext:
+6f28 d8a080d4 arg core_gpio_conf_hi ,contw 
+6f29 1fe0fff0 increase -16 ,pdata 
+6f2a 20206f25 branch gpio_config_function_int_next 
+
+gpio_get_config:
+6f2b 1841043f and_into 0x3f ,temp 
+6f2c 18467c0f sub temp ,gpio_number + -1 ,null 
+6f2d 24216f32 nbranch gpio_get_config_ext ,positive 
+6f2e 58008070 setarg core_gpio_conf 
+
+gpio_get_config_next:
+6f2f 98408c00 iadd temp ,contr 
+6f30 efe08006 ifetch 1 ,contr 
+6f31 20600000 rtn 
+
+gpio_get_config_ext:
+6f32 580080d4 setarg core_gpio_conf_hi 
+6f33 184085f0 increase -16 ,temp 
+6f34 20206f2f branch gpio_get_config_next 
+
+gpio_set_before_lpm:
+6f35 df200010 arg gpio_number ,loopcnt 
+6f36 d8c08070 arg core_gpio_conf ,contr 
+
+setgpio_loop:
+6f37 18c20a00 copy contr ,contw 
+6f38 efe08006 ifetch 1 ,contr 
+6f39 c00fef48 beq gpcfg_spid_miso ,setgpio_pullup 
+6f3a c0106f48 beq gpcfg_spid_ncs ,setgpio_pullup 
+6f3b c010ef48 beq gpcfg_spid_sck ,setgpio_pullup 
+6f3c c0116f48 beq gpcfg_spid_mosi ,setgpio_pullup 
+6f3d c011ef48 beq gpcfg_spid_sdio ,setgpio_pullup 
+6f3e c0166f48 beq gpcfg_iic_scl ,setgpio_pullup 
+6f3f c016ef48 beq gpcfg_iic_sda ,setgpio_pullup 
+6f40 c0006f48 beq gpcfg_input ,setgpio_pullup 
+
+setgpio_loop_end:
+6f41 c2006f37 loop setgpio_loop 
+6f42 dfe080dc arg core_gpio_conf_hi + gpio_number_ext ,pdata 
+6f43 98c67c00 isub contr ,null 
+6f44 20628000 rtn zero 
+
+gpio_set_before_lpm_ext:
+6f45 df200008 arg gpio_number_ext ,loopcnt 
+6f46 d8c080d4 arg core_gpio_conf_hi ,contr 
+6f47 20206f37 branch setgpio_loop 
+
+setgpio_pullup:
+6f48 58000040 setarg gpcfg_pullup 
+6f49 e7e08005 istore 1 ,contw 
+6f4a 20206f41 branch setgpio_loop_end 
+
+setgpio_pulldown:
+6f4b 58000080 setarg gpcfg_pulldown 
+6f4c e7e08005 istore 1 ,contw 
+6f4d 20206f41 branch setgpio_loop_end 
+
+sadc_calibration:
+6f4e 44ed401b bpatch patch1b_2 ,mem_patch1b 
+6f4f 20758000 rtn wake 
+6f50 708a0777 jam 0x77 ,core_gpadc_ctrl 
+6f51 708a08c9 jam 0xc9 ,core_gpadc_cfg0 
+6f52 708a0b01 jam 0x01 ,core_gpadc_cfg3 
+6f53 6fe0c409 fetch 1 ,mem_adc_clkdiv 
+6f54 67f080cd store 1 ,core_sadc_clkdiv 
+6f55 20406f97 call sadc_read 
+6f56 708a08c1 jam 0xc1 ,core_gpadc_cfg0 
+
+sadc_cal_read:
+6f57 df200007 arg 7 ,loopcnt 
+6f58 da204412 arg mem_adc_cal_c0 ,rega 
+6f59 708a0a05 jam 0x05 ,core_gpadc_cfg2 
+
+sadc_cal_read_loop:
+6f5a 6ff08a0c fetch 1 ,core_gpadc_status 
+6f5b e7e08011 istore 1 ,rega 
+6f5c 1a20a201 increase 1 ,rega 
+6f5d 6ff08a0a fetch 1 ,core_gpadc_cfg2 
+6f5e 1fe0fe20 increase 0x20 ,pdata 
+6f5f 67f08a0a store 1 ,core_gpadc_cfg2 
+6f60 c2006f5a loop sadc_cal_read_loop 
+6f61 708a0700 jam 0x00 ,core_gpadc_ctrl 
+6f62 20600000 rtn 
+
+sadc_cal_write:
+6f63 6ff080cc fetch 1 ,core_sadc_ctrl 
+6f64 79207e01 set1 1 ,pdata 
+6f65 67f080cc store 1 ,core_sadc_ctrl 
+6f66 df200007 arg 7 ,loopcnt 
+6f67 da204412 arg mem_adc_cal_c0 ,rega 
+6f68 708a0a15 jam 0x15 ,core_gpadc_cfg2 
+
+sadc_cal_write_loop:
+6f69 efe08011 ifetch 1 ,rega 
+6f6a 67f08a09 store 1 ,core_gpadc_cfg1 
+6f6b 1a20a201 increase 1 ,rega 
+6f6c 6ff08a0a fetch 1 ,core_gpadc_cfg2 
+6f6d 1fe0fe20 increase 0x20 ,pdata 
+6f6e 67f08a0a store 1 ,core_gpadc_cfg2 
+6f6f c2006f69 loop sadc_cal_write_loop 
+6f70 6ff080cc fetch 1 ,core_sadc_ctrl 
+6f71 793ffe01 set0 1 ,pdata 
+6f72 67f080cc store 1 ,core_sadc_ctrl 
+6f73 20600000 rtn 
+
+adc_init_data:
+6f74 44edc01b bpatch patch1b_3 ,mem_patch1b 
+6f75 6fe401fd fetch 8 ,mem_otp_adc 
+6f76 203a6f79 branch adc_init_cal_data_default ,blank 
+6f77 67e443fd store 8 ,mem_3v_adc_io_data 
+6f78 20600000 rtn 
+
+adc_init_cal_data_default:
+6f79 58000bbe setarg 0x0bbe 
+6f7a 67e143fd store 2 ,mem_3v_adc_io_data 
+6f7b 580003f0 setarg 0x03f0 
+6f7c 67e14401 store 2 ,mem_1v_adc_io_data 
+6f7d 5800027e setarg 0x027e 
+6f7e 67e143ff store 2 ,mem_2v_adc_hvin_data 
+6f7f 580003c4 setarg 0x03c4 
+6f80 67e14403 store 2 ,mem_3v_adc_hvin_data 
+6f81 20600000 rtn 
+
+enable_adc:
+6f82 44ee401b bpatch patch1b_4 ,mem_patch1b 
+6f83 20406f63 call sadc_cal_write 
+6f84 6ff08a09 fetch 1 ,core_gpadc_cfg1 
+6f85 793ffe07 set0 7 ,pdata 
+6f86 67f08a09 store 1 ,core_gpadc_cfg1 
+6f87 708a0777 jam 0x77 ,core_gpadc_ctrl 
+6f88 708a08c1 jam 0xc1 ,core_gpadc_cfg0 
+6f89 708a0b01 jam 0x01 ,core_gpadc_cfg3 
+6f8a 20406f90 call sadc_channel 
+6f8b 6fe0c409 fetch 1 ,mem_adc_clkdiv 
+6f8c 67f080cd store 1 ,core_sadc_clkdiv 
+6f8d 20406f97 call sadc_read 
+6f8e 7080cd00 jam 0 ,core_sadc_clkdiv 
+6f8f 20206fa1 branch sadc_dma 
+
+sadc_channel:
+6f90 6fe0c408 fetch 1 ,mem_adc_channel 
+6f91 1ff27e00 lshift4 pdata ,pdata 
+6f92 68588a0b fetcht 1 ,core_gpadc_cfg3 
+6f93 1841040f and_into 0x0f ,temp 
+6f94 98418400 ior temp ,temp 
+6f95 60588a0b storet 1 ,core_gpadc_cfg3 
+6f96 20600000 rtn 
+
+sadc_read:
+6f97 7080cc03 jam 0x03 ,core_sadc_ctrl 
+
+sadc_read_wait:
+6f98 6ff08129 fetch 1 ,core_perf_status 
+6f99 c302ef98 bbit0 saradc_done ,sadc_read_wait 
+6f9a 68590164 fetcht 2 ,core_sadc_data 
+6f9b 6049440a storet 2 ,mem_adc_current_value 
+6f9c 7080cc06 jam 0x06 ,core_sadc_ctrl 
+
+sadc_read_wait2:
+6f9d 6ff08129 fetch 1 ,core_perf_status 
+6f9e c282ef9d bbit1 saradc_done ,sadc_read_wait2 
+6f9f 7080cc00 jam 0x00 ,core_sadc_ctrl 
+6fa0 20600000 rtn 
+
+sadc_dma:
+6fa1 6fe0c411 fetch 1 ,mem_adc_dma_enable 
+6fa2 207a0000 rtn blank 
+6fa3 6ff08a09 fetch 1 ,core_gpadc_cfg1 
+6fa4 79207e07 set1 7 ,pdata 
+6fa5 67f08a09 store 1 ,core_gpadc_cfg1 
+6fa6 6fe0c409 fetch 1 ,mem_adc_clkdiv 
+6fa7 67f080cd store 1 ,core_sadc_clkdiv 
+6fa8 6fe1440d fetch 2 ,mem_adc_saddr_ptr 
+6fa9 67f100ce store 2 ,core_sadc_saddr 
+6faa 6fe1440f fetch 2 ,mem_adc_eaddr_ptr 
+6fab 67f100d0 store 2 ,core_sadc_eaddr 
+6fac 7080cc0b jam 0x0b ,core_sadc_ctrl 
+6fad 200003e8 nop 1000 
+6fae 7080cc03 jam 0x03 ,core_sadc_ctrl 
+6faf 20600000 rtn 
+
+vdd_calculate_by_mode:
+6fb0 44eec01b bpatch patch1b_5 ,mem_patch1b 
+6fb1 6fe0c407 fetch 1 ,mem_adc_config_flag 
+6fb2 c000efb5 beq adc_config_hvin ,vdd_calculate_hvin 
+6fb3 c0016fbb beq adc_config_gpio ,vdd_calculate_io 
+6fb4 20600000 rtn 
+
+vdd_calculate_hvin:
+6fb5 580003e8 setarg 1000 
+6fb6 67e14405 store 2 ,mem_reference_voltage 
+6fb7 68494403 fetcht 2 ,mem_3v_adc_hvin_data 
+6fb8 6fe143ff fetch 2 ,mem_2v_adc_hvin_data 
+6fb9 da6007d0 arg 2000 ,regc 
+6fba 20206fc0 branch vdd_calculate 
+
+vdd_calculate_io:
+6fbb 580007d0 setarg 2000 
+6fbc 67e14405 store 2 ,mem_reference_voltage 
+6fbd 684943fd fetcht 2 ,mem_3v_adc_io_data 
+6fbe 6fe14401 fetch 2 ,mem_1v_adc_io_data 
+6fbf da6003e8 arg 1000 ,regc 
+
+vdd_calculate:
+6fc0 98462200 isub temp ,rega 
+6fc1 6fe1440a fetch 2 ,mem_adc_current_value 
+6fc2 98467e00 isub temp ,pdata 
+6fc3 24216fcd nbranch vdd_calculate1 ,positive 
+6fc4 68494405 fetcht 2 ,mem_reference_voltage 
+6fc5 984fa400 imul32 temp ,regb 
+6fc6 1a627e00 copy regc ,pdata 
+6fc7 9a2ffe00 imul32 rega ,pdata 
+6fc8 9a40fe00 iadd regb ,pdata 
+
+vdd_calculate2:
+6fc9 9a26fc00 idiv rega 
+6fca 20407d62 call wait_div_end 
+6fcb 1807fe00 quotient pdata 
+6fcc 20600000 rtn 
+
+vdd_calculate1:
+6fcd 18427e00 copy temp ,pdata 
+6fce 6849440a fetcht 2 ,mem_adc_current_value 
+6fcf 98467e00 isub temp ,pdata 
+6fd0 68494405 fetcht 2 ,mem_reference_voltage 
+6fd1 984fa400 imul32 temp ,regb 
+6fd2 1a627e00 copy regc ,pdata 
+6fd3 9a2ffe00 imul32 rega ,pdata 
+6fd4 9a467e00 isub regb ,pdata 
+6fd5 24217dca nbranch set_pdata_0 ,positive 
+6fd6 20206fc9 branch vdd_calculate2 
+
+adc_bat_percent_lowpower_out:
+6fd7 efe40011 ifetch 8 ,rega 
+6fd8 67e40670 store 8 ,mem_pdatatemp 
+6fd9 6fe10670 fetch 2 ,mem_pdatatemp 
+6fda 68490672 fetcht 2 ,mem_pdatatemp + 2 
+6fdb 98462200 isub temp ,rega 
+6fdc 6fe10676 fetch 2 ,mem_pdatatemp + 6 
+6fdd 98462400 isub temp ,regb 
+6fde 68490674 fetcht 2 ,mem_pdatatemp + 4 
+6fdf 98467c00 isub temp ,null 
+6fe0 24416fe7 ncall adc_set_low_power_flag ,positive 
+6fe1 1a4ffe64 mul32 regb ,100 ,pdata 
+6fe2 9a26fc00 idiv rega 
+6fe3 20407d62 call wait_div_end 
+6fe4 1807fe00 quotient pdata 
+6fe5 205a6fef call adc_set_no_power_flag ,blank 
+6fe6 20600000 rtn 
+
+adc_set_low_power_flag:
+6fe7 6fe0c40c fetch 1 ,mem_adc_power_flag 
+6fe8 79207e00 set1 0 ,pdata 
+6fe9 67e0c40c store 1 ,mem_adc_power_flag 
+6fea 20600000 rtn 
+
+adc_clear_low_power_flag:
+6feb 6fe0c40c fetch 1 ,mem_adc_power_flag 
+6fec 793ffe00 set0 0 ,pdata 
+6fed 67e0c40c store 1 ,mem_adc_power_flag 
+6fee 20600000 rtn 
+
+adc_set_no_power_flag:
+6fef 6848c40c fetcht 1 ,mem_adc_power_flag 
+6ff0 79200401 set1 1 ,temp 
+6ff1 6048c40c storet 1 ,mem_adc_power_flag 
+6ff2 20600000 rtn 
+
+adc_clear_no_power_flag:
+6ff3 6848c40c fetcht 1 ,mem_adc_power_flag 
+6ff4 793f8401 set0 1 ,temp 
+6ff5 6048c40c storet 1 ,mem_adc_power_flag 
+6ff6 20600000 rtn 
+
+keyscan_key_init:
+6ff7 6fe1442c fetch 2 ,mem_key_num_ptr 
+6ff8 efe0803f ifetch 1 ,pdata 
+
+keyscan_key_init_next:
+6ff9 207a0000 rtn blank 
+6ffa 1fe27200 copy pdata ,loopcnt 
+6ffb 6fe1442c fetch 2 ,mem_keyscan_ptr 
+6ffc 1fe0fe03 increase 3 ,pdata 
+6ffd 1fe22200 copy pdata ,rega 
+
+keyscan_key_init_lp1:
+6ffe e8408011 ifetcht 1 ,rega 
+6fff 20406edd call gpio_config_input 
+7000 1a20a201 increase key_conf_struct_len ,rega 
+7001 c2006ffe loop keyscan_key_init_lp1 
+
+keyscan_key_init_end:
+7002 20600000 rtn 
+
+keyscan_scan_key:
+7003 6fe1442c fetch 2 ,mem_keyscan_ptr 
+7004 1fe0fe03 increase 3 ,pdata 
+7005 1fe22200 copy pdata ,rega 
+7006 18002400 force 0 ,regb 
+7007 58000000 setarg 0 
+7008 67e106f1 store 2 ,mem_key_value_temp 
+
+keyscan_scan_key_lp1:
+7009 e8408011 ifetcht 1 ,rega 
+700a 20406ee6 call gpio_get_bit 
+700b 44ef401b bpatch patch1b_6 ,mem_patch1b 
+700c 6fe106f1 fetch 2 ,mem_key_value_temp 
+700d 1a420e00 copy regb ,queue 
+700e f920fe00 qsetflag true ,pdata 
+700f 67e106f1 store 2 ,mem_key_value_temp 
+7010 1a20a201 increase key_conf_struct_len ,rega 
+7011 1a40a401 increase 1 ,regb 
+7012 6fe1442c fetch 2 ,mem_key_num_ptr 
+7013 efe0803f ifetch 1 ,pdata 
+
+keyscan_scan_key_lp1_next:
+7014 9a42fc00 ixor regb ,null 
+7015 2422f009 nbranch keyscan_scan_key_lp1 ,zero 
+7016 6fe106f1 fetch 2 ,mem_key_value_temp 
+7017 6849442e fetcht 2 ,mem_key_value_retention 
+7018 9842fc00 ixor temp ,null 
+7019 20628000 rtn zero 
+701a 20207dba branch enable_user 
+
+keyscan_process_lpm_before:
+701b 6fe1442c fetch 2 ,mem_key_num_ptr 
+701c efe0803f ifetch 1 ,pdata 
+
+keyscan_process_lpm_before_next:
+701d 207a0000 rtn blank 
+701e 1fe27200 copy pdata ,loopcnt 
+701f 6fe1442c fetch 2 ,mem_keyscan_ptr 
+7020 1fe0fe03 increase 3 ,pdata 
+7021 1fe22200 copy pdata ,rega 
+
+keyscan_process_lpm_before_lp1:
+7022 e8408011 ifetcht 1 ,rega 
+7023 20406eb2 call gpio_set_wake_by_current_state 
+7024 1a20a201 increase key_conf_struct_len ,rega 
+7025 c2007022 loop keyscan_process_lpm_before_lp1 
+
+keyscan_process_lpm_before_end:
+7026 20600000 rtn 
+
+keyscan_key_process:
+7027 d8e00009 arg key_scan_timer ,queue 
+7028 20407cef call timer_check 
+7029 247a0000 nrtn blank 
+702a 58000020 setarg 0x20 
+702b d8e00009 arg key_scan_timer ,queue 
+702c 20407ce1 call timer_init 
+702d 78547c00 disable user 
+702e 2040701b call keyscan_process_lpm_before 
+702f 44efc01b bpatch patch1b_7 ,mem_patch1b 
+7030 6fe1442c fetch 2 ,mem_key_num_ptr 
+7031 efe0803f ifetch 1 ,pdata 
+
+keyscan_key_process_next:
+7032 207a0000 rtn blank 
+7033 20407003 call keyscan_scan_key 
+7034 243477a5 nbranch lpm_button_clean_wake_lock ,user 
+7035 204077a3 call lpm_button_get_wake_lock 
+7036 78547c00 disable user 
+7037 6fe106f1 fetch 2 ,mem_key_value_temp 
+7038 67e106f8 store 2 ,mem_key_value_temp4 
+7039 7006fa00 jam 0 ,mem_key_value_temp6 
+703a 18000e00 force 0 ,queue 
+
+keyscan_key_lp1:
+703b 6fe1442e fetch 2 ,mem_key_value_retention 
+703c 1fe30400 rshift pdata ,temp 
+703d 6049442e storet 2 ,mem_key_value_retention 
+703e 1fe17e01 and pdata ,0x01 ,pdata 
+703f 684906f8 fetcht 2 ,mem_key_value_temp4 
+7040 18412201 and temp ,0x01 ,rega 
+7041 18430400 rshift temp ,temp 
+7042 604906f8 storet 2 ,mem_key_value_temp4 
+7043 9a22fc00 ixor rega ,null 
+7044 2442f050 ncall keyscan_send_key_data ,zero 
+7045 6fe1442c fetch 2 ,mem_key_num_ptr 
+7046 efe0803f ifetch 1 ,pdata 
+
+keyscan_key_lp1_next:
+7047 684886fa fetcht 1 ,mem_key_value_temp6 
+7048 18408401 increase 1 ,temp 
+7049 604886fa storet 1 ,mem_key_value_temp6 
+704a 18420e00 copy temp ,queue 
+704b 98e2fc00 ixor queue ,null 
+704c 2422f03b nbranch keyscan_key_lp1 ,zero 
+704d 6fe106f1 fetch 2 ,mem_key_value_temp 
+704e 67e1442e store 2 ,mem_key_value_retention 
+704f 20600000 rtn 
+
+keyscan_send_key_data:
+7050 44f0401c bpatch patch1c_0 ,mem_patch1c 
+7051 6fe1442c fetch 2 ,mem_keyscan_ptr 
+7052 1fe0fe01 increase 1 ,pdata 
+7053 efe1003f ifetch 2 ,pdata 
+7054 20207d79 branch callback_func 
+
+pwm_init:
+7055 6ff08042 fetch 1 ,core_clksel 
+7056 9a21fe00 ior rega ,pdata 
+7057 67f08042 store 1 ,core_clksel 
+7058 6ff10050 fetch 2 ,core_clkoff 
+7059 793ffe0d set0 clock_off_pwm ,pdata 
+705a 67f10050 store 2 ,core_clkoff 
+
+delay_nop100:
+705b 20000064 nop 100 
+705c 20600000 rtn 
+
+pwm_clk_set:
+705d 6ff08042 fetch 1 ,core_clksel 
+705e c2837062 bbit1 6 ,pwm_24m_clk_set 
+705f c283f064 bbit1 7 ,pwm_33k_clk_set 
+
+pwm_12m_clk_set:
+7060 58b71b00 setarg pwm_12mhz 
+7061 20600000 rtn 
+
+pwm_24m_clk_set:
+7062 596e3600 setarg pwm_24mhz 
+7063 20600000 rtn 
+
+pwm_33k_clk_set:
+7064 580080e8 setarg pwm_33khz 
+7065 20600000 rtn 
+
+pwm_out_set:
+7066 68498672 fetcht 3 ,mem_pdatatemp + 2 
+7067 2040705d call pwm_clk_set 
+7068 9846fc00 idiv temp 
+7069 20407d62 call wait_div_end 
+706a 18078400 quotient temp 
+706b 6fe08675 fetch 1 ,mem_pdatatemp + 5 
+706c 984ffe00 imul32 temp ,pdata 
+706d 1fe6fc64 div pdata ,100 
+706e 20407d62 call wait_div_end 
+706f 1807a200 quotient rega 
+7070 18427e00 copy temp ,pdata 
+7071 9a262400 isub rega ,regb 
+7072 6fe08671 fetch 1 ,mem_pdatatemp + 1 
+7073 2040707a call pwm_duty_cycle_set 
+7074 6fe08670 fetch 1 ,mem_pdatatemp 
+7075 68488671 fetcht 1 ,mem_pdatatemp + 1 
+7076 1841040f and_into 0x0f ,temp 
+7077 184d0400 lshift8 temp ,temp 
+7078 9841fe00 ior temp ,pdata 
+7079 202070ba branch pwm_enable 
+
+pwm_duty_cycle_set:
+707a 98000e00 iforce queue 
+707b 20407088 call pwm_duty_cycle_set_without_autoload 
+707c 2020707d branch pwm_autoload_set 
+
+pwm_autoload_set:
+707d 6ff080be fetch 1 ,core_pwm_autoload 
+707e f9207e00 qset1 pdata 
+707f 67f080be store 1 ,core_pwm_autoload 
+7080 68588042 fetcht 1 ,core_clksel 
+7081 284ffe07 isolate1 7 ,temp 
+7082 2040f086 call delay_1clk_of_33k ,true 
+7083 f93ffe00 qset0 pdata 
+7084 67f080be store 1 ,core_pwm_autoload 
+7085 20600000 rtn 
+
+delay_1clk_of_33k:
+7086 200001e0 nop 480 
+7087 20600000 rtn 
+
+pwm_duty_cycle_set_without_autoload:
+7088 1fe17e0f and_into 0x0f ,pdata 
+7089 d8a0809c arg core_pwm_pcnt0 ,contw 
+708a 1feffe04 mul32 pdata ,4 ,pdata 
+708b 98a08a00 iadd contw ,contw 
+708c 1a227e00 copy rega ,pdata 
+708d e7e10005 istore 2 ,contw 
+708e 1a427e00 copy regb ,pdata 
+708f e7e10005 istore 2 ,contw 
+7090 20600000 rtn 
+
+pwm_enable_in_syncmode:
+7091 1a4c8e00 rshift8 regb ,queue 
+7092 204070af call pwm_init_bit_set 
+7093 1a4c8e00 rshift8 regb ,queue 
+7094 204070a9 call pwm_syncmode_set 
+7095 1a2c8e00 rshift8 rega ,queue 
+7096 7820fc00 enable true 
+7097 204070aa call pwm_syncmode_set_process 
+7098 1a227e00 deposit rega 
+7099 204070b5 call pwm_gpio_select 
+709a 1a427e00 deposit regb 
+709b 202070ba branch pwm_enable 
+
+pwm_disable_in_syncmode:
+709c 1a227e00 deposit rega 
+709d 204070bd call pwm_disable 
+709e 1a427e00 deposit regb 
+709f 204070bd call pwm_disable 
+70a0 1a2c8e00 rshift8 rega ,queue 
+70a1 7840fc00 disable true 
+70a2 204070aa call pwm_syncmode_set_process 
+70a3 1a4c8e00 rshift8 regb ,queue 
+70a4 7840fc00 disable true 
+70a5 204070b0 call pwm_init_bit_set_process 
+70a6 1a4c8e00 rshift8 regb ,queue 
+70a7 7840fc00 disable true 
+70a8 202070aa branch pwm_syncmode_set_process 
+
+pwm_syncmode_set:
+70a9 28effe07 isolate1 7 ,queue 
+
+pwm_syncmode_set_process:
+70aa 18e10e0f and queue ,0x0f ,queue 
+70ab 6ff080bc fetch 1 ,core_pwm_sync 
+70ac f920fe00 qsetflag true ,pdata 
+70ad 67f080bc store 1 ,core_pwm_sync 
+70ae 20600000 rtn 
+
+pwm_init_bit_set:
+70af 28effe06 isolate1 6 ,queue 
+
+pwm_init_bit_set_process:
+70b0 18e10e0f and queue ,0x0f ,queue 
+70b1 6ff0809b fetch 1 ,core_pwm_init 
+70b2 f920fe00 qsetflag true ,pdata 
+70b3 67f0809b store 1 ,core_pwm_init 
+70b4 20600000 rtn 
+
+pwm_gpio_select:
+70b5 204070c5 call pwm_select_channel 
+
+pwm_gpio_select_process:
+70b6 1fed7e00 lshift8 pdata ,pdata 
+70b7 18e08410 add queue ,gpcfg_pwm_out0 ,temp 
+70b8 9841fe00 ior temp ,pdata 
+70b9 20206f1d branch gpio_config_param 
+
+pwm_enable:
+70ba 78347c00 enable user 
+70bb 204070b5 call pwm_gpio_select 
+70bc 202070c0 branch pwm_set_select 
+
+pwm_disable:
+70bd 78547c00 disable user 
+70be 204070c5 call pwm_select_channel 
+70bf 202070c0 branch pwm_set_select 
+
+pwm_set_select:
+70c0 18e10e0f and queue ,0x0f ,queue 
+70c1 6ff0809a fetch 1 ,core_pwm_en 
+70c2 f9347e00 qsetflag user ,pdata 
+70c3 67f0809a store 1 ,core_pwm_en 
+70c4 20600000 rtn 
+
+pwm_select_channel:
+70c5 1fec8e00 rshift8 pdata ,queue 
+70c6 18e10e0f and queue ,0x0f ,queue 
+70c7 20600000 rtn 
+
+wdt_init_config:
+70c8 1fe20400 copy pdata ,temp 
+70c9 44f0c01c bpatch patch1c_1 ,mem_patch1c 
+70ca 204070d5 call wdt_set_enable 
+70cb 58000800 setarg 2048 
+70cc 98467e00 isub temp ,pdata 
+70cd 1fe20400 copy pdata ,temp 
+70ce 18518400 rshift4 temp ,temp 
+70cf 60588004 storet 1 ,core_write_wdt 
+70d0 20000578 nop 1400 
+70d1 1fe20400 copy pdata ,temp 
+70d2 1841040f and_into 0x0f ,temp 
+70d3 6058800b storet 1 ,core_write_wdt2 
+70d4 20600000 rtn 
+
+wdt_set_enable:
+70d5 78367c00 enable user2 
+70d6 202070d9 branch wdt_init_set 
+
+wdt_set_disable:
+70d7 44f1401c bpatch patch1c_2 ,mem_patch1c 
+70d8 78567c00 disable user2 
+
+wdt_init_set:
+70d9 6ff08043 fetch 1 ,core_config 
+70da 79367e03 setflag user2 ,3 ,pdata 
+70db 67f08043 store 1 ,core_config 
+70dc 20600000 rtn 
+
+nec61212_init:
+70dd d8400031 arg fun_nec_enable | fun_nec_clk_divide_24 ,temp 
+
+nec_init_config:
+70de 67f20062 store 4 ,core_nec_start_addr 
+70df 67f10066 store 2 ,core_nec_rptr 
+70e0 60588061 storet 1 ,core_nec_ctrl 
+70e1 20600000 rtn 
+
+nec_check_rxbuff_size:
+70e2 6ff1012c fetch 2 ,core_nec_rxitem 
+70e3 20600000 rtn 
+
+nec_prepare_read:
+70e4 68710066 fetchr contu ,2 ,core_nec_rptr 
+70e5 69510062 fetchr contus ,2 ,core_nec_start_addr 
+70e6 6a110064 fetchr contue ,2 ,core_nec_end_addr 
+70e7 20600000 rtn 
+
+nec_read_done:
+70e8 60710066 storer contu ,2 ,core_nec_rptr 
+70e9 20600000 rtn 
+
+nec_parse_nec61212:
+70ea 20407dba call enable_user 
+70eb dd600000 arg 0 ,rege 
+70ec 204070e2 call nec_check_rxbuff_size 
+70ed c001712c beq 2 ,nec_parse_nec61212_check_timeout 
+70ee 1fe67c04 sub pdata ,4 ,null 
+70ef 20610000 rtn positive 
+70f0 204070e4 call nec_prepare_read 
+70f1 e8410003 ifetcht 2 ,contu 
+70f2 5800a654 setarg nec61212_data2repeat_time 
+70f3 20407135 call nec_check_pulse_range_legal_default_deviation 
+70f4 2421711a nbranch nec_parse_nec61212_check_repeat_data ,positive 
+70f5 1b020400 copy regd ,temp 
+70f6 58017f8e setarg nec61212_repeat2repeat_time 
+70f7 20407135 call nec_check_pulse_range_legal_default_deviation 
+70f8 2421711a nbranch nec_parse_nec61212_check_repeat_data ,positive 
+70f9 1b020400 copy regd ,temp 
+70fa 58002328 setarg nec61212_boot_code_start_time 
+70fb 20407135 call nec_check_pulse_range_legal_default_deviation 
+70fc 20217111 branch nec_parse_nec61212_error_data ,positive 
+70fd e8410003 ifetcht 2 ,contu 
+70fe 58001194 setarg nec61212_boot_code_end_time 
+70ff 20407135 call nec_check_pulse_range_legal_default_deviation 
+7100 20217111 branch nec_parse_nec61212_error_data ,positive 
+7101 204070e2 call nec_check_rxbuff_size 
+7102 1fe67c85 sub pdata ,133 ,null 
+7103 20610000 rtn positive 
+7104 df200020 arg 32 ,loopcnt 
+
+nec_parse_nec61212_data:
+7105 e8410003 ifetcht 2 ,contu 
+7106 58000230 setarg nec61212_data_bit_1_start_time 
+7107 20407135 call nec_check_pulse_range_legal_default_deviation 
+7108 20217111 branch nec_parse_nec61212_error_data ,positive 
+7109 e8410003 ifetcht 2 ,contu 
+710a 5800069a setarg nec61212_data_bit_1_end_time 
+710b 20407135 call nec_check_pulse_range_legal_default_deviation 
+710c 24217116 nbranch nec_parse_nec61212_add_bit1 ,positive 
+710d 1b020400 copy regd ,temp 
+710e 58000230 setarg nec61212_data_bit_0_end_time 
+710f 20407135 call nec_check_pulse_range_legal_default_deviation 
+7110 24217117 nbranch nec_parse_nec61212_add_bit0 ,positive 
+
+nec_parse_nec61212_error_data:
+7111 1b020400 copy regd ,temp 
+7112 5800ffff setarg nec61212_timeout_time 
+7113 98467c00 isub temp ,null 
+7114 2022f131 branch nec_parse_nec61212_check_timeout_cb ,zero 
+7115 202070e8 branch nec_read_done 
+
+nec_parse_nec61212_add_bit1:
+7116 79205620 set1 32 ,rege 
+
+nec_parse_nec61212_add_bit0:
+7117 1d635600 rshift rege ,rege 
+7118 c2007105 loop nec_parse_nec61212_data 
+7119 20207125 branch nec_parse_nec61212_check_stop_bit 
+
+nec_parse_nec61212_check_repeat_data:
+711a 204070e2 call nec_check_rxbuff_size 
+711b 1fe67c07 sub pdata ,7 ,null 
+711c 20610000 rtn positive 
+711d e8410003 ifetcht 2 ,contu 
+711e 58002328 setarg nec61212_repeat_start_time 
+711f 20407135 call nec_check_pulse_range_legal_default_deviation 
+7120 20217111 branch nec_parse_nec61212_error_data ,positive 
+7121 e8410003 ifetcht 2 ,contu 
+7122 580008ca setarg nec61212_repeat_end_time 
+7123 20407135 call nec_check_pulse_range_legal_default_deviation 
+7124 20217111 branch nec_parse_nec61212_error_data ,positive 
+
+nec_parse_nec61212_check_stop_bit:
+7125 e8410003 ifetcht 2 ,contu 
+7126 58000230 setarg nec61212_stop_time 
+7127 20407135 call nec_check_pulse_range_legal_default_deviation 
+7128 20217111 branch nec_parse_nec61212_error_data ,positive 
+7129 204070e8 call nec_read_done 
+712a 1a627e00 copy regc ,pdata 
+712b 20207d79 branch callback_func 
+
+nec_parse_nec61212_check_timeout:
+712c 204070e4 call nec_prepare_read 
+712d e8410003 ifetcht 2 ,contu 
+712e 5800ffff setarg nec61212_timeout_time 
+712f 98467c00 isub temp ,null 
+7130 24628000 nrtn zero 
+
+nec_parse_nec61212_check_timeout_cb:
+7131 204070e8 call nec_read_done 
+7132 20407dbc call disable_user 
+7133 1a627e00 copy regc ,pdata 
+7134 20207d79 branch callback_func 
+
+nec_check_pulse_range_legal_default_deviation:
+7135 6a40c435 fetchr regb ,1 ,mem_nec_decode_error_value 
+
+nec_check_pulse_range_legal:
+7136 18423000 copy temp ,regd 
+7137 9a4fa400 imul32 regb ,regb 
+7138 18438400 lshift temp ,temp 
+7139 98462200 isub temp ,rega 
+713a 2441713e ncall nec_check_pulse_range_legal_data_negative ,positive 
+713b 1a2ffe64 mul32 rega ,100 ,pdata 
+713c 9a467c00 isub regb ,null 
+713d 20600000 rtn 
+
+nec_check_pulse_range_legal_data_negative:
+713e 1a262200 sub rega ,0 ,rega 
+713f 20600000 rtn 
+
+function_g2:
+7140 44f1c01c bpatch patch1c_3 ,mem_patch1c 
+7141 70023050 jam 80 ,mem_aes_cmac_data_length 
+7142 d8a00231 arg mem_dat ,contw 
+7143 d8c042ab arg mem_le_srand ,contr 
+7144 20407c8f call memcpy16 
+7145 d8c0448f arg mem_sc_pubkey_local_x_256 ,contr 
+7146 20407c8d call memcpy32 
+7147 d8c005fe arg mem_le_pubkey_remote_x_256 ,contr 
+7148 20407c8d call memcpy32 
+7149 204071fb call inverse_memdat 
+714a d8c00158 arg mem_le_mrand ,contr 
+714b 204071f6 call store_inverse_k 
+714c 204071c1 call function_aes_cmac 
+714d d8a006d1 arg mem_aes_cmac_temp ,contw 
+714e 204071f2 call load_inverse_result 
+714f 580f4240 setarg 1000000 
+7150 1fe22200 copy pdata ,rega 
+7151 6fe206d1 fetch 4 ,mem_aes_cmac_temp 
+7152 9a26fc00 idiv rega 
+7153 20407d62 call wait_div_end 
+7154 18077e00 remainder pdata 
+7155 67e205fa store 4 ,mem_gkey 
+7156 20600000 rtn 
+
+function_f6_eb:
+7157 70023041 jam 65 ,mem_aes_cmac_data_length 
+7158 d8a00231 arg mem_dat ,contw 
+7159 204071a6 call store_addr_common_a 
+715a 204071a1 call store_addr_common_b 
+715b 6fe1c2c5 fetch 3 ,mem_le_pres + 1 
+715c e7e18005 istore 3 ,contw 
+715d 20407167 call get_r 
+715e d8c00158 arg mem_le_mrand ,contr 
+715f 20407c8f call memcpy16 
+7160 d8c042ab arg mem_le_srand ,contr 
+7161 20407c8f call memcpy16 
+7162 204071fb call inverse_memdat 
+7163 d8c006f1 arg mem_le_mackey ,contr 
+7164 d8a006a1 arg mem_aes_cmac_k ,contw 
+7165 20407c8f call memcpy16 
+7166 202071c1 branch function_aes_cmac 
+
+get_r:
+7167 6fe242ff fetch 4 ,mem_le_tk 
+7168 e7e20005 istore 4 ,contw 
+7169 20407c9b call memset0_4 
+716a 20207c9a branch memset0_8 
+
+function_f6_ea:
+716b 44f2401c bpatch patch1c_4 ,mem_patch1c 
+716c 70023041 jam 65 ,mem_aes_cmac_data_length 
+716d d8a00231 arg mem_dat ,contw 
+716e 204071a1 call store_addr_common_b 
+716f 204071a6 call store_addr_common_a 
+7170 6fe1c2be fetch 3 ,mem_le_preq + 1 
+7171 e7e18005 istore 3 ,contw 
+7172 20407167 call get_r 
+7173 d8c042ab arg mem_le_srand ,contr 
+7174 20407c8f call memcpy16 
+7175 d8c00158 arg mem_le_mrand ,contr 
+7176 20407c8f call memcpy16 
+7177 204071fb call inverse_memdat 
+7178 d8c006f1 arg mem_le_mackey ,contr 
+7179 d8a006a1 arg mem_aes_cmac_k ,contw 
+717a 20407c8f call memcpy16 
+717b 204071c1 call function_aes_cmac 
+717c d8a006d1 arg mem_aes_cmac_temp ,contw 
+717d 202071f2 branch load_inverse_result 
+
+function_f5:
+717e 70023020 jam 32 ,mem_aes_cmac_data_length 
+717f d8c0063e arg mem_le_dhkey_256 ,contr 
+7180 d8a00231 arg mem_dat ,contw 
+7181 20407c8d call memcpy32 
+7182 204071fb call inverse_memdat 
+7183 d8c005e9 arg mem_le_slat ,contr 
+7184 204071f6 call store_inverse_k 
+7185 204071c1 call function_aes_cmac 
+7186 d8a006a1 arg mem_aes_cmac_k ,contw 
+7187 20407375 call store_aes_result 
+7188 d8400001 arg 1 ,temp 
+7189 20407190 call function_f5_common 
+718a d8a0428a arg mem_le_ltk ,contw 
+718b 204071f2 call load_inverse_result 
+718c d8400000 arg 0 ,temp 
+718d 20407190 call function_f5_common 
+718e d8a006f1 arg mem_le_mackey ,contw 
+718f 20207375 branch store_aes_result 
+
+function_f5_common:
+7190 44f2c01c bpatch patch1c_5 ,mem_patch1c 
+7191 70023035 jam 53 ,mem_aes_cmac_data_length 
+7192 58000100 setarg 0x100 
+7193 67e10231 store 2 ,mem_dat 
+7194 204071a1 call store_addr_common_b 
+7195 204071a6 call store_addr_common_a 
+7196 d8c042ab arg mem_le_srand ,contr 
+7197 20407c8f call memcpy16 
+7198 d8c00158 arg mem_le_mrand ,contr 
+7199 20407c8f call memcpy16 
+719a 58006c65 setarg 0x6c65 
+719b e7e10005 istore 2 ,contw 
+719c 58006274 setarg 0x6274 
+719d e7e10005 istore 2 ,contw 
+719e e0408005 istoret 1 ,contw 
+719f 204071fb call inverse_memdat 
+71a0 202071c1 branch function_aes_cmac 
+
+store_addr_common_b:
+71a1 6fe342db fetch 6 ,mem_le_lap 
+71a2 e7e30005 istore 6 ,contw 
+71a3 6fe0c2d2 fetch 1 ,mem_le_conn_own_addr_type 
+71a4 e7e08005 istore 1 ,contw 
+71a5 20600000 rtn 
+
+store_addr_common_a:
+71a6 6fe30178 fetch 6 ,mem_le_plap 
+71a7 e7e30005 istore 6 ,contw 
+71a8 6fe0c2cb fetch 1 ,mem_le_conn_peer_addr_type 
+71a9 e7e08005 istore 1 ,contw 
+71aa 20600000 rtn 
+
+function_f4_ca:
+71ab 70023041 jam 65 ,mem_aes_cmac_data_length 
+71ac 6fe0c4d0 fetch 1 ,mem_passkey_1bit 
+71ad 67e08231 store 1 ,mem_dat 
+71ae d8c0448f arg mem_sc_pubkey_local_x_256 ,contr 
+71af 20407c8d call memcpy32 
+71b0 d8c005fe arg mem_le_pubkey_remote_x_256 ,contr 
+71b1 20407c8d call memcpy32 
+71b2 204071fb call inverse_memdat 
+71b3 d8c00158 arg mem_le_mrand ,contr 
+71b4 204071f6 call store_inverse_k 
+71b5 202071c1 branch function_aes_cmac 
+
+function_f4_cb:
+71b6 70023041 jam 65 ,mem_aes_cmac_data_length 
+71b7 6fe0c4d0 fetch 1 ,mem_passkey_1bit 
+71b8 67e08231 store 1 ,mem_dat 
+71b9 d8c005fe arg mem_le_pubkey_remote_x_256 ,contr 
+71ba 20407c8d call memcpy32 
+71bb d8c0448f arg mem_sc_pubkey_local_x_256 ,contr 
+71bc 20407c8d call memcpy32 
+71bd 204071fb call inverse_memdat 
+71be d8c042ab arg mem_le_srand ,contr 
+71bf 204071f6 call store_inverse_k 
+71c0 202071c1 branch function_aes_cmac 
+
+function_aes_cmac:
+71c1 44f3401c bpatch patch1c_6 ,mem_patch1c 
+71c2 20407210 call function_aes_cmac_generate_subkey 
+71c3 6fe08230 fetch 1 ,mem_aes_cmac_data_length 
+71c4 1fe20400 copy pdata ,temp 
+
+function_ceil16:
+71c5 1fe0fe0f increase 15 ,pdata 
+71c6 1ff1fe00 rshift4 pdata ,pdata 
+71c7 1fe22400 copy pdata ,regb 
+71c8 203a71d3 branch function_aes_cmac_set_flag_0_balnk ,blank 
+71c9 18417e0f and temp ,0x0f ,pdata 
+71ca 243a71d6 nbranch function_aes_cmac_set_flag_0 ,blank 
+71cb da6006b1 arg mem_aes_cmac_k1 ,regc 
+71cc dfe00231 arg mem_dat ,pdata 
+71cd 1fe0fff0 increase -16 ,pdata 
+71ce 9840a200 iadd temp ,rega 
+71cf d8a006e1 arg mem_aes_cmac_m_last ,contw 
+71d0 df200004 arg 4 ,loopcnt 
+71d1 20407ca9 call xor_loop 
+71d2 202071e1 branch function_aes_cmac_aes 
+
+function_aes_cmac_set_flag_0_balnk:
+71d3 da400001 arg 1 ,regb 
+71d4 da200000 arg 0 ,rega 
+71d5 202071d7 branch function_aes_cmac_set_flag_0_common 
+
+function_aes_cmac_set_flag_0:
+71d6 1841220f and temp ,0x0f ,rega 
+
+function_aes_cmac_set_flag_0_common:
+71d7 dfe00231 arg mem_dat ,pdata 
+71d8 9840fe00 iadd temp ,pdata 
+71d9 9a260c00 isub rega ,contr 
+71da d8a006d1 arg mem_aes_cmac_temp ,contw 
+71db 20407236 call function_aes_cmac_padding 
+71dc da6006c1 arg mem_aes_cmac_k2 ,regc 
+71dd da2006d1 arg mem_aes_cmac_temp ,rega 
+71de d8a006e1 arg mem_aes_cmac_m_last ,contw 
+71df df200004 arg 4 ,loopcnt 
+71e0 20407ca9 call xor_loop 
+
+function_aes_cmac_aes:
+71e1 2040736f call aes_clear_data 
+71e2 204072da call aes_init 
+71e3 d8c00231 arg mem_dat ,contr 
+
+function_aes_cmac_aes_loop:
+71e4 1a40a5ff increase -1 ,regb 
+71e5 1a427e00 deposit regb 
+71e6 203a71ea branch function_aes_cmac_aes_loop_end ,blank 
+71e7 20407361 call load_data128 
+71e8 204072d4 call do_aes_cbc 
+71e9 202071e4 branch function_aes_cmac_aes_loop 
+
+function_aes_cmac_aes_loop_end:
+71ea d8a006d1 arg mem_aes_cmac_temp ,contw 
+71eb 20407375 call store_aes_result 
+71ec d8c006e1 arg mem_aes_cmac_m_last ,contr 
+71ed 20407361 call load_data128 
+71ee 204072da call aes_init 
+71ef d8c006d1 arg mem_aes_cmac_temp ,contr 
+71f0 20407361 call load_data128 
+71f1 202072d4 branch do_aes_cbc 
+
+load_inverse_result:
+71f2 18a22200 copy contw ,rega 
+71f3 20407375 call store_aes_result 
+71f4 df200010 arg 16 ,loopcnt 
+71f5 20207cb1 branch inverse_data 
+
+store_inverse_k:
+71f6 d8a006a1 arg mem_aes_cmac_k ,contw 
+71f7 20407c8f call memcpy16 
+
+inverse_k:
+71f8 df200010 arg 16 ,loopcnt 
+71f9 da2006a1 arg mem_aes_cmac_k ,rega 
+71fa 20207cb1 branch inverse_data 
+
+inverse_memdat:
+71fb 6fe08230 fetch 1 ,mem_aes_cmac_data_length 
+71fc 1fe27200 copy pdata ,loopcnt 
+71fd da200231 arg mem_dat ,rega 
+71fe 20207cb1 branch inverse_data 
+
+bn_lshift_0_inverse:
+71ff efe08011 ifetch 1 ,rega 
+7200 1fe3fe00 lshift pdata ,pdata 
+7201 2a6ffe00 isolate1 0 ,regc 
+7202 7920fe00 setflag true ,0 ,pdata 
+7203 2feffe08 isolate1 8 ,pdata 
+7204 7920a600 setflag true ,0 ,regc 
+7205 e7e08011 istore 1 ,rega 
+7206 1a20a3ff increase -1 ,rega 
+7207 c20071ff loop bn_lshift_0_inverse 
+7208 20600000 rtn 
+
+function_aes_cmac_k1_inverse:
+7209 da2006b1 arg mem_aes_cmac_k1 ,rega 
+
+function_aes_cmac_inverse_common:
+720a 1a20a20f increase 15 ,rega 
+720b 18007210 force 16 ,loopcnt 
+720c 18002600 force 0 ,regc 
+720d 202071ff branch bn_lshift_0_inverse 
+
+function_aes_cmac_k2_inverse:
+720e da2006c1 arg mem_aes_cmac_k2 ,rega 
+720f 2020720a branch function_aes_cmac_inverse_common 
+
+function_aes_cmac_generate_subkey:
+7210 d8c006a1 arg mem_aes_cmac_k ,contr 
+7211 2040735f call load_key 
+7212 18007008 force regidx_xor ,regext_index 
+7213 20407370 call aes_clear 
+7214 2040736f call aes_clear_data 
+7215 204072d1 call do_aes_ocb 
+7216 d8a006b1 arg mem_aes_cmac_k1 ,contw 
+7217 20407375 call store_aes_result 
+
+function_aes_cmac_k1:
+7218 44f3c01c bpatch patch1c_7 ,mem_patch1c 
+7219 6fe086b1 fetch 1 ,mem_aes_cmac_k1 
+721a 2feffe07 isolate1 7 ,pdata 
+721b 2420f221 nbranch function_aes_cmac_k1_0 ,true 
+721c 20407209 call function_aes_cmac_k1_inverse 
+721d da6006b1 arg mem_aes_cmac_k1 ,regc 
+721e d8a006b1 arg mem_aes_cmac_k1 ,contw 
+721f 2040722b call function_aes_cmac_xor_rb 
+7220 20207222 branch function_aes_cmac_k2 
+
+function_aes_cmac_k1_0:
+7221 20407209 call function_aes_cmac_k1_inverse 
+
+function_aes_cmac_k2:
+7222 d8c006b1 arg mem_aes_cmac_k1 ,contr 
+7223 d8a006c1 arg mem_aes_cmac_k2 ,contw 
+7224 20407c8f call memcpy16 
+7225 6fe086c1 fetch 1 ,mem_aes_cmac_k2 
+7226 2feffe07 isolate1 7 ,pdata 
+7227 2420f20e nbranch function_aes_cmac_k2_inverse ,true 
+7228 2040720e call function_aes_cmac_k2_inverse 
+7229 da6006c1 arg mem_aes_cmac_k2 ,regc 
+722a d8a006c1 arg mem_aes_cmac_k2 ,contw 
+
+function_aes_cmac_xor_rb:
+722b df200003 arg 3 ,loopcnt 
+
+function_aes_cmac_xor_rb_loop:
+722c d8400000 arg 0 ,temp 
+722d 20407232 call function_aes_cmac_xor_loop_common 
+722e 1a60a604 increase 4 ,regc 
+722f c200722c loop function_aes_cmac_xor_rb_loop 
+7230 d8408700 arg 0x8700 ,temp 
+7231 18500400 lshift16 temp ,temp 
+
+function_aes_cmac_xor_loop_common:
+7232 efe20013 ifetch 4 ,regc 
+7233 9842fe00 ixor temp ,pdata 
+7234 e7e20005 istore 4 ,contw 
+7235 20600000 rtn 
+
+function_aes_cmac_padding:
+7236 44f4401d bpatch patch1d_0 ,mem_patch1d 
+7237 df200010 arg 16 ,loopcnt 
+7238 dfe00000 arg 0 ,pdata 
+
+function_aes_cmac_padding_loop:
+7239 9a267c00 isub rega ,null 
+723a 2022f241 branch function_aes_cmac_padding_beq_length ,zero 
+723b 20217244 branch function_aes_cmac_padding_big_length ,positive 
+723c e8408006 ifetcht 1 ,contr 
+723d e0408005 istoret 1 ,contw 
+
+function_aes_cmac_padding_loop2:
+723e 1fe0fe01 increase 1 ,pdata 
+723f c2007239 loop function_aes_cmac_padding_loop 
+7240 20600000 rtn 
+
+function_aes_cmac_padding_beq_length:
+7241 d8400080 arg 0x80 ,temp 
+
+function_aes_cmac_padding_common:
+7242 e0408005 istoret 1 ,contw 
+7243 2020723e branch function_aes_cmac_padding_loop2 
+
+function_aes_cmac_padding_big_length:
+7244 d8400000 arg 0 ,temp 
+7245 20207242 branch function_aes_cmac_padding_common 
+
+concatenate_temp24:
+7246 184d0400 lshift8 temp ,temp 
+
+concatenate_temp16:
+7247 18500400 lshift16 temp ,temp 
+7248 98418400 ior temp ,temp 
+7249 20600000 rtn 
+
+generate_stk:
+724a 44f4c01d bpatch patch1d_1 ,mem_patch1d 
+724b 20407306 call function_s1 
+724c d8a0428a arg mem_le_ltk ,contw 
+724d 20207375 branch store_aes_result 
+
+authenticate_rconfirm:
+724e d8a042ab arg mem_le_srand ,contw 
+724f 2034f251 branch authenticate_mconfirm ,master 
+7250 d8a00158 arg mem_le_mrand ,contw 
+
+authenticate_mconfirm:
+7251 18c22200 copy contr ,rega 
+7252 20407c8f call memcpy16 
+7253 2040731b call function_c1 
+7254 d8c0429b arg mem_le_rconfirm ,contr 
+7255 2020738e branch compare_res 
+
+generate_confirm:
+7256 da200158 arg mem_le_mrand ,rega 
+7257 2034f259 branch generate_mrand ,master 
+7258 da2042ab arg mem_le_srand ,rega 
+
+generate_mrand:
+7259 1a220a00 copy rega ,contw 
+725a 20407de7 call generate_random 
+725b 2020731b branch function_c1 
+
+generate_sk:
+725c d8c042e5 arg mem_le_skdm ,contr 
+725d 20407361 call load_data128 
+725e d8c0428a arg mem_le_ltk ,contr 
+725f 20407362 call load_regext 
+7260 18006c38 force 0x38 ,aes_ctrl 
+7261 18006c00 force 0x0 ,aes_ctrl 
+7262 204072cf call wait_aes 
+7263 d8a001a8 arg mem_le_sk ,contw 
+7264 20207375 branch store_aes_result 
+
+ccm_b0:
+7265 18007008 force regidx_xor ,regext_index 
+7266 18007e49 force 0x49 ,pdata 
+7267 2020726c branch iv_common 
+
+first_block_counter:
+7268 18007e49 force 0x49 ,pdata 
+7269 2020726b branch first_block 
+
+first_block_data:
+726a 18007e01 force 1 ,pdata 
+
+first_block:
+726b 18007000 force regidx_data ,regext_index 
+
+iv_common:
+726c 184d5e00 lshift8 temp ,regext 
+726d 9de1de00 ior regext ,regext 
+726e 1f00f001 increase 1 ,regext_index 
+726f 184cde00 rshift8 temp ,regext 
+7270 1df15e00 rshift16 regext ,regext 
+7271 6fe1445e fetch 2 ,mem_ccm_iv 
+7272 1ff07e00 lshift16 pdata ,pdata 
+7273 9de1de00 ior regext ,regext 
+7274 1f00f001 increase 1 ,regext_index 
+7275 ede20006 ifetchr regext ,4 ,contr 
+7276 1f00f001 increase 1 ,regext_index 
+7277 efe10006 ifetch 2 ,contr 
+7278 1a30de00 byteswap rega ,regext 
+7279 1df05e00 lshift16 regext ,regext 
+727a 9de1de00 ior regext ,regext 
+727b 1f00f001 increase 1 ,regext_index 
+727c 20600000 rtn 
+
+generate_mic:
+727d 1a608c01 add regc ,1 ,contr 
+727e efe08006 ifetch 1 ,contr 
+727f 98002200 iforce rega 
+7280 20407268 call first_block_counter 
+7281 204072d1 call do_aes_ocb 
+7282 18007000 force regidx_data ,regext_index 
+7283 efe08013 ifetch 1 ,regc 
+7284 1fe17e03 and_into 0x3 ,pdata 
+7285 1ff05e00 lshift16 pdata ,regext 
+7286 79205e08 set1 8 ,regext 
+7287 2040736a call clear_hidata 
+7288 204072d4 call do_aes_cbc 
+7289 1a227200 copy rega ,loopcnt 
+728a 1a608c02 add regc ,2 ,contr 
+728b 20407349 call padding_data 
+
+generate_mic_loop:
+728c 20407353 call aes_load_data 
+728d 204072d4 call do_aes_cbc 
+728e 1f227e00 deposit loopcnt 
+728f 203a7291 branch generate_mic_end ,blank 
+7290 2020728c branch generate_mic_loop 
+
+generate_mic_end:
+7291 1800700c force regidx_result ,regext_index 
+7292 1de27e00 deposit regext 
+7293 67e20150 store 4 ,mem_le_mic 
+7294 20600000 rtn 
+
+aes_crypt_data:
+7295 1a20a201 increase 1 ,rega 
+7296 2040726a call first_block_data 
+7297 1a620c00 copy regc ,contr 
+7298 2040735d call aes_load_xor 
+7299 204072d7 call do_aes_ctr 
+729a 2040737c call store_enc_data 
+729b 1a60a610 increase 16 ,regc 
+729c 1a40a5f0 increase -16 ,regb 
+729d 20217295 branch aes_crypt_data ,positive 
+729e 20600000 rtn 
+
+le_encrypt_new_start:
+729f 204072c4 call ccm_init_common 
+72a0 44f5401d bpatch patch1d_2 ,mem_patch1d 
+72a1 70806c00 jam 0 ,core_ccm_aad0 
+72a2 70806d01 jam 1 ,core_ccm_aad1 
+72a3 6fe0c169 fetch 1 ,mem_le_txheader 
+72a4 1fe17e03 and_into 0x3 ,pdata 
+72a5 67f0806e store 1 ,core_ccm_aad2 
+72a6 6fe1068f fetch 2 ,mem_contr 
+72a7 67f10068 store 2 ,core_ccm_input_playload_addr 
+72a8 5800416b setarg mem_le_txpayload 
+72a9 67f1006a store 2 ,core_ccm_output_playload_addr 
+72aa 6a20c16a fetchr rega ,1 ,mem_le_txlen 
+72ab 684ac450 fetcht 5 ,mem_ccm_pcnt_tx 
+72ac 20407265 call ccm_b0 
+72ad 70800a02 jam 2 ,core_ccm_ctrl 
+72ae 70800a03 jam 3 ,core_ccm_ctrl 
+72af 6fe0c16a fetch 1 ,mem_le_txlen 
+72b0 67f100c0 store 2 ,core_ccm_inptr 
+72b1 1fe0fe04 increase 4 ,pdata 
+72b2 67e0c16a store 1 ,mem_le_txlen 
+72b3 6fe2c450 fetch 5 ,mem_ccm_pcnt_tx 
+72b4 1fe0fe01 increase 1 ,pdata 
+72b5 793ffe27 set0 le_ccm_directionbit ,pdata 
+72b6 67e2c450 store 5 ,mem_ccm_pcnt_tx 
+72b7 20600000 rtn 
+
+ccm_wait_enc:
+72b8 6ff1011a fetch 2 ,core_ccm_outptr 
+72b9 98467c00 isub temp ,null 
+72ba 20628000 rtn zero 
+72bb 247a0000 nrtn blank 
+72bc 202072b8 branch ccm_wait_enc 
+
+ccm_check_enc_done:
+72bd 6ff08108 fetch 1 ,core_misc_status 
+72be c303235a bbit0 6 ,assert 
+
+ccm_enc_done:
+72bf 5800416b setarg mem_le_txpayload 
+72c0 98408a00 iadd temp ,contw 
+72c1 df00000c arg regidx_result ,regext_index 
+72c2 e5e20005 istorer regext ,4 ,contw 
+72c3 202072cd branch ccm_ctrl_clr 
+
+ccm_init_common:
+72c4 44f5c01d bpatch patch1d_3 ,mem_patch1d 
+72c5 1800700c force regidx_result ,regext_index 
+72c6 20407370 call aes_clear 
+72c7 2040736f call aes_clear_data 
+72c8 58000000 setarg 0 
+72c9 67f100c0 store 2 ,core_ccm_inptr 
+72ca 20600000 rtn 
+
+wait_ccm_done:
+72cb 6ff08108 fetch 1 ,core_misc_status 
+72cc c30372cb bbit0 6 ,wait_ccm_done 
+
+ccm_ctrl_clr:
+72cd 70800a00 jam 0 ,core_ccm_ctrl 
+72ce 20600000 rtn 
+
+wait_aes:
+72cf 243bf2cf nbranch wait_aes ,aes_ready 
+72d0 20600000 rtn 
+
+do_aes_ocb:
+72d1 18006c30 force 0x30 ,aes_ctrl 
+72d2 18006c00 force 0x0 ,aes_ctrl 
+72d3 202072cf branch wait_aes 
+
+do_aes_cbc:
+72d4 18006c32 force 0x32 ,aes_ctrl 
+72d5 18006c02 force 0x2 ,aes_ctrl 
+72d6 202072cf branch wait_aes 
+
+do_aes_ctr:
+72d7 18006c34 force 0x34 ,aes_ctrl 
+72d8 18006c04 force 0x4 ,aes_ctrl 
+72d9 202072cf branch wait_aes 
+
+aes_init:
+72da 18006c01 force 1 ,aes_ctrl 
+72db 18006c00 force 0 ,aes_ctrl 
+72dc 20600000 rtn 
+
+wait_keyinit_done:
+72dd 6ff08155 fetch 1 ,core_aes_decode_key_init 
+72de c30172dd bbit0 2 ,wait_keyinit_done 
+72df 20600000 rtn 
+
+dec_key_initial:
+72e0 67f100d2 store 2 ,core_keybuf_saddr 
+72e1 18006cc0 force 0xc0 ,aes_ctrl 
+72e2 18006c80 force 0x80 ,aes_ctrl 
+72e3 202072dd branch wait_keyinit_done 
+
+do_aes_ecb_dec:
+72e4 18007000 force regidx_data ,regext_index 
+72e5 1a420c00 copy regb ,contr 
+72e6 18007204 force 4 ,loopcnt 
+72e7 204072f3 call aes_ecb_dec_loop 
+72e8 18006d80 force 0x180 ,aes_ctrl 
+72e9 18006c80 force 0x80 ,aes_ctrl 
+72ea 204072cf call wait_aes 
+
+ecb_dec_generate:
+72eb 1800700c force regidx_result ,regext_index 
+72ec 1a620a00 copy regc ,contw 
+72ed 18007204 force 4 ,loopcnt 
+
+ecb_dec_generate_loop:
+72ee 1de27e00 copy regext ,pdata 
+72ef e7e20005 istore 4 ,contw 
+72f0 1f00f001 increase 1 ,regext_index 
+72f1 c20072ee loop ecb_dec_generate_loop 
+72f2 20600000 rtn 
+
+aes_ecb_dec_loop:
+72f3 efe10006 ifetch 2 ,contr 
+72f4 e8410006 ifetcht 2 ,contr 
+72f5 18500400 lshift16 temp ,temp 
+72f6 9841de00 ior temp ,regext 
+72f7 1f00f001 increase 1 ,regext_index 
+72f8 c20072f3 loop aes_ecb_dec_loop 
+72f9 20600000 rtn 
+
+do_aes_cbc_dec:
+72fa 18007008 force regidx_xor ,regext_index 
+72fb 1a220c00 copy rega ,contr 
+72fc 18007204 force 4 ,loopcnt 
+72fd 204072f3 call aes_ecb_dec_loop 
+72fe 18007000 force regidx_data ,regext_index 
+72ff 1a420c00 copy regb ,contr 
+7300 18007204 force 4 ,loopcnt 
+7301 204072f3 call aes_ecb_dec_loop 
+7302 18006d82 force 0x182 ,aes_ctrl 
+7303 18006c82 force 0x82 ,aes_ctrl 
+7304 204072cf call wait_aes 
+7305 202072eb branch ecb_dec_generate 
+
+function_s1:
+7306 18007000 force regidx_data ,regext_index 
+7307 6fe20158 fetch 4 ,mem_le_mrand 
+7308 98005e00 iforce regext 
+7309 1f00f001 increase 1 ,regext_index 
+730a efe20006 ifetch 4 ,contr 
+730b 98005e00 iforce regext 
+730c 1f00f001 increase 1 ,regext_index 
+730d 6fe242ab fetch 4 ,mem_le_srand 
+730e 98005e00 iforce regext 
+730f 1f00f001 increase 1 ,regext_index 
+7310 efe20006 ifetch 4 ,contr 
+7311 98005e00 iforce regext 
+7312 1f00f001 increase 1 ,regext_index 
+7313 20407370 call aes_clear 
+7314 1f00f1fc increase -4 ,regext_index 
+7315 6fe242ff fetch 4 ,mem_le_tk 
+7316 1fe25e00 copy pdata ,regext 
+7317 1f00f004 increase 4 ,regext_index 
+7318 18006c38 force 0x38 ,aes_ctrl 
+7319 18006c08 force 0x8 ,aes_ctrl 
+731a 202072cf branch wait_aes 
+
+function_c1:
+731b 44f6401d bpatch patch1d_4 ,mem_patch1d 
+731c 6fe342db fetch 6 ,mem_le_lap 
+731d 684b0178 fetcht 6 ,mem_le_plap 
+731e 2034f321 branch function_c1_master ,master 
+731f 6fe30178 fetch 6 ,mem_le_plap 
+7320 684b42db fetcht 6 ,mem_le_lap 
+
+function_c1_master:
+7321 18007008 force regidx_xor ,regext_index 
+7322 18425e00 copy temp ,regext 
+7323 1f00f001 increase 1 ,regext_index 
+7324 184f5e00 rshift32 temp ,regext 
+7325 1ff07e00 lshift16 pdata ,pdata 
+7326 9de1de00 ior regext ,regext 
+7327 1f00f001 increase 1 ,regext_index 
+7328 1fef5e00 rshift32 pdata ,regext 
+7329 1f00f001 increase 1 ,regext_index 
+732a 18005e00 force 0 ,regext 
+732b 18007e00 force 0 ,pdata 
+732c 6fe0c2cb fetch 1 ,mem_le_conn_peer_addr_type 
+732d 6848c38c fetcht 1 ,mem_le_adv_own_addr_type 
+732e 2434f331 nbranch function_c1_irat ,master 
+732f 6fe0c2d2 fetch 1 ,mem_le_conn_own_addr_type 
+7330 6848c2cb fetcht 1 ,mem_le_conn_peer_addr_type 
+
+function_c1_irat:
+7331 67e0c2bb store 1 ,mem_le_iat 
+7332 6048c2bc storet 1 ,mem_le_rat 
+7333 18007000 force regidx_data ,regext_index 
+7334 da4042bb arg mem_le_iat ,regb 
+7335 18007204 force 4 ,loopcnt 
+
+function_c1_loop1:
+7336 efe20011 ifetch 4 ,rega 
+7337 e8420012 ifetcht 4 ,regb 
+7338 9842de00 ixor temp ,regext 
+7339 1f00f001 increase 1 ,regext_index 
+733a 1a20a204 increase 4 ,rega 
+733b 1a40a404 increase 4 ,regb 
+733c c2007336 loop function_c1_loop1 
+733d 20407370 call aes_clear 
+733e 1f00f1fc increase -4 ,regext_index 
+733f 6fe242ff fetch 4 ,mem_le_tk 
+7340 1fe25e00 copy pdata ,regext 
+7341 1f00f004 increase 4 ,regext_index 
+7342 18006c38 force 0x38 ,aes_ctrl 
+7343 18006c0c force 0xc ,aes_ctrl 
+7344 204072cf call wait_aes 
+7345 2040736f call aes_clear_data 
+7346 18006c3a force 0x3a ,aes_ctrl 
+7347 18006c08 force 0x8 ,aes_ctrl 
+7348 202072cf branch wait_aes 
+
+padding_data:
+7349 2f200600 compare 0 ,loopcnt ,3 
+734a 20608000 rtn true 
+734b 18c27e00 deposit contr 
+734c 9f208a00 iadd loopcnt ,contw 
+734d 18007e00 force 0 ,pdata 
+
+padding_loop:
+734e e7e08005 istore 1 ,contw 
+734f 1f20f201 increase 1 ,loopcnt 
+7350 2f200600 compare 0 ,loopcnt ,3 
+7351 20608000 rtn true 
+7352 2020734e branch padding_loop 
+
+aes_load_data:
+7353 18007000 force regidx_data ,regext_index 
+
+load_data_loop:
+7354 1f227e00 deposit loopcnt 
+7355 203a7358 branch load_data_padding ,blank 
+7356 efe20006 ifetch 4 ,contr 
+7357 1f20f3fc increase -4 ,loopcnt 
+
+load_data_padding:
+7358 98005e00 iforce regext 
+7359 1f00f001 increase 1 ,regext_index 
+735a 2f001e04 compare regidx_key ,regext_index ,0xf 
+735b 20608000 rtn true 
+735c 20207354 branch load_data_loop 
+
+aes_load_xor:
+735d 18007008 force regidx_xor ,regext_index 
+735e 20207362 branch load_regext 
+
+load_key:
+735f 18007004 force regidx_key ,regext_index 
+7360 20207362 branch load_regext 
+
+load_data128:
+7361 18007000 force regidx_data ,regext_index 
+
+load_regext:
+7362 18007204 force 4 ,loopcnt 
+
+load_regext_loop:
+7363 efe20006 ifetch 4 ,contr 
+7364 98005e00 iforce regext 
+7365 1f00f001 increase 1 ,regext_index 
+7366 c2007363 loop load_regext_loop 
+7367 20600000 rtn 
+
+load_sk:
+7368 d8c001a8 arg mem_le_sk ,contr 
+7369 2020735f branch load_key 
+
+clear_hidata:
+736a 18007204 force 4 ,loopcnt 
+736b 20207372 branch clear_data_rest 
+
+regext_clear:
+736c 18007000 force 0 ,regext_index 
+736d 18007210 force 16 ,loopcnt 
+736e 20207371 branch clear_loop 
+
+aes_clear_data:
+736f 18007000 force regidx_data ,regext_index 
+
+aes_clear:
+7370 18007204 force 4 ,loopcnt 
+
+clear_loop:
+7371 18005e00 force 0 ,regext 
+
+clear_data_rest:
+7372 1f00f001 increase 1 ,regext_index 
+7373 c2007371 loop clear_loop 
+7374 20600000 rtn 
+
+store_aes_result:
+7375 1800700c force regidx_result ,regext_index 
+7376 18007204 force 4 ,loopcnt 
+
+send_aes_result_loop:
+7377 1de27e00 deposit regext 
+7378 e7e20005 istore 4 ,contw 
+7379 1f00f001 increase 1 ,regext_index 
+737a c2007377 loop send_aes_result_loop 
+737b 20600000 rtn 
+
+store_enc_data:
+737c 1800700c force regidx_result ,regext_index 
+737d 1a620a00 copy regc ,contw 
+737e 1a40f201 add regb ,1 ,loopcnt 
+737f 1f267c0f sub loopcnt ,15 ,null 
+7380 20217382 branch store_enc_loop ,positive 
+7381 18007210 force 16 ,loopcnt 
+
+store_enc_loop:
+7382 1de27e00 deposit regext 
+7383 1f267c03 sub loopcnt ,3 ,null 
+7384 2021738a branch store_enc_byte ,positive 
+7385 e7e20005 istore 4 ,contw 
+7386 1f20f3fc increase -4 ,loopcnt 
+7387 20628000 rtn zero 
+7388 1f00f001 increase 1 ,regext_index 
+7389 20207382 branch store_enc_loop 
+
+store_enc_byte:
+738a e7e08005 istore 1 ,contw 
+738b 1fecfe00 rshift8 pdata ,pdata 
+738c c200738a loop store_enc_byte 
+738d 20600000 rtn 
+
+compare_res:
+738e 1800700c force regidx_result ,regext_index 
+738f 18007204 force 4 ,loopcnt 
+
+compare_res_loop:
+7390 efe20006 ifetch 4 ,contr 
+7391 9de67c00 isub regext ,null 
+7392 24628000 nrtn zero 
+7393 1f00f001 increase 1 ,regext_index 
+7394 c2007390 loop compare_res_loop 
+7395 20207db8 branch enable_zero 
+
+enable_authrom:
+7396 6ff08050 fetch 1 ,core_clkoff 
+7397 793ffe00 set0 clock_off_auth_rom ,pdata 
+7398 67f08050 store 1 ,core_clkoff 
+7399 20600000 rtn 
+
+disable_authrom:
+739a 6ff08050 fetch 1 ,core_clkoff 
+739b 79207e00 set1 clock_off_auth_rom ,pdata 
+739c 67f08050 store 1 ,core_clkoff 
+739d 20600000 rtn 
+
+init_memp:
+739e d8a004d1 arg mem_p ,contw 
+739f 3803ffff setsect 0 ,0x3ffff 
+73a0 3807ffff setsect 1 ,0x3ffff 
+73a1 380bffff setsect 2 ,0x3ffff 
+73a2 380ffbff setsect 3 ,0x3fbff 
+73a3 e7e48005 istore 9 ,contw 
+73a4 3803ffff setsect 0 ,0x3ffff 
+73a5 3807ffff setsect 1 ,0x3ffff 
+73a6 380bffff setsect 2 ,0x3ffff 
+73a7 380fffff setsect 3 ,0x3ffff 
+73a8 e7e48005 istore 9 ,contw 
+73a9 3803ffff setsect 0 ,0x3ffff 
+73aa 3807ffff setsect 1 ,0x3ffff 
+73ab 380bcfff setsect 2 ,0x3cfff 
+73ac 380fffff setsect 3 ,0x3ffff 
+73ad e7e48005 istore 9 ,contw 
+73ae 3803ffff setsect 0 ,0x3ffff 
+73af 3807ffff setsect 1 ,0x3ffff 
+73b0 380bffef setsect 2 ,0x3ffef 
+73b1 380fffff setsect 3 ,0x3ffff 
+73b2 e7e48005 istore 9 ,contw 
+73b3 3803ffff setsect 0 ,0x3ffff 
+73b4 3807ffff setsect 1 ,0x3ffff 
+73b5 380bffff setsect 2 ,0x3ffff 
+73b6 380fffff setsect 3 ,0x3ffff 
+73b7 e7e48005 istore 9 ,contw 
+73b8 3803ffff setsect 0 ,0x3ffff 
+73b9 38066c7f setsect 1 ,0x26c7f 
+73ba 3808146b setsect 2 ,0x146b 
+73bb 380f7bb3 setsect 3 ,0x37bb3 
+73bc e7e48005 istore 9 ,contw 
+73bd 3801feb8 setsect 0 ,0x1feb8 
+73be 38050c12 setsect 1 ,0x10c12 
+73bf 380ab722 setsect 2 ,0x2b722 
+73c0 380e9fa6 setsect 3 ,0x29fa6 
+73c1 e7e48005 istore 9 ,contw 
+73c2 3800e70f setsect 0 ,0xe70f 
+73c3 38056720 setsect 1 ,0x16720 
+73c4 3808519e setsect 2 ,0x519e 
+73c5 380d9084 setsect 3 ,0x19084 
+73c6 e7e48005 istore 9 ,contw 
+73c7 38031012 setsect 0 ,0x31012 
+73c8 380760bf setsect 1 ,0x360bf 
+73c9 380bf0af setsect 2 ,0x3f0af 
+73ca 380c03d3 setsect 3 ,0x3d3 
+73cb e7e48005 istore 9 ,contw 
+73cc 3803a188 setsect 0 ,0x3a188 
+73cd 38043ad0 setsect 1 ,0x3ad0 
+73ce 380bcbf2 setsect 2 ,0x3cbf2 
+73cf 380e43d9 setsect 3 ,0x243d9 
+73d0 e7e48005 istore 9 ,contw 
+73d1 3802b030 setsect 0 ,0x2b030 
+73d2 38076a03 setsect 1 ,0x36a03 
+73d3 38091188 setsect 2 ,0x11188 
+73d4 380de520 setsect 3 ,0x1e520 
+73d5 e7e48005 istore 9 ,contw 
+73d6 3803a11e setsect 0 ,0x3a11e 
+73d7 3804fe5d setsect 1 ,0xfe5d 
+73d8 3808dd57 setsect 2 ,0xdd57 
+73d9 380dac93 setsect 3 ,0x1ac93 
+73da e7e48005 istore 9 ,contw 
+73db 380011ed setsect 0 ,0x11ed 
+73dc 380618c4 setsect 1 ,0x218c4 
+73dd 38088da7 setsect 2 ,0x8da7 
+73de 380e57ff setsect 3 ,0x257ff 
+73df e7e48005 istore 9 ,contw 
+73e0 3803192b setsect 0 ,0x3192b 
+73e1 38074641 setsect 1 ,0x34641 
+73e2 3809be0c setsect 2 ,0x1be0c 
+73e3 380f66ad setsect 3 ,0x366ad 
+73e4 e7e48005 istore 9 ,contw 
+73e5 38001f83 setsect 0 ,0x1f83 
+73e6 38055a23 setsect 1 ,0x15a23 
+73e7 380bf9b0 setsect 2 ,0x3f9b0 
+73e8 380c3949 setsect 3 ,0x3949 
+73e9 e7e48005 istore 9 ,contw 
+73ea 38013a51 setsect 0 ,0x13a51 
+73eb 380553fd setsect 1 ,0x153fd 
+73ec 380b372a setsect 2 ,0x3372a 
+73ed 380cf1bb setsect 3 ,0xf1bb 
+73ee e7e48005 istore 9 ,contw 
+73ef 3803ae85 setsect 0 ,0x3ae85 
+73f0 3805eed9 setsect 1 ,0x1eed9 
+73f1 38089e66 setsect 2 ,0x9e66 
+73f2 380c01a8 setsect 3 ,0x1a8 
+73f3 e7e40005 istore 8 ,contw 
+73f4 20600000 rtn 
+
+init_memp_256:
+73f5 d8a00569 arg mem_p_256 ,contw 
+73f6 3803ffff setsect 0 ,0x3ffff 
+73f7 3807ffff setsect 1 ,0x3ffff 
+73f8 380bffff setsect 2 ,0x3ffff 
+73f9 380fffff setsect 3 ,0x3ffff 
+73fa e7e48005 istore 9 ,contw 
+73fb 3803ffff setsect 0 ,0x3ffff 
+73fc 3804003f setsect 1 ,0x3f 
+73fd 38080000 setsect 2 ,0x0 
+73fe 380c0000 setsect 3 ,0x0 
+73ff e7e48005 istore 9 ,contw 
+7400 38000000 setsect 0 ,0x0 
+7401 38040000 setsect 1 ,0x0 
+7402 38081000 setsect 2 ,0x1000 
+7403 380c0000 setsect 3 ,0x0 
+7404 e7e48005 istore 9 ,contw 
+7405 3803ff00 setsect 0 ,0x3ff00 
+7406 3807ffff setsect 1 ,0x3ffff 
+7407 380bffcf setsect 2 ,0x3ffcf 
+7408 380fffff setsect 3 ,0x3ffff 
+7409 e7e48005 istore 9 ,contw 
+740a 3803ffff setsect 0 ,0x3ffff 
+740b 3807ffff setsect 1 ,0x3ffff 
+740c 380bffff setsect 2 ,0x3ffff 
+740d 380c03ff setsect 3 ,0x3ff 
+740e e7e48005 istore 9 ,contw 
+740f 38000000 setsect 0 ,0x0 
+7410 38040000 setsect 1 ,0x0 
+7411 38080000 setsect 2 ,0x0 
+7412 380c0000 setsect 3 ,0x0 
+7413 e7e48005 istore 9 ,contw 
+7414 38010000 setsect 0 ,0x10000 
+7415 38040000 setsect 1 ,0x0 
+7416 380bf000 setsect 2 ,0x3f000 
+7417 380fffff setsect 3 ,0x3ffff 
+7418 e7e48005 istore 9 ,contw 
+7419 380296ff setsect 0 ,0x296ff 
+741a 38062630 setsect 1 ,0x22630 
+741b 380b945d setsect 2 ,0x3945d 
+741c 380fd284 setsect 3 ,0x3d284 
+741d e7e48005 istore 9 ,contw 
+741e 380333a0 setsect 0 ,0x333a0 
+741f 38044b7a setsect 1 ,0x4b7a 
+7420 380837d8 setsect 2 ,0x37d8 
+7421 380fc9dc setsect 3 ,0x3c9dc 
+7422 e7e48005 istore 9 ,contw 
+7423 3803a440 setsect 0 ,0x3a440 
+7424 3805b958 setsect 1 ,0x1b958 
+7425 380b8bce setsect 2 ,0x38bce 
+7426 380d091f setsect 3 ,0x1091f 
+7427 e7e48005 istore 9 ,contw 
+7428 3802e12c setsect 0 ,0x2e12c 
+7429 3805f47c setsect 1 ,0x1f47c 
+742a 380b56b1 setsect 2 ,0x356b1 
+742b 380efd47 setsect 3 ,0x2fd47 
+742c e7e48005 istore 9 ,contw 
+742d 38006837 setsect 0 ,0x6837 
+742e 3806ed90 setsect 1 ,0x2ed90 
+742f 3809ecec setsect 2 ,0x1ecec 
+7430 380dacc5 setsect 3 ,0x1acc5 
+7431 e7e48005 istore 9 ,contw 
+7432 38023357 setsect 0 ,0x23357 
+7433 38058af3 setsect 1 ,0x18af3 
+7434 3808f9e1 setsect 2 ,0xf9e1 
+7435 380d29f0 setsect 3 ,0x129f0 
+7436 e7e48005 istore 9 ,contw 
+7437 3802e7eb setsect 0 ,0x2e7eb 
+7438 3807e6e3 setsect 1 ,0x3e6e3 
+7439 380be1a7 setsect 2 ,0x3e1a7 
+743a 380d0b8b setsect 3 ,0x10b8b 
+743b e7e48005 istore 9 ,contw 
+743c 38024fe3 setsect 0 ,0x24fe3 
+743d 380420ef setsect 1 ,0x20ef 
+743e 3809b5a6 setsect 2 ,0x1b5a6 
+743f 380cdc2f setsect 3 ,0xdc2f 
+7440 e7e48005 istore 9 ,contw 
+7441 38013860 setsect 0 ,0x13860 
+7442 3806bd69 setsect 1 ,0x2bd69 
+7443 3808391a setsect 2 ,0x391a 
+7444 380db222 setsect 3 ,0x1b222 
+7445 e7e48005 istore 9 ,contw 
+7446 20600000 rtn 
+
+publickey_init:
+7447 202074fc branch sp_initialize_256 
+
+sp_calc_sequence_256_check:
+7448 44f6c01d bpatch patch1d_5 ,mem_patch1d 
+7449 6fe0c46c fetch 1 ,mem_secure_connections_enable 
+744a 207a0000 rtn blank 
+744b 6fe0c46e fetch 1 ,mem_sc_local_key_invalid 
+744c c1018000 rtneq sp_key_valid_256 
+744d 6fe0c46d fetch 1 ,mem_sc_calc 
+744e c00074fc beq sp_calc_standby ,sp_initialize_256 
+744f 20600000 rtn 
+
+stop_publickey_calc_256:
+7450 70446d00 jam sp_calc_standby ,mem_sc_calc 
+7451 20600000 rtn 
+
+sp_clear_flags:
+7452 44f7401d bpatch patch1d_6 ,mem_patch1d 
+7453 580005fe setarg mem_sp_state_end 
+7454 d8a005f9 arg mem_sp_state_start ,contw 
+7455 98a67200 isub contw ,loopcnt 
+7456 20407ca1 call clear_mem 
+7457 580044d1 setarg mem_sp_state_xmem_end 
+7458 d8a044cf arg mem_sp_state_xmem ,contw 
+7459 98a67200 isub contw ,loopcnt 
+745a 20207ca1 branch clear_mem 
+
+sp_calc_check_publickey_256:
+745b 20407476 call sp_calc_b256 
+745c da20061e arg mem_le_pubkey_remote_y_256 ,rega 
+745d d8a004b1 arg mem_t7_256 ,contw 
+745e 2040771c call bn_sqrmod_256 
+745f da2005fe arg mem_le_pubkey_remote_x_256 ,rega 
+7460 d8a00471 arg mem_t2_256 ,contw 
+7461 2040771c call bn_sqrmod_256 
+7462 da200471 arg mem_t2_256 ,rega 
+7463 da4005fe arg mem_le_pubkey_remote_x_256 ,regb 
+7464 d8a00471 arg mem_t2_256 ,contw 
+7465 20407684 call bn_mulmod_256 
+7466 da200589 arg mem_a_256 ,rega 
+7467 da4005fe arg mem_le_pubkey_remote_x_256 ,regb 
+7468 d8a00491 arg mem_t3_256 ,contw 
+7469 20407684 call bn_mulmod_256 
+746a da200491 arg mem_t3_256 ,rega 
+746b da400471 arg mem_t2_256 ,regb 
+746c d8a00471 arg mem_t2_256 ,contw 
+746d 20407720 call bn_addmod_256 
+746e da200451 arg mem_t0_256 ,rega 
+746f da400471 arg mem_t2_256 ,regb 
+7470 d8a00451 arg mem_t0_256 ,contw 
+7471 20407720 call bn_addmod_256 
+7472 df200020 arg 32 ,loopcnt 
+7473 da2004b1 arg mem_t7_256 ,rega 
+7474 da400451 arg mem_t0_256 ,regb 
+7475 20207d64 branch string_compare 
+
+sp_calc_b256:
+7476 da2005c9 arg mem_gy_256 ,rega 
+7477 d8a00451 arg mem_t0_256 ,contw 
+7478 2040771c call bn_sqrmod_256 
+7479 da2005a9 arg mem_gx_256 ,rega 
+747a d8a00471 arg mem_t2_256 ,contw 
+747b 2040771c call bn_sqrmod_256 
+747c da200471 arg mem_t2_256 ,rega 
+747d da4005a9 arg mem_gx_256 ,regb 
+747e d8a00471 arg mem_t2_256 ,contw 
+747f 20407684 call bn_mulmod_256 
+7480 da200589 arg mem_a_256 ,rega 
+7481 da4005a9 arg mem_gx_256 ,regb 
+7482 d8a00491 arg mem_t3_256 ,contw 
+7483 20407684 call bn_mulmod_256 
+7484 da200491 arg mem_t3_256 ,rega 
+7485 da400471 arg mem_t2_256 ,regb 
+7486 d8a00471 arg mem_t2_256 ,contw 
+7487 20407720 call bn_addmod_256 
+7488 da200451 arg mem_t0_256 ,rega 
+7489 da400471 arg mem_t2_256 ,regb 
+748a d8a00451 arg mem_t0_256 ,contw 
+748b 20207739 branch bn_submod_256 
+
+random_generator:
+748c 18e08fff increase -1 ,queue 
+748d 24610000 nrtn positive 
+748e 180a7e00 random pdata 
+748f e7e10005 istore 2 ,contw 
+7490 2020748c branch random_generator 
+
+compare4:
+7491 18e08fff increase -1 ,queue 
+7492 2421749c nbranch compare4_success ,positive 
+7493 efe20011 ifetch 4 ,rega 
+7494 1fe20400 copy pdata ,temp 
+7495 efe20012 ifetch 4 ,regb 
+7496 9842fe00 iflip temp ,pdata 
+7497 2422f49b nbranch compare4_failed ,zero 
+7498 1a20a204 increase 4 ,rega 
+7499 1a40a404 increase 4 ,regb 
+749a 20207491 branch compare4 
+
+compare4_failed:
+749b 20207dc4 branch disable_true 
+
+compare4_success:
+749c 20207dc6 branch enable_true 
+
+bn_testbit:
+749d 1fe10e07 and pdata ,7 ,queue 
+749e 1fe97e00 rshift3 pdata ,pdata 
+749f 98c08c00 iadd contr ,contr 
+74a0 efe08006 ifetch 1 ,contr 
+74a1 afec0000 qisolate0 pdata 
+74a2 20600000 rtn 
+
+bn_eq_zero:
+74a3 efe40006 ifetch 8 ,contr 
+74a4 247a0000 nrtn blank 
+74a5 efe40006 ifetch 8 ,contr 
+74a6 247a0000 nrtn blank 
+74a7 efe40006 ifetch 8 ,contr 
+74a8 20600000 rtn 
+
+bn_eq_0:
+74a9 efe20011 ifetch 4 ,rega 
+74aa 98000400 iforce temp 
+74ab efe20012 ifetch 4 ,regb 
+74ac 98467c00 isub temp ,null 
+74ad 24628000 nrtn zero 
+74ae 1a20a204 increase 4 ,rega 
+74af 1a40a404 increase 4 ,regb 
+74b0 c20074a9 loop bn_eq_0 
+74b1 20600000 rtn 
+
+bn_bigeq:
+74b2 18007206 force 6 ,loopcnt 
+74b3 1a20a214 increase 20 ,rega 
+74b4 1a40a414 increase 20 ,regb 
+
+bn_bigeq_0:
+74b5 efe20012 ifetch 4 ,regb 
+74b6 98000400 iforce temp 
+74b7 efe20011 ifetch 4 ,rega 
+74b8 98467e00 isub temp ,pdata 
+74b9 24610000 nrtn positive 
+74ba 247a0000 nrtn blank 
+74bb 1a20a3fc increase -4 ,rega 
+74bc 1a40a5fc increase -4 ,regb 
+74bd c20074b5 loop bn_bigeq_0 
+74be 20600000 rtn 
+
+bn_add:
+74bf 18007206 force 6 ,loopcnt 
+74c0 18002600 force 0 ,regc 
+
+bn_add_0:
+74c1 efe20011 ifetch 4 ,rega 
+74c2 98000400 iforce temp 
+74c3 efe20012 ifetch 4 ,regb 
+74c4 9840fe00 iadd temp ,pdata 
+74c5 9a60fe00 iadd regc ,pdata 
+74c6 e7e20005 istore 4 ,contw 
+74c7 2feffe20 isolate1 32 ,pdata 
+74c8 7920a600 setflag true ,0 ,regc 
+74c9 1a20a204 increase 4 ,rega 
+74ca 1a40a404 increase 4 ,regb 
+74cb c20074c1 loop bn_add_0 
+74cc 20600000 rtn 
+
+bn_sub:
+74cd 18007206 force 6 ,loopcnt 
+74ce 18002600 force 0 ,regc 
+
+bn_sub_0:
+74cf efe20012 ifetch 4 ,regb 
+74d0 98000400 iforce temp 
+74d1 efe20011 ifetch 4 ,rega 
+74d2 98467e00 isub temp ,pdata 
+74d3 9a667e00 isub regc ,pdata 
+74d4 e7e20005 istore 4 ,contw 
+74d5 2feffe20 isolate1 32 ,pdata 
+74d6 7920a600 setflag true ,0 ,regc 
+74d7 1a20a204 increase 4 ,rega 
+74d8 1a40a404 increase 4 ,regb 
+74d9 c20074cf loop bn_sub_0 
+74da 20600000 rtn 
+
+bn_rshift6:
+74db 18007206 force 6 ,loopcnt 
+74dc 1a20a214 increase 20 ,rega 
+
+bn_rshift:
+74dd 18002600 force 0 ,regc 
+
+bn_rshift_0:
+74de efe20011 ifetch 4 ,rega 
+74df 2feffe00 isolate1 0 ,pdata 
+74e0 7920a601 setflag true ,1 ,regc 
+74e1 1fe37e00 rshift pdata ,pdata 
+74e2 2a6ffe00 isolate1 0 ,regc 
+74e3 7920fe1f setflag true ,31 ,pdata 
+74e4 e7e20011 istore 4 ,rega 
+74e5 1a20a3fc increase -4 ,rega 
+74e6 1a632600 rshift regc ,regc 
+74e7 c20074de loop bn_rshift_0 
+74e8 20600000 rtn 
+
+bn_lshift:
+74e9 18007206 force 6 ,loopcnt 
+74ea 18002600 force 0 ,regc 
+
+bn_lshift_0:
+74eb efe20011 ifetch 4 ,rega 
+74ec 2feffe1f isolate1 31 ,pdata 
+74ed 7920a601 setflag true ,1 ,regc 
+74ee 1fe3fe00 lshift pdata ,pdata 
+74ef 2a6ffe00 isolate1 0 ,regc 
+74f0 7920fe00 setflag true ,0 ,pdata 
+74f1 e7e20011 istore 4 ,rega 
+74f2 1a20a204 increase 4 ,rega 
+74f3 1a632600 rshift regc ,regc 
+74f4 c20074eb loop bn_lshift_0 
+74f5 20600000 rtn 
+
+bn_load:
+74f6 18007206 force 6 ,loopcnt 
+
+bn_load_0:
+74f7 efe20006 ifetch 4 ,contr 
+74f8 98005e00 iforce regext 
+74f9 1f00f001 increase 1 ,regext_index 
+74fa c20074f7 loop bn_load_0 
+74fb 20600000 rtn 
+
+sp_initialize_256:
+74fc 44f7c01d bpatch patch1d_7 ,mem_patch1d 
+74fd 6fe0c46c fetch 1 ,mem_secure_connections_enable 
+74fe 243a751d nbranch sp_pubkey_calc_256 ,blank 
+
+sc_reset:
+74ff 70446d00 jam sp_calc_standby ,mem_sc_calc 
+7500 70446e00 jam sp_key_invalid ,mem_sc_local_key_invalid 
+7501 20600000 rtn 
+
+sp_wait_pubkey_calc_256_done:
+7502 6fe0c46c fetch 1 ,mem_secure_connections_enable 
+7503 207a0000 rtn blank 
+7504 6fe0c46e fetch 1 ,mem_sc_local_key_invalid 
+7505 c1018000 rtneq sp_key_valid_256 
+7506 20407552 call sp_calc_sequence_256 
+7507 20207502 branch sp_wait_pubkey_calc_256_done 
+
+sp_debug_private_256:
+7508 d8a0446f arg mem_sc_private_key_256 ,contw 
+7509 38001abd setsect 0 ,0x1abd 
+750a 3805b34f setsect 1 ,0x1b34f 
+750b 38099b8a setsect 2 ,0x19b8a 
+750c 380e6562 setsect 3 ,0x26562 
+750d e7e48005 istore 9 ,contw 
+750e 380340b7 setsect 0 ,0x340b7 
+750f 38041efa setsect 1 ,0x1efa 
+7510 3808aff6 setsect 2 ,0xaff6 
+7511 380cfd41 setsect 3 ,0xfd41 
+7512 e7e48005 istore 9 ,contw 
+7513 3803d210 setsect 0 ,0x3d210 
+7514 38066cf8 setsect 1 ,0x26cf8 
+7515 380b874c setsect 2 ,0x3874c 
+7516 380f157c setsect 3 ,0x3157c 
+7517 e7e48005 istore 9 ,contw 
+7518 3802d4a3 setsect 0 ,0x2d4a3 
+7519 3807d27d setsect 1 ,0x3d27d 
+751a 38080003 setsect 2 ,0x3 
+751b e7e28005 istore 5 ,contw 
+751c 20600000 rtn 
+
+sp_pubkey_calc_256:
+751d 6fe0c46e fetch 1 ,mem_sc_local_key_invalid 
+751e c1800000 rtnne sp_key_invalid 
+751f 6fe0c46d fetch 1 ,mem_sc_calc 
+7520 c1800000 rtnne sp_calc_standby 
+7521 204073f5 call init_memp_256 
+7522 d8a0446f arg mem_sc_private_key_256 ,contw 
+7523 18000e0f force 15 ,queue 
+7524 2040748c call random_generator 
+7525 180a7e00 random pdata 
+7526 1fe37e00 rshift pdata ,pdata 
+7527 e7e10005 istore 2 ,contw 
+7528 6fe0c46b fetch 1 ,mem_sp_debug_mode 
+7529 245a7508 ncall sp_debug_private_256 ,blank 
+752a d8a003b1 arg mem_k_256 ,contw 
+752b d8c0446f arg mem_sc_private_key_256 ,contr 
+752c 20407c8d call memcpy32 
+752d d8a00291 arg mem_ax_256 ,contw 
+752e d8c005a9 arg mem_gx_256 ,contr 
+752f 20407c81 call memcpy64 
+7530 d8a002d1 arg mem_az_256 ,contw 
+7531 20407c9d call clear_mem_256 
+7532 7002d101 jam 1 ,mem_az_256 
+7533 2040756a call eckp_calc_init_256 
+7534 70446d03 jam sp_calc_pubkey_256 ,mem_sc_calc 
+7535 20600000 rtn 
+
+sp_pubkey_generated_256:
+7536 d8a0448f arg mem_sc_pubkey_local_x_256 ,contw 
+7537 d8c002f1 arg mem_bx_256 ,contr 
+7538 20407c81 call memcpy64 
+7539 70446e03 jam sp_key_valid_256 ,mem_sc_local_key_invalid 
+753a 70446d00 jam sp_calc_standby ,mem_sc_calc 
+753b 20600000 rtn 
+
+sp_dhkey_calc_256:
+753c 6fe085f9 fetch 1 ,mem_sp_dhkey_invalid 
+753d c1800000 rtnne sp_key_invalid 
+753e 6fe0c46d fetch 1 ,mem_sc_calc 
+753f c1800000 rtnne sp_calc_standby 
+7540 d8a003b1 arg mem_k_256 ,contw 
+7541 d8c0446f arg mem_sc_private_key_256 ,contr 
+7542 20407c8d call memcpy32 
+7543 d8a00291 arg mem_ax_256 ,contw 
+7544 d8c005fe arg mem_le_pubkey_remote_x_256 ,contr 
+7545 20407c81 call memcpy64 
+7546 d8a002d1 arg mem_az_256 ,contw 
+7547 20407c9d call clear_mem_256 
+7548 7002d101 jam 1 ,mem_az_256 
+7549 2040756a call eckp_calc_init_256 
+754a 70446d04 jam sp_calc_dhkey_256 ,mem_sc_calc 
+754b 20600000 rtn 
+
+sp_dhkey_generated_256:
+754c d8a0063e arg mem_le_dhkey_256 ,contw 
+754d d8c002f1 arg mem_bx_256 ,contr 
+754e 20407c8d call memcpy32 
+754f 7005f903 jam sp_key_valid_256 ,mem_sp_dhkey_invalid 
+7550 70446d00 jam sp_calc_standby ,mem_sc_calc 
+7551 20600000 rtn 
+
+sp_calc_sequence_256:
+7552 6fe0c46c fetch 1 ,mem_secure_connections_enable 
+7553 207a0000 rtn blank 
+7554 6fe0c46d fetch 1 ,mem_sc_calc 
+7555 207a0000 rtn blank 
+7556 1fe0fe80 increase 0x80 ,pdata 
+7557 67e0c46d store 1 ,mem_sc_calc 
+7558 c3838000 rtnbit1 7 
+7559 6fe1022e fetch 2 ,mem_ec_loopc 
+755a 203a755c branch sp_calc_sequence_done_256 ,blank 
+755b 20207562 branch eckp_calc_256 
+
+sp_calc_sequence_done_256:
+755c 44f8401e bpatch patch1e_0 ,mem_patch1e 
+755d 20407577 call ecunmapz_256 
+755e 6fe0c46d fetch 1 ,mem_sc_calc 
+755f c001f536 beq sp_calc_pubkey_256 ,sp_pubkey_generated_256 
+7560 c002754c beq sp_calc_dhkey_256 ,sp_dhkey_generated_256 
+7561 20600000 rtn 
+
+eckp_calc_256:
+7562 20407589 call ecdbl_256 
+7563 6fe1022e fetch 2 ,mem_ec_loopc 
+7564 1fe0ffff increase -1 ,pdata 
+7565 67e1022e store 2 ,mem_ec_loopc 
+7566 d8c003b1 arg mem_k_256 ,contr 
+7567 2040749d call bn_testbit 
+7568 20608000 rtn true 
+7569 202075da branch ecadd_256 
+
+eckp_calc_init_256:
+756a 44f8c01e bpatch patch1e_1 ,mem_patch1e 
+756b 58000100 setarg 256 
+756c 67e1022e store 2 ,mem_ec_loopc 
+
+eckp_calc_init_256_1:
+756d 6fe1022e fetch 2 ,mem_ec_loopc 
+756e 207a0000 rtn blank 
+756f 1fe0ffff increase -1 ,pdata 
+7570 67e1022e store 2 ,mem_ec_loopc 
+7571 d8c003b1 arg mem_k_256 ,contr 
+7572 2040749d call bn_testbit 
+7573 2020f56d branch eckp_calc_init_256_1 ,true 
+7574 d8c00291 arg mem_ax_256 ,contr 
+7575 d8a00351 arg mem_cx_256 ,contw 
+7576 20207c80 branch memcpy96 
+
+ecunmapz_256:
+7577 da200391 arg mem_cz_256 ,rega 
+7578 d8a00491 arg mem_t3_256 ,contw 
+7579 20407646 call bn_invmod_256 
+757a da200491 arg mem_t3_256 ,rega 
+757b d8a00431 arg mem_t1_256 ,contw 
+757c 2040771c call bn_sqrmod_256 
+757d da200351 arg mem_cx_256 ,rega 
+757e da400431 arg mem_t1_256 ,regb 
+757f d8a002f1 arg mem_bx_256 ,contw 
+7580 20407684 call bn_mulmod_256 
+7581 da200491 arg mem_t3_256 ,rega 
+7582 da400431 arg mem_t1_256 ,regb 
+7583 d8a00471 arg mem_t2_256 ,contw 
+7584 20407684 call bn_mulmod_256 
+7585 da200371 arg mem_cy_256 ,rega 
+7586 da400471 arg mem_t2_256 ,regb 
+7587 d8a00311 arg mem_by_256 ,contw 
+7588 20207684 branch bn_mulmod_256 
+
+ecdbl_256:
+7589 da200391 arg mem_cz_256 ,rega 
+758a d8a00471 arg mem_t2_256 ,contw 
+758b 2040771c call bn_sqrmod_256 
+758c da200471 arg mem_t2_256 ,rega 
+758d d8a00491 arg mem_t3_256 ,contw 
+758e 2040771c call bn_sqrmod_256 
+758f da200589 arg mem_a_256 ,rega 
+7590 da400491 arg mem_t3_256 ,regb 
+7591 d8a00491 arg mem_t3_256 ,contw 
+7592 20407684 call bn_mulmod_256 
+7593 da200351 arg mem_cx_256 ,rega 
+7594 d8a00471 arg mem_t2_256 ,contw 
+7595 2040771c call bn_sqrmod_256 
+7596 d8c00471 arg mem_t2_256 ,contr 
+7597 d8a00431 arg mem_t1_256 ,contw 
+7598 20407c8d call memcpy32 
+7599 da200431 arg mem_t1_256 ,rega 
+759a 20407723 call bn_lshiftmod_256 
+759b da200471 arg mem_t2_256 ,rega 
+759c da400431 arg mem_t1_256 ,regb 
+759d d8a00471 arg mem_t2_256 ,contw 
+759e 20407720 call bn_addmod_256 
+759f da200471 arg mem_t2_256 ,rega 
+75a0 da400491 arg mem_t3_256 ,regb 
+75a1 d8a00471 arg mem_t2_256 ,contw 
+75a2 20407720 call bn_addmod_256 
+75a3 d8c00351 arg mem_cx_256 ,contr 
+75a4 d8a00431 arg mem_t1_256 ,contw 
+75a5 20407c8d call memcpy32 
+75a6 da200371 arg mem_cy_256 ,rega 
+75a7 d8a00491 arg mem_t3_256 ,contw 
+75a8 2040771c call bn_sqrmod_256 
+75a9 da200431 arg mem_t1_256 ,rega 
+75aa 20407723 call bn_lshiftmod_256 
+75ab da200431 arg mem_t1_256 ,rega 
+75ac 20407723 call bn_lshiftmod_256 
+75ad da200431 arg mem_t1_256 ,rega 
+75ae da400491 arg mem_t3_256 ,regb 
+75af d8a00431 arg mem_t1_256 ,contw 
+75b0 20407684 call bn_mulmod_256 
+75b1 da200491 arg mem_t3_256 ,rega 
+75b2 d8a00451 arg mem_t0_256 ,contw 
+75b3 2040771c call bn_sqrmod_256 
+75b4 da200451 arg mem_t0_256 ,rega 
+75b5 20407723 call bn_lshiftmod_256 
+75b6 da200451 arg mem_t0_256 ,rega 
+75b7 20407723 call bn_lshiftmod_256 
+75b8 da200451 arg mem_t0_256 ,rega 
+75b9 20407723 call bn_lshiftmod_256 
+75ba d8c00371 arg mem_cy_256 ,contr 
+75bb d8a00491 arg mem_t3_256 ,contw 
+75bc 20407c8d call memcpy32 
+75bd da200491 arg mem_t3_256 ,rega 
+75be 20407723 call bn_lshiftmod_256 
+75bf da200491 arg mem_t3_256 ,rega 
+75c0 da400391 arg mem_cz_256 ,regb 
+75c1 d8a00391 arg mem_cz_256 ,contw 
+75c2 20407684 call bn_mulmod_256 
+75c3 da200471 arg mem_t2_256 ,rega 
+75c4 d8a00491 arg mem_t3_256 ,contw 
+75c5 2040771c call bn_sqrmod_256 
+75c6 da200491 arg mem_t3_256 ,rega 
+75c7 da400431 arg mem_t1_256 ,regb 
+75c8 d8a00491 arg mem_t3_256 ,contw 
+75c9 20407739 call bn_submod_256 
+75ca da200491 arg mem_t3_256 ,rega 
+75cb da400431 arg mem_t1_256 ,regb 
+75cc d8a00351 arg mem_cx_256 ,contw 
+75cd 20407739 call bn_submod_256 
+75ce da200431 arg mem_t1_256 ,rega 
+75cf da400351 arg mem_cx_256 ,regb 
+75d0 d8a00491 arg mem_t3_256 ,contw 
+75d1 20407739 call bn_submod_256 
+75d2 da200491 arg mem_t3_256 ,rega 
+75d3 da400471 arg mem_t2_256 ,regb 
+75d4 d8a00491 arg mem_t3_256 ,contw 
+75d5 20407684 call bn_mulmod_256 
+75d6 da200491 arg mem_t3_256 ,rega 
+75d7 da400451 arg mem_t0_256 ,regb 
+75d8 d8a00371 arg mem_cy_256 ,contw 
+75d9 20207739 branch bn_submod_256 
+
+ecadd_256:
+75da da2002d1 arg mem_az_256 ,rega 
+75db d8a004b1 arg mem_t7_256 ,contw 
+75dc 2040771c call bn_sqrmod_256 
+75dd da200351 arg mem_cx_256 ,rega 
+75de da4004b1 arg mem_t7_256 ,regb 
+75df d8a00451 arg mem_t0_256 ,contw 
+75e0 20407684 call bn_mulmod_256 
+75e1 da2002d1 arg mem_az_256 ,rega 
+75e2 da4004b1 arg mem_t7_256 ,regb 
+75e3 d8a004b1 arg mem_t7_256 ,contw 
+75e4 20407684 call bn_mulmod_256 
+75e5 da200371 arg mem_cy_256 ,rega 
+75e6 da4004b1 arg mem_t7_256 ,regb 
+75e7 d8a00431 arg mem_t1_256 ,contw 
+75e8 20407684 call bn_mulmod_256 
+75e9 da200391 arg mem_cz_256 ,rega 
+75ea d8a004b1 arg mem_t7_256 ,contw 
+75eb 2040771c call bn_sqrmod_256 
+75ec da200291 arg mem_ax_256 ,rega 
+75ed da4004b1 arg mem_t7_256 ,regb 
+75ee d8a00471 arg mem_t2_256 ,contw 
+75ef 20407684 call bn_mulmod_256 
+75f0 da200391 arg mem_cz_256 ,rega 
+75f1 da4004b1 arg mem_t7_256 ,regb 
+75f2 d8a004b1 arg mem_t7_256 ,contw 
+75f3 20407684 call bn_mulmod_256 
+75f4 da2002b1 arg mem_ay_256 ,rega 
+75f5 da4004b1 arg mem_t7_256 ,regb 
+75f6 d8a00491 arg mem_t3_256 ,contw 
+75f7 20407684 call bn_mulmod_256 
+75f8 da400451 arg mem_t0_256 ,regb 
+75f9 da200471 arg mem_t2_256 ,rega 
+75fa d8a004b1 arg mem_t7_256 ,contw 
+75fb 20407739 call bn_submod_256 
+75fc da200451 arg mem_t0_256 ,rega 
+75fd da400471 arg mem_t2_256 ,regb 
+75fe d8a00451 arg mem_t0_256 ,contw 
+75ff 20407720 call bn_addmod_256 
+7600 da400431 arg mem_t1_256 ,regb 
+7601 da200491 arg mem_t3_256 ,rega 
+7602 d8a00471 arg mem_t2_256 ,contw 
+7603 20407739 call bn_submod_256 
+7604 da200431 arg mem_t1_256 ,rega 
+7605 da400491 arg mem_t3_256 ,regb 
+7606 d8a00431 arg mem_t1_256 ,contw 
+7607 20407720 call bn_addmod_256 
+7608 da200431 arg mem_t1_256 ,rega 
+7609 da4004b1 arg mem_t7_256 ,regb 
+760a d8a00431 arg mem_t1_256 ,contw 
+760b 20407684 call bn_mulmod_256 
+760c da200391 arg mem_cz_256 ,rega 
+760d da4002d1 arg mem_az_256 ,regb 
+760e d8a00491 arg mem_t3_256 ,contw 
+760f 20407684 call bn_mulmod_256 
+7610 da200491 arg mem_t3_256 ,rega 
+7611 da4004b1 arg mem_t7_256 ,regb 
+7612 d8a00391 arg mem_cz_256 ,contw 
+7613 20407684 call bn_mulmod_256 
+7614 da2004b1 arg mem_t7_256 ,rega 
+7615 d8a004b1 arg mem_t7_256 ,contw 
+7616 2040771c call bn_sqrmod_256 
+7617 da2004b1 arg mem_t7_256 ,rega 
+7618 da400451 arg mem_t0_256 ,regb 
+7619 d8a00491 arg mem_t3_256 ,contw 
+761a 20407684 call bn_mulmod_256 
+761b da2004b1 arg mem_t7_256 ,rega 
+761c da400431 arg mem_t1_256 ,regb 
+761d d8a00431 arg mem_t1_256 ,contw 
+761e 20407684 call bn_mulmod_256 
+761f da200471 arg mem_t2_256 ,rega 
+7620 d8a00351 arg mem_cx_256 ,contw 
+7621 2040771c call bn_sqrmod_256 
+7622 da200351 arg mem_cx_256 ,rega 
+7623 da400491 arg mem_t3_256 ,regb 
+7624 d8a00351 arg mem_cx_256 ,contw 
+7625 20407739 call bn_submod_256 
+7626 d8c00351 arg mem_cx_256 ,contr 
+7627 d8a004b1 arg mem_t7_256 ,contw 
+7628 20407c8d call memcpy32 
+7629 da2004b1 arg mem_t7_256 ,rega 
+762a 20407723 call bn_lshiftmod_256 
+762b da200491 arg mem_t3_256 ,rega 
+762c da4004b1 arg mem_t7_256 ,regb 
+762d d8a00491 arg mem_t3_256 ,contw 
+762e 20407739 call bn_submod_256 
+762f da200491 arg mem_t3_256 ,rega 
+7630 da400471 arg mem_t2_256 ,regb 
+7631 d8a00471 arg mem_t2_256 ,contw 
+7632 20407684 call bn_mulmod_256 
+7633 da200471 arg mem_t2_256 ,rega 
+7634 da400431 arg mem_t1_256 ,regb 
+7635 d8a00371 arg mem_cy_256 ,contw 
+7636 20407739 call bn_submod_256 
+7637 da200371 arg mem_cy_256 ,rega 
+7638 da400569 arg mem_p_256 ,regb 
+7639 d8a00371 arg mem_cy_256 ,contw 
+763a 18002600 force 0 ,regc 
+763b 6fe08371 fetch 1 ,mem_cy_256 
+763c 2feffe00 isolate1 0 ,pdata 
+763d 2040f71e call bn_add_256 ,true 
+763e 1a626000 copy regc ,alarm 
+763f da200371 arg mem_cy_256 ,rega 
+7640 2040774e call bn_rshift_256 
+7641 6fe08390 fetch 1 ,mem_cy5_256 
+7642 2e0ffe00 isolate1 0 ,alarm 
+7643 7920fe07 setflag true ,7 ,pdata 
+7644 67e08390 store 1 ,mem_cy5_256 
+7645 20600000 rtn 
+
+bn_invmod_256:
+7646 18a21600 copy contw ,timeup 
+7647 d8a00451 arg mem_tmp0_256 ,contw 
+7648 20407c9d call clear_mem_256 
+7649 18007e00 force 0 ,pdata 
+764a 67e20471 store 4 ,mem_t2_256 
+764b 70045101 jam 1 ,mem_tmp0_256 
+764c d8a003d1 arg mem_tmp1_256 ,contw 
+764d 20407c9f call clear_mem_512 
+764e d8c00569 arg mem_p_256 ,contr 
+764f d8a00411 arg mem_tmp2_256 ,contw 
+7650 20407c8d call memcpy32 
+7651 1a220c00 copy rega ,contr 
+7652 d8a00431 arg mem_tmp3_256 ,contw 
+7653 20407c8d call memcpy32 
+
+bn_invmod_256_2:
+7654 d8c00431 arg mem_tmp3_256 ,contr 
+7655 20407758 call bn_eq_zero_256 
+7656 203a767d branch bn_invmod_256_0 ,blank 
+7657 da200431 arg mem_tmp3_256 ,rega 
+7658 da400451 arg mem_tmp0_256 ,regb 
+7659 2040775b call bn_rshifteven_256 
+765a da200411 arg mem_tmp2_256 ,rega 
+765b da4003d1 arg mem_tmp1_256 ,regb 
+765c 2040775b call bn_rshifteven_256 
+765d da200431 arg mem_tmp3_256 ,rega 
+765e da400411 arg mem_tmp2_256 ,regb 
+765f 20407754 call bn_bigeq_256 
+7660 2021766f branch bn_invmod_256_1 ,positive 
+7661 da200411 arg mem_tmp2_256 ,rega 
+7662 da400431 arg mem_tmp3_256 ,regb 
+7663 1a220a00 copy rega ,contw 
+7664 2040774c call bn_sub_256 
+7665 da200451 arg mem_tmp0_256 ,rega 
+7666 da4003d1 arg mem_tmp1_256 ,regb 
+7667 1a420a00 copy regb ,contw 
+7668 2040771e call bn_add_256 
+7669 efe08011 ifetch 1 ,rega 
+766a 9a60a600 iadd regc ,regc 
+766b efe08012 ifetch 1 ,regb 
+766c 9a60fe00 iadd regc ,pdata 
+766d e7e08012 istore 1 ,regb 
+766e 20207654 branch bn_invmod_256_2 
+
+bn_invmod_256_1:
+766f da200431 arg mem_tmp3_256 ,rega 
+7670 da400411 arg mem_tmp2_256 ,regb 
+7671 1a220a00 copy rega ,contw 
+7672 2040774c call bn_sub_256 
+7673 da2003d1 arg mem_tmp1_256 ,rega 
+7674 da400451 arg mem_tmp0_256 ,regb 
+7675 1a420a00 copy regb ,contw 
+7676 2040771e call bn_add_256 
+7677 efe08011 ifetch 1 ,rega 
+7678 9a60a600 iadd regc ,regc 
+7679 efe08012 ifetch 1 ,regb 
+767a 9a60fe00 iadd regc ,pdata 
+767b e7e08012 istore 1 ,regb 
+767c 20207654 branch bn_invmod_256_2 
+
+bn_invmod_256_0:
+767d da2003d1 arg mem_tmp1_256 ,rega 
+767e 19620a00 copy timeup ,contw 
+767f 204076ad call bn_p256mod 
+7680 da200569 arg mem_p_256 ,rega 
+7681 19622400 copy timeup ,regb 
+7682 19620a00 copy timeup ,contw 
+7683 20207739 branch bn_submod_256 
+
+bn_mulmod_256:
+7684 18a21600 copy contw ,timeup 
+7685 18007000 force 0 ,regext_index 
+7686 d8a003d1 arg mem_tmp1_256 ,contw 
+7687 20407c9f call clear_mem_512 
+7688 d8a006b1 arg mem_regext ,contw 
+7689 20407c9f call clear_mem_512 
+768a 1a220c00 copy rega ,contr 
+768b 7006b100 jam 0 ,mem_regext 
+768c 58000000 setarg 0 
+768d 20407716 call bn_load_mem 
+768e 1a420c00 copy regb ,contr 
+768f 2040771a call bn_load_256 
+7690 18000e00 force 0 ,queue 
+7691 d8a003d1 arg mem_tmp1_256 ,contw 
+
+bn_mulmod_256_1:
+7692 d84006b1 arg mem_regext ,temp 
+7693 18e22400 copy queue ,regb 
+7694 1a4bfe00 lshift2 regb ,pdata 
+7695 9840a400 iadd temp ,regb 
+7696 18000400 force 0 ,temp 
+7697 18002600 force 0 ,regc 
+
+bn_mulmod_256_0:
+7698 efe20005 ifetch 4 ,contw 
+7699 98002200 iforce rega 
+769a efe20012 ifetch 4 ,regb 
+769b 1a627000 copy regc ,regext_index 
+769c 9deffe00 imul32 regext ,pdata 
+769d 9a20fe00 iadd rega ,pdata 
+769e 9840fe00 iadd temp ,pdata 
+769f e7e20005 istore 4 ,contw 
+76a0 1fef0400 rshift32 pdata ,temp 
+76a1 1a60a601 increase 1 ,regc 
+76a2 2a61fe08 compare 8 ,regc ,0xff 
+76a3 2420f698 nbranch bn_mulmod_256_0 ,true 
+76a4 18427e00 deposit temp 
+76a5 e7e20005 istore 4 ,contw 
+76a6 18a08be0 increase -32 ,contw 
+76a7 18e08e01 increase 1 ,queue 
+76a8 28e1fe08 compare 8 ,queue ,0xff 
+76a9 2420f692 nbranch bn_mulmod_256_1 ,true 
+76aa da2003d1 arg mem_tmp1_256 ,rega 
+76ab 19620a00 copy timeup ,contw 
+76ac 202076ad branch bn_p256mod 
+
+bn_p256mod:
+76ad 44f9401e bpatch patch1e_2 ,mem_patch1e 
+76ae 18a21600 copy contw ,timeup 
+76af 1a226000 copy rega ,alarm 
+76b0 da400411 arg mem_tmp2_256 ,regb 
+76b1 1a420a00 copy regb ,contw 
+76b2 20407c9b call memset0_4 
+76b3 e7e40005 istore 8 ,contw 
+76b4 1a208c2c add rega ,44 ,contr 
+76b5 20407c89 call memcpy8 
+76b6 20407c83 call memcpy12 
+76b7 1a422200 copy regb ,rega 
+76b8 20407723 call bn_lshiftmod_256 
+76b9 da400411 arg mem_tmp2_256 ,regb 
+76ba 1e022200 copy alarm ,rega 
+76bb 19620a00 copy timeup ,contw 
+76bc 20407720 call bn_addmod_256 
+76bd da400411 arg mem_tmp2_256 ,regb 
+76be 1a420a00 copy regb ,contw 
+76bf 20407c9b call memset0_4 
+76c0 e7e40005 istore 8 ,contw 
+76c1 1e008c30 add alarm ,48 ,contr 
+76c2 20407c8f call memcpy16 
+76c3 20407c9b call memset0_4 
+76c4 1a422200 copy regb ,rega 
+76c5 20407723 call bn_lshiftmod_256 
+76c6 da400411 arg mem_tmp2_256 ,regb 
+76c7 19622200 copy timeup ,rega 
+76c8 1a220a00 copy rega ,contw 
+76c9 20407720 call bn_addmod_256 
+76ca da400411 arg mem_tmp2_256 ,regb 
+76cb 1a420a00 copy regb ,contw 
+76cc 1e008c20 add alarm ,32 ,contr 
+76cd 20407c83 call memcpy12 
+76ce 20407c9b call memset0_4 
+76cf e7e40005 istore 8 ,contw 
+76d0 1e008c38 add alarm ,56 ,contr 
+76d1 20407c89 call memcpy8 
+76d2 19622200 copy timeup ,rega 
+76d3 1a220a00 copy rega ,contw 
+76d4 20407720 call bn_addmod_256 
+76d5 da400411 arg mem_tmp2_256 ,regb 
+76d6 1a420a00 copy regb ,contw 
+76d7 1e008c24 add alarm ,36 ,contr 
+76d8 20407c83 call memcpy12 
+76d9 1e008c34 add alarm ,52 ,contr 
+76da 20407c83 call memcpy12 
+76db 1e008c34 add alarm ,52 ,contr 
+76dc 20407c84 call memcpy4 
+76dd 1e008c20 add alarm ,32 ,contr 
+76de 20407c84 call memcpy4 
+76df 19622200 copy timeup ,rega 
+76e0 1a220a00 copy rega ,contw 
+76e1 20407720 call bn_addmod_256 
+76e2 da400411 arg mem_tmp2_256 ,regb 
+76e3 1a420a00 copy regb ,contw 
+76e4 1e008c2c add alarm ,44 ,contr 
+76e5 20407c83 call memcpy12 
+76e6 20407c9b call memset0_4 
+76e7 e7e40005 istore 8 ,contw 
+76e8 1e008c20 add alarm ,32 ,contr 
+76e9 20407c84 call memcpy4 
+76ea 1e008c28 add alarm ,40 ,contr 
+76eb 20407c84 call memcpy4 
+76ec 19622200 copy timeup ,rega 
+76ed 1a220a00 copy rega ,contw 
+76ee 20407739 call bn_submod_256 
+76ef da400411 arg mem_tmp2_256 ,regb 
+76f0 1a420a00 copy regb ,contw 
+76f1 1e008c30 add alarm ,48 ,contr 
+76f2 20407c89 call memcpy8 
+76f3 20407c89 call memcpy8 
+76f4 18007e00 force 0 ,pdata 
+76f5 e7e40005 istore 8 ,contw 
+76f6 1e008c24 add alarm ,36 ,contr 
+76f7 20407c84 call memcpy4 
+76f8 1e008c2c add alarm ,44 ,contr 
+76f9 20407c84 call memcpy4 
+76fa 19622200 copy timeup ,rega 
+76fb 1a220a00 copy rega ,contw 
+76fc 20407739 call bn_submod_256 
+76fd da400411 arg mem_tmp2_256 ,regb 
+76fe 1a420a00 copy regb ,contw 
+76ff 1e008c34 add alarm ,52 ,contr 
+7700 20407c83 call memcpy12 
+7701 1e008c20 add alarm ,32 ,contr 
+7702 20407c83 call memcpy12 
+7703 20407c9b call memset0_4 
+7704 1e008c30 add alarm ,48 ,contr 
+7705 20407c84 call memcpy4 
+7706 19622200 copy timeup ,rega 
+7707 1a220a00 copy rega ,contw 
+7708 20407739 call bn_submod_256 
+7709 da400411 arg mem_tmp2_256 ,regb 
+770a 1a420a00 copy regb ,contw 
+770b 1e008c38 add alarm ,56 ,contr 
+770c 20407c89 call memcpy8 
+770d 20407c9b call memset0_4 
+770e 1e008c24 add alarm ,36 ,contr 
+770f 20407c83 call memcpy12 
+7710 20407c9b call memset0_4 
+7711 1e008c34 add alarm ,52 ,contr 
+7712 20407c84 call memcpy4 
+7713 19622200 copy timeup ,rega 
+7714 1a220a00 copy rega ,contw 
+7715 20207739 branch bn_submod_256 
+
+bn_load_mem:
+7716 18007220 force 32 ,loopcnt 
+7717 d8a006b1 arg mem_regext ,contw 
+7718 98a08a00 iadd contw ,contw 
+7719 20207cda branch memcpy 
+
+bn_load_256:
+771a 18007208 force 8 ,loopcnt 
+771b 202074f7 branch bn_load_0 
+
+bn_sqrmod_256:
+771c 1a222400 copy rega ,regb 
+771d 20207684 branch bn_mulmod_256 
+
+bn_add_256:
+771e 18007208 force 8 ,loopcnt 
+771f 202074c0 branch bn_add + 1 
+
+bn_addmod_256:
+7720 2040771e call bn_add_256 
+7721 18a22200 copy contw ,rega 
+7722 20207724 branch bn_lshiftmod_ismod_256 
+
+bn_lshiftmod_256:
+7723 20407751 call bn_lshift_256 
+
+bn_lshiftmod_ismod_256:
+7724 2a6ffe00 isolate1 0 ,regc 
+7725 2020f72d branch bn_lshiftmod_p_256 ,true 
+7726 da400569 arg mem_p_256 ,regb 
+7727 1a222600 copy rega ,regc 
+7728 1a20a3e0 increase -32 ,rega 
+7729 20407754 call bn_bigeq_256 
+772a 24610000 nrtn positive 
+772b 1a622200 copy regc ,rega 
+772c 20207735 branch sub_p2_256 
+
+bn_lshiftmod_p_256:
+772d 20407735 call sub_p2_256 
+772e 1a222600 copy rega ,regc 
+772f 1a20a3e0 increase -32 ,rega 
+7730 da400569 arg mem_p_256 ,regb 
+7731 20407754 call bn_bigeq_256 
+7732 24610000 nrtn positive 
+7733 1a622200 copy regc ,rega 
+7734 20207735 branch sub_p2_256 
+
+sub_p2_256:
+7735 1a20a3e0 increase -32 ,rega 
+7736 da400569 arg mem_p_256 ,regb 
+7737 1a220a00 copy rega ,contw 
+7738 2020774c branch bn_sub_256 
+
+bn_submod_256:
+7739 2040774c call bn_sub_256 
+773a 2020f743 branch bn_submod_256_np ,true 
+773b 18a0a3e0 add contw ,-32 ,rega 
+773c da400569 arg mem_p_256 ,regb 
+773d 20407754 call bn_bigeq_256 
+773e 24610000 nrtn positive 
+773f da400569 arg mem_p_256 ,regb 
+7740 18a0a3e0 add contw ,-32 ,rega 
+7741 1a220a00 copy rega ,contw 
+7742 2020774c branch bn_sub_256 
+
+bn_submod_256_np:
+7743 18a0a3e0 add contw ,-32 ,rega 
+7744 da400569 arg mem_p_256 ,regb 
+7745 1a220a00 copy rega ,contw 
+7746 2040771e call bn_add_256 
+7747 20608000 rtn true 
+7748 18a0a3e0 add contw ,-32 ,rega 
+7749 da400569 arg mem_p_256 ,regb 
+774a 1a220a00 copy rega ,contw 
+774b 2020771e branch bn_add_256 
+
+bn_sub_256:
+774c 18007208 force 8 ,loopcnt 
+774d 202074ce branch bn_sub + 1 
+
+bn_rshift_256:
+774e 18007208 force 8 ,loopcnt 
+774f 1a20a21c increase 28 ,rega 
+7750 202074dd branch bn_rshift 
+
+bn_lshift_256:
+7751 18007208 force 8 ,loopcnt 
+7752 18002600 force 0 ,regc 
+7753 202074eb branch bn_lshift_0 
+
+bn_bigeq_256:
+7754 18007208 force 8 ,loopcnt 
+7755 1a20a21c increase 28 ,rega 
+7756 1a40a41c increase 28 ,regb 
+7757 202074b5 branch bn_bigeq_0 
+
+bn_eq_zero_256:
+7758 efe40006 ifetch 8 ,contr 
+7759 247a0000 nrtn blank 
+775a 202074a3 branch bn_eq_zero 
+
+bn_rshifteven_256:
+775b 1a226000 copy rega ,alarm 
+
+bn_rshifteven_256_1:
+775c 1e022200 copy alarm ,rega 
+775d efe08011 ifetch 1 ,rega 
+775e 2feffe00 isolate1 0 ,pdata 
+775f 20608000 rtn true 
+7760 2040774e call bn_rshift_256 
+7761 efe08012 ifetch 1 ,regb 
+7762 2fec0000 isolate0 0 ,pdata 
+7763 2020f76b branch bn_rshifteven_256_0 ,true 
+7764 da200569 arg mem_p_256 ,rega 
+7765 1a420a00 copy regb ,contw 
+7766 2040771e call bn_add_256 
+7767 efe08012 ifetch 1 ,regb 
+7768 9a60fe00 iadd regc ,pdata 
+7769 e7e08012 istore 1 ,regb 
+776a 1a40a5e0 increase -32 ,regb 
+
+bn_rshifteven_256_0:
+776b 1a40a220 add regb ,32 ,rega 
+776c 18007209 force 9 ,loopcnt 
+776d 204074dd call bn_rshift 
+776e 2020775c branch bn_rshifteven_256_1 
+
+ui_init:
+776f 20758000 rtn wake 
+7770 204023d8 call lpm_disable_exen_output 
+7771 20407776 call ui_button_init 
+7772 2040781b call ui_timer_init 
+7773 202077ac branch ui_led_init_global 
+
+ui_dispatch:
+7774 204077cf call ui_led_dispatch 
+7775 2020780a branch ui_timer_check 
+
+ui_button_init:
+7776 6fe0c4ec fetch 1 ,mem_ui_button_gpio 
+7777 c17f8000 rtneq ui_button_gpio_disable 
+7778 98000400 iforce temp 
+7779 20406ef7 call gpio_config_output 
+777a 6848c4ec fetcht 1 ,mem_ui_button_gpio 
+777b 20406ef3 call gpio_out_inactive 
+777c 20000064 nop 100 
+777d 6848c4ec fetcht 1 ,mem_ui_button_gpio 
+777e 20406edd call gpio_config_input 
+777f 20207780 branch ui_button_polling 
+
+ui_button_polling:
+7780 44f9c01e bpatch patch1e_3 ,mem_patch1e 
+7781 6fe0c4ec fetch 1 ,mem_ui_button_gpio 
+7782 c17f8000 rtneq ui_button_gpio_disable 
+7783 1fe20400 copy pdata ,temp 
+7784 20406ee6 call gpio_get_bit 
+7785 2420f792 nbranch ui_button_up ,true 
+
+ui_button_down:
+7786 2040779c call ui_button_check_long_press 
+7787 6fe144e9 fetch 2 ,mem_ui_state_map 
+7788 79207e0c set1 ui_state_btn_down ,pdata 
+7789 67e144e9 store 2 ,mem_ui_state_map 
+778a 6fe0c4e4 fetch 1 ,mem_ui_button_last_state 
+778b c1000000 rtneq ui_button_state_down 
+778c 7044e400 jam ui_button_state_down ,mem_ui_button_last_state 
+778d 6fe0c4eb fetch 1 ,mem_ui_button_timeout 
+778e 67e0c4e3 store 1 ,mem_ui_button_timer 
+778f 204077a3 call lpm_button_get_wake_lock 
+7790 70066f2c jam bt_evt_button_down ,mem_fifo_temp 
+7791 2020782b branch ui_ipc_send_event 
+
+ui_button_up:
+7792 6fe144e9 fetch 2 ,mem_ui_state_map 
+7793 793ffe0c set0 ui_state_btn_down ,pdata 
+7794 67e144e9 store 2 ,mem_ui_state_map 
+7795 6fe0c4e4 fetch 1 ,mem_ui_button_last_state 
+7796 c1008000 rtneq ui_button_state_up 
+7797 7044e401 jam ui_button_state_up ,mem_ui_button_last_state 
+7798 7044e300 jam 0 ,mem_ui_button_timer 
+7799 204077a5 call lpm_button_clean_wake_lock 
+779a 70066f2d jam bt_evt_button_up ,mem_fifo_temp 
+779b 2020782b branch ui_ipc_send_event 
+
+ui_button_check_long_press:
+779c 6fe0c4e3 fetch 1 ,mem_ui_button_timer 
+779d 207a0000 rtn blank 
+779e 1fe0ffff increase -1 ,pdata 
+779f 67e0c4e3 store 1 ,mem_ui_button_timer 
+77a0 247a0000 nrtn blank 
+77a1 70066f10 jam bt_evt_button_long_pressed ,mem_fifo_temp 
+77a2 2020782b branch ui_ipc_send_event 
+
+lpm_button_get_wake_lock:
+77a3 d8e00007 arg wake_lock_button ,queue 
+77a4 202024e7 branch lpm_get_wake_lock 
+
+lpm_button_clean_wake_lock:
+77a5 d8e00007 arg wake_lock_button ,queue 
+77a6 202024eb branch lpm_put_wake_lock 
+
+calc_curr_struct_prt:
+77a7 44fa401e bpatch patch1e_4 ,mem_patch1e 
+77a8 6fe144ef fetch 2 ,mem_ui_led_struct_ptr 
+77a9 1a2fa40b mul32 rega ,led_offset_length ,regb 
+77aa 9a40a400 iadd regb ,regb 
+77ab 20600000 rtn 
+
+ui_led_init_global:
+77ac 6fe0c4ee fetch 1 ,mem_ui_led_struct_num 
+77ad 207a0000 rtn blank 
+77ae 1fe27200 copy pdata ,loopcnt 
+77af 6fe144ef fetch 2 ,mem_ui_led_struct_ptr 
+77b0 1fe22400 copy pdata ,regb 
+
+ui_led_init_loop:
+77b1 1a40a602 add regb ,led_offset_led_gpio ,regc 
+77b2 e8408013 ifetcht 1 ,regc 
+77b3 204077b7 call ui_led_init_set 
+77b4 1a40a40b increase led_offset_length ,regb 
+77b5 c20077b1 loop ui_led_init_loop 
+77b6 20600000 rtn 
+
+ui_led_init_set:
+77b7 6fe0c4ed fetch 1 ,mem_ui_led_init_state_set 
+77b8 203a6ef3 branch gpio_out_inactive ,blank 
+77b9 20206ef7 branch gpio_out_active 
+
+ui_led_on_global:
+77ba 204077a7 call calc_curr_struct_prt 
+77bb 58000002 setarg ui_led_state_lighting 
+77bc e7e08012 istore 1 ,regb 
+77bd 20407804 call ui_led_stop_timer 
+77be 202077db branch ui_led_on_static 
+
+ui_led_blink_stop_global:
+
+ui_led_off_global:
+77bf 204077a7 call calc_curr_struct_prt 
+77c0 58000003 setarg ui_led_state_darking 
+77c1 e7e08012 istore 1 ,regb 
+77c2 20407804 call ui_led_stop_timer 
+77c3 202077d8 branch ui_led_off_static 
+
+ui_led_blink_start_global:
+77c4 204077a7 call calc_curr_struct_prt 
+77c5 58000001 setarg ui_led_state_blink_start 
+77c6 e7e08012 istore 1 ,regb 
+77c7 580000ff setarg led_infinite_flash_num 
+77c8 e7e08005 istore 1 ,contw 
+77c9 202077d8 branch ui_led_off_static 
+
+ui_led_set_style_global:
+77ca 204077a7 call calc_curr_struct_prt 
+77cb df20000b arg led_offset_length ,loopcnt 
+77cc 1a620c00 copy regc ,contr 
+77cd 1a420a00 copy regb ,contw 
+77ce 20207ccc branch memcpy_fast 
+
+ui_led_dispatch:
+77cf 6fe0c4ee fetch 1 ,mem_ui_led_struct_num 
+77d0 207a0000 rtn blank 
+77d1 da200000 arg 0 ,rega 
+
+ui_led_blink_polling:
+77d2 204077de call ui_led_change_style_by_type 
+77d3 1a20a201 increase 1 ,rega 
+77d4 6fe0c4ee fetch 1 ,mem_ui_led_struct_num 
+77d5 9a267c00 isub rega ,null 
+77d6 20628000 rtn zero 
+77d7 202077d2 branch ui_led_blink_polling 
+
+ui_led_off_static:
+77d8 1a40a602 add regb ,led_offset_led_gpio ,regc 
+77d9 e8408013 ifetcht 1 ,regc 
+77da 20206ef3 branch gpio_out_inactive 
+
+ui_led_on_static:
+77db 1a40a602 add regb ,led_offset_led_gpio ,regc 
+77dc e8408013 ifetcht 1 ,regc 
+77dd 20206ef7 branch gpio_out_active 
+
+ui_led_change_style_by_type:
+77de 1a208e0b add rega ,ui_led_blink ,queue 
+77df 20407cef call timer_check 
+77e0 247a0000 nrtn blank 
+77e1 204077a7 call calc_curr_struct_prt 
+77e2 efe08012 ifetch 1 ,regb 
+77e3 c00177db beq ui_led_state_lighting ,ui_led_on_static 
+77e4 c001f7d8 beq ui_led_state_darking ,ui_led_off_static 
+77e5 c00077d8 beq ui_led_state_blink_stop ,ui_led_off_static 
+77e6 c002f7f2 beq ui_led_state_blink_darking ,ui_led_blink_state_darking 
+
+ui_led_blink_state_lighting:
+77e7 204077db call ui_led_on_static 
+77e8 1a40a607 add regb ,led_offset_cb_ledon ,regc 
+77e9 20407c49 call push_stack 
+77ea efe10013 ifetch 2 ,regc 
+77eb 20407d79 call callback_func 
+77ec 20407c55 call pop_stack 
+77ed 58000005 setarg ui_led_state_blink_darking 
+77ee e7e08012 istore 1 ,regb 
+77ef 1a40a603 add regb ,led_offset_on_time ,regc 
+77f0 efe10013 ifetch 2 ,regc 
+77f1 20207802 branch ui_led_blink_timer_start 
+
+ui_led_blink_state_darking:
+77f2 204077d8 call ui_led_off_static 
+77f3 1a40a609 add regb ,led_offset_cb_ledoff ,regc 
+77f4 20407c49 call push_stack 
+77f5 efe10013 ifetch 2 ,regc 
+77f6 20407d79 call callback_func 
+77f7 20407c55 call pop_stack 
+77f8 1a40a601 add regb ,led_offset_blink_count ,regc 
+77f9 efe08013 ifetch 1 ,regc 
+77fa c07ff7fe beq led_infinite_flash_num ,ui_led_blink_infinite 
+77fb 1fe0ffff increase -1 ,pdata 
+77fc e7e08013 istore 1 ,regc 
+77fd 203a77bf branch ui_led_blink_stop_global ,blank 
+
+ui_led_blink_infinite:
+77fe 58000004 setarg ui_led_state_blink_lighting 
+77ff e7e08012 istore 1 ,regb 
+7800 1a40a605 add regb ,led_offset_off_time ,regc 
+7801 efe10013 ifetch 2 ,regc 
+
+ui_led_blink_timer_start:
+7802 1a208e0b add rega ,ui_led_blink ,queue 
+7803 20207ce1 branch timer_init 
+
+ui_led_stop_timer:
+7804 58000000 setarg 0 
+7805 20207802 branch ui_led_blink_timer_start 
+
+ui_timer_timeout:
+7806 58001000 setarg 0x1000 
+7807 1ff07e00 lshift16 pdata ,pdata 
+7808 9a40a400 iadd regb ,regb 
+7809 20600000 rtn 
+
+ui_timer_check:
+780a 44fac01e bpatch patch1e_5 ,mem_patch1e 
+780b da200000 arg 0 ,rega 
+780c 684a44e5 fetcht 4 ,mem_ui_timer_last_btclk 
+780d 1c422400 copy clkn_bt ,regb 
+780e 1a427e00 copy regb ,pdata 
+780f 98467c00 isub temp ,null 
+7810 24417806 ncall ui_timer_timeout ,positive 
+
+ui_timer_check_loop:
+7811 1a427e00 copy regb ,pdata 
+7812 184084a0 increase 160 ,temp 
+7813 184084a0 increase 160 ,temp 
+7814 98467c00 isub temp ,null 
+7815 2421781e nbranch ui_timer_check_end ,positive 
+7816 1a20a201 increase 1 ,rega 
+7817 1a217e0f and rega ,0x0f ,pdata 
+7818 243a7811 nbranch ui_timer_check_loop ,blank 
+7819 da200000 arg 0 ,rega 
+781a 20407824 call ui_timer_check_send_evt 
+
+ui_timer_init:
+781b 1c427e00 copy clkn_bt ,pdata 
+781c 67e244e5 store 4 ,mem_ui_timer_last_btclk 
+781d 20600000 rtn 
+
+ui_timer_check_end:
+781e 1a227e00 copy rega ,pdata 
+781f 207a0000 rtn blank 
+7820 18408560 increase -160 ,temp 
+7821 18408560 increase -160 ,temp 
+7822 793f841c set0 28 ,temp 
+7823 604a44e5 storet 4 ,mem_ui_timer_last_btclk 
+
+ui_timer_check_send_evt:
+7824 202042d4 branch app_evt_timer 
+
+ui_ipc_get_lock:
+7825 7044d101 jam 1 ,mem_ipc_lock_bt 
+
+ui_ipc_get_lock_wait:
+7826 6fe0c4d2 fetch 1 ,mem_ipc_lock_c51 
+7827 243a7826 nbranch ui_ipc_get_lock_wait ,blank 
+7828 20600000 rtn 
+
+ui_ipc_put_lock:
+7829 7044d100 jam 0 ,mem_ipc_lock_bt 
+782a 20600000 rtn 
+
+ui_ipc_send_event:
+782b 44fb401e bpatch patch1e_6 ,mem_patch1e 
+782c 20407825 call ui_ipc_get_lock 
+782d 1a227e00 copy rega ,pdata 
+782e 67e20684 store 4 ,mem_rega 
+782f da2044d3 arg mem_ipc_fifo_bt2c51 ,rega 
+7830 20407d8b call fifo_in 
+7831 6fe20684 fetch 4 ,mem_rega 
+7832 1fe22200 copy pdata ,rega 
+7833 20207829 branch ui_ipc_put_lock 
+
+ui_ipc_send_cmd:
+7834 44fbc01e bpatch patch1e_7 ,mem_patch1e 
+7835 20407825 call ui_ipc_get_lock 
+7836 1a227e00 copy rega ,pdata 
+7837 67e20684 store 4 ,mem_rega 
+7838 da2044db arg mem_ipc_fifo_c512bt ,rega 
+7839 20407d8b call fifo_in 
+783a 6fe20684 fetch 4 ,mem_rega 
+783b 1fe22200 copy pdata ,rega 
+783c 20207829 branch ui_ipc_put_lock 
+
+ui_ipc_clean_all_fifo:
+783d 58000000 setarg 0 
+783e 67e444db store util_fifo_len ,mem_ipc_fifo_c512bt 
+783f 67e444d3 store util_fifo_len ,mem_ipc_fifo_bt2c51 
+7840 20600000 rtn 
+
+check_51cmd:
+7841 44fc401f bpatch patch1f_0 ,mem_patch1f 
+7842 6fe0c114 fetch 1 ,mem_hci_cmd 
+7843 247a0000 nrtn blank 
+7844 da2044db arg mem_ipc_fifo_c512bt ,rega 
+7845 20407da3 call fifo_is_empty 
+7846 207a0000 rtn blank 
+7847 70066e00 jam ipc_continue_process ,mem_ipc_skip_continue_proc 
+7848 2040784c call check_51cmd_once 
+7849 6fe0866e fetch 1 ,mem_ipc_skip_continue_proc 
+784a 203a7841 branch check_51cmd ,blank 
+784b 20600000 rtn 
+
+check_51cmd_once:
+784c 20407825 call ui_ipc_get_lock 
+784d da2044db arg mem_ipc_fifo_c512bt ,rega 
+784e 20407d97 call fifo_out 
+784f 1fe20400 copy pdata ,temp 
+7850 20407829 call ui_ipc_put_lock 
+7851 44fcc01f bpatch patch1f_1 ,mem_patch1f 
+7852 18427e00 copy temp ,pdata 
+7853 207a0000 rtn blank 
+7854 c006f870 beq bt_cmd_start_adv ,check_51cmd_adv 
+7855 c0077876 beq bt_cmd_stop_adv ,check_51cmd_stop_adv 
+7856 c007f87b beq bt_cmd_start_direct_adv ,check_51cmd_direct_adv 
+7857 c0087881 beq bt_cmd_stop_direct_adv ,check_51cmd_stop_direct_adv 
+7858 c009f88b beq bt_cmd_led_off ,check_51cmd_led_off 
+7859 c00a788d beq bt_cmd_led_on ,check_51cmd_led_on 
+785a c00af88f beq bt_cmd_led_blink ,check_51cmd_led_start_blink 
+785b c00b7899 beq bt_cmd_le_start_conn ,check_51cmd_le_start_con 
+785c c00bf89c beq bt_cmd_le_start_scan ,check_51cmd_start_scan 
+785d c00c789e beq bt_cmd_le_stop_scan ,check_51cmd_stop_scan 
+785e c00cf8a1 beq bt_cmd_enter_hibernate ,check_51cmd_hibernate 
+785f 67e0866f store 1 ,mem_fifo_temp 
+
+check_51cmd_once_continue:
+7860 6fe0866f fetch 1 ,mem_fifo_temp 
+7861 c584f869 bmark0 mark_context ,check_51cmd_check_idle 
+7862 44fd401f bpatch patch1f_2 ,mem_patch1f 
+7863 6fe0866f fetch 1 ,mem_fifo_temp 
+7864 c008f886 beq bt_cmd_le_disconnect ,check_51cmd_le_disconnect 
+7865 c00df8a9 beq bt_cmd_le_smp_security_request ,check_51cmd_le_smp_sec_req 
+7866 c009788a beq bt_cmd_le_update_conn ,check_51cmd_ble_update_connect_param 
+7867 c00feea3 beq bt_cmd_store_reconn_info_le ,eeprom_store_le_reconn_info 
+7868 20600000 rtn 
+
+check_51cmd_check_idle:
+7869 67e0866f store 1 ,mem_fifo_temp 
+786a 2040205d call context_check_idle 
+786b 2022f86e branch check_51cmd_restore ,zero 
+786c 20402062 call context_search_plap 
+786d 24628000 nrtn zero 
+
+check_51cmd_restore:
+786e 70066e01 jam ipc_skip_continue_process ,mem_ipc_skip_continue_proc 
+786f 20207834 branch ui_ipc_send_cmd 
+
+check_51cmd_adv:
+7870 70438801 jam on ,mem_le_adv_enable 
+7871 70438b00 jam adv_ind ,mem_le_adv_type 
+7872 6fe144e9 fetch 2 ,mem_ui_state_map 
+7873 79207e0b set1 ui_state_ble_adv ,pdata 
+7874 67e144e9 store 2 ,mem_ui_state_map 
+7875 20600000 rtn 
+
+check_51cmd_stop_adv:
+7876 6fe144e9 fetch 2 ,mem_ui_state_map 
+7877 793ffe0b set0 ui_state_ble_adv ,pdata 
+7878 67e144e9 store 2 ,mem_ui_state_map 
+7879 70438800 jam off ,mem_le_adv_enable 
+787a 20600000 rtn 
+
+check_51cmd_direct_adv:
+787b 70438801 jam on ,mem_le_adv_enable 
+787c 70438b01 jam adv_direct_ind ,mem_le_adv_type 
+787d 6fe144e9 fetch 2 ,mem_ui_state_map 
+787e 79207e0b set1 ui_state_ble_adv ,pdata 
+787f 67e144e9 store 2 ,mem_ui_state_map 
+7880 20600000 rtn 
+
+check_51cmd_stop_direct_adv:
+7881 6fe144e9 fetch 2 ,mem_ui_state_map 
+7882 793ffe0b set0 ui_state_ble_adv ,pdata 
+7883 67e144e9 store 2 ,mem_ui_state_map 
+7884 70438800 jam off ,mem_le_adv_enable 
+7885 20600000 rtn 
+
+check_51cmd_le_disconnect:
+7886 58000014 setarg 20 
+7887 67e10196 store 2 ,mem_le_superto 
+7888 67e142f5 store 2 ,mem_le_init_superto 
+7889 202030c5 branch le_send_terminate_ind_user_terminated 
+
+check_51cmd_ble_update_connect_param:
+788a 20202e93 branch le_l2cap_tx_update_req 
+
+check_51cmd_led_off:
+788b da200000 arg 0 ,rega 
+788c 202077bf branch ui_led_off_global 
+
+check_51cmd_led_on:
+788d da200000 arg 0 ,rega 
+788e 202077ba branch ui_led_on_global 
+
+check_51cmd_led_start_blink:
+788f da200000 arg 0 ,rega 
+7890 204077a7 call calc_curr_struct_prt 
+7891 efe08012 ifetch 1 ,regb 
+7892 c000f896 beq ui_led_state_blink_start ,check_51cmd_led_start_blink_in_blink 
+7893 c0027896 beq ui_led_state_blink_lighting ,check_51cmd_led_start_blink_in_blink 
+7894 c002f896 beq ui_led_state_blink_darking ,check_51cmd_led_start_blink_in_blink 
+7895 202077c4 branch ui_led_blink_start_global 
+
+check_51cmd_led_start_blink_in_blink:
+7896 efe08006 ifetch 1 ,contr 
+7897 c17f8000 rtneq led_infinite_flash_num 
+7898 202077c4 branch ui_led_blink_start_global 
+
+check_51cmd_le_start_con:
+7899 70434301 jam on ,mem_le_scan_enable 
+789a 7041141b jam hci_cmd_le_create_conn ,mem_hci_cmd 
+789b 20600000 rtn 
+
+check_51cmd_start_scan:
+789c 70434301 jam on ,mem_le_scan_enable 
+789d 20600000 rtn 
+
+check_51cmd_stop_scan:
+789e 70434300 jam off ,mem_le_scan_enable 
+789f 70411400 jam 0 ,mem_hci_cmd 
+78a0 20600000 rtn 
+
+check_51cmd_hibernate:
+78a1 6fe143d5 fetch 2 ,mem_cb_before_hibernate 
+78a2 20407d79 call callback_func 
+78a3 6fe0c4ec fetch 1 ,mem_ui_button_gpio 
+78a4 c07ff8a7 beq ui_button_gpio_disable ,check_51cmd_hibernate_btn_disabled 
+78a5 1fe20400 copy pdata ,temp 
+78a6 20406edd call gpio_config_input 
+
+check_51cmd_hibernate_btn_disabled:
+78a7 2040783d call ui_ipc_clean_all_fifo 
+78a8 20202417 branch lpm_hibernate 
+
+check_51cmd_le_smp_sec_req:
+78a9 20202ed5 branch le_send_smp_security_request 
+
+ui_check_paring_button:
+78aa 6fe0c4e9 fetch 1 ,mem_ui_state_map 
+78ab c4060000 rtnbit0 ui_state_btn_down 
+78ac 20600000 rtn 
+
+queue_init:
+78ad 6fe143fb fetch 2 ,mem_queue_ptr 
+78ae 1fe08a02 add pdata ,queue_offset_curr_num ,contw 
+78af 58000000 setarg 0 
+78b0 e7e18005 istore 3 ,contw 
+78b1 20600000 rtn 
+
+queue_push:
+78b2 44fdc01f bpatch patch1f_3 ,mem_patch1f 
+78b3 20407dbc call disable_user 
+78b4 204078fe call queue_full 
+78b5 207a0000 rtn blank 
+78b6 6fe143fb fetch 2 ,mem_queue_ptr 
+78b7 1fe0a402 add pdata ,queue_offset_curr_num ,regb 
+78b8 e8408012 ifetcht 1 ,regb 
+78b9 18408401 increase 1 ,temp 
+78ba e0408012 istoret 1 ,regb 
+78bb e840803f ifetcht 1 ,pdata 
+78bc 18427200 copy temp ,loopcnt 
+78bd 1fe0a404 add pdata ,queue_offset_write_ptr ,regb 
+78be efe08012 ifetch 1 ,regb 
+78bf 984ffe00 imul32 temp ,pdata 
+78c0 98c08a00 iadd contr ,contw 
+78c1 1a220c00 copy rega ,contr 
+
+calc_queue_next_ptr:
+78c2 20407cda call memcpy 
+78c3 20407902 call queue_get_size 
+78c4 1fe0ffff pincrease -1 
+78c5 e8408012 ifetcht 1 ,regb 
+78c6 18408401 increase 1 ,temp 
+78c7 98410400 iand temp ,temp 
+78c8 e0408012 istoret 1 ,regb 
+78c9 20207dba branch enable_user 
+
+queue_pop:
+78ca 44fe401f bpatch patch1f_4 ,mem_patch1f 
+78cb 20407dbc call disable_user 
+78cc 204078fa call queue_empty 
+78cd 207a0000 rtn blank 
+78ce 6fe143fb fetch 2 ,mem_queue_ptr 
+78cf 1fe0a402 add pdata ,queue_offset_curr_num ,regb 
+78d0 e8408012 ifetcht 1 ,regb 
+78d1 184085ff increase -1 ,temp 
+78d2 e0408012 istoret 1 ,regb 
+78d3 e840803f ifetcht 1 ,pdata 
+78d4 18427200 copy temp ,loopcnt 
+78d5 1fe0a403 add pdata ,queue_offset_read_ptr ,regb 
+78d6 efe08012 ifetch 1 ,regb 
+78d7 984ffe00 imul32 temp ,pdata 
+78d8 98c08c00 iadd contr ,contr 
+78d9 18c08c01 increase 1 ,contr 
+78da 1a220a00 copy rega ,contw 
+78db 202078c2 branch calc_queue_next_ptr 
+
+queue_get_new_ele:
+78dc 20407dbc call disable_user 
+78dd 204078fa call queue_empty 
+78de 207a0000 rtn blank 
+78df 6fe143fb fetch 2 ,mem_queue_ptr 
+78e0 e840803f ifetcht 1 ,pdata 
+78e1 18427200 copy temp ,loopcnt 
+78e2 1fe0a403 add pdata ,queue_offset_read_ptr ,regb 
+78e3 efe08012 ifetch 1 ,regb 
+78e4 984ffe00 imul32 temp ,pdata 
+78e5 98c08c00 iadd contr ,contr 
+78e6 18c08c01 increase 1 ,contr 
+78e7 18c22400 copy contr ,regb 
+78e8 1a220a00 copy rega ,contw 
+78e9 20407cda call memcpy 
+78ea 20207dba branch enable_user 
+
+queue_store_new_ele:
+78eb 20407dbc call disable_user 
+78ec 204078fa call queue_empty 
+78ed 207a0000 rtn blank 
+78ee 6fe143fb fetch 2 ,mem_queue_ptr 
+78ef e840803f ifetcht 1 ,pdata 
+78f0 18427200 copy temp ,loopcnt 
+78f1 1fe0a403 add pdata ,queue_offset_read_ptr ,regb 
+78f2 efe08012 ifetch 1 ,regb 
+78f3 984ffe00 imul32 temp ,pdata 
+78f4 98c08c00 iadd contr ,contr 
+78f5 18c08a02 add contr ,2 ,contw 
+78f6 1a220c00 copy rega ,contr 
+78f7 1f20f3ff increase -1 ,loopcnt 
+78f8 20407cda call memcpy 
+78f9 20207dba branch enable_user 
+
+queue_empty:
+78fa 6fe143fb fetch 2 ,mem_queue_ptr 
+78fb 1fe08c02 add pdata ,queue_offset_curr_num ,contr 
+78fc efe08006 ifetch 1 ,contr 
+78fd 20600000 rtn 
+
+queue_full:
+78fe 20407902 call queue_get_size 
+78ff e8408006 ifetcht 1 ,contr 
+7900 98467e00 isub temp ,pdata 
+7901 20600000 rtn 
+
+queue_get_size:
+7902 6fe143fb fetch 2 ,mem_queue_ptr 
+7903 1fe08c01 add pdata ,queue_offset_length ,contr 
+7904 efe08006 ifetch 1 ,contr 
+7905 20600000 rtn 
+
+usb_isr:
+7906 44fec01f bpatch patch1f_5 ,mem_patch1f 
+7907 6ff08c22 fetch 1 ,core_usb_status 
+7908 2feffe03 isolate1 usb_status_reset ,pdata 
+7909 2040f915 call usb_init_restart ,true 
+790a 6ff10c22 fetch 2 ,core_usb_status 
+790b 67f10c22 store 2 ,core_usb_status 
+790c 67e10709 store 2 ,mem_usb_status 
+790d 20407973 call usb_nak_state_judge 
+790e 204079a2 call usb_rx 
+790f 20407b96 call usb0_tx 
+7910 20407bdf call usb_tx 
+7911 2020796b branch usb_nak_state 
+
+usb_init:
+7912 44ff401f bpatch patch1f_6 ,mem_patch1f 
+7913 20407396 call enable_authrom 
+7914 20407932 call usb_init_param 
+
+usb_init_restart:
+7915 708c0000 jam 0x00 ,core_usb_config 
+7916 20002710 nop 10000 
+7917 708c1200 jam 0x0 ,core_usb_hmode 
+7918 6ff10050 fetch 2 ,core_clkoff 
+7919 793ffe0a set0 clock_off_usb ,pdata 
+791a 67f10050 store 2 ,core_clkoff 
+791b 708c1021 jam 0x21 ,core_usb_epmap 
+791c 708c119d jam 0x9d ,core_usb_pupd 
+791d 708c003c jam 0x3c ,core_usb_config 
+791e 58000763 setarg mem_usb_rxbuf 
+791f 67f10c02 store 2 ,core_usb_rx_saddr 
+7920 67f10c06 store 2 ,core_usb_rxptr 
+7921 580007a3 setarg mem_usb_rxbuf_end 
+7922 67f10c04 store 2 ,core_usb_rx_eaddr 
+
+usb_init_next:
+7923 708c1280 jam 0x80 ,core_usb_hmode 
+7924 708c0100 jam 0 ,core_usb_addr 
+7925 708c22ff jam 0xff ,core_usb_status 
+7926 5800095f setarg mem_usb_clear_mem_end 
+7927 d8a0086d arg mem_usb_clear_mem_start ,contw 
+7928 98a67200 isub contw ,loopcnt 
+7929 20207ca1 branch clear_mem 
+
+usb_offline_check_init:
+792a 6848886c fetcht 1 ,mem_usb_offline_check_gpio 
+792b 20206edd branch gpio_config_input 
+
+usb_offline_state:
+792c 6fe0890e fetch 1 ,mem_usb_device_enumeration_endflag 
+792d 207a0000 rtn blank 
+792e 6848886c fetcht 1 ,mem_usb_offline_check_gpio 
+792f 20406ee6 call gpio_get_bit 
+7930 2020f915 branch usb_init_restart ,true 
+7931 20600000 rtn 
+
+usb_init_param:
+7932 70086b02 jam dev_default ,mem_usb0_state 
+7933 58000000 setarg 0x0 
+7934 67e087a6 store 1 ,mem_remain 
+7935 67e10865 store 2 ,mem_usb_zero_packet 
+7936 1fe0fe01 pincrease 1 
+7937 67e10867 store 2 ,mem_usb_ones_packet 
+7938 1fe0fe01 pincrease 1 
+7939 67e10869 store 2 ,mem_usb_two_packet 
+793a d8a007fa arg mem_string0 ,contw 
+793b 58030404 setarg 0x030404 
+793c e7e18005 istore 3 ,contw 
+793d 58000409 setarg 0x0409 
+793e e7e10005 istore 2 ,contw 
+793f d8a007ff arg mem_string1 ,contw 
+7940 38015906 setsect 0 ,0x15906 
+7941 380610d2 setsect 1 ,0x210d2 
+7942 38090494 setsect 2 ,0x10494 
+7943 380c0001 setsect 3 ,0x1 
+7944 e7e48005 istore 9 ,contw 
+7945 d8a0081d arg mem_string2 ,contw 
+7946 3801570f setsect 0 ,0x1570f 
+7947 38055c9a setsect 1 ,0x15c9a 
+7948 380a56c6 setsect 2 ,0x256c6 
+7949 380dcdcd setsect 3 ,0x1cdcd 
+794a e7e48005 istore 9 ,contw 
+794b 38014420 setsect 0 ,0x14420 
+794c 38065d99 setsect 1 ,0x25d99 
+794d 380a5636 setsect 2 ,0x25636 
+794e 380c0001 setsect 3 ,0x1 
+794f e7e38005 istore 7 ,contw 
+7950 d8a0083b arg mem_string3 ,contw 
+7951 3801620a setsect 0 ,0x1620a 
+7952 38040c8c setsect 1 ,0xc8c 
+7953 380b0333 setsect 2 ,0x30333 
+7954 380cc0c0 setsect 3 ,0xc0c0 
+7955 e7e48005 istore 9 ,contw 
+7956 38003130 setsect 0 ,0x3130 
+7957 e7e10005 istore 2 ,contw 
+7958 58009272 setarg usb_kbdata_vendor_define_addr 
+7959 67e107a7 store 2 ,mem_hidreportdesc_kb 
+795a 580092cd setarg usb_msdata_addr 
+795b 67e107a9 store 2 ,mem_hidreportdesc_m 
+795c d8c09371 arg usb_devicedata_addr ,contr 
+795d d8a007ab arg mem_devicedesc ,contw 
+795e df200013 arg 19 ,loopcnt 
+795f 20407cda call memcpy 
+7960 d8c09384 arg usb_confdata_addr ,contr 
+7961 d8a007be arg mem_confdesc ,contw 
+7962 df20003c arg 60 ,loopcnt 
+7963 20407cda call memcpy 
+
+usb_config_cb:
+7964 6fe10859 fetch 2 ,mem_cb_usb_config 
+7965 20207d79 branch callback_func 
+
+usb_tx_interval_config:
+7966 6fe0885b fetch 1 ,mem_usb_tx_interval 
+7967 207a0000 rtn blank 
+7968 67e087e0 store 1 ,mem_confdesc + 34 
+7969 67e087f9 store 1 ,mem_confdesc + 59 
+796a 20600000 rtn 
+
+usb_nak_state:
+796b d8e00001 arg usb_timer_nak ,queue 
+796c 20407cef call timer_check 
+796d 247a0000 nrtn blank 
+796e 6fe0890f fetch 1 ,mem_usb_wakestate_onetime_flag 
+796f 247a0000 nrtn blank 
+7970 6fe0890e fetch 1 ,mem_usb_device_enumeration_endflag 
+7971 245a7c38 ncall usb_mac_wakeup_judge ,blank 
+7972 20600000 rtn 
+
+usb_nak_state_judge:
+7973 6fe08709 fetch 1 ,mem_usb_status 
+7974 c2817976 bbit1 usb_status_nak ,usb_nak_state_timer_init 
+7975 20600000 rtn 
+
+usb_nak_state_timer_init:
+7976 2040797b call usb0_attached_state_judge 
+7977 20407cee call timer_reinit 
+7978 58000280 setarg timer_nak_delay 
+7979 d8e00001 arg usb_timer_nak ,queue 
+797a 20207ce1 branch timer_init 
+
+usb0_attached_state_judge:
+797b 6fe08900 fetch 1 ,mem_usb_state 
+797c c0817980 bne usb_connected ,usb_clear_halt_dispose 
+797d 70090f00 jam 0 ,mem_usb_wakestate_onetime_flag 
+797e 70091000 jam 0 ,mem_usb_mac_wakeup_trig 
+797f 20600000 rtn 
+
+usb_clear_halt_dispose:
+7980 6fe08912 fetch 1 ,mem_usb_clear_halt 
+7981 207a0000 rtn blank 
+7982 70091200 jam 0 ,mem_usb_clear_halt 
+7983 70090002 jam usb_connected ,mem_usb_state 
+7984 70090e01 jam 1 ,mem_usb_device_enumeration_endflag 
+7985 20600000 rtn 
+
+usb_rx_no_data:
+7986 6fe08709 fetch 1 ,mem_usb_status 
+7987 c28079af bbit1 usb_status_setup ,usb_class_type 
+7988 20600000 rtn 
+
+usb_rx_len:
+7989 69510c02 fetchr contus ,2 ,core_usb_rx_saddr 
+798a 6a110c04 fetchr contue ,2 ,core_usb_rx_eaddr 
+798b 68710c06 fetchr contu ,2 ,core_usb_rxptr 
+798c efe10003 ifetch 2 ,contu 
+798d 1fec8400 rshift8 pdata ,temp 
+798e 18518400 rshift4 temp ,temp 
+798f d8c00fff arg 0xfff ,contr 
+7990 98c17200 iand contr ,loopcnt 
+7991 6721070c storer loopcnt ,2 ,mem_usb_read_len 
+7992 20600000 rtn 
+
+usb_rx_data:
+7993 20407989 call usb_rx_len 
+
+usb_rx_read:
+7994 efe08003 ifetch 1 ,contu 
+7995 e7e08005 istore 1 ,contw 
+7996 c2007994 loop usb_rx_read 
+7997 60710c06 storer contu ,2 ,core_usb_rxptr 
+7998 20600000 rtn 
+
+usb_rx_ep13:
+7999 d8a0095f arg mem_usb_ccid_buf ,contw 
+799a 20407994 call usb_rx_read 
+799b d8400963 arg mem_usb_ccid_buf + 4 ,temp 
+799c 60590c0e storet 2 ,core_usb_tx_saddr3 
+799d 6fe08960 fetch 1 ,mem_usb_ccid_buf + 1 
+799e 1fe0fe06 pincrease 6 
+799f e7e08002 istore 1 ,temp 
+79a0 708c1808 jam 0x8 ,core_usb_trig 
+79a1 20600000 rtn 
+
+usb_rx:
+79a2 44ffc01f bpatch patch1f_7 ,mem_patch1f 
+79a3 6fe08709 fetch 1 ,mem_usb_status 
+79a4 c4028000 rtnbit0 usb_status_rxready 
+79a5 20407989 call usb_rx_len 
+79a6 2841fe0d compare 13 ,temp ,0xff 
+79a7 2020f999 branch usb_rx_ep13 ,true 
+79a8 d8a0086d arg mem_usb_setup ,contw 
+79a9 20407994 call usb_rx_read 
+79aa 6fe0870c fetch 1 ,mem_usb_read_len 
+79ab c0007986 beq 0x00 ,usb_rx_no_data 
+79ac c000f9b6 beq 0x01 ,usb_out_one_byte 
+79ad 1fe67c07 sub pdata ,7 ,null 
+79ae 20610000 rtn positive 
+
+usb_class_type:
+79af 47004020 bpatchx patch20_0 ,mem_patch20 
+79b0 793f8023 set0 mark_isstr ,mark 
+79b1 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+79b2 1fe17e80 and_into 0x80 ,pdata 
+79b3 c04079ba beq in_device ,usb_in_device 
+79b4 c00079c2 beq out_device ,usb_out_device 
+79b5 2020235a branch assert 
+
+usb_out_one_byte:
+79b6 6fe0886d fetch 1 ,mem_usb_setup 
+79b7 c3838000 rtnbit1 7 
+79b8 20407b6a call usb_get_led_status 
+79b9 202079e9 branch usb0_reply_zerolen 
+
+usb_in_device:
+79ba 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+79bb 1ff1fe00 rshift4 pdata ,pdata 
+79bc 1fe37e00 rshift pdata ,pdata 
+79bd 1fe17e03 and_into 0x03 ,pdata 
+79be c00079ca beq standard_req ,usb_in_standard_req 
+79bf c000f9d0 beq class_req ,usb_in_class_req 
+79c0 c00179d5 beq manufacturer_req ,usb_in_manufacturer_req 
+79c1 2020235a branch assert 
+
+usb_out_device:
+79c2 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+79c3 1ff1fe00 rshift4 pdata ,pdata 
+79c4 1fe37e00 rshift pdata ,pdata 
+79c5 1fe17e03 and_into 0x03 ,pdata 
+79c6 c00079d6 beq standard_req ,usb_out_standard_req 
+79c7 c000f9de beq class_req ,usb_out_class_req 
+79c8 c00179e3 beq manufacturer_req ,usb_out_manufacturer_req 
+79c9 2020235a branch assert 
+
+usb_in_standard_req:
+79ca 6fe0886e fetch 1 ,mem_usb_setup_brequest 
+79cb c00479eb beq get_configuration ,usb0_request_get_configuration 
+79cc c0037a01 beq get_descriptor ,usb0_request_get_descriptor 
+79cd c0057a46 beq get_interface ,usb0_request_get_interface 
+79ce c0007a58 beq get_status ,usb0_request_get_status 
+79cf 202079e4 branch usb0_force_stall 
+
+usb_in_class_req:
+79d0 6fe0886e fetch 1 ,mem_usb_setup_brequest 
+79d1 c0017a8d beq get_idle ,usb_get_idle 
+79d2 c000fa91 beq get_report ,usb_get_report 
+79d3 c001faa2 beq get_protocol ,usb_get_protocol_req 
+79d4 202079e4 branch usb0_force_stall 
+
+usb_in_manufacturer_req:
+79d5 202079e4 branch usb0_force_stall 
+
+usb_out_standard_req:
+79d6 6fe0886e fetch 1 ,mem_usb_setup_brequest 
+79d7 c000faac beq clear_feature ,usb0_request_clear_feature 
+79d8 c001fadb beq set_feature ,usb0_request_set_feature 
+79d9 c002fb06 beq set_address ,usb0_request_set_address 
+79da c004fb1f beq set_configuration ,usb0_request_set_configuration 
+79db c005fb3a beq set_interface ,usb0_request_set_interface 
+79dc c003f9e4 beq set_descriptor ,usb0_force_stall 
+79dd 202079e4 branch usb0_force_stall 
+
+usb_out_class_req:
+79de 6fe0886e fetch 1 ,mem_usb_setup_brequest 
+79df c0057b4b beq set_idle ,usb_set_idle 
+79e0 c004fb5d beq set_report ,usb_set_report 
+79e1 c005fb7c beq set_protocol ,usb_set_protocol_req 
+79e2 202079e4 branch usb0_force_stall 
+
+usb_out_manufacturer_req:
+79e3 202079e4 branch usb0_force_stall 
+
+usb0_force_stall:
+79e4 4700c020 bpatchx patch20_1 ,mem_patch20 
+79e5 6ff08c19 fetch 1 ,core_usb_stall 
+79e6 79207e00 set1 0 ,pdata 
+79e7 67f08c19 store 1 ,core_usb_stall 
+79e8 202079e9 branch usb0_reply_zerolen 
+
+usb0_reply_zerolen:
+79e9 708c1b01 jam 0x1 ,core_usb_clear_nak 
+79ea 20600000 rtn 
+
+usb0_request_get_configuration:
+79eb 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+79ec c0c079e4 bne in_device ,usb0_force_stall 
+79ed 6fe08871 fetch 1 ,mem_usb_setup_windex 
+79ee c08079e4 bne 0 ,usb0_force_stall 
+79ef 6fe08872 fetch 1 ,mem_usb_setup_windex + 1 
+79f0 c08079e4 bne 0 ,usb0_force_stall 
+79f1 6fe08873 fetch 1 ,mem_usb_setup_blength 
+79f2 c080f9e4 bne 1 ,usb0_force_stall 
+79f3 6fe08874 fetch 1 ,mem_usb_setup_blengthh 
+79f4 c08079e4 bne 0 ,usb0_force_stall 
+79f5 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+79f6 c08079e4 bne 0 ,usb0_force_stall 
+79f7 6fe08870 fetch 1 ,mem_usb_setup_bvalue + 1 
+79f8 c08079e4 bne 0 ,usb0_force_stall 
+79f9 6fe0886b fetch 1 ,mem_usb0_state 
+79fa c00279fd beq dev_configured ,usb0_request_get_cfg_dev_cfg 
+79fb c001f9ff beq dev_address ,usb0_request_get_cfg_dev_addr 
+79fc 202079e4 branch usb0_force_stall 
+
+usb0_request_get_cfg_dev_cfg:
+79fd da400001 arg 1 ,regb 
+79fe 20207a72 branch usb_send_ones_packet 
+
+usb0_request_get_cfg_dev_addr:
+79ff da400001 arg 1 ,regb 
+7a00 20207a70 branch usb_send_zero_packet 
+
+usb0_request_get_descriptor:
+7a01 47014020 bpatchx patch20_2 ,mem_patch20 
+7a02 6fe08870 fetch 1 ,mem_usb_setup_bvalueh 
+7a03 c000fa14 beq dsc_device ,dsc_device_info 
+7a04 c0017a2d beq dsc_config ,dsc_config_info 
+7a05 c001fa30 beq dsc_string ,dsc_string_info 
+7a06 c010fa09 beq dsc_hid ,dsc_hid_info 
+7a07 c0117a3e beq dsc_hid_report ,dsc_hid_report_info 
+7a08 202079e4 branch usb0_force_stall 
+
+dsc_hid_info:
+7a09 7008fd00 jam 0 ,mem_usb_get_protocol_flag 
+7a0a 6fe08871 fetch 1 ,mem_usb_setup_windex 
+7a0b c0007a0e beq 0 ,dsc_hid_info_interface0 
+7a0c c000fa11 beq 1 ,dsc_hid_info_interface1 
+7a0d 202079e4 branch usb0_force_stall 
+
+dsc_hid_info_interface0:
+7a0e 6a4087d1 fetchr regb ,1 ,mem_confdesc + 19 
+7a0f da2007d1 arg mem_confdesc + 19 ,rega 
+7a10 20207b8b branch usb0_respond 
+
+dsc_hid_info_interface1:
+7a11 6a4087ea fetchr regb ,1 ,mem_confdesc + 44 
+7a12 da2007ea arg mem_confdesc + 44 ,rega 
+7a13 20207b8b branch usb0_respond 
+
+dsc_device_info:
+7a14 6fe08911 fetch 1 ,mem_usb_set_high_addr_flag 
+7a15 245a7a25 ncall usb_set_high_addr ,blank 
+7a16 580007ab setarg mem_devicedesc 
+7a17 684887ab fetcht 1 ,mem_devicedesc 
+
+dsc_info_set_data_len:
+7a18 67e10908 store 2 ,mem_dsc_info_data_pointer 
+7a19 6048890a storet 1 ,mem_dsc_info_len 
+7a1a 6fe08873 fetch 1 ,mem_usb_setup_blength 
+7a1b 98467c00 isub temp ,null 
+7a1c 24217a23 nbranch dsc_info_set_current_data_len ,positive 
+
+dsc_info_set_initial_data_len:
+7a1d 6fe0890a fetch 1 ,mem_dsc_info_len 
+
+dsc_info_set_data_size_completed:
+7a1e 98002400 iforce regb 
+7a1f 6fe10908 fetch 2 ,mem_dsc_info_data_pointer 
+7a20 1fe0fe01 add pdata ,1 ,pdata 
+7a21 98002200 iforce rega 
+7a22 20207b8b branch usb0_respond 
+
+dsc_info_set_current_data_len:
+7a23 6fe08873 fetch 1 ,mem_usb_setup_blength 
+7a24 20207a1e branch dsc_info_set_data_size_completed 
+
+usb_set_high_addr:
+7a25 6ff08c01 fetch 1 ,core_usb_addr 
+7a26 245a7a29 ncall usb0_set_addr ,blank 
+7a27 70091100 jam 0 ,mem_usb_set_high_addr_flag 
+7a28 20600000 rtn 
+
+usb0_set_addr:
+7a29 6ff08c01 fetch 1 ,core_usb_addr 
+7a2a 79207e07 set1 7 ,pdata 
+7a2b 67f08c01 store 1 ,core_usb_addr 
+7a2c 20600000 rtn 
+
+dsc_config_info:
+7a2d 580007be setarg mem_confdesc 
+7a2e 684887be fetcht 1 ,mem_confdesc 
+7a2f 20207a18 branch dsc_info_set_data_len 
+
+dsc_string_info:
+7a30 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7a31 1fe67c03 sub pdata ,3 ,null 
+7a32 242179e4 nbranch usb0_force_stall ,positive 
+7a33 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7a34 da2007fa arg mem_string0 ,rega 
+7a35 c0007b89 beq 0 ,usb0_respond_length 
+7a36 79200023 set1 mark_isstr ,mark 
+7a37 da2007ff arg mem_string1 ,rega 
+7a38 c000fb89 beq 1 ,usb0_respond_length 
+7a39 da20081d arg mem_string2 ,rega 
+7a3a c0017b89 beq 2 ,usb0_respond_length 
+7a3b da20083b arg mem_string3 ,rega 
+7a3c c001fb89 beq 3 ,usb0_respond_length 
+7a3d 20600000 rtn 
+
+dsc_hid_report_info:
+7a3e 6fe10871 fetch 2 ,mem_usb_setup_windex 
+7a3f c000fa42 beq 1 ,dsc_hid_report_info0 
+7a40 6a2107a7 fetchr rega ,2 ,mem_hidreportdesc_kb 
+7a41 20207b89 branch usb0_respond_length 
+
+dsc_hid_report_info0:
+7a42 70090e01 jam 1 ,mem_usb_device_enumeration_endflag 
+7a43 70090001 jam usb_got_report_req ,mem_usb_state 
+7a44 6a2107a9 fetchr rega ,2 ,mem_hidreportdesc_m 
+7a45 20207b89 branch usb0_respond_length 
+
+usb0_request_get_interface:
+7a46 6fe0886b fetch 1 ,mem_usb0_state 
+7a47 c08279e4 bne dev_configured ,usb0_force_stall 
+7a48 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+7a49 c0c0f9e4 bne in_interface ,usb0_force_stall 
+7a4a 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7a4b c08079e4 bne 0 ,usb0_force_stall 
+7a4c 6fe08870 fetch 1 ,mem_usb_setup_bvalueh 
+7a4d c08079e4 bne 0 ,usb0_force_stall 
+7a4e 6fe08873 fetch 1 ,mem_usb_setup_blength 
+7a4f c080f9e4 bne 1 ,usb0_force_stall 
+7a50 6fe08874 fetch 1 ,mem_usb_setup_blengthh 
+7a51 c08079e4 bne 0 ,usb0_force_stall 
+7a52 6fe08871 fetch 1 ,mem_usb_setup_windex 
+7a53 c08079e4 bne 0 ,usb0_force_stall 
+7a54 6fe08872 fetch 1 ,mem_usb_setup_windex + 1 
+7a55 c08079e4 bne 0 ,usb0_force_stall 
+7a56 da400001 arg 1 ,regb 
+7a57 20207a70 branch usb_send_zero_packet 
+
+usb0_request_get_status:
+7a58 6fe0886b fetch 1 ,mem_usb0_state 
+7a59 c00179e4 beq dev_default ,usb0_force_stall 
+7a5a 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7a5b c08079e4 bne 0 ,usb0_force_stall 
+7a5c 6fe08870 fetch 1 ,mem_usb_setup_bvalueh 
+7a5d c08079e4 bne 0 ,usb0_force_stall 
+7a5e 6fe08873 fetch 1 ,mem_usb_setup_blength 
+7a5f c08179e4 bne 2 ,usb0_force_stall 
+7a60 6fe08874 fetch 1 ,mem_usb_setup_blengthh 
+7a61 c08079e4 bne 0 ,usb0_force_stall 
+7a62 6fe08872 fetch 1 ,mem_usb_setup_windex + 1 
+7a63 c08079e4 bne 0 ,usb0_force_stall 
+7a64 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+7a65 c0407a6b beq in_device ,usb0_get_status_in_device 
+7a66 c040fa76 beq in_interface ,usb0_get_status_in_interface 
+7a67 c0417a7a beq in_endpoint ,usb0_get_status_in_endpoint 
+7a68 202079e4 branch usb0_force_stall 
+
+usb0_sdsystem_dispose:
+7a69 70090301 jam 1 ,mem_sdsystem_wakeup_flag 
+7a6a 20207a74 branch usb_send_two_packet 
+
+usb0_get_status_in_device:
+7a6b 6fe08871 fetch 1 ,mem_usb_setup_windex 
+7a6c c08079e4 bne 0 ,usb0_force_stall 
+7a6d da400002 arg 2 ,regb 
+7a6e 6fe08901 fetch 1 ,mem_usb_remote_wakeup 
+7a6f c000fa69 beq 0x01 ,usb0_sdsystem_dispose 
+
+usb_send_zero_packet:
+7a70 da200865 arg mem_usb_zero_packet ,rega 
+7a71 20207b8b branch usb0_respond 
+
+usb_send_ones_packet:
+7a72 da200867 arg mem_usb_ones_packet ,rega 
+7a73 20207b8b branch usb0_respond 
+
+usb_send_two_packet:
+7a74 da200869 arg mem_usb_two_packet ,rega 
+7a75 20207b8b branch usb0_respond 
+
+usb0_get_status_in_interface:
+7a76 6fe0886b fetch 1 ,mem_usb0_state 
+7a77 c08279e4 bne dev_configured ,usb0_force_stall 
+7a78 da400002 arg 2 ,regb 
+7a79 20207a70 branch usb_send_zero_packet 
+
+usb0_get_status_in_endpoint:
+7a7a 6fe0886b fetch 1 ,mem_usb0_state 
+7a7b c08279e4 bne dev_configured ,usb0_force_stall 
+7a7c 6fe08871 fetch 1 ,mem_usb_setup_windex 
+7a7d c040fa87 beq in_ep1 ,usb0_get_status_in_ep_in_ep1 
+7a7e c0417a89 beq in_ep2 ,usb0_get_status_in_ep_in_ep2 
+7a7f c041fa8b beq in_ep3 ,usb0_get_status_in_ep_in_ep3 
+7a80 1fe17e7f and_into 0x7f ,pdata 
+7a81 c0007a83 beq 0x00 ,usb0_get_status_in_ep_in_ep0 
+7a82 202079e4 branch usb0_force_stall 
+
+usb0_get_status_in_ep_in_ep0:
+7a83 6fe08904 fetch 1 ,mem_usb_ep0_stall_status 
+
+usb0_get_status_in_ep_in_ack:
+7a84 da400002 arg 2 ,regb 
+7a85 c000fa72 beq 1 ,usb_send_ones_packet 
+7a86 20207a70 branch usb_send_zero_packet 
+
+usb0_get_status_in_ep_in_ep1:
+7a87 6fe08905 fetch 1 ,mem_usb_ep1_stall_status 
+7a88 20207a84 branch usb0_get_status_in_ep_in_ack 
+
+usb0_get_status_in_ep_in_ep2:
+7a89 6fe08906 fetch 1 ,mem_usb_ep2_stall_status 
+7a8a 20207a84 branch usb0_get_status_in_ep_in_ack 
+
+usb0_get_status_in_ep_in_ep3:
+7a8b 6fe08907 fetch 1 ,mem_usb_ep3_stall_status 
+7a8c 20207a84 branch usb0_get_status_in_ep_in_ack 
+
+usb_get_idle:
+7a8d 7008fb01 jam 1 ,mem_usb_idle_flag 
+7a8e da2008fc arg mem_usb_idle_rate ,rega 
+7a8f da400001 arg 1 ,regb 
+7a90 20207b8b branch usb0_respond 
+
+usb_get_report:
+7a91 6fe1086f fetch 2 ,mem_usb_setup_bvalue 
+7a92 d84001ba arg pc_get_report ,temp 
+7a93 98467c00 isub temp ,null 
+7a94 2422f9e4 nbranch usb0_force_stall ,zero 
+
+usb_get_report_dispose:
+7a95 6fe088f8 fetch 1 ,mem_usb0_data_ready_report 
+7a96 243a7a9f nbranch usb_get_report_data_success ,blank 
+7a97 7008b500 jam pc_get_nondata ,mem_usb0_get_report_data 
+
+usb_get_report_send_data:
+7a98 6fe08873 fetch 1 ,mem_usb_setup_blength 
+7a99 98002400 iforce regb 
+7a9a da2008b5 arg mem_usb0_get_report_data ,rega 
+7a9b 20407b8b call usb0_respond 
+
+usb_get_report_data_release:
+7a9c d8a008b5 arg mem_usb0_get_report_data ,contw 
+7a9d df200040 arg 64 ,loopcnt 
+7a9e 20207ca3 branch memset0 
+
+usb_get_report_data_success:
+7a9f 7008f800 jam 0 ,mem_usb0_data_ready_report 
+7aa0 7008b501 jam pc_get_data ,mem_usb0_get_report_data 
+7aa1 20207a98 branch usb_get_report_send_data 
+
+usb_get_protocol_req:
+7aa2 6fe08873 fetch 1 ,mem_usb_setup_blength 
+7aa3 c080f9e4 bne 1 ,usb0_force_stall 
+7aa4 7008fd01 jam 1 ,mem_usb_get_protocol_flag 
+7aa5 da400001 arg 1 ,regb 
+7aa6 6fe088ff fetch 1 ,mem_usb_set_protocol_value 
+7aa7 c0007aaa beq 0 ,usb_get_report_protocol 
+7aa8 c000faab beq 1 ,usb_get_boot_protocol 
+7aa9 20207a70 branch usb_send_zero_packet 
+
+usb_get_report_protocol:
+7aaa 20207a72 branch usb_send_ones_packet 
+
+usb_get_boot_protocol:
+7aab 20207a70 branch usb_send_zero_packet 
+
+usb0_request_clear_feature:
+7aac 6fe0886b fetch 1 ,mem_usb0_state 
+7aad c08279e4 bne dev_configured ,usb0_force_stall 
+7aae 6fe08873 fetch 1 ,mem_usb_setup_blength 
+7aaf c08079e4 bne 0 ,usb0_force_stall 
+7ab0 6fe08874 fetch 1 ,mem_usb_setup_blengthh 
+7ab1 c08079e4 bne 0 ,usb0_force_stall 
+7ab2 6fe08870 fetch 1 ,mem_usb_setup_bvalueh 
+7ab3 c08079e4 bne 0 ,usb0_force_stall 
+7ab4 6fe08872 fetch 1 ,mem_usb_setup_windex + 1 
+7ab5 c08079e4 bne 0 ,usb0_force_stall 
+7ab6 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+7ab7 c0007abb beq out_device ,usb0_request_clear_feature_out_device 
+7ab8 c000fac8 beq out_interface ,usb0_request_clear_feature_out_interface 
+7ab9 c0017ac9 beq out_endpoint ,usb0_request_clear_feature_out_endpoint 
+7aba 202079e4 branch usb0_force_stall 
+
+usb0_request_clear_feature_out_device:
+7abb 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7abc c080f9e4 bne device_remote_wakeup ,usb0_force_stall 
+7abd 6ff08c00 fetch 1 ,core_usb_config 
+7abe 793ffe07 set0 7 ,pdata 
+7abf 67f08c00 store 1 ,core_usb_config 
+7ac0 70090100 jam 0 ,mem_usb_remote_wakeup 
+7ac1 70090201 jam 1 ,mem_usb_clear_remote_wakeup 
+7ac2 6fe08903 fetch 1 ,mem_sdsystem_wakeup_flag 
+7ac3 203a79e9 branch usb0_reply_zerolen ,blank 
+7ac4 70090300 jam 0 ,mem_sdsystem_wakeup_flag 
+7ac5 70090200 jam 0 ,mem_usb_clear_remote_wakeup 
+7ac6 70090002 jam usb_connected ,mem_usb_state 
+7ac7 202079e9 branch usb0_reply_zerolen 
+
+usb0_request_clear_feature_out_interface:
+7ac8 202079e4 branch usb0_force_stall 
+
+usb0_request_clear_feature_out_endpoint:
+7ac9 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7aca c08079e4 bne endpoint_halt ,usb0_force_stall 
+7acb 6fe08871 fetch 1 ,mem_usb_setup_windex 
+7acc c040fad4 beq in_ep1 ,usb0_force_stall_ep1_in_off 
+7acd c0417ad7 beq in_ep2 ,usb0_force_stall_ep2_in_off 
+7ace c041fad9 beq in_ep3 ,usb0_force_stall_ep3_in_off 
+7acf 1fe17e7f and_into 0x7f ,pdata 
+7ad0 c0007ad2 beq 0x00 ,usb0_force_stall_ep0_in_off 
+7ad1 202079e4 branch usb0_force_stall 
+
+usb0_force_stall_ep0_in_off:
+7ad2 70090400 jam 0 ,mem_usb_ep0_stall_status 
+7ad3 202079e9 branch usb0_reply_zerolen 
+
+usb0_force_stall_ep1_in_off:
+7ad4 70090500 jam 0 ,mem_usb_ep1_stall_status 
+
+usb0_force_stall_ep1_in_off_reply:
+7ad5 70091201 jam 1 ,mem_usb_clear_halt 
+7ad6 202079e9 branch usb0_reply_zerolen 
+
+usb0_force_stall_ep2_in_off:
+7ad7 70090600 jam 0 ,mem_usb_ep2_stall_status 
+7ad8 20207ad5 branch usb0_force_stall_ep1_in_off_reply 
+
+usb0_force_stall_ep3_in_off:
+7ad9 70090700 jam 0 ,mem_usb_ep3_stall_status 
+7ada 20207ad5 branch usb0_force_stall_ep1_in_off_reply 
+
+usb0_request_set_feature:
+7adb 6fe08873 fetch 1 ,mem_usb_setup_blength 
+7adc c08079e4 bne 0 ,usb0_force_stall 
+7add 6fe08874 fetch 1 ,mem_usb_setup_blengthh 
+7ade c08079e4 bne 0 ,usb0_force_stall 
+7adf 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+7ae0 c0007ae4 beq out_device ,usb0_request_set_feature_out_device 
+7ae1 c000faf2 beq out_interface ,usb0_request_set_feature_out_interface 
+7ae2 c0017af3 beq out_endpoint ,usb0_request_set_feature_out_endpoint 
+7ae3 202079e4 branch usb0_force_stall 
+
+usb0_request_set_feature_out_device:
+7ae4 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7ae5 c080f9e4 bne device_remote_wakeup ,usb0_force_stall 
+7ae6 204048b1 call dongle_set_pc_sleep_flag 
+7ae7 6ff08c00 fetch 1 ,core_usb_config 
+7ae8 79207e07 set1 7 ,pdata 
+7ae9 67f08c00 store 1 ,core_usb_config 
+7aea 70090101 jam 1 ,mem_usb_remote_wakeup 
+7aeb 70090003 jam usb_sleep ,mem_usb_state 
+7aec 7008f900 jam 0 ,mem_usb_tx_win_enable 
+7aed 204079e9 call usb0_reply_zerolen 
+
+usb_wakeup_timer_reinit:
+7aee 20407cee call timer_reinit 
+7aef 58001388 setarg timer_wakeup_delay 
+7af0 d8e0000f arg usb_timer_wakeup ,queue 
+7af1 20207ce1 branch timer_init 
+
+usb0_request_set_feature_out_interface:
+7af2 202079e4 branch usb0_force_stall 
+
+usb0_request_set_feature_out_endpoint:
+7af3 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7af4 c08079e4 bne endpoint_halt ,usb0_force_stall 
+7af5 6fe08870 fetch 1 ,mem_usb_setup_bvalueh 
+7af6 c08079e4 bne 0 ,usb0_force_stall 
+7af7 6fe08871 fetch 1 ,mem_usb_setup_windex 
+7af8 c040fb00 beq in_ep1 ,usb0_force_stall_ep1_in_on 
+7af9 c0417b02 beq in_ep2 ,usb0_force_stall_ep2_in_on 
+7afa c041fb04 beq in_ep3 ,usb0_force_stall_ep3_in_on 
+7afb 1fe17e7f and_into 0x7f ,pdata 
+7afc c0007afe beq 0x00 ,usb0_force_stall_ep0_in_on 
+7afd 202079e4 branch usb0_force_stall 
+
+usb0_force_stall_ep0_in_on:
+7afe 70090401 jam 1 ,mem_usb_ep0_stall_status 
+7aff 202079e9 branch usb0_reply_zerolen 
+
+usb0_force_stall_ep1_in_on:
+7b00 70090501 jam 1 ,mem_usb_ep1_stall_status 
+7b01 202079e9 branch usb0_reply_zerolen 
+
+usb0_force_stall_ep2_in_on:
+7b02 70090601 jam 1 ,mem_usb_ep2_stall_status 
+7b03 202079e9 branch usb0_reply_zerolen 
+
+usb0_force_stall_ep3_in_on:
+7b04 70090701 jam 1 ,mem_usb_ep3_stall_status 
+7b05 202079e9 branch usb0_reply_zerolen 
+
+usb0_request_set_address:
+7b06 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+7b07 c08079e4 bne out_device ,usb0_force_stall 
+7b08 6fe08871 fetch 1 ,mem_usb_setup_windex 
+7b09 c08079e4 bne 0 ,usb0_force_stall 
+7b0a 6fe08872 fetch 1 ,mem_usb_setup_windex + 1 
+7b0b c08079e4 bne 0 ,usb0_force_stall 
+7b0c 6fe08873 fetch 1 ,mem_usb_setup_blength 
+7b0d c08079e4 bne 0 ,usb0_force_stall 
+7b0e 6fe08874 fetch 1 ,mem_usb_setup_blengthh 
+7b0f c08079e4 bne 0 ,usb0_force_stall 
+7b10 6fe08870 fetch 1 ,mem_usb_setup_bvalueh 
+7b11 c08079e4 bne 0 ,usb0_force_stall 
+7b12 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7b13 1fe17e80 and_into 0x80 ,pdata 
+7b14 c08079e4 bne 0 ,usb0_force_stall 
+7b15 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7b16 c0807b1d bne 0 ,usb_usb0_state_set_dev_addr 
+
+usb_usb0_state_set_dev_default:
+7b17 70086b02 jam dev_default ,mem_usb0_state 
+
+usb0_request_set_wait_address:
+7b18 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7b19 67f08c01 store 1 ,core_usb_addr 
+7b1a 204079e9 call usb0_reply_zerolen 
+7b1b 70091101 jam 1 ,mem_usb_set_high_addr_flag 
+7b1c 20600000 rtn 
+
+usb_usb0_state_set_dev_addr:
+7b1d 70086b03 jam dev_address ,mem_usb0_state 
+7b1e 20207b18 branch usb0_request_set_wait_address 
+
+usb0_request_set_configuration:
+7b1f 6fe0886b fetch 1 ,mem_usb0_state 
+7b20 c00179e4 beq dev_default ,usb0_force_stall 
+7b21 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+7b22 c08079e4 bne out_device ,usb0_force_stall 
+7b23 6fe08871 fetch 1 ,mem_usb_setup_windex 
+7b24 c08079e4 bne 0 ,usb0_force_stall 
+7b25 6fe08872 fetch 1 ,mem_usb_setup_windex + 1 
+7b26 c08079e4 bne 0 ,usb0_force_stall 
+7b27 6fe08873 fetch 1 ,mem_usb_setup_blength 
+7b28 c08079e4 bne 0 ,usb0_force_stall 
+7b29 6fe08874 fetch 1 ,mem_usb_setup_blengthh 
+7b2a c08079e4 bne 0 ,usb0_force_stall 
+7b2b 6fe08870 fetch 1 ,mem_usb_setup_bvalue + 1 
+7b2c c08079e4 bne 0 ,usb0_force_stall 
+7b2d 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7b2e 1fe67c01 sub pdata ,usb_max_num_cfg ,null 
+7b2f 242179e4 nbranch usb0_force_stall ,positive 
+7b30 6fe0886b fetch 1 ,mem_usb0_state 
+7b31 c001fb34 beq dev_address ,usb0_request_set_cfg_addr_state 
+7b32 c0027b34 beq dev_configured ,usb0_request_set_cfg_cfg_state 
+7b33 202079e4 branch usb0_force_stall 
+
+usb0_request_set_cfg_addr_state:
+
+usb0_request_set_cfg_cfg_state:
+7b34 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7b35 c0007b38 beq 0 ,usb0_request_set_cfg_stay_addr_state 
+7b36 70086b04 jam dev_configured ,mem_usb0_state 
+7b37 202079e9 branch usb0_reply_zerolen 
+
+usb0_request_set_cfg_stay_addr_state:
+7b38 70086b03 jam dev_address ,mem_usb0_state 
+7b39 202079e9 branch usb0_reply_zerolen 
+
+usb0_request_set_interface:
+7b3a 6fe0886b fetch 1 ,mem_usb0_state 
+7b3b c08279e4 bne dev_configured ,usb0_force_stall 
+7b3c 6fe0886d fetch 1 ,mem_usb_setup_bmrequesttype 
+7b3d c080f9e4 bne out_interface ,usb0_force_stall 
+7b3e 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7b3f c08079e4 bne 0 ,usb0_force_stall 
+7b40 6fe08870 fetch 1 ,mem_usb_setup_bvalueh 
+7b41 c08079e4 bne 0 ,usb0_force_stall 
+7b42 6fe08873 fetch 1 ,mem_usb_setup_blength 
+7b43 c08079e4 bne 0 ,usb0_force_stall 
+7b44 6fe08874 fetch 1 ,mem_usb_setup_blengthh 
+7b45 c08079e4 bne 0 ,usb0_force_stall 
+7b46 6fe08871 fetch 1 ,mem_usb_setup_windex 
+7b47 c08079e4 bne 0 ,usb0_force_stall 
+7b48 6fe08872 fetch 1 ,mem_usb_setup_windex + 1 
+7b49 c08079e4 bne 0 ,usb0_force_stall 
+7b4a 202079e9 branch usb0_reply_zerolen 
+
+usb_set_idle:
+7b4b 4701c020 bpatchx patch20_3 ,mem_patch20 
+7b4c 7008fb01 jam 1 ,mem_usb_idle_flag 
+7b4d 6fe08870 fetch 1 ,mem_usb_setup_bvalueh 
+7b4e 67e088fc store 1 ,mem_usb_idle_rate 
+7b4f 6fe08871 fetch 1 ,mem_usb_setup_windex 
+7b50 1fe67c01 sub pdata ,1 ,null 
+7b51 2042fb59 call usb_clear_remote_wakeup_set0 ,zero 
+7b52 6fe08900 fetch 1 ,mem_usb_state 
+7b53 c08279e9 bne usb_resume ,usb0_reply_zerolen 
+7b54 70090002 jam usb_connected ,mem_usb_state 
+7b55 204079e9 call usb0_reply_zerolen 
+7b56 20007530 nop 30000 
+7b57 20007530 nop 30000 
+7b58 20600000 rtn 
+
+usb_clear_remote_wakeup_set0:
+7b59 70090e01 jam 1 ,mem_usb_device_enumeration_endflag 
+7b5a 70090200 jam 0 ,mem_usb_clear_remote_wakeup 
+7b5b 70090004 jam usb_resume ,mem_usb_state 
+7b5c 20600000 rtn 
+
+usb_set_report:
+7b5d 20003a98 nop 15000 
+7b5e d8a00875 arg mem_usb0_set_report_data ,contw 
+7b5f 20407993 call usb_rx_data 
+7b60 7008f701 jam 1 ,mem_usb0_get_set_report 
+7b61 20407b6e call usb_set_report_resume_judge 
+7b62 6fe1086f fetch 2 ,mem_usb_setup_bvalue 
+7b63 67e108f5 store 2 ,mem_usb_setup_bvalue_temp 
+7b64 204079e9 call usb0_reply_zerolen 
+
+usb_set_report_next:
+7b65 6fe0c3cb fetch 1 ,mem_device_option 
+7b66 c1820000 rtnne dvc_op_dongle 
+7b67 6fe088f9 fetch 1 ,mem_usb_tx_win_enable 
+7b68 207a0000 rtn blank 
+7b69 6fe08875 fetch 1 ,mem_usb0_set_report_data 
+
+usb_get_led_status:
+7b6a 67e0c621 store 1 ,mem_24g_led_status 
+7b6b 7008f900 jam 0 ,mem_usb_tx_win_enable 
+7b6c 70461103 jam kb_led_ackpayload ,mem_24g_ackpayload_enable 
+7b6d 20600000 rtn 
+
+usb_set_report_resume_judge:
+7b6e 6fe1086f fetch 2 ,mem_usb_setup_bvalue 
+7b6f d8400200 arg pc_set_report_bvalue ,temp 
+7b70 98467c00 isub temp ,null 
+7b71 24628000 nrtn zero 
+7b72 6fe10871 fetch 2 ,mem_usb_setup_windex 
+7b73 d8400000 arg pc_set_report_windex ,temp 
+7b74 98467c00 isub temp ,null 
+7b75 24628000 nrtn zero 
+7b76 6fe10873 fetch 2 ,mem_usb_setup_blength 
+7b77 d8400001 arg pc_set_report_blength ,temp 
+7b78 98467c00 isub temp ,null 
+7b79 24628000 nrtn zero 
+7b7a 7008f901 jam 1 ,mem_usb_tx_win_enable 
+7b7b 20600000 rtn 
+
+usb_set_protocol_req:
+7b7c 6fe08873 fetch 1 ,mem_usb_setup_blength 
+7b7d c08079e4 bne 0 ,usb0_force_stall 
+7b7e 6fe0886f fetch 1 ,mem_usb_setup_bvalue 
+7b7f c0007b82 beq boot_protocol ,usb_set_boot_protocol 
+7b80 c000fb85 beq report_protocol ,usb_set_report_protocol 
+7b81 202079e4 branch usb0_force_stall 
+
+usb_set_boot_protocol:
+7b82 7008fe00 jam 0 ,mem_usb_set_protocol_status 
+7b83 7008ff01 jam 1 ,mem_usb_set_protocol_value 
+7b84 202079e9 branch usb0_reply_zerolen 
+
+usb_set_report_protocol:
+7b85 7008fa01 jam 1 ,mem_usb_tx_mac_enable 
+7b86 7008fe01 jam 1 ,mem_usb_set_protocol_status 
+7b87 7008ff00 jam 0 ,mem_usb_set_protocol_value 
+7b88 202079e9 branch usb0_reply_zerolen 
+
+usb0_respond_length:
+7b89 ea408011 ifetchr regb ,1 ,rega 
+7b8a 1a20a201 increase 1 ,rega 
+
+usb0_respond:
+7b8b 47024020 bpatchx patch20_4 ,mem_patch20 
+7b8c 7920000e set1 mark_usb_first_resp ,mark 
+7b8d c591fb90 bmark0 mark_isstr ,usb0_respond_nostr 
+7b8e 1a40a401 increase 1 ,regb 
+7b8f 1a43a400 lshift regb ,regb 
+
+usb0_respond_nostr:
+7b90 622107a4 storer rega ,2 ,mem_bufptr 
+7b91 624087a6 storer regb ,1 ,mem_remain 
+7b92 20207b96 branch usb0_tx 
+7b93 20600000 rtn 
+
+usb_no_respond_data:
+7b94 d8e00000 arg 0 ,queue 
+7b95 20207bd7 branch usb_trig 
+
+usb0_tx:
+7b96 4702c020 bpatchx patch20_5 ,mem_patch20 
+7b97 6ff08c25 fetch 1 ,core_usb_txbusy 
+7b98 c3800000 rtnbit1 0 
+7b99 6fe087a6 fetch 1 ,mem_remain 
+7b9a 207a0000 rtn blank 
+7b9b 1fe27200 copy pdata ,loopcnt 
+7b9c 98000400 iforce temp 
+7b9d 6fe10873 fetch 2 ,mem_usb_setup_blength 
+7b9e 1fe67c40 sub pdata ,ep0_packet_size ,null 
+7b9f 20217ba4 branch usb0_tx_short ,positive 
+7ba0 1f267c40 sub loopcnt ,ep0_packet_size ,null 
+7ba1 20217ba8 branch usb0_tx_info ,positive 
+7ba2 18007240 force ep0_packet_size ,loopcnt 
+7ba3 20207ba8 branch usb0_tx_info 
+
+usb0_tx_short:
+7ba4 9f267c00 isub loopcnt ,null 
+7ba5 20217ba8 branch usb0_tx_info ,positive 
+7ba6 98007200 iforce loopcnt 
+7ba7 67e087a6 store 1 ,mem_remain 
+
+usb0_tx_info:
+7ba8 6fe087a6 fetch 1 ,mem_remain 
+7ba9 9f267e00 isub loopcnt ,pdata 
+7baa 67e087a6 store 1 ,mem_remain 
+7bab 1f20ffff add loopcnt ,-1 ,pdata 
+7bac 67e0870e store 1 ,mem_usb_txbuf 
+7bad c591fbba bmark0 mark_isstr ,usb0_tx_nostr 
+7bae 1fe37e00 rshift pdata ,pdata 
+7baf 1f20ffff add loopcnt ,-1 ,pdata 
+7bb0 67e0870e store 1 ,mem_usb_txbuf 
+7bb1 c5877bba bmark0 mark_usb_first_resp ,usb0_tx_nostr 
+7bb2 793f800e set0 mark_usb_first_resp ,mark 
+7bb3 e0408005 istoret 1 ,contw 
+7bb4 58000003 setarg 3 
+7bb5 e7e08005 istore 1 ,contw 
+7bb6 1f20f3ff increase -1 ,loopcnt 
+7bb7 1f227e00 copy loopcnt ,pdata 
+7bb8 2422fbba nbranch usb0_tx_nostr ,zero 
+7bb9 1f20f201 increase 1 ,loopcnt 
+
+usb0_tx_nostr:
+7bba 6fe107a4 fetch 2 ,mem_bufptr 
+7bbb 1fe20c00 copy pdata ,contr 
+
+usb0_tx0:
+7bbc efe08006 ifetch 1 ,contr 
+7bbd e7e08005 istore 1 ,contw 
+7bbe c591fbc1 bmark0 mark_isstr ,usb0_tx1 
+7bbf 58000000 setarg 0 
+7bc0 e7e08005 istore 1 ,contw 
+
+usb0_tx1:
+7bc1 c2007bbc loop usb0_tx0 
+7bc2 18c27e00 copy contr ,pdata 
+7bc3 67e107a4 store 2 ,mem_bufptr 
+7bc4 5800070e setarg mem_usb_txbuf 
+7bc5 67f10c08 store 2 ,core_usb_tx_saddr0 
+7bc6 d8e00000 arg 0 ,queue 
+7bc7 20407bd7 call usb_trig 
+7bc8 6fe087a6 fetch 1 ,mem_remain 
+7bc9 247a0000 nrtn blank 
+7bca 708c1b02 jam 2 ,core_usb_clear_nak 
+7bcb 6fe08900 fetch 1 ,mem_usb_state 
+7bcc c1808000 rtnne usb_got_report_req 
+7bcd 70090002 jam usb_connected ,mem_usb_state 
+7bce 20600000 rtn 
+
+usb_tx_ep1:
+7bcf da20074f arg mem_usb_txbuf1 ,rega 
+7bd0 d8e00001 arg 1 ,queue 
+7bd1 62310c0a storer rega ,2 ,core_usb_tx_saddr1 
+
+usb_tx_buf:
+7bd2 1f20ffff add loopcnt ,-1 ,pdata 
+7bd3 e7e08011 istore 1 ,rega 
+
+usb_tx_loop:
+7bd4 efe08006 ifetch 1 ,contr 
+7bd5 e7e08005 istore 1 ,contw 
+7bd6 c2007bd4 loop usb_tx_loop 
+
+usb_trig:
+7bd7 58000000 setarg 0 
+7bd8 f9207e00 qset1 pdata 
+7bd9 67f08c18 store 1 ,core_usb_trig 
+7bda 20600000 rtn 
+
+usb_tx_ep2:
+7bdb d8e00002 arg 2 ,queue 
+7bdc da200759 arg mem_usb_txbuf2 ,rega 
+7bdd 62310c0c storer rega ,2 ,core_usb_tx_saddr2 
+7bde 20207bd2 branch usb_tx_buf 
+
+usb_tx:
+7bdf 47034020 bpatchx patch20_6 ,mem_patch20 
+7be0 6fe0890d fetch 1 ,mem_usb_tx_enable 
+7be1 207a0000 rtn blank 
+7be2 6ff08c25 fetch 1 ,core_usb_txbusy 
+7be3 1fe17e0f and_into 0x0f ,pdata 
+7be4 243a7c30 nbranch usb_inwake_state_tx_dispose ,blank 
+7be5 6fe0890e fetch 1 ,mem_usb_device_enumeration_endflag 
+7be6 203a7c06 branch usb_tx_fifo_release ,blank 
+7be7 6fe08900 fetch 1 ,mem_usb_state 
+7be8 c001fc40 beq usb_sleep ,usb_windows_wakeup 
+7be9 c0817c06 bne usb_connected ,usb_tx_fifo_release 
+7bea 6fe08902 fetch 1 ,mem_usb_clear_remote_wakeup 
+7beb 243a7c06 nbranch usb_tx_fifo_release ,blank 
+7bec 20407bee call usb_tx_data_ep1 
+7bed 20207bf9 branch usb_tx_data_ep2 
+
+usb_tx_data_ep1:
+7bee 6ff08c25 fetch 1 ,core_usb_txbusy 
+7bef c3808000 rtnbit1 1 
+7bf0 6fe0890d fetch 1 ,mem_usb_tx_enable 
+7bf1 c4008000 rtnbit0 1 
+7bf2 6fe0890d fetch 1 ,mem_usb_tx_enable 
+7bf3 793ffe01 set0 1 ,pdata 
+7bf4 67e0890d store 1 ,mem_usb_tx_enable 
+7bf5 6fe0890b fetch 1 ,mem_usb_ep1_data 
+7bf6 207a0000 rtn blank 
+7bf7 c0087c28 beq usb_ep1_kb ,usb_tx_kb_normal_data 
+7bf8 2020235a branch assert 
+
+usb_tx_data_ep2:
+7bf9 6ff08c25 fetch 1 ,core_usb_txbusy 
+7bfa c3810000 rtnbit1 2 
+7bfb 6fe0890d fetch 1 ,mem_usb_tx_enable 
+7bfc c4010000 rtnbit0 2 
+7bfd 6fe0890d fetch 1 ,mem_usb_tx_enable 
+7bfe 793ffe02 set0 2 ,pdata 
+7bff 67e0890d store 1 ,mem_usb_tx_enable 
+7c00 6fe0890c fetch 1 ,mem_usb_ep2_data 
+7c01 207a0000 rtn blank 
+7c02 c0107c09 beq usb_ep2_ms ,usb_tx_ms_data 
+7c03 c010fc24 beq usb_ep2_multikey ,usb_tx_kb_multikey_data 
+7c04 c0117c2c beq usb_ep2_systemkey ,usb_tx_kb_systemkey_data 
+7c05 2020235a branch assert 
+
+usb_tx_fifo_release:
+7c06 d8a00913 arg mem_usb_mouse_data ,contw 
+7c07 df200040 arg 64 ,loopcnt 
+7c08 20207ca3 branch memset0 
+
+usb_tx_ms_data:
+7c09 6fe088fb fetch 1 ,mem_usb_idle_flag 
+7c0a 684888fd fetcht 1 ,mem_usb_get_protocol_flag 
+7c0b 98417e00 iand temp ,pdata 
+7c0c 203a7c20 branch usb_tx_ms_data_normal_mode ,blank 
+7c0d 684888fe fetcht 1 ,mem_usb_set_protocol_status 
+7c0e 9840fe00 iadd temp ,pdata 
+7c0f c000fc11 beq mac_boot_mode ,usb_tx_ms_data_mac_boot_mode 
+7c10 20207c20 branch usb_tx_ms_data_normal_mode 
+
+usb_tx_ms_data_mac_boot_mode:
+7c11 70090c00 jam 0 ,mem_usb_ep2_data 
+
+usb_tx_ms_data_mac_boot_regroup:
+7c12 6fe08914 fetch 1 ,mem_usb_mouse_data + 1 
+7c13 c0017c21 beq r_key ,usb_tx_mac_boot_ms_regroup_r_or_lrkey 
+7c14 c001fc21 beq lr_key ,usb_tx_mac_boot_ms_regroup_r_or_lrkey 
+7c15 6fe08914 fetch 1 ,mem_usb_mouse_data + 1 
+7c16 67e08913 store 1 ,mem_usb_mouse_data 
+7c17 6fe08915 fetch 1 ,mem_usb_mouse_data + 2 
+7c18 e7e08005 istore 1 ,contw 
+7c19 6fe08917 fetch 1 ,mem_usb_mouse_data + 4 
+7c1a e7e08005 istore 1 ,contw 
+7c1b 6fe08919 fetch 1 ,mem_usb_mouse_data + 6 
+7c1c e7e08005 istore 1 ,contw 
+7c1d df200004 arg 4 ,loopcnt 
+7c1e d8c00913 arg mem_usb_mouse_data ,contr 
+7c1f 20207bdb branch usb_tx_ep2 
+
+usb_tx_ms_data_normal_mode:
+7c20 70090c00 jam 0 ,mem_usb_ep2_data 
+
+usb_tx_mac_boot_ms_regroup_r_or_lrkey:
+7c21 df200008 arg 8 ,loopcnt 
+7c22 d8c00913 arg mem_usb_mouse_data ,contr 
+7c23 20207bdb branch usb_tx_ep2 
+
+usb_tx_kb_multikey_data:
+7c24 70090c00 jam 0 ,mem_usb_ep2_data 
+7c25 df200003 arg 3 ,loopcnt 
+7c26 d8c00933 arg mem_usb_kb_multikey ,contr 
+7c27 20207bdb branch usb_tx_ep2 
+
+usb_tx_kb_normal_data:
+7c28 70090b00 jam 0 ,mem_usb_ep1_data 
+7c29 df200008 arg 8 ,loopcnt 
+7c2a d8c00923 arg mem_usb_kb_data ,contr 
+7c2b 20207bcf branch usb_tx_ep1 
+
+usb_tx_kb_systemkey_data:
+7c2c 70090c00 jam 0 ,mem_usb_ep2_data 
+7c2d df200002 arg 2 ,loopcnt 
+7c2e d8c00943 arg mem_usb_kb_system ,contr 
+7c2f 20207bdb branch usb_tx_ep2 
+
+usb_inwake_state_tx_dispose:
+7c30 6fe08900 fetch 1 ,mem_usb_state 
+7c31 c0017c33 beq usb_connected ,usb_mac_wakeup_trig 
+7c32 20600000 rtn 
+
+usb_mac_wakeup_trig:
+7c33 6ff08c00 fetch 1 ,core_usb_config 
+7c34 79207e07 set1 7 ,pdata 
+7c35 67f08c00 store 1 ,core_usb_config 
+7c36 70091001 jam 1 ,mem_usb_mac_wakeup_trig 
+7c37 20600000 rtn 
+
+usb_mac_wakeup_judge:
+7c38 6fe08900 fetch 1 ,mem_usb_state 
+7c39 c1018000 rtneq usb_sleep 
+7c3a c0017c3c beq usb_connected ,usb_mac_wakeup 
+7c3b 20600000 rtn 
+
+usb_mac_wakeup:
+7c3c 6fe08910 fetch 1 ,mem_usb_mac_wakeup_trig 
+7c3d 207a0000 rtn blank 
+7c3e 70090f01 jam 1 ,mem_usb_wakestate_onetime_flag 
+7c3f 20207c43 branch usb_wakeup 
+
+usb_windows_wakeup:
+7c40 d8e0000f arg usb_timer_wakeup ,queue 
+7c41 20407cef call timer_check 
+7c42 247a0000 nrtn blank 
+
+usb_wakeup:
+7c43 6ff08c00 fetch 1 ,core_usb_config 
+7c44 c4038000 rtnbit0 7 
+7c45 708c00fc jam 0xfc ,core_usb_config 
+7c46 20007530 nop 30000 
+7c47 708c003c jam 0x3c ,core_usb_config 
+7c48 20600000 rtn 
+
+push_stack:
+7c49 60a10691 storer contw ,2 ,mem_contw 
+7c4a 604c0678 storet 8 ,mem_temp 
+7c4b 61620680 storer timeup ,4 ,mem_timeup 
+7c4c 20407c51 call push_stack_rega_b_c 
+7c4d 60c1068f storer contr ,2 ,mem_contr 
+7c4e 6721069b storer loopcnt ,2 ,mem_loopcnt 
+7c4f 60e10699 storer queue ,2 ,mem_queue 
+7c50 20600000 rtn 
+
+push_stack_rega_b_c:
+7c51 62220684 storer rega ,4 ,mem_rega 
+7c52 62420688 storer regb ,4 ,mem_regb 
+7c53 6261868c storer regc ,3 ,mem_regc 
+7c54 20600000 rtn 
+
+pop_stack:
+7c55 4703c020 bpatchx patch20_7 ,mem_patch20 
+7c56 6fe10691 fetch 2 ,mem_contw 
+7c57 98000a00 iforce contw 
+7c58 684c0678 fetcht 8 ,mem_temp 
+7c59 69620680 fetchr timeup ,4 ,mem_timeup 
+7c5a 20407c60 call pop_stack_rega_b_c 
+7c5b 6f21069b fetchr loopcnt ,2 ,mem_loopcnt 
+7c5c 68e10699 fetchr queue ,2 ,mem_queue 
+7c5d 6fe1068f fetch 2 ,mem_contr 
+7c5e 98000c00 iforce contr 
+7c5f 20600000 rtn 
+
+pop_stack_rega_b_c:
+7c60 6a220684 fetchr rega ,4 ,mem_rega 
+7c61 6a420688 fetchr regb ,4 ,mem_regb 
+7c62 6a61868c fetchr regc ,3 ,mem_regc 
+7c63 20600000 rtn 
+
+get_contw:
+7c64 6fe10691 fetch 2 ,mem_contw 
+7c65 1fe20a00 copy pdata ,contw 
+7c66 20600000 rtn 
+
+get_contr:
+7c67 6fe1068f fetch 2 ,mem_contr 
+7c68 1fe20c00 copy pdata ,contr 
+7c69 20600000 rtn 
+
+store_contw:
+7c6a 18a27e00 copy contw ,pdata 
+7c6b 67e10691 store 2 ,mem_contw 
+7c6c 20600000 rtn 
+
+store_contr:
+7c6d 18c27e00 copy contr ,pdata 
+7c6e 67e1068f store 2 ,mem_contr 
+7c6f 20600000 rtn 
+
+save_cont_pointers:
+7c70 18a27e00 copy contw ,pdata 
+7c71 67e10691 store 2 ,mem_contw 
+7c72 18c27e00 copy contr ,pdata 
+7c73 67e1068f store 2 ,mem_contr 
+7c74 20600000 rtn 
+
+load_cont_pointers:
+7c75 6fe10691 fetch 2 ,mem_contw 
+7c76 1fe20a00 copy pdata ,contw 
+7c77 6fe1068f fetch 2 ,mem_contr 
+7c78 1fe20c00 copy pdata ,contr 
+7c79 20600000 rtn 
+
+get_diff:
+7c7a 98462200 isub temp ,rega 
+7c7b 20610000 rtn positive 
+7c7c da200100 arg 0x100 ,rega 
+7c7d 9a20fe00 iadd rega ,pdata 
+7c7e 98462200 isub temp ,rega 
+7c7f 20600000 rtn 
+
+memcpy96:
+7c80 20407c8d call memcpy32 
+
+memcpy64:
+7c81 20407c8d call memcpy32 
+7c82 20207c8d branch memcpy32 
+
+memcpy12:
+7c83 20407c89 call memcpy8 
+
+memcpy4:
+7c84 efe08006 ifetch 1 ,contr 
+7c85 e7e08005 istore 1 ,contw 
+
+memcpy3:
+7c86 efe18006 ifetch 3 ,contr 
+7c87 e7e18005 istore 3 ,contw 
+7c88 20600000 rtn 
+
+memcpy8:
+7c89 efe40006 ifetch 8 ,contr 
+7c8a e7e40005 istore 8 ,contw 
+7c8b 20600000 rtn 
+
+memcpy48:
+7c8c 20407c8f call memcpy16 
+
+memcpy32:
+7c8d 20407c89 call memcpy8 
+
+memcpy24:
+7c8e 20407c89 call memcpy8 
+
+memcpy16:
+7c8f 20407c89 call memcpy8 
+7c90 20207c89 branch memcpy8 
+
+delay:
+7c91 1fe0ffff increase -1 ,pdata 
+7c92 20000026 nop 38 
+7c93 243a7c91 nbranch delay ,blank 
+7c94 20600000 rtn 
+
+delay_10ms:
+7c95 df20000a arg 10 ,loopcnt 
+
+delay_ms_wait:
+7c96 20002ee0 nop 12000 
+7c97 c2007c96 loop delay_ms_wait 
+7c98 20600000 rtn 
+
+memset0_16:
+7c99 20407c9a call memset0_8 
+
+memset0_8:
+7c9a 20407c9b call memset0_4 
+
+memset0_4:
+7c9b 18007204 force 4 ,loopcnt 
+7c9c 20207ca3 branch memset0 
+
+clear_mem_256:
+7c9d 18007220 force 32 ,loopcnt 
+7c9e 20207ca3 branch memset0 
+
+clear_mem_512:
+7c9f 18007240 force 64 ,loopcnt 
+7ca0 20207ca3 branch memset0 
+
+clear_mem:
+7ca1 1f227e00 deposit loopcnt 
+7ca2 207a0000 rtn blank 
+
+memset0:
+7ca3 18007e00 force 0 ,pdata 
+7ca4 e7e00005 lstore contw 
+7ca5 20600000 rtn 
+
+clear_temp_block:
+7ca6 df200020 arg 32 ,loopcnt 
+7ca7 d8a006a1 arg mem_temp_block0 ,contw 
+7ca8 20207ca1 branch clear_mem 
+
+xor_loop:
+7ca9 efe20013 ifetch 4 ,regc 
+7caa e8420011 ifetcht 4 ,rega 
+7cab 9842fe00 ixor temp ,pdata 
+7cac e7e20005 istore 4 ,contw 
+7cad 1a20a204 increase 4 ,rega 
+7cae 1a60a604 increase 4 ,regc 
+7caf c2007ca9 loop xor_loop 
+7cb0 20600000 rtn 
+
+inverse_data:
+7cb1 47044021 bpatchx patch21_0 ,mem_patch21 
+7cb2 1f227e00 copy loopcnt ,pdata 
+7cb3 1fe67c01 sub pdata ,1 ,null 
+7cb4 20610000 rtn positive 
+7cb5 9a20a400 iadd rega ,regb 
+7cb6 1a40a5ff increase -1 ,regb 
+7cb7 1f237200 rshift loopcnt ,loopcnt 
+
+inverse_loop:
+7cb8 e8408011 ifetcht 1 ,rega 
+7cb9 efe08012 ifetch 1 ,regb 
+7cba e7e08011 istore 1 ,rega 
+7cbb e0408012 istoret 1 ,regb 
+7cbc 1a40a5ff increase -1 ,regb 
+7cbd 1a20a201 increase 1 ,rega 
+7cbe c2007cb8 loop inverse_loop 
+7cbf 20600000 rtn 
+
+le2be_6byte:
+
+inverse_data_6byte:
+7cc0 1fef0400 rshift32 pdata ,temp 
+7cc1 20407cc6 call inverse_data_4byte 
+7cc2 18508400 byteswap temp ,temp 
+7cc3 1ff07e00 lshift16 pdata ,pdata 
+7cc4 9841fe00 ior temp ,pdata 
+7cc5 20600000 rtn 
+
+le2be_4byte:
+
+inverse_data_4byte:
+7cc6 1ff10c00 rshift16 pdata ,contr 
+7cc7 18d08c00 byteswap contr ,contr 
+7cc8 1ff0fe00 byteswap pdata ,pdata 
+7cc9 1ff07e00 lshift16 pdata ,pdata 
+7cca 98c1fe00 ior contr ,pdata 
+7ccb 20600000 rtn 
+
+memcpy_fast:
+7ccc 4704c021 bpatchx patch21_1 ,mem_patch21 
+7ccd 1f227e00 deposit loopcnt 
+7cce 207a0000 rtn blank 
+
+memcpy_fast_loop:
+7ccf 1f20f3f8 increase -8 ,loopcnt 
+7cd0 20417c89 call memcpy8 ,positive 
+7cd1 20628000 rtn zero 
+7cd2 20217ccf branch memcpy_fast_loop ,positive 
+7cd3 1f20f208 increase 8 ,loopcnt 
+
+memcpy_fast_loop_four:
+7cd4 1f20f3fc increase -4 ,loopcnt 
+7cd5 20417c84 call memcpy4 ,positive 
+7cd6 20628000 rtn zero 
+7cd7 20217cd4 branch memcpy_fast_loop_four ,positive 
+7cd8 1f20f204 increase 4 ,loopcnt 
+7cd9 20207cda branch memcpy 
+
+memcpy:
+7cda 1f227e00 deposit loopcnt 
+7cdb 207a0000 rtn blank 
+
+memcpy_loop:
+7cdc efe08006 ifetch 1 ,contr 
+7cdd e7e08005 istore 1 ,contw 
+7cde c2007cdc loop memcpy_loop 
+7cdf 20600000 rtn 
+
+timer_stop:
+7ce0 58000000 setarg 0 
+
+timer_init:
+7ce1 67e10670 store 2 ,mem_pdatatemp 
+7ce2 47054021 bpatchx patch21_2 ,mem_patch21 
+7ce3 20407cef call timer_check 
+7ce4 68490670 fetcht 2 ,mem_pdatatemp 
+7ce5 d8a040f4 arg mem_timers ,contw 
+7ce6 18e3fe00 lshift queue ,pdata 
+7ce7 98a08a00 iadd contw ,contw 
+7ce8 e0410005 istoret 2 ,contw 
+7ce9 20600000 rtn 
+
+timer_check_timeout:
+7cea d9600800 arg 0x800 ,timeup 
+7ceb 19701600 lshift16 timeup ,timeup 
+7cec 9960fe00 iadd timeup ,pdata 
+7ced 20600000 rtn 
+
+timer_reinit:
+7cee d8e00000 arg 0 ,queue 
+
+timer_check:
+7cef 4705c021 bpatchx patch21_3 ,mem_patch21 
+7cf0 684a4095 fetcht 4 ,mem_last_clkn 
+7cf1 1c437e00 rshift clkn_bt ,pdata 
+7cf2 67e24095 store 4 ,mem_last_clkn 
+7cf3 98467c00 isub temp ,null 
+7cf4 24417cea ncall timer_check_timeout ,positive 
+7cf5 98461600 isub temp ,timeup 
+7cf6 19620400 copy timeup ,temp 
+7cf7 d8c040f4 arg mem_timers ,contr 
+7cf8 18c20a00 copy contr ,contw 
+7cf9 df200010 arg 16 ,loopcnt 
+
+timer_loop:
+7cfa efe10006 ifetch 2 ,contr 
+7cfb 98467e00 isub temp ,pdata 
+7cfc 20217cfe branch timer_counting ,positive 
+7cfd 18007e00 force 0 ,pdata 
+
+timer_counting:
+7cfe e7e10005 istore 2 ,contw 
+7cff c2007cfa loop timer_loop 
+7d00 d8c040f4 arg mem_timers ,contr 
+7d01 18e3fe00 lshift queue ,pdata 
+7d02 98c08c00 iadd contr ,contr 
+7d03 efe10006 ifetch 2 ,contr 
+7d04 20600000 rtn 
+
+clk_add:
+7d05 98408400 iadd temp ,temp 
+7d06 18427200 copy temp ,loopcnt 
+7d07 6fe10044 fetch 2 ,mem_param_rt_rthalfslot 
+7d08 9f267e00 isub loopcnt ,pdata 
+7d09 20610000 rtn positive 
+7d0a 1fe67e00 sub pdata ,0 ,pdata 
+7d0b 18510400 rshift16 temp ,temp 
+7d0c 18408401 increase 1 ,temp 
+7d0d 18500400 lshift16 temp ,temp 
+7d0e 98418400 ior temp ,temp 
+7d0f 20600000 rtn 
+
+clk_diff_rt:
+7d10 20407d12 call clk_diff 
+7d11 20207d1f branch clk2rt 
+
+clk_diff:
+7d12 78547c00 disable user 
+7d13 98467e00 isub temp ,pdata 
+7d14 20217d17 branch clk_diff_pos ,positive 
+7d15 78347c00 enable user 
+7d16 1fe67e00 sub pdata ,0 ,pdata 
+
+clk_diff_pos:
+7d17 c4078000 rtnbit0 15 
+7d18 1fe22800 copy pdata ,regab 
+7d19 d8410000 arg 0x10000 ,temp 
+7d1a 6fe10044 fetch 2 ,mem_param_rt_rthalfslot 
+7d1b 98467e00 isub temp ,pdata 
+7d1c 9a80fe00 iadd regab ,pdata 
+7d1d 793ffe40 set0 64 ,pdata 
+7d1e 20600000 rtn 
+
+clk2rt:
+7d1f 68490044 fetcht 2 ,mem_param_rt_rthalfslot 
+7d20 98000c00 iforce contr 
+7d21 1ff17e00 rshift16 pdata ,pdata 
+7d22 984ffe00 imul32 temp ,pdata 
+7d23 98c0fe00 iadd contr ,pdata 
+7d24 20600000 rtn 
+
+clk2lpo:
+7d25 1fed7e00 lshift8 pdata ,pdata 
+7d26 1ff27e00 lshift4 pdata ,pdata 
+7d27 6849c0bd fetcht 3 ,mem_clks_per_lpo 
+7d28 9846fc00 idiv temp 
+7d29 20407d62 call wait_div_end 
+7d2a 18078400 quotient temp 
+7d2b 20600000 rtn 
+
+clk2bt:
+7d2c 68490044 fetcht 2 ,mem_param_rt_rthalfslot 
+7d2d 9846fc00 idiv temp 
+7d2e 20407d5f call get_div_result 
+7d2f 1ff07e00 lshift16 pdata ,pdata 
+7d30 18070400 remainder temp 
+7d31 98418400 ior temp ,temp 
+7d32 20600000 rtn 
+
+string2dec_from_uart:
+7d33 d8400000 arg 0 ,temp 
+
+string2dec_from_uart_done:
+7d34 18422800 copy temp ,regab 
+7d35 efe08003 ifetch 1 ,contu 
+7d36 20407d3f call uchar2dialog 
+7d37 1a820400 copy regab ,temp 
+7d38 20407d70 call swap 
+7d39 da40000a arg 10 ,regb 
+7d3a 9a4ffe00 imul32 regb ,pdata 
+7d3b 9840fe00 iadd temp ,pdata 
+7d3c 1fe20400 copy pdata ,temp 
+7d3d c2007d34 loop string2dec_from_uart_done 
+7d3e 20600000 rtn 
+
+uchar2dialog:
+7d3f d840003a arg 0x3a ,temp 
+7d40 98467c00 isub temp ,null 
+7d41 24217d48 nbranch uchar2dialog_number ,positive 
+7d42 d8400061 arg 0x61 ,temp 
+7d43 98467c00 isub temp ,null 
+7d44 20217d4b branch uchar2dialog_a2f ,positive 
+7d45 d8400037 arg 0x37 ,temp 
+7d46 98467e00 isub temp ,pdata 
+7d47 20600000 rtn 
+
+uchar2dialog_number:
+7d48 d8400030 arg 0x30 ,temp 
+7d49 98467e00 isub temp ,pdata 
+7d4a 20600000 rtn 
+
+uchar2dialog_a2f:
+7d4b d8400057 arg 0x57 ,temp 
+7d4c 98467e00 isub temp ,pdata 
+7d4d 20600000 rtn 
+
+right_shift_n:
+7d4e 1f267c00 sub loopcnt ,0 ,null 
+7d4f 20628000 rtn zero 
+
+right_shift_n_loop:
+7d50 1fe37e00 rshift pdata ,pdata 
+7d51 c2007d50 loop right_shift_n_loop 
+7d52 20600000 rtn 
+
+left_shift_n:
+7d53 18007e01 force 1 ,pdata 
+7d54 1f267c00 sub loopcnt ,0 ,null 
+7d55 20628000 rtn zero 
+
+left_shift_n_loop:
+7d56 1fe3fe00 lshift pdata ,pdata 
+7d57 c2007d56 loop left_shift_n_loop 
+7d58 20600000 rtn 
+
+calc_average:
+7d59 58000000 setarg 0 
+7d5a 1f222200 copy loopcnt ,rega 
+
+calc_average_loop:
+7d5b e8410006 ifetcht 2 ,contr 
+7d5c 9840fe00 iadd temp ,pdata 
+7d5d c2007d5b loop calc_average_loop 
+7d5e 9a26fc00 idiv rega 
+
+get_div_result:
+7d5f 20407d62 call wait_div_end 
+7d60 1807fe00 quotient pdata 
+7d61 20600000 rtn 
+
+wait_div_end:
+7d62 207a8000 rtn modone 
+7d63 20207d62 branch wait_div_end 
+
+compare_loop:
+
+string_compare:
+7d64 efe08011 ifetch 1 ,rega 
+7d65 e8408012 ifetcht 1 ,regb 
+7d66 98467c00 isub temp ,null 
+7d67 24628000 nrtn zero 
+7d68 1a20a201 increase 1 ,rega 
+7d69 1a40a401 increase 1 ,regb 
+7d6a c2007d64 loop string_compare 
+7d6b 20207db8 branch enable_zero 
+
+ceiling:
+7d6c 98467c00 isub temp ,null 
+7d6d 24610000 nrtn positive 
+7d6e 18427e00 deposit temp 
+7d6f 20600000 rtn 
+
+swap:
+7d70 9840fe00 iadd temp ,pdata 
+7d71 98460400 isub temp ,temp 
+7d72 98467e00 isub temp ,pdata 
+7d73 20600000 rtn 
+
+clean_smem:
+7d74 d8a00000 arg 0 ,contw 
+7d75 20207d77 branch clean_mem 
+
+clean_xmem:
+7d76 d8a04000 arg 0x4000 ,contw 
+
+clean_mem:
+7d77 df201000 arg 0x1000 ,loopcnt 
+7d78 20207ca3 branch memset0 
+
+callback_func:
+7d79 207a0000 rtn blank 
+7d7a 1fe27a00 copy pdata ,pc 
+
+ice_break_disable_wdt:
+7d7b 204070d7 call wdt_set_disable 
+
+ice_break:
+7d7c 70820301 jam 0x1 ,core_ice_ctrl 
+7d7d 20600000 rtn 
+
+ice_setbp:
+7d7e 67f10205 store 2 ,core_ice_break0 
+7d7f 6ff08203 fetch 1 ,core_ice_ctrl 
+7d80 79207e04 set1 4 ,pdata 
+7d81 67f08203 store 1 ,core_ice_ctrl 
+7d82 20600000 rtn 
+
+ice_setbp2:
+7d83 67f10207 store 2 ,core_ice_break1 
+7d84 6ff08203 fetch 1 ,core_ice_ctrl 
+7d85 79207e06 set1 6 ,pdata 
+7d86 67f08203 store 1 ,core_ice_ctrl 
+7d87 20600000 rtn 
+
+ice_set_write_bp:
+7d88 67f10205 store 2 ,core_ice_break0 
+7d89 70820330 jam 0x30 ,core_ice_ctrl 
+7d8a 20600000 rtn 
+
+fifo_in:
+7d8b 47064021 bpatchx patch21_4 ,mem_patch21 
+7d8c e8440011 ifetcht util_fifo_len ,rega 
+7d8d 18417eff and temp ,0xff ,pdata 
+7d8e 243a7d91 nbranch fifo_in_push ,blank 
+7d8f 184cfe00 rshift8 temp ,pdata 
+7d90 e7e40011 istore util_fifo_len ,rega 
+
+fifo_in_push:
+7d91 1a20a207 increase util_fifo_len + util_fifo_offset ,rega 
+7d92 efe08011 ifetch 1 ,rega 
+7d93 243a235a nbranch assert ,blank 
+7d94 6fe0866f fetch 1 ,mem_fifo_temp 
+7d95 e7e08011 istore 1 ,rega 
+7d96 20600000 rtn 
+
+fifo_out:
+7d97 4706c021 bpatchx patch21_5 ,mem_patch21 
+7d98 df200008 arg util_fifo_len ,loopcnt 
+7d99 efe40011 ifetch util_fifo_len ,rega 
+7d9a 207a0000 rtn blank 
+
+fifo_out_loop:
+7d9b efe08011 ifetch 1 ,rega 
+7d9c 243a7da0 nbranch fifo_out_end ,blank 
+7d9d 1a20a201 increase 1 ,rega 
+7d9e c2007d9b loop fifo_out_loop 
+7d9f 2020235a branch assert 
+
+fifo_out_end:
+7da0 d8400000 arg 0 ,temp 
+7da1 e0408011 istoret 1 ,rega 
+7da2 20600000 rtn 
+
+fifo_is_empty:
+7da3 efe40011 ifetch util_fifo_len ,rega 
+7da4 20600000 rtn 
+
+fifo_is_full:
+7da5 efe08011 ifetch 1 ,rega 
+7da6 20600000 rtn 
+
+fifo_is_near_full:
+7da7 efe10011 ifetch 2 ,rega 
+7da8 20600000 rtn 
+
+fifo_content_count:
+7da9 d8400000 arg 0 ,temp 
+
+fifo_content_count_loop:
+7daa 6fe08006 fetch 1 ,contr 
+7dab c2007daa loop fifo_content_count_loop ,blank 
+7dac 18408401 increase 1 ,temp 
+7dad c2007daa loop fifo_content_count_loop 
+7dae 18427e00 copy temp ,pdata 
+7daf 20600000 rtn 
+
+not_greater_than:
+7db0 98467c00 isub temp ,null 
+7db1 24610000 nrtn positive 
+
+copy_temp2pdata:
+7db2 18427e00 copy temp ,pdata 
+7db3 20600000 rtn 
+
+disable_positive:
+7db4 18007dff force -1 ,null 
+7db5 20600000 rtn 
+
+enable_positive:
+
+disable_zero:
+7db6 18007c01 force 1 ,null 
+7db7 20600000 rtn 
+
+enable_zero:
+7db8 18007c00 force 0 ,null 
+7db9 20600000 rtn 
+
+enable_user:
+7dba 78347c00 enable user 
+7dbb 20600000 rtn 
+
+disable_user:
+7dbc 78547c00 disable user 
+7dbd 20600000 rtn 
+
+enable_user2:
+7dbe 78367c00 enable user2 
+7dbf 20600000 rtn 
+
+disable_user2:
+7dc0 78567c00 disable user2 
+7dc1 20600000 rtn 
+
+enable_user7:
+7dc2 7838fc00 enable user7 
+7dc3 20600000 rtn 
+
+disable_true:
+7dc4 7840fc00 disable true 
+7dc5 20600000 rtn 
+
+enable_true:
+7dc6 7820fc00 enable true 
+7dc7 20600000 rtn 
+
+disable_blank:
+7dc8 58000001 setarg 1 
+7dc9 20600000 rtn 
+
+enable_blank:
+
+set_pdata_0:
+7dca 58000000 setarg 0 
+7dcb 20600000 rtn 
+
+cal_sum:
+7dcc 1f267c00 sub loopcnt ,0 ,null 
+7dcd 20628000 rtn zero 
+
+cal_sum_loop:
+7dce e8408006 ifetcht 1 ,contr 
+7dcf 9840fe00 iadd temp ,pdata 
+7dd0 c2007dce loop cal_sum_loop 
+7dd1 20600000 rtn 
+
+reverse_byte:
+7dd2 1f227e00 copy loopcnt ,pdata 
+7dd3 207a0000 rtn blank 
+7dd4 18c27e00 copy contr ,pdata 
+7dd5 9f20fe00 iadd loopcnt ,pdata 
+7dd6 1fe0ffff increase -1 ,pdata 
+7dd7 1fe20c00 copy pdata ,contr 
+
+reverse_loop:
+7dd8 efe08006 ifetch 1 ,contr 
+7dd9 18c08dfe increase -2 ,contr 
+7dda e7e08005 istore 1 ,contw 
+7ddb c2007dd8 loop reverse_loop 
+7ddc 20600000 rtn 
+
+lshift14:
+7ddd 1ff07e00 lshift16 pdata ,pdata 
+
+rshift2:
+7dde 1feb7e00 rshift2 pdata ,pdata 
+7ddf 20600000 rtn 
+
+lshift6:
+7de0 1fed7e00 lshift8 pdata ,pdata 
+7de1 20207dde branch rshift2 
+
+clear_wake:
+7de2 58000000 setarg 0 
+7de3 67e40016 store 8 ,mem_gpio_wakeup_cfg 
+7de4 79207e19 set1 25 ,pdata 
+7de5 e7e20005 istore 4 ,contw 
+7de6 20600000 rtn 
+
+generate_random:
+7de7 df200010 arg 16 ,loopcnt 
+
+generate_random_loop:
+7de8 180a7e00 random pdata 
+7de9 e7e08005 istore 1 ,contw 
+7dea c2007de8 loop generate_random_loop 
+7deb 20600000 rtn 
+
Index: usb_pc_ai_voice/output/romcode.rom
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/output/romcode.rom	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/output/romcode.rom	(working copy)
@@ -0,0 +1,24576 @@
+20402385
+44804000
+20800000
+204042a3
+2040223d
+20406cad
+20402363
+20406946
+4480c000
+2040776f
+20404295
+20407447
+2055a44f
+44814000
+20407552
+20407448
+20402a45
+2040202a
+204042ad
+20402018
+2040310f
+2040248c
+20404bfb
+2020200d
+2040201d
+c6848000
+793f8009
+20402041
+202025bc
+4481c000
+20402066
+2422a025
+20402036
+1a208c01
+efe08006
+c2802536
+20600000
+70000600
+20402047
+1f227c00
+20628000
+2020235a
+6fe0c114
+207a0000
+c00da033
+2040205f
+20628000
+20402062
+20628000
+70411400
+20600000
+7001bc1b
+70411400
+20600000
+44824000
+79200009
+1a227e00
+67e1000a
+18007253
+d8a00168
+1a208c01
+efe08006
+1a220c00
+c2807cda
+20600000
+4482c000
+6fe1000a
+98000a00
+18007253
+d8c00168
+20207cda
+df200001
+68488006
+18408401
+2841fe01
+2420a04d
+d8400000
+60488006
+184ffe53
+da204040
+9a20a200
+efe08011
+c280a054
+c3800000
+c2002049
+20600000
+44834000
+da602073
+20402069
+24628000
+1a227e00
+67e1000a
+20207db8
+da6020ad
+20202069
+6848c115
+da60207b
+20202069
+4483c000
+684b4116
+da602075
+20202069
+da602081
+20202069
+da6020c7
+44844001
+da204040
+df200001
+efe08011
+1a627a00
+4484c001
+1a20a253
+c200206c
+18007c01
+20600000
+c280206e
+20207db8
+c300206e
+1a208c10
+efe30006
+98467c00
+20628000
+2020206e
+c300206e
+1a208c16
+efe08006
+98467c00
+20628000
+2020206e
+c300a06e
+204020b4
+2040209d
+98467e00
+1fe0fe01
+20212097
+18c22400
+67e48678
+44854001
+6fe0c46d
+243a2090
+6fe48678
+1a420c00
+1fe0fe05
+20202093
+6fe48678
+1a420c00
+1fe0fe14
+2421206e
+18424200
+204020c0
+20207db8
+98002400
+1a208c02
+efe10006
+203a2094
+204020c0
+20202082
+1ff11600
+196c9600
+2022a0a7
+29601e0f
+24608000
+18511600
+196c9600
+24628000
+7920041c
+20600000
+18511600
+196c9600
+29601e0f
+24608000
+79207e1c
+20600000
+c300206e
+20207db8
+c300206e
+1a208c01
+efe08006
+c280206e
+20600000
+1a208c01
+e8408006
+1c427e00
+284ffe01
+1a208c04
+e8420006
+20608000
+1a208c08
+efe30006
+20402109
+1d027e00
+20600000
+1a208c02
+1a208a04
+efe10006
+98409600
+19627e00
+e7e20005
+20202609
+c300a06e
+204020b4
+9b60fe00
+9b60fe00
+98e0fe00
+98467c00
+2421206e
+20207db8
+4485c001
+785d7c00
+784efc00
+784e7c00
+7846fc00
+78467c00
+7844fc00
+78477c00
+7843fc00
+2030a152
+37d38200
+20000064
+20202152
+44864001
+78487c00
+18423600
+20402068
+78547c00
+24628000
+18003600
+20207dba
+4486c001
+37d10200
+1b427e00
+98000c00
+1ff17e00
+9c467200
+1f217203
+2422a0ee
+18007e00
+202020f2
+68490044
+18007e00
+9840fe00
+c20020f0
+98c0fe00
+1fe6fc0c
+20407d5f
+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
+70898308
+70898509
+70898109
+70898103
+70898006
+2000003c
+da200000
+da400000
+df200010
+d8c00800
+efe10006
+9a20a200
+efe10006
+9a40a400
+c200212d
+20600000
+4487c001
+20402160
+d8400027
+2040216f
+204021a6
+708a257f
+708a301a
+708a3178
+708a8fb2
+708ac200
+708ac300
+d8e00006
+20402122
+2a2ffe0d
+2040211d
+2a4ffe0d
+2040211e
+d8e00005
+2040211c
+2040211e
+20402122
+d8a08ac2
+1a31fe00
+20402117
+1a51fe00
+20402117
+18e08fff
+20212145
+708a8f52
+708a3002
+70898100
+44884002
+20406875
+78507c00
+7850fc00
+58000200
+67f20a23
+708a01fa
+2000000c
+708a0f00
+708a121a
+708a142b
+18002a08
+18002a00
+2020230f
+4488c002
+708a0f60
+708a10aa
+708a127a
+708a2500
+708a2600
+2000003c
+708a2020
+708a23fd
+708a2412
+708a2410
+2000003c
+708a1260
+708a23dd
+20600000
+44894002
+70890001
+708a239d
+708a2402
+20000014
+708a7065
+708a239f
+2040218f
+60488008
+18408401
+4489c002
+1851fe00
+d8c04135
+98c08c00
+efe08006
+6a308a71
+1a21220f
+9a21fe00
+67f08a71
+204021d0
+20000090
+6fe0c099
+c00c2187
+20000024
+708a2080
+20600000
+58008312
+67f10907
+20202197
+58004189
+67f10907
+202021a3
+448a4002
+708a8211
+708a8d12
+708a8e0a
+6fe0c099
+c0082189
+58005762
+67f10907
+70890103
+70892084
+c6168000
+70890101
+70892080
+708a8207
+708a8d44
+708a8e0a
+6fe0c099
+c008218c
+58002bb1
+67f10907
+c6978000
+70890105
+20600000
+448ac002
+2040686f
+204021ba
+18002a08
+18002a00
+580aaada
+67f18a0f
+708a2540
+708a2610
+2000003c
+708a01fb
+708a25ff
+708a2630
+708a165e
+20000014
+708a1000
+708a1108
+20000078
+7089000d
+20600000
+6fe0c143
+c07fa1c1
+d8c04144
+98c08c00
+efe08006
+67f08961
+70896027
+6848c147
+6ff08960
+9841fe00
+67f08960
+20600000
+70890003
+708a2402
+20000014
+708a7065
+708a23df
+2040218f
+204021e8
+60488008
+18408402
+20202179
+448b4002
+58000960
+9840fe00
+1fe22200
+6848c099
+18430400
+9846fc00
+20407d62
+1807fe00
+67f10909
+18077e00
+1ff07e00
+1fed7e00
+9846fc00
+20407d62
+1807fe00
+67f1890b
+62308a22
+1a2ca200
+62308a21
+708a20a0
+708a20e0
+708a20a0
+20600000
+1840fe02
+1fe97e00
+1fe17ffe
+d8c0411d
+c596a1ee
+18c08c0c
+98c08c00
+ea210006
+efe10006
+9a267e00
+18408c02
+18c10c0f
+98cffe00
+1ff1fe00
+9a20fe00
+67f10905
+20600000
+448bc002
+204021c6
+20000258
+448c4003
+580aaa7e
+67f18a0f
+2000003c
+708a2500
+708a260d
+708a1656
+2000001e
+708a151b
+2040220c
+20000014
+708a260f
+20000014
+708a10a8
+708a1100
+20600000
+448cc003
+6fe0c141
+c0002217
+c001a21c
+c002a221
+c003a225
+c0052229
+c041a22d
+c042a231
+c0452235
+c04a2239
+708a1417
+58251a3f
+67f18a60
+708a6328
+20600000
+708a1425
+58a91c2d
+67f18a60
+708a632f
+20600000
+708a1425
+58a91c3f
+67f18a60
+2020221f
+708a1425
+58a9383f
+67f18a60
+2020221f
+708a1425
+58a93f3f
+67f18a60
+2020221f
+708a1417
+58251827
+67f18a60
+2020221a
+708a1417
+5825181c
+67f18a60
+2020221a
+708a1417
+5825180b
+67f18a60
+2020221a
+708a1417
+58251000
+67f18a60
+2020221a
+70804206
+6fe1409c
+c307223e
+98000c00
+d8408a00
+efe08006
+c07fa248
+98418a00
+efe08006
+e7e08005
+20202242
+448d4003
+6fe0c436
+205a70d7
+37d98200
+70813b5f
+6fe0c099
+c0082266
+6fe0c438
+1fe1fe04
+67f08a02
+70890f01
+708a8024
+708a8162
+58e61212
+67f18a73
+708a8660
+708a8b3b
+20402286
+70804300
+70804205
+58557474
+67f18968
+7089606e
+20402133
+20402271
+6fe0c11c
+67f0813a
+7041480c
+20406f4e
+202022b4
+6fe0c438
+1fe1fe06
+67f08a02
+70890f00
+708a8023
+708a81b0
+58e40909
+67f18a73
+708a762a
+70890204
+20202257
+448dc003
+20402160
+70890003
+708a7001
+da40411d
+db004135
+2040227c
+7920002d
+2040227c
+708a7061
+20202152
+2040218f
+df200006
+da600000
+1a620400
+20402294
+1a40a402
+1b00b001
+1a60a610
+c200227f
+20600000
+6fe0c099
+c00c228c
+6fe0c438
+1fe1fe06
+67f08a02
+708a05e0
+708a00c8
+2000003c
+708a01a0
+708a00cf
+708a01fa
+20000014
+708a008f
+20600000
+448e4003
+708a2030
+708a23dd
+204021d0
+6ff08a7c
+c3002298
+708a7b30
+204022ae
+98002200
+708a7b40
+204022ae
+9a267e00
+1fef847d
+58b00000
+9846fc00
+20407d62
+1807fe00
+c596a2a7
+1fe3fe00
+e7e10012
+708a7b20
+6ff08a7e
+1ff27e00
+e7e08018
+708a7b00
+20600000
+6ff10a7d
+1ff0fe00
+68588a7c
+18500400
+9841fe00
+20600000
+448ec003
+6ff08a0d
+79207e00
+67f08a0d
+708a0ef0
+6ff08a05
+1fe1fe16
+67f08a05
+6fe0c411
+67e08678
+6fe0c408
+67e08679
+70441100
+6fe0c43e
+67e0c408
+6848c43d
+20406f0f
+da200000
+df200008
+20406f82
+6fe1440a
+9a20a200
+c20022c7
+1a292200
+67e1440a
+6fe08678
+67e0c411
+6fe08679
+67e0c408
+6ff08a05
+1fe17ee0
+67f08a05
+708a0e00
+6ff08a0d
+793ffe00
+67f08a0d
+20406fb0
+6849443b
+98467c00
+202122e4
+68494439
+98467c00
+20610000
+6fe0c438
+c1000000
+1fe0ffe0
+67e0c438
+20600000
+6fe0c438
+c1700000
+1fe0fe20
+67e0c438
+20600000
+448f4003
+6ff089a2
+2feffe06
+7920fe07
+67e0c142
+6ff089a3
+1fe1040f
+18438400
+1ff1fe00
+98408400
+184fa203
+6fe0c142
+204022ff
+1fe67e00
+9a20fe00
+1fe0fff7
+1fe17fff
+2feffe08
+2420a2fd
+58000000
+67e08035
+20202304
+2feffe07
+24608000
+d840ff00
+9841fe00
+20600000
+6fe08035
+20402308
+67e08009
+20600000
+1fe17eff
+1fe6fc0a
+20407d5f
+1ff27e00
+18070400
+9841fe00
+20600000
+448fc003
+6fe0c143
+c17f8000
+242c2336
+6fe0c142
+1fe67cf0
+2421233a
+1fe67c7f
+2021233a
+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
+c000a33f
+c0012341
+2020233f
+6fe0c143
+c0002341
+c000a33d
+70414302
+20600000
+70414300
+20600000
+70414301
+20600000
+1fe20400
+44904004
+18427e00
+20407d2c
+1c307e00
+79207e2c
+20407d12
+793ffe2c
+20402352
+20407d12
+20740000
+20407d1f
+98003600
+37c18200
+20600000
+1b220400
+20748000
+1b420400
+20600000
+1c427e00
+20748000
+1d027e00
+20600000
+4490c004
+2020235a
+207a0000
+1fe37e00
+1fe0fffd
+1fe0ffff
+2422a35f
+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
+67e142e3
+7041678b
+58000d00
+67e1433f
+58000060
+67e14341
+1c437e00
+67e24095
+20600000
+5800ee21
+67f10050
+6e12011c
+6ff08132
+c302a39c
+7835fc00
+c2822393
+7855fc00
+1ce27e00
+243a2393
+6ff08142
+c2822393
+d85fffff
+20202434
+204023a0
+2055a3e6
+6ff08132
+793ffe05
+67f08132
+2435a39d
+20407d74
+6602069d
+20600000
+204023a0
+20406a68
+6602069d
+20600000
+37d98200
+6ff08133
+1fe17e88
+67f08133
+37d98200
+6ff08132
+1fe1fe0f
+67f08132
+37d98200
+79207e07
+67f08132
+37d98200
+79207e06
+67f08132
+37d98200
+20600000
+37d98200
+70813d76
+37d98200
+70813a37
+20600000
+37d98200
+70813d76
+37d98200
+70813a37
+20600000
+6fe0c3cb
+1ff27e00
+67f08143
+37d98200
+6fe0c3cc
+79207e05
+79207e06
+67f08144
+202023e2
+6ff08142
+793ffe03
+67f08142
+20600000
+6ff08142
+79207e03
+67f08142
+20600000
+6fe1c0c3
+d8a0813e
+df200003
+202023d1
+d8a08145
+df200004
+37d98200
+e7e08005
+1fecfe00
+c20023d1
+202023e2
+d8a08149
+202023d0
+6ff08133
+793ffe03
+67f08133
+20600000
+6fe0c0cb
+207a0000
+793ffe04
+202023e1
+67e0c0cb
+67f08135
+37d98200
+20600000
+67f08134
+202023e2
+204023dc
+6fe0c0ef
+67f08080
+d8c040cc
+d8a08070
+20407c8f
+d8a080d4
+20407c89
+680440e7
+d8c0814d
+d8a00016
+df20000c
+20407cda
+20206b11
+600440e7
+d8c08070
+d8a040cc
+20407c8f
+d8c080d4
+20407c89
+6ff08080
+67e0c0ef
+202023fd
+df20000c
+d8c00016
+da20814d
+efe08006
+245a2405
+1a20a201
+c2002400
+20600000
+e7e08011
+37d98200
+20600000
+4491c004
+6ff080cb
+243a240f
+6fe1c0bd
+247a0000
+7080cb0c
+70800680
+6ff08129
+c4008000
+6ff1815b
+67e1c0bd
+20600000
+6fe0c0ca
+79207e04
+67e0c0ca
+44924004
+d85fffff
+6fe0c0a7
+67e0c0c8
+6fe0c0ca
+67f08142
+37d98200
+4492c004
+6fe143e9
+20407d79
+6fe240ad
+9840fe00
+67e240ad
+204023f4
+6fe0c0cb
+79207e04
+204023e1
+2455a3cb
+37d98200
+632340b1
+6fe1c0c6
+6a20c0c9
+df200003
+37d98200
+67f08132
+1fecfe00
+c200242e
+37d98200
+62308133
+37d98200
+605a004c
+70800501
+37df8200
+6fe0c0c3
+247a0000
+70804206
+708130f8
+58030d40
+2040235c
+204023b5
+37d98200
+708130ff
+1e226000
+70804204
+2000000a
+37d98200
+1e227e00
+9e067e00
+1fe0fe30
+d84000ff
+20407d6c
+67e0c0c3
+20007530
+20007530
+20007530
+20600000
+44934004
+58000000
+1ce27c00
+2022a45a
+6ff0813e
+6858813f
+98467c00
+20212458
+18427e00
+9ce67e00
+1fe0fe01
+1fe0fe08
+37d98200
+9e20fe00
+684a40a9
+9840fe00
+6849c0bd
+984ffe00
+1fecfe00
+1ff1fe00
+1fe0fe6e
+68490044
+9846fc00
+20407d5f
+1ff07e00
+18070400
+9841fe00
+684b40b1
+20407d05
+18423200
+6fe34048
+20402109
+1b427e00
+67e30670
+1ce27e00
+e7e08005
+6ff0811d
+1fe1fef0
+e7e08005
+20600000
+4493c004
+1b427e00
+20407d10
+684a40ad
+18467cff
+20610000
+1fed7e00
+1ff27e00
+9846fc00
+20407d5f
+d84000c8
+20407d6c
+67e0800e
+24342486
+1fe67e00
+6849c0bd
+9840fe00
+67e1c0bd
+58000000
+67e240ad
+20600000
+44944005
+20402408
+6fe1c0bd
+207a0000
+6fe0c094
+207a0000
+6fe0c46c
+203a2496
+6fe0c46e
+207a0000
+6fe0c46d
+247a0000
+da6020af
+20402069
+20628000
+204024ef
+247a0000
+2040205d
+2422a4bd
+20758000
+4494c005
+68488015
+6fe14042
+984ffe00
+18518400
+184b0400
+98467e00
+684a4044
+9840fe00
+6848c0a6
+98467e00
+1ff06000
+6fe1404e
+1fe37e00
+20407d2c
+1e027e00
+20407d12
+1b420400
+20407d10
+20740000
+20407d25
+44954005
+6fe0c0c3
+98467c00
+20212489
+604a40a9
+204042c5
+684a40a9
+2020241e
+4495c005
+6fe0c388
+243a24c1
+20600000
+6fe140a4
+207a0000
+6848c0a6
+98467e00
+d8401d4c
+984ffe00
+202024b4
+6fe143e5
+20407d79
+243a24e0
+70001500
+c586a4e0
+6fe0c0c2
+203a24e4
+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
+204042c3
+6fe140a2
+1fe22200
+6fe1c44b
+7d3a2201
+6fe444d3
+7d3a220f
+6fe444db
+7d3a220e
+6fe0c114
+7d3a2208
+6fe0c3cb
+2fe1fe0a
+2040a501
+1a227e00
+67e140a2
+20600000
+6ff10112
+7d3a2206
+6ff1010e
+7d3a2205
+20600000
+47074021
+7855fc00
+70017e01
+70016803
+70017f01
+5fffffff
+67e10182
+18007e00
+67e08180
+67e0818b
+67e1c0b7
+67e1c0ba
+2040285c
+70416901
+70416a00
+70019d01
+70019e01
+70439600
+20202935
+4707c021
+7834fc00
+70016903
+70439801
+7006b101
+5800ffff
+67e106b3
+18007e00
+67e2c455
+79207e27
+67e2c450
+20202506
+47084022
+7854fc00
+58000017
+67e142e3
+1fe0fe04
+67e143b8
+70016901
+70438800
+70001500
+20402592
+6fe10196
+67e142f5
+6fe1016a
+1feffe05
+1ff1fe00
+67e10196
+20202506
+4708c022
+204025b8
+6fe08168
+2feffe04
+79208032
+204042b2
+6fe08169
+c280a53f
+20202551
+47094022
+7834fc00
+2040292b
+2021254e
+204025fb
+20402871
+7856fc00
+20402730
+24768000
+6fe08005
+1fe0fe01
+67e08005
+20402823
+7854fc00
+20600000
+20402586
+7854fc00
+20600000
+4709c022
+70433e00
+793f8030
+20407552
+20402ff5
+78577c00
+2040292b
+20212586
+6fe0819d
+204025a4
+204025fb
+20402652
+242c2577
+20402597
+2036a562
+c5182562
+20202571
+470a4022
+6fe0c33e
+1fe0fe01
+67e0c33e
+c0062571
+20402823
+20402871
+6fe0819e
+204025a4
+20402741
+204028d4
+6fe143e1
+20407d79
+2040257b
+20342580
+470ac022
+20402fba
+20402fb1
+20407841
+6fe0818b
+c281a586
+470b4022
+204020cf
+204029a5
+202020f7
+78547c00
+c5157dba
+c514fdba
+c5187dba
+20600000
+470bc022
+78377c00
+20402734
+2036a562
+c5182562
+20202571
+470c4023
+2040258d
+20404302
+20402592
+20403003
+70066f15
+2020782b
+d8a04441
+20407c99
+70017e00
+70016900
+70016800
+470cc023
+7042fd00
+7042fc00
+20407452
+20600000
+470d4023
+6fe08005
+1fe0fe01
+67e08005
+6fe08168
+c3818000
+79207e03
+67e08168
+6fe142f5
+67e10196
+58000000
+67e2431d
+20600000
+1fe20400
+470dc023
+18427e00
+c28025b8
+c280a5ad
+c30125b8
+c283a5b4
+c28125b0
+202025b8
+793f802f
+7920002d
+20600000
+793f802d
+7920002f
+793f802e
+20600000
+793f802d
+7920002f
+7920002e
+20600000
+470e4023
+793f802d
+793f802f
+20600000
+470ec023
+793f8032
+70890101
+70892080
+70893003
+20600000
+470f4023
+7844fc00
+7843fc00
+6fe18190
+98001e00
+6fe08007
+1fed8400
+79200401
+18431c00
+20600000
+204025d5
+2040216f
+6fe1003e
+2040235c
+202021a6
+2036a1fc
+c51821fc
+204025d5
+202021f9
+470fc023
+20402160
+6fe081bb
+243a25e8
+6fe08007
+1fe67c24
+202125e2
+18000400
+c1128000
+18000418
+c1130000
+1800044e
+20600000
+1fe67c0a
+202125e5
+1fe0fe01
+1fe3fe00
+1fe08402
+20600000
+6fe08007
+1fe38400
+20600000
+d84001f4
+207a0000
+d84000fa
+c1008000
+d8400096
+c1010000
+d8400064
+c1018000
+d840004b
+c1020000
+d8400032
+c1028000
+d8400028
+c1030000
+d8400014
+20600000
+47104024
+78287c00
+6fe2018c
+98001200
+20402630
+58000200
+2034a604
+6fe10176
+1fe37e00
+6849003e
+9840fe00
+20402343
+1b427e00
+20600000
+4710c024
+20407c51
+6721069b
+1a208c01
+efe08006
+c4000000
+1a208a1a
+efe10005
+1fe0fe01
+e7e10005
+204027a2
+204027c4
+204027cd
+2040261a
+20407c60
+6f21069b
+20600000
+1a208c19
+efe08006
+1a208a18
+e8408005
+9840fe00
+1fe67c24
+20212622
+1fe0ffdb
+e7e08005
+20600000
+1a208c30
+efe28006
+18000400
+18007225
+c300262a
+18408401
+1fe37e00
+c2002628
+1840ffff
+1a208a22
+e7e08005
+20600000
+47114024
+6fe08180
+98000e00
+684a8198
+a84fffff
+2020a645
+6fe0818a
+98e67e00
+2021263b
+1fe60fff
+20202636
+18e27200
+18000e00
+a84fffff
+2020a640
+1f20f201
+1f227e00
+203a2645
+18e08e01
+1f20f3ff
+2020263d
+18e27e00
+67e08007
+20600000
+2034a64b
+37c18200
+20600000
+d9600ea0
+34730200
+20600000
+78487c00
+6fe14346
+1fe21600
+20202658
+4711c024
+204026be
+78287c00
+6fe10176
+684a431d
+98409600
+204025cc
+47124024
+204025c2
+c597a660
+783cfc00
+2000001e
+204025c2
+19699600
+7856fc00
+7826fc00
+7830fc00
+78507c00
+19623600
+37c18400
+20372669
+1b420400
+604b000f
+242c26fa
+78287c00
+6fe0c167
+d8404e20
+98408400
+6fe0c148
+984fb600
+20406877
+20372677
+204026ff
+6fe08168
+c301a677
+684b000f
+2055a477
+204022e9
+7823fc00
+7824fc00
+09800008
+19897e00
+67e0804c
+09800008
+19897e00
+67e0804d
+1fe27200
+2022a69d
+c5192688
+09800008
+19897e00
+e7e08005
+c2002683
+2020269d
+18a22400
+4712c024
+2040281c
+6a20804d
+1a20a3fc
+242126f2
+204026c3
+1a420a00
+d8400000
+6f20804d
+1f20f3fc
+2022a69b
+09800008
+19897e00
+e7e08005
+18408401
+18417c0f
+2042a6e1
+c2002694
+204026e9
+1a420a00
+47134024
+09800018
+1fef7e00
+1ff17e00
+e7e18005
+78287c00
+2040270d
+202326f6
+c59926af
+6fe0804d
+203a26af
+1fe0fffc
+67e0804d
+204072cb
+6ff08108
+c303a6f2
+1800700c
+65e20154
+20406876
+7836fc00
+793f8030
+4713c024
+204072cd
+6fe0819d
+7d3e7e07
+67e0819d
+204026b9
+202026bb
+7846fc00
+20202160
+47144025
+68488008
+202021c6
+c6990000
+20407368
+1800700c
+20407370
+2020736f
+4714c025
+70806c00
+70806d01
+6fe0804c
+1fe17e03
+67f0806e
+5800004e
+67f10068
+67f1006a
+6a20804d
+1a20a3fc
+684ac455
+280ffe0f
+2040a6d7
+20407265
+58000000
+67f100c0
+70800a06
+70800a07
+20600000
+18467c00
+2022a6dc
+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
+202026fc
+2040270d
+204020cf
+202026af
+20406878
+c51826fa
+79200030
+202026b2
+793f8030
+202026fc
+47154025
+204072cd
+202020cf
+c517a705
+c516a709
+6fe10046
+1fe25200
+1c225000
+20600000
+6fe1004a
+1fe25200
+1c20d001
+20600000
+6fe10048
+1fe25200
+1c225000
+20600000
+6fe0804d
+1fe08405
+18498400
+6fe0819d
+c517a714
+c2802716
+c280a717
+203e2719
+2020271c
+20202721
+18430400
+20202721
+18408403
+18438400
+2020271e
+18408403
+18498400
+58000028
+98408400
+20202721
+6fe0c148
+984f8400
+da204e20
+9a2ffe00
+98460400
+1b627e00
+98463600
+20600000
+20402741
+68488008
+2040216f
+204021a6
+78287c00
+d960157c
+20202659
+4715c025
+6fe0819e
+204025a4
+20402741
+6fe0819d
+204025a4
+68488008
+2040216f
+204021a6
+78287c00
+d960157c
+c597a659
+d9602134
+20202659
+47164025
+20402741
+202020cf
+4716c025
+204025c2
+204025d1
+2040687d
+79202a00
+782efc00
+78307c00
+7850fc00
+20402648
+785d7c00
+c517a784
+c516a796
+19317e00
+1fecfe00
+1ff1fe00
+08008628
+7823fc00
+7824fc00
+47174025
+6fe0c169
+08008608
+efe08006
+1fe27200
+08008608
+1f267c00
+2022a762
+6ff0800a
+203a275e
+c5192779
+d8c0416b
+efe08006
+08008608
+c200275f
+78247c00
+08008618
+78447c00
+c597a769
+7843fc00
+58000000
+08008603
+37d38200
+20000064
+4717c025
+784efc00
+785c7c00
+20402160
+2040687b
+6fe0c169
+1fe17e03
+c1818000
+6fe0c2fd
+c001285c
+c1828000
+6fe0c16b
+c002a857
+20600000
+1f20f3fc
+1f220400
+204072b8
+d8c0416b
+efe08006
+08008608
+c200277d
+204072bd
+1de27e00
+08008620
+20202762
+df20000a
+5800003c
+08008608
+c2002785
+784efc00
+783c7c00
+19317e00
+1ff17e00
+1ff1fe00
+08008620
+c5172793
+58000001
+08008605
+783d7c00
+20202751
+58000000
+08008605
+20202751
+6fe0c148
+6848c168
+9840fe00
+2040235c
+19317e00
+1fecfe00
+1ff18400
+18427e00
+08008608
+18427e00
+08008628
+20202751
+da6027a6
+da4027bc
+d8e00005
+202027fb
+1a208c04
+e8420006
+1a208c37
+efe08006
+1a208a2b
+e7e08005
+efe10006
+1febfe00
+98409600
+1a208a04
+19627e00
+e7e20005
+efe10006
+1febfe00
+1a208a02
+e7e10005
+efe10006
+1a208a2c
+e7e10005
+efe10006
+67e142f5
+20202938
+efe08011
+793ffe03
+e7e08011
+62210684
+70066f44
+2040782b
+6a210684
+20600000
+da600000
+da4027c8
+d8e00006
+202027fb
+1a208c37
+efe28006
+1a208a30
+e7e28005
+20202624
+da600000
+da4027d1
+d8e00007
+202027fb
+1a208c37
+efe08006
+204027de
+e7e08005
+1a208c38
+efe08006
+204027ec
+e7e08005
+62210684
+70066f42
+2040782b
+6a210684
+20600000
+205a27e6
+1a208a35
+24748000
+6848c3b6
+284ffe07
+7920fe07
+1a208a36
+20600000
+1a208c35
+efe08006
+24748000
+1a208c36
+efe08006
+20600000
+205a27f5
+6848c3b6
+284ffe07
+7920fe07
+1a208a36
+24748000
+793ffe07
+1a208a35
+20600000
+1a208c36
+efe08006
+24748000
+1a208c35
+efe08006
+20600000
+47184026
+efe08011
+afec0000
+20608000
+1a208c1a
+e8410006
+1a208c20
+efe10006
+98467e00
+2022a80b
+24212810
+1fe67c01
+2022a809
+20600000
+1a627e00
+20207d79
+efe08011
+f93ffe00
+e7e08011
+1a427e00
+20207d79
+1a208c1a
+efe10006
+1a208c20
+efe10006
+98467e00
+d840ffff
+98467c00
+2022a80b
+d840f000
+98467c00
+2421280b
+20600000
+6848817f
+6fe0804c
+1fe37e00
+9842fe00
+2feffe02
+7920800f
+20600000
+4718c026
+20402935
+c6180000
+2040284a
+6fe0804c
+2feffe04
+7920802a
+1fe37e00
+9842fe00
+2feffe02
+7920800f
+c6078000
+6fe0804d
+203a283c
+6fe08168
+c302283c
+684a0154
+6fe2445a
+98467c00
+2022a35a
+604a445a
+6fe2c455
+1fe0fe01
+79207e27
+67e2c455
+6848817f
+79400402
+6048817f
+6fe0c321
+c4030000
+47194026
+6fe0804d
+207a0000
+6fe0804c
+2fe00601
+2020ae65
+2fe00602
+2020ae53
+20600000
+4719c026
+6848817f
+284c0005
+20608000
+6fe0804c
+1fe3fe00
+9842fe00
+c4018000
+793f8405
+79400403
+6048817f
+28400603
+20600000
+6fe08168
+79207e04
+67e08168
+79200032
+20600000
+471a4026
+7042fd00
+dfe00000
+67e2445a
+67e2c450
+79207e27
+67e2c455
+6fe08168
+793ffe04
+67e08168
+793f8032
+20600000
+da200001
+6fe0804c
+c3830000
+da200000
+20600000
+18c20a00
+684943b8
+18a20c00
+20600000
+471ac026
+6fe0817f
+c3828000
+20402892
+20402a10
+203a28b6
+efe10006
+e8410006
+18422200
+9a267e00
+2040286d
+20407db0
+1fe20400
+e8208006
+1a227e00
+98c0fe00
+67e1068f
+204028a6
+204028b8
+20402a10
+efe10006
+1fe22200
+18c22600
+e8410006
+18422400
+9a467e00
+2040286d
+20407db0
+9a40fe00
+e7e10013
+9a267c00
+24628000
+20202a2a
+20402899
+c6148000
+6fe0c321
+c30128a4
+20402a14
+203a28a4
+202028a2
+20402a10
+203a28a4
+efe10006
+e8410006
+98462200
+2040286d
+18427e00
+9a267c00
+202128a4
+79200029
+20600000
+793f8029
+20600000
+1a227e00
+207a0000
+d8200001
+20600000
+471b4026
+18408401
+20402ccf
+18c08dfe
+efe10006
+d8402902
+98467c00
+24628000
+18c08c01
+18c22200
+efe08006
+20600000
+18000400
+18000201
+471bc026
+6048c16a
+6848817f
+79200405
+18417efc
+9821fe00
+67e0817f
+1fe17e1f
+280ffe29
+7920fe04
+67e0c169
+6fe0c169
+28200601
+2420a8c8
+6fe0c16a
+207a0000
+c51928ce
+6f20c16a
+6fe1068f
+1fe20c00
+d8a0416b
+20207ccc
+20407368
+2020729f
+d8e00000
+202024e7
+d8e00000
+202024eb
+471c4027
+c6078000
+c6180000
+6fe0804c
+1fe17e03
+67e0c334
+6fe0804d
+207a0000
+5800004e
+67e14339
+471cc027
+6fe0c334
+c001b04a
+204028ee
+243428d0
+204028d2
+58000000
+67e14337
+6fe14339
+1fe08c02
+471d4027
+efe10006
+c0022b8f
+c0032ec8
+c002ae8a
+20600000
+6fe0c334
+c00128fd
+c000a914
+20600000
+20407dba
+d8400004
+9fe67c00
+20628000
+d8400005
+9fe67c00
+20628000
+d8400006
+9fe67c00
+20628000
+20207dbc
+6fe14339
+1fe20c00
+efe10006
+67e14335
+efe10006
+204028f2
+24740000
+6848804d
+60494337
+6fe14335
+1fe0fe04
+98467c00
+2022fdba
+6f20804d
+d8a00f00
+6fe14339
+1fe20c00
+20407ccc
+20207dbc
+20407dba
+6fe14337
+247a0000
+20207dbc
+20402910
+24740000
+6fe14337
+d8a00f00
+98a0a200
+6848804d
+9840fe00
+67e14337
+6f20804d
+1a220a00
+6fe14339
+1fe20c00
+20407ccc
+58000f00
+67e14339
+6fe14335
+1fe0fe04
+68494337
+98467c00
+2022fdba
+20207dbc
+6fe143df
+20207d79
+471dc027
+684a0184
+20402356
+98461600
+19627e00
+68490196
+18520400
+18438400
+98467e00
+20600000
+20402356
+67e20184
+20600000
+471e4027
+1a208c50
+efe08006
+204025eb
+1a208c02
+efe10006
+984ffe00
+68490044
+984ffe00
+d84f4240
+9846fc00
+d8400682
+6fe0c148
+984f8400
+1a208c2b
+efe08006
+984ffe00
+9840fe00
+67e2431d
+6fe1409a
+20407d62
+18078400
+9840fe00
+1a208a0e
+e7e10005
+20600000
+471ec027
+20402955
+20202969
+7006b502
+d8402a00
+604906b6
+20402ce0
+207a0000
+efe08006
+18c20a00
+6848c26b
+18427200
+98467c00
+24212966
+98460400
+d8c0426c
+20407ccc
+18427200
+2442a9a1
+20600000
+1fe27200
+d8c0426c
+20207ccc
+da604368
+da204349
+20402976
+58000000
+79347e00
+67e08670
+da604388
+da204369
+20402976
+20740000
+6fe08670
+203a235a
+20600000
+471f4027
+20407dba
+20407ca6
+da400000
+d8a006a2
+20402990
+6fe0c26b
+1fe08401
+9a40a200
+1a20a202
+1a267c1f
+2421298e
+e0408005
+d8400009
+e0408005
+98007200
+20407ccc
+1a222400
+1a427e00
+67e086a1
+d8c006a1
+5fffffe0
+9a608a00
+20207c8d
+20407dbc
+20202988
+efe08011
+207a0000
+1fe0fe01
+e8408006
+18467c09
+2022a99f
+9a40a400
+1a220c00
+98007200
+20407ccc
+18c22200
+1a227e00
+9a667c00
+20610000
+20202990
+9a20a200
+2020299b
+58000020
+e7e08005
+c20029a1
+20600000
+471fc027
+7855fc00
+203729a9
+2436a9b8
+204024d2
+6fe1409a
+67e10176
+6fe0c321
+c282a4e0
+c507a4e0
+6fe0804d
+243a24e0
+6fe0c16a
+243a24e0
+6fe08168
+c282a4e0
+c283a4e0
+c28324e0
+202024c8
+6fe0c0a8
+1fe67c1e
+242124d7
+6849409a
+18430400
+6fe10176
+9840fe00
+67e10176
+202024d7
+d8e00000
+202029d6
+d8e00000
+202029db
+d8e00001
+202029d6
+d8e00001
+202029db
+d8e00002
+202029d6
+d8e00002
+202029db
+d8e00003
+202029d6
+d8e00003
+202029db
+d8e00004
+202029d6
+d8e00004
+202029db
+d8e00005
+6fe0c321
+f9207e00
+67e0c321
+20600000
+d8e00005
+6fe0c321
+f93ffe00
+67e0c321
+20600000
+58112233
+67e1c322
+58445566
+e7e18005
+58778899
+e7e18005
+58001122
+e7e18005
+58334455
+e7e18005
+58000066
+e7e08005
+20600000
+59000302
+67e242c4
+58010010
+67e1c2c8
+7042fe01
+20600000
+da200000
+d8200001
+20202a05
+47204028
+d8200003
+20402a05
+1a427e00
+e7e08005
+20600000
+4720c028
+18000202
+1a20a204
+20402a05
+1a20a3fc
+1a227e00
+e7e10005
+1a427e00
+e7e10005
+20600000
+47214028
+1a20a205
+20406959
+1a20a3fb
+1a227e00
+e7e10005
+58000000
+e7e10005
+18227e00
+e7e08005
+20600000
+4721c028
+20406993
+1fe20c00
+20600000
+6fe14449
+20600000
+20402a19
+1fe20c00
+20600000
+6fe1444c
+20600000
+20402a10
+18c08c05
+20600000
+20402a10
+18c08c09
+20600000
+20402a16
+18c08c09
+20600000
+20402a16
+18c08c05
+20600000
+202069a9
+202069ac
+202069af
+20206998
+67e443c0
+20202a3c
+184122ff
+20402a32
+184ca200
+6220c3b7
+20202a33
+6220c3b6
+2a2ffe01
+2040aa38
+2a2ffe02
+2040aa3a
+20600000
+d8e00008
+20202a3d
+d8e0000b
+20202a3d
+d8e00005
+6fe443ae
+f9207e00
+67e443ae
+20600000
+204029c5
+204029ec
+204029df
+202029cd
+70019d01
+70019e01
+204025b8
+20402a4b
+20402acb
+202025bc
+47224028
+6fe0c343
+c1808000
+d8e00002
+20407cef
+247a0000
+6fe14344
+68494346
+98467e00
+d8e00002
+20407ce1
+7854fc00
+20402af5
+20402a6a
+24768000
+4722c028
+6fe3004e
+67e30178
+6fe08002
+1fe0fe01
+67e08002
+20402a71
+20748000
+20402b1c
+24768000
+6fe08004
+1fe0fe01
+67e08004
+6fe48054
+67e486a1
+20600000
+47234028
+20402b68
+2040264e
+6fe08001
+1fe0fe01
+67e08001
+20600000
+4723c028
+6fe081bc
+c18d8000
+6fe30178
+684b42cc
+98467c00
+24628000
+20402056
+24628000
+20402a84
+20402519
+204030ed
+70066f14
+2040782b
+70411400
+7001b800
+70434300
+7001bc00
+20202041
+47244029
+18007fff
+38080001
+67e28198
+da200168
+20402624
+18007204
+d8a0018c
+20407de8
+6fe142d9
+67e10196
+180a7e00
+1fe17e0f
+1fe67c04
+20212a8f
+67e08181
+4724c029
+68494165
+6049016a
+18422600
+1c40fe07
+9a66fc00
+20407d62
+18072200
+9a267e00
+9a60fe00
+68494163
+9840fe00
+67e2016c
+9c462200
+1a20a3fa
+da402205
+6fe0c2d2
+7d3a2406
+6fe0c2cb
+7d3a2407
+1a427e00
+67e14169
+6fe342db
+e7e30005
+6fe30178
+e7e30005
+6fe2018c
+e7e20005
+180a7e00
+e7e10005
+180a7e00
+e7e08005
+18007e02
+e7e08005
+1a2b7e00
+e7e10005
+1a6b7e00
+e7e10005
+47254029
+58000000
+e7e10005
+6fe142d9
+e7e10005
+6fe28198
+e7e28005
+6fe08181
+d84000a0
+9841fe00
+e7e08005
+2040273e
+58004169
+1fe08c12
+efe18006
+67e18190
+20600000
+70000724
+7006a100
+20402aef
+20402ad0
+20202af2
+4725c029
+6fe0c388
+207a0000
+d8e00000
+20407cef
+247a0000
+78287c00
+20402af5
+20402b68
+20402afe
+2436aae2
+6fe08003
+1fe0fe01
+67e08003
+6fe0804c
+1fe17e0f
+c001ab2d
+c002ab40
+47264029
+6fe086a1
+6848c393
+98467c00
+2422aad0
+180a7e00
+d84001ff
+98417e00
+1fe0fefa
+20407c91
+d8e00000
+6fe14389
+20207ce1
+d8a006b1
+d8c04169
+20207c8c
+d8c006b1
+d8a04169
+20207c8c
+4726c029
+7854fc00
+588e89be
+1fed7e00
+1fe1fed6
+98001200
+58555555
+67e18190
+20600000
+47274029
+6fe0c38b
+6848c38c
+18520400
+184b8400
+98408400
+6048c169
+c000ab0f
+6848c348
+1840fe06
+67e0c16a
+6fe342db
+67e3416b
+18427200
+d8c04349
+20407ccc
+20202b15
+5800000c
+67e0c16a
+6fe342db
+67e3416b
+6fe34116
+e7e30005
+4727c029
+6fe08000
+1fe0fe01
+67e08000
+db600708
+7856fc00
+20202729
+4728402a
+6fe0c394
+c1808000
+6fe08000
+1fe0fe01
+67e08000
+d8400c03
+6fe0c395
+7d3a0406
+1a227e00
+7d3a0407
+60494169
+6fe342db
+e7e30005
+6fe30178
+e7e30005
+20202729
+4728c02a
+6fe30054
+684b42db
+98467c00
+24628000
+d8400004
+6fe0c38c
+7d3a0406
+6048c169
+6848c368
+1840fe06
+67e0c16a
+6fe342db
+67e3416b
+d8c04369
+18427200
+20407ccc
+2040273e
+20202ae2
+6fe30054
+684b42db
+98467c00
+24628000
+20402868
+6220c2cb
+6fe3004e
+67e30178
+6fe4005a
+67e4018c
+68490062
+4729402a
+184b8400
+6fe10064
+1febfe00
+67e1016a
+67e2016c
+98467e00
+1fe0d1fe
+6fe48066
+67e48194
+6fe0806f
+1fe1041f
+60488181
+1ff18400
+18430400
+604881b8
+da200168
+20402938
+da200168
+20402624
+20402525
+20402056
+24628000
+4729c02a
+204020f7
+20402ea7
+70066f14
+2040782b
+20202041
+472a402a
+6fe08007
+c012ab6e
+c0132b74
+c013ab7a
+20202b7a
+6848c393
+284ffe01
+2020ab85
+284ffe02
+2020ab8a
+20202b80
+6848c393
+284ffe02
+2020ab8a
+284ffe00
+2020ab80
+20202b85
+6848c393
+284ffe00
+2020ab80
+284ffe01
+2020ab85
+20202b8a
+70000725
+6fe086a1
+79207e00
+67e086a1
+20600000
+70000726
+6fe086a1
+79207e01
+67e086a1
+20600000
+70000727
+6fe086a1
+79207e02
+67e086a1
+20600000
+18c22200
+6fe0c3cb
+c00366d5
+c007d03d
+1a220c00
+efe18006
+67e1c397
+c0012bab
+c001abb0
+c0022bb3
+c0032bf7
+c0042c44
+c0052d19
+c0062d4c
+c0082d63
+c0092da8
+c00b2dce
+c00c2de1
+c00f2de6
+c0292dea
+20600000
+18002203
+20402e10
+58000002
+e7e08005
+6fe142e1
+e7e10005
+20600000
+20402bb0
+18002203
+20402e10
+58000003
+20202ba7
+1fecfe00
+67e142e3
+20600000
+20402e41
+20407dba
+20202bc3
+efe10006
+1fe17eff
+207a0000
+9a467c00
+20628000
+24610000
+9a667c00
+20628000
+20212bc1
+18007c01
+20600000
+18007e00
+20600000
+d9600003
+20402cc7
+20402bb6
+203a2bf5
+24212bf3
+18c08dfe
+20407c6d
+20407c64
+24342be3
+20407c51
+61620680
+1800221e
+20402e10
+69620680
+20407c60
+20407dbc
+58000005
+e7e08005
+20407c67
+efe10006
+ea208006
+1a267c10
+2022abdf
+1a267c02
+2422ae03
+58000001
+e7e08005
+20202be8
+58000002
+e7e08005
+d9600001
+20202be8
+20407c67
+efe10006
+efe08006
+9a267c00
+2422abf5
+20407c67
+efe10006
+1fe17eff
+e7e10005
+ef208006
+20407cda
+20407c6a
+196097ff
+2022abf5
+20402cdd
+20202bc5
+20402cdd
+20202bf1
+20342e03
+20202e34
+20402e41
+efe10006
+67e1439e
+20407c6d
+d8a006b5
+6fe14335
+1fe0fff9
+20402e4f
+20202c0a
+78547c00
+684906b1
+6fe106b3
+98467c00
+24212c07
+18427e00
+c1800000
+78347c00
+7001b901
+20202e05
+20402c00
+20740000
+6849439e
+58002800
+98467c00
+2022ac11
+20202e03
+70439a00
+684906b1
+60490678
+20402d04
+243a2e03
+68490678
+20402d04
+243a2c2a
+18c22200
+6fe086c6
+1fe27200
+684886b5
+98467c00
+2422ac26
+da4006b6
+20407d64
+2022ac2d
+6fe106ce
+6849439e
+98467c00
+2022ac35
+6fe10678
+1fe0fe01
+67e10678
+20202c16
+6fe0c39a
+c000ac35
+20202e03
+6fe106ce
+6849439e
+98467c00
+2422ac26
+70439a01
+68490678
+604906c9
+20202c26
+6fe0c39a
+c0002c26
+70439a02
+68490678
+184085ff
+604906cb
+da200005
+20402e10
+58000007
+e7e08005
+6fe106c9
+e7e10005
+6fe106cb
+e7e10005
+20600000
+20402e41
+20402e4a
+20202c47
+684906b1
+60490678
+20402cc7
+20402cd2
+18c08dfe
+18c27e00
+67e106c7
+684906b6
+58002a00
+98467c00
+2022acb2
+58002803
+98467c00
+2422ac9c
+d9600002
+20402e17
+24212c79
+68490678
+20402d02
+243a2c79
+20402e1b
+2422ac77
+24342c7b
+78547c00
+20402e46
+1fe22200
+20402e10
+58000009
+e7e08005
+18a26000
+18a08a01
+20402c89
+20402e13
+20402d02
+20402c90
+6fe086cd
+1fe0a205
+e2208030
+1a267c07
+2442fdbe
+2042fdc0
+20402e46
+1fe0fffe
+9a26fc00
+20407d62
+18079600
+196097ff
+2022ac79
+20402e13
+20202c56
+20342e03
+20202e34
+20402e24
+20402e13
+20402d02
+20402d96
+243a2c79
+20407c64
+6fe10678
+1fe0ffff
+e7e10005
+20402e30
+20402c90
+196097ff
+2022ac79
+20202c77
+6fe10678
+e7e10005
+6fe086c6
+1fe27200
+20407c67
+20407ccc
+20207c6a
+20407c64
+6fe10678
+e7e10005
+20407c6a
+6fe086cd
+1fe27200
+20407c64
+20407c67
+9f260c00
+18c08dff
+20407ccc
+20207c6a
+472ac02a
+20402ce0
+203a2e03
+18c22600
+20402e46
+1a620c00
+e8408006
+18408404
+20407db0
+1fe22600
+1fe22200
+20407c6d
+20402e10
+58000009
+e7e08005
+1a60fffe
+1fe0f3fe
+e7e08005
+6fe106de
+e7e10005
+20407c67
+20207ccc
+20402ce0
+203a2e03
+18c08dfb
+efe10006
+67e10678
+20402e46
+6848c26b
+18408404
+20407db0
+1fe22600
+1fe22200
+20402e10
+58000009
+e7e08005
+1a60fffe
+1fe0f3fe
+e7e08005
+6fe10678
+e7e10005
+d8c0426c
+20207ccc
+472b402a
+6fe106b1
+98002400
+6fe106b3
+98002600
+6fe142f7
+98000c00
+20207dba
+20402cd2
+2022acdd
+20600000
+472bc02a
+6fe142f7
+98000c00
+efe10006
+1fe17eff
+207a0000
+98467c00
+20628000
+20402cdd
+20402cdd
+20202cd5
+efe08006
+98c08c00
+20600000
+472c402b
+6fe142f7
+98000c00
+efe10006
+1fe17eff
+207a0000
+67e106de
+efe08006
+18c20a00
+98c08c00
+684886b5
+98467c00
+2422acf3
+1fe27200
+18a22400
+da2006b6
+20407d64
+20628000
+6fe086b5
+98a08c00
+20402cdd
+20202ce3
+d8400001
+6fe142f7
+98000c00
+18c20a00
+efe10006
+1fe17eff
+207a0000
+1fe08401
+20402cdd
+20402cdd
+18c20a00
+20202cfa
+6fe106c7
+20202d06
+472cc02b
+6fe142f7
+98000c00
+efe10006
+1fe17eff
+203a2d0f
+98467c00
+2022ad10
+20402cdd
+20402cdd
+20202d07
+20207dc8
+efe08006
+67e086cd
+1fe27200
+d8a006ce
+20407ccc
+efe08006
+67e086c6
+20407c6d
+20207dca
+20402dc7
+68494398
+6fe0c321
+c281ad42
+20402cd2
+2422ae03
+20542d48
+20740000
+20402cdd
+18c08dfe
+efe10006
+d8402a00
+98467c00
+2022ad36
+18c22600
+20402e46
+1a620c00
+e8408006
+18408401
+20407db0
+1fe22600
+1fe22200
+20407c6d
+20402e10
+5800000b
+e7e08005
+1a60f3ff
+20407c67
+20207cda
+20402e46
+6848c26b
+18408401
+20407db0
+1fe22600
+1fe22200
+20402e10
+5800000b
+e7e08005
+1a60f3ff
+d8c0426c
+20207cda
+6fe14332
+98467c00
+2422ad1d
+24342d1d
+7001b905
+20202e05
+18c08dfe
+efe10006
+c2872d46
+20207dbc
+efe10006
+67e106b5
+98002200
+68494398
+20402ccf
+203a2e03
+efe08006
+9a267200
+24212e03
+20407c6d
+20402e46
+1f208401
+20407db0
+1fe22200
+1fe22600
+20402e10
+5800000d
+e7e08005
+1a60f3ff
+684906b5
+20407c67
+98408c00
+20207ccc
+20402e41
+20402e4a
+20202d66
+d9600002
+684906b1
+60490678
+20402cd2
+18c08dfe
+18c27e00
+67e106c7
+20402e17
+24212d9e
+68490678
+20402d02
+243a2da1
+20402e1b
+2422ad94
+19627e00
+c0002da1
+24342d8a
+78547c00
+20402e46
+1fe22200
+20402e10
+58000011
+e7e08005
+6fe086c6
+1fe0a204
+e2208005
+20407c6a
+1a267c06
+2442fdbe
+2042fdc0
+20402e46
+1fe0fffe
+9a26fc00
+20407d62
+18079600
+20202d90
+20402d98
+243a2da1
+6fe10678
+1fe0ffff
+67e106cb
+20402e2a
+6fe10678
+67e106c9
+20402e24
+196097ff
+20402e13
+20202d6d
+6fe086cd
+20202d99
+6fe086c6
+20362d9c
+1fe0fffe
+20600000
+1fe0fff0
+20600000
+6fe10678
+67e106cb
+20202da5
+6fe10678
+1fe0ffff
+67e106cb
+20202da5
+20342e03
+20402e2a
+20202e34
+18c22200
+6fe14335
+1fe0a5fd
+20402929
+472d402b
+20402dc7
+68494398
+20402cd2
+2422adc5
+20542dc1
+20740000
+6fe0c321
+c3022dbc
+68494398
+6fe14332
+98467c00
+2422adbc
+20402dc7
+24342dbc
+20202d46
+18002201
+20402e10
+58000013
+e7e08005
+20600000
+18c08dfe
+efe10006
+c287ad46
+20207dbc
+7001b901
+20202e05
+472dc02b
+20407dbc
+6fe0c2fe
+c1000000
+6fe0c040
+c3820000
+20207dba
+18c0a202
+6fe14335
+1fe0a5fb
+20402929
+20202dd3
+6fe14335
+1fe22200
+20402e10
+58000017
+e7e08005
+6fe14398
+e7e10005
+6fe14335
+1fe0f3fb
+6fe14339
+1fe08c07
+efe10006
+e7e10005
+20207ccc
+18002201
+20402e10
+58000019
+e7e08005
+20600000
+6fe0c396
+793ffe00
+67e0c396
+20600000
+18c22200
+6fe14335
+1fe0a5fd
+20202929
+18422600
+1a20a203
+20402e10
+1a20a3fd
+5800001b
+e7e08005
+1a620400
+e0410005
+20600000
+6fe0c396
+79207e00
+67e0c396
+18422600
+1a20a203
+20402e10
+1a20a3fd
+5800001d
+e7e08005
+1a620400
+e0410005
+20600000
+472e402b
+7001b90a
+18002205
+20402e10
+58000001
+e7e08005
+6fe0c397
+e7e08005
+6fe14398
+e7e10005
+6fe081b9
+e7e08005
+20600000
+472ec02b
+18002404
+202029fb
+68490678
+18408401
+60490678
+20600000
+68490678
+6fe106b3
+98467c00
+20600000
+472f402b
+684886b5
+da2006b6
+6fe086cd
+1fe27200
+98467c00
+24628000
+da4006ce
+20207d64
+472fc02b
+6fe086c6
+67e086a1
+1fe27200
+20407c67
+20207ccc
+4730402c
+20407c64
+6fe106c9
+e7e10005
+6fe106cb
+e7e10005
+6fe086a1
+1fe27200
+20407ccc
+20207c6a
+4730c02c
+20407c64
+20402a21
+18a27e00
+98c62200
+20402a24
+1a227e00
+e7e10006
+1a20a204
+20402a16
+1a227e00
+e7e08006
+20600000
+1fecfe00
+67e106b1
+efe10006
+67e106b3
+20600000
+4731402c
+6fe142e3
+684942e1
+20207db0
+4731c02c
+20407c6d
+d8a006b5
+6fe14335
+1fe0fffb
+e7e08005
+1fe27200
+20407c67
+20207ccc
+6fe10050
+c1820000
+6fe0c396
+79207e01
+67e0c396
+6fe18052
+67e1c397
+7920000f
+c0092e6e
+c0292e73
+c00c2de1
+c0012bab
+c00f2de6
+793f800f
+6fe0c396
+793ffe01
+67e0c396
+20600000
+6fe0c396
+c4008000
+7920000f
+20402e7e
+20402e84
+20542e61
+6fe0c397
+c0092dac
+20600000
+20402e73
+20202e70
+20402e84
+24740000
+20202dac
+4732402c
+20402e77
+da200055
+20202929
+6fe0804d
+1fe0a5f9
+1fe0fffc
+67e14337
+6849004e
+60494335
+20600000
+6a40804d
+6fe14337
+9a408400
+60494337
+da20004e
+20202929
+20407dbc
+6fe14337
+68494335
+98467c00
+24628000
+20207dba
+efe08006
+e8408006
+e8410006
+c009ae8f
+20600000
+efe10006
+67e1433c
+70066f40
+2020782b
+da20000c
+da600012
+20402e9b
+58000008
+e7e10005
+6fe442d3
+e7e40005
+20600000
+20402ea3
+da400005
+204029fb
+1a627e00
+e7e08005
+6fe0c33b
+e7e08005
+20600000
+6fe0c33b
+1fe0fe01
+67e0c33b
+c1800000
+70433b01
+20600000
+6fe0c2fe
+c0002eb8
+c000aebb
+c0012ebd
+c040aeb1
+c0412eb3
+c041aeb6
+20600000
+7042c70d
+20202eb9
+7042c70d
+7042c501
+20600000
+7042c70d
+20202ebe
+7042c700
+7042c503
+20600000
+7042c705
+20202eb9
+7042c705
+7042c500
+20600000
+6fe0c46c
+79207e00
+67e0c46c
+20600000
+6fe0c46c
+793ffe00
+67e0c46c
+20600000
+efe08006
+c000aedc
+c001af03
+c0022f24
+c002af31
+c003af9a
+c0042f86
+c004af96
+c0052f9a
+c005af9a
+c0062f9b
+c006afa0
+20600000
+18002202
+20403047
+5800000b
+e7e08005
+6fe0c2c7
+e7e08005
+20600000
+67e0c2bd
+efe30006
+e7e30005
+6fe0c2fe
+c0002f37
+20402efe
+6fe0c46a
+203a2ee8
+6fe0c2c0
+c301c31f
+6fe0c2fe
+c303c31f
+7042fc03
+6fe0c2be
+c0002ef0
+c000aef0
+c001aef0
+6fe0c2fe
+c0012ef3
+c1418000
+dfe00000
+67e242ff
+20600000
+6fe0c321
+c2802efc
+da2042ff
+1a220a00
+df200003
+20407de8
+6fe14301
+1fe17e07
+67e14301
+70066f34
+2020782b
+18002207
+20403047
+6fe3c2c4
+e7e38005
+20600000
+7042fc05
+d8a0429b
+20407c8f
+6fe0c2fe
+c0022f0b
+c041af0d
+c0422f10
+20202f13
+70066f43
+2020782b
+7042f902
+7042fa08
+20600000
+6fe242ff
+203a2f0b
+20202f0d
+7042fc06
+6fe0c2fe
+c283af1c
+20407256
+18002211
+20403047
+58000003
+e7e08005
+20207375
+d8a042ab
+20407de7
+204071b6
+18002211
+20403047
+58000003
+e7e08005
+202071f2
+18c22200
+6fe0c2fe
+c283af39
+1a220c00
+2040724e
+2022af4e
+7001ba04
+18002202
+20403047
+58000005
+e7e08005
+6fe081ba
+e7e08005
+4732c02c
+18000e07
+20407ce0
+7042fc00
+70066f30
+2020782b
+7001ba05
+20202f2b
+d8a00158
+1a220c00
+20407c8f
+6fe0c2fe
+c041af45
+c0422f45
+20407140
+20402f53
+6fe0c2fe
+c1c10000
+70066f3b
+2020782b
+204071ab
+d8a006d1
+204071f2
+da2006d1
+da40429b
+df200010
+20407d64
+2422af2a
+20202f53
+2040724a
+70066f31
+2040782b
+70429a01
+7042fc09
+18002211
+20403047
+58000004
+e7e08005
+d8c042ab
+20207c8f
+18002211
+20403047
+58000006
+e7e08005
+6fe0c321
+c280af61
+d8c0428a
+20207c8f
+d8c04322
+20207c8f
+d8a04303
+1800720a
+20407de8
+1800220b
+20403047
+58000007
+e7e08005
+6fe14303
+e7e10005
+6fe44305
+e7e40005
+20600000
+18002211
+20403047
+58000008
+e7e08005
+58000000
+e7e40005
+e7e40005
+20600000
+18002208
+20403047
+58000009
+e7e08005
+6fe0c2d2
+e7e08005
+6fe342db
+e7e30005
+20600000
+7001ba08
+20202f2b
+6fe0c2c9
+6848c2c9
+98417e00
+20600000
+d8a0430d
+20407c8f
+20402f82
+2fec0001
+2020af80
+6fe0c3cb
+c1850000
+20402f90
+24740000
+20204329
+20407dbc
+6fe0c2cb
+c1000000
+6fe0c2c2
+c4008000
+20207dba
+20402f82
+2fec0001
+2020af80
+20600000
+20600000
+d8a005fe
+20407c81
+7042f902
+7042fa01
+20600000
+d8a0065e
+20407c8f
+7042fa06
+7042f902
+20600000
+18002241
+20403047
+5800000c
+e7e08005
+d8c0448f
+20207c81
+20407157
+18002211
+20403047
+5800000d
+e7e08005
+202071f2
+6fe0c2fc
+c17f8000
+d8400003
+98467c00
+24610000
+d8e00007
+20407cef
+247a0000
+20202f80
+4733402c
+20402a28
+247a0000
+6fe0c2fc
+c0002fc7
+c000afcd
+c0012fc7
+c001afcf
+c004afd3
+c005afe3
+c0062fe5
+c006afec
+20600000
+6fe0c2fd
+c1820000
+7042fdff
+7042fcff
+70066f3f
+2020782b
+7042fc02
+20202ed5
+7042fc04
+58017700
+d8e00007
+20207ce1
+6fe0c2fd
+c0022fd6
+20600000
+6fe0c2fe
+c283afe1
+7042fc0b
+20402f59
+70066f29
+2040782b
+6fe0c3cb
+c1850000
+20402f90
+20740000
+20204329
+7042fc0c
+20202fda
+7042fc0c
+20202f63
+6fe0c2c3
+6848c2ca
+98417e00
+2fec0001
+2020afee
+7042fc0d
+20202f6f
+20402f77
+20202fee
+4733c02c
+18000e07
+20407ce0
+7042fdff
+7042fcff
+70066f3e
+2020782b
+4734402d
+6fe0c2fe
+c4038000
+6fe0c2f9
+c1810000
+7042f900
+6fe0c2fa
+c000b03d
+c0013044
+c001b035
+c003301a
+c003b011
+c0043007
+20600000
+7042f900
+7042fa00
+7042fb00
+20600000
+6fe0c4cf
+1fe20e00
+1fe0fe01
+67e0c4cf
+6fe242ff
+afefffff
+58000080
+7920fe00
+67e0c4d0
+20203039
+6fe0c2fb
+7042fb00
+c000b016
+7042f902
+20600000
+70066f31
+2040782b
+7042fc09
+20202fab
+6fe085f9
+c001b01e
+7042f902
+20600000
+2040717e
+6fe0c2fe
+c041b023
+c0423023
+20402ef0
+2040716b
+da2006d1
+da40065e
+df200010
+20407d64
+2022b02b
+7001ba0b
+20202f2b
+2040745b
+2422b029
+70429a01
+6fe0c2fe
+c040b016
+c041b016
+c0423016
+7042f902
+7042fa07
+20600000
+6fe0c2fe
+c041b03a
+c042303a
+7044d000
+20202f13
+7044cf00
+c1420000
+20202ef3
+7042f902
+6fe0c46e
+c001b041
+20600000
+7042fa02
+7005f900
+2020753c
+7042f902
+7042fa03
+20202fa5
+4734c02d
+18002406
+202029fb
+6fe0804e
+c0003061
+c000b069
+c0013071
+c001b075
+c0023093
+c002b098
+c003309c
+c003b0a1
+c00430a2
+c004b0a3
+c00530a4
+c005b0a8
+c00630a9
+c006b0ab
+c00930ac
+c009b0ad
+c00a30ae
+c00ab0b0
+c00b30bb
+c00c30bc
+6a60804e
+202030df
+efe48006
+67e4819f
+efe10006
+67e10188
+6fe08168
+79207e05
+67e08168
+20600000
+efe28006
+67e2819f
+efe10006
+67e10188
+6fe08168
+79207e06
+67e08168
+20600000
+58000014
+67e10196
+67e142f5
+20600000
+efe40006
+67e44305
+efe10006
+67e14303
+efe40006
+67e442e5
+efe20006
+67e2445e
+204030cc
+4735402d
+6fe0c2fc
+c004b087
+6fe0c321
+c280b08a
+6fe0c3fa
+245a6e96
+6fe0c29a
+c000308f
+7042fd01
+204030da
+2020725c
+70429a01
+d8c04322
+d8a0428a
+20407c8f
+20203087
+7042fd00
+7042fc00
+70066f41
+2020782b
+efe40006
+67e442ed
+efe20006
+67e24462
+2020725c
+6fe08168
+79207e04
+67e08168
+20600000
+20748000
+70066f32
+2040782b
+7042fd04
+202030dd
+20600000
+202030e4
+20600000
+7042fd02
+204030eb
+70066f33
+2020782b
+20600000
+20748000
+202030ed
+20600000
+202030f9
+20600000
+204030b0
+202030fd
+efe40006
+67e443b8
+6fe143b8
+684943c4
+20407db0
+67e143b8
+6fe143bc
+684943c0
+20407db0
+67e143bc
+20600000
+20203103
+efe10006
+67e1019f
+efe10006
+67e10188
+207a0000
+6fe08168
+79207e07
+67e08168
+20600000
+da600013
+da200002
+da400002
+204029f5
+1a627e00
+e7e08005
+20600000
+d8a042ed
+18007208
+20407de8
+d8a04462
+18007204
+20407de8
+da20000d
+da400004
+204029f5
+6fe442ed
+e7e40005
+6fe24462
+e7e20005
+20600000
+7042fd05
+da400005
+2020310d
+da400006
+2020310d
+da200002
+da400007
+204029f5
+e2608005
+20600000
+da200009
+da400009
+204029f5
+6fe443ae
+1fe1fe01
+e7e40005
+20600000
+da40000b
+2020310d
+da200006
+da40000c
+204029f5
+6fe2c15e
+e7e28005
+20600000
+da200002
+da40000d
+204029f5
+58000006
+e7e08005
+20600000
+da400013
+2020310d
+da400014
+202030fe
+da400015
+da200009
+204029f5
+6fe443c0
+e7e40005
+20600000
+da200003
+da400017
+204029f5
+6fe0c3b6
+1fe17e07
+e7e08005
+6fe0c3b7
+1fe17e07
+e7e08005
+20600000
+da200001
+202029f5
+4735c02d
+c513b3a3
+20203603
+4736402d
+7844fc00
+7843fc00
+58555555
+98001e00
+6fe0c58d
+202025c8
+4736c02d
+6fe0c5b7
+204025a4
+6fe2458f
+98001200
+20402160
+6848c58d
+204025cd
+20403112
+c597b126
+783cfc00
+2000001e
+20403112
+7857fc00
+7826fc00
+7830fc00
+78507c00
+78287c00
+6fe1458b
+98003600
+37c18400
+242c3180
+20406877
+c517b135
+6fe0c5ca
+243a3135
+7846fc00
+7825fc00
+7823fc00
+7824fc00
+2040317d
+67e0c5ad
+6848c5ac
+98467c00
+2422b188
+4737402d
+7858fc00
+280ffe2f
+2040b16f
+2038b18a
+2040317d
+67e0c4f7
+c513b148
+6fe0c4f7
+6848c589
+a8400e00
+2420b18c
+2040317d
+280ffe2f
+2040b178
+e7e08005
+1fe97e00
+1fe67c1f
+2421318e
+1fe27200
+2022b154
+2040317d
+e7e08005
+c2003151
+c513b159
+18a22200
+2040317d
+67e0c5d3
+1a220a00
+09800018
+1fef7e00
+1ff17e00
+e7e18005
+6fe0c5ca
+243a316d
+7845fc00
+280ffe27
+2040b5c8
+20233190
+20406876
+4737c02d
+7837fc00
+204026bb
+c6138000
+6fe0c5d3
+6848c62a
+98467c00
+20417db2
+202035cb
+7846fc00
+20203160
+2040317d
+1fe67c01
+20217dc2
+1fe0fffe
+c513b176
+203a7dc2
+1fe0ffff
+67e08678
+20600000
+1fe17e07
+68488678
+18498400
+9841fe00
+20600000
+09800008
+19897e00
+20600000
+7045cb01
+280ffe27
+2040b5e3
+4738402e
+204025bc
+784dfc00
+7845fc00
+202020cf
+7045cb02
+20203183
+7045cb03
+20203183
+7045cb04
+20203183
+7045cb05
+20203183
+7045cb06
+20203183
+20402160
+6848c58d
+202021f9
+4738c02e
+6fe0c5b8
+204025a4
+6fe2458f
+98001200
+20403112
+20403192
+79202a00
+782efc00
+78307c00
+7850fc00
+2040687d
+785d7c00
+c517b1c7
+c516b1d9
+19317e00
+1fecfe00
+1ff1fe00
+08008628
+4739402e
+c517b1ae
+6fe0c5ca
+243a31ae
+784efc00
+782dfc00
+7823fc00
+7824fc00
+6fe0c58a
+98007200
+d8c04539
+efe08006
+08008608
+c20031b3
+78247c00
+08008618
+78447c00
+c597b1bd
+7843fc00
+58000000
+08008603
+37d38200
+20000064
+785d7c00
+784efc00
+6fe0c5ca
+243a31c4
+784dfc00
+785c7c00
+20402160
+2020687b
+df20000a
+5800003c
+08008608
+c20031c8
+784efc00
+783c7c00
+19317e00
+1ff17e00
+1ff1fe00
+08008620
+c51731d6
+58000001
+08008605
+783d7c00
+202031a8
+58000000
+08008605
+202031a8
+6fe0c148
+1fe37200
+20000002
+c20031db
+19317e00
+1fecfe00
+1ff18400
+18427e00
+08008608
+18427e00
+08008628
+202031a8
+4739c02e
+6fe0c5b8
+c2813206
+6fe0c588
+1fe0fe03
+67e0c58a
+6fe0c5ac
+67e0c539
+6fe0c589
+e7e08005
+6fe0c588
+1fe9fe00
+6848c57e
+18410403
+18438400
+9841fe00
+6848c57f
+9840fe00
+e7e08005
+6fe0c588
+98007200
+d8c04519
+20407cda
+473a402e
+c6938000
+6fe08035
+e7e08005
+6fe0c5b8
+c3810000
+6fe0c58a
+1fe0fe01
+67e0c58a
+20600000
+6fe0c588
+1fe0fe04
+c593b20a
+1fe0fe01
+67e0c58a
+6fe0c5ac
+67e0c539
+6fe0c58a
+1fe0fffe
+e7e08005
+6fe0c589
+e7e08005
+58000000
+202031f0
+473ac02e
+6fe0c4f8
+1fe97e00
+67e0c57d
+1fe0fe01
+d8c044f8
+98c08c00
+efe18006
+67e1c580
+6fe0c4f8
+1fe37e00
+1fe17e03
+67e0c586
+20600000
+473b402e
+6848c58e
+20403227
+6048c58e
+20600000
+473bc02e
+2040322c
+18408401
+18410403
+20600000
+473c402f
+6fe0c58f
+1fe17e03
+1fefa204
+58004593
+9a20fe00
+98408c00
+efe08006
+67e0c58d
+20600000
+67e2458f
+473cc02f
+da200000
+df200004
+d8c0458f
+efe08006
+9a20a200
+c200323b
+1a227e00
+67e145aa
+6fe0c5aa
+6848c5ab
+9840fe00
+67e0c5ac
+20600000
+473d402f
+20407dbc
+684a45a3
+1c427e00
+98467c00
+24413255
+1fe22400
+6fe245a3
+6848c5a7
+98408400
+1a427e00
+98467c00
+24610000
+793ffe1c
+67e245a3
+20207dba
+20628000
+79207e1c
+20600000
+58000000
+67e245a3
+20600000
+473dc02f
+38001300
+3805908b
+380b6150
+380c3d20
+67e4c593
+38003a1a
+3804c453
+3808d312
+380c0001
+e7e38005
+6fe0c5b9
+207a0000
+d8c045ba
+d8a04593
+20207c8f
+473e402f
+584e001e
+67e1c5bb
+58032303
+e7e18005
+58250642
+e7e18005
+58094c06
+e7e18005
+583c0927
+e7e18005
+7045b901
+20600000
+473ec02f
+d8406978
+c513b27f
+d84012c0
+6fe0c5b7
+c301327f
+d8402ee0
+6049458b
+20600000
+7045b701
+7045b801
+20600000
+7045b702
+7045b802
+20600000
+473f402f
+7045d04e
+58101520
+67e1c5cc
+58000005
+e7e08005
+20600000
+da6045d8
+da40367a
+202042e7
+79200026
+6fe0c5fc
+793ffe02
+79207e01
+67e0c5fc
+58000000
+67e145de
+6fe145d6
+67e145d8
+7045d500
+204032d6
+70457e00
+6fe0c5d0
+67e0c58d
+6fe0c5d1
+67e0c141
+6fe245cc
+20203236
+473fc02f
+7045e200
+6fe145da
+1fe0fe01
+67e145da
+6fe0c5da
+1fe17eff
+247a0000
+6fe0c5d4
+c07fb2f8
+c000b2b2
+c00132b4
+c001b2ba
+c00232c0
+20600000
+704519ff
+202032c1
+6fe0c5ae
+203a32b8
+6fe24604
+20403236
+704519aa
+202032c1
+70451955
+6fe0c5ae
+203a32c1
+6fe245e8
+67e2451b
+202032c3
+70451922
+6fe24604
+67e2451b
+6fe0c589
+1fe17e07
+67e0c51a
+70451f00
+70458807
+204031e5
+20403651
+246c0000
+24778000
+2040357b
+2040366e
+47404030
+6fe0c5d4
+c17f8000
+c000b2db
+c00132dd
+c001b2e3
+c00232eb
+20600000
+7045d402
+6fe0c5ae
+207a0000
+7045d401
+20600000
+7045d402
+2020364c
+6fe0c5ae
+203a32e1
+6fe2455f
+67e245e8
+7045d403
+2020364c
+6fe0c5ae
+203a32e9
+6fe2455f
+684a4604
+98467c00
+24628000
+7045d404
+2020364c
+6fe0c5ae
+203a32f1
+6fe2455f
+684a45e8
+98467c00
+24628000
+7045d4ff
+70066f39
+2040782b
+58000000
+67e145d8
+6fe2455f
+20403236
+6fe0c5fc
+793ffe01
+67e0c5fc
+2020364c
+70461601
+70461500
+20600000
+6fe0c615
+c3808000
+79207e01
+67e0c615
+58000000
+67e1c5d3
+67e0c5de
+67e0c5df
+67e2462c
+70461101
+2020329c
+70461101
+70458808
+d8c045d6
+d8a04519
+20207c89
+4740c030
+204033be
+20403119
+2437b3be
+2040331e
+204033f4
+20403399
+2040493d
+6fe0c5ae
+207a0000
+6fe2462c
+207a0000
+20203236
+204033be
+20203183
+70462205
+d8c044f7
+d8a045e8
+20407c89
+47414030
+6fe0c5ea
+c0553329
+c02ab33a
+c011335b
+c07fb59b
+20600000
+6fe0c5eb
+c000b32d
+c0013335
+20600000
+6fe0c5de
+247a0000
+7045d301
+7045d601
+7045d780
+6fe344f1
+67e345d8
+20600000
+6fe0c5df
+247a0000
+7045d401
+7045d602
+20203331
+6fe0c5ae
+203a3340
+6fe245ec
+684a44f1
+98467c00
+24628000
+6fe0c5eb
+c000b344
+c0013351
+20600000
+6fe0c5de
+247a0000
+6fe0c5d3
+c000b349
+20600000
+7045d302
+6fe0c5ae
+203a3330
+7045d601
+7045d780
+6fe2462c
+67e245d8
+20207dba
+6fe0c5df
+247a0000
+6fe0c5d4
+c000b356
+20600000
+7045d402
+6fe0c5ae
+203a3338
+7045d602
+2020334d
+6fe0c5ae
+203a3361
+6fe245ec
+684a462c
+98467c00
+24628000
+6fe0c5eb
+c000b365
+c0013372
+20600000
+6fe0c5de
+247a0000
+6fe0c5d3
+c001336a
+20600000
+7045de01
+20403330
+6fe0c5d5
+1fe1fe01
+67e0c5d5
+58000000
+67e145d3
+20600000
+6fe0c5df
+247a0000
+6fe0c5d4
+c0803377
+20600000
+7045df01
+20403338
+6fe0c5d5
+1fe1fe02
+67e0c5d5
+2040336f
+20204937
+6fe0c616
+c1808000
+6fe0c610
+247a0000
+6fe0c4fa
+c000b386
+c001338a
+20600000
+6fe0c62b
+c4000000
+7857fc00
+20600000
+6fe0c62b
+c4008000
+20203388
+6fe0c610
+247a0000
+6fe0c62b
+1fe1fe01
+67e0c62b
+20600000
+6fe0c610
+247a0000
+6fe0c62b
+1fe1fe02
+67e0c62b
+20600000
+6fe0c5d5
+207a0000
+6fe0c5eb
+c000b38d
+c0013393
+20600000
+79200027
+6fe0c141
+67e0c623
+202035d6
+6fe145e0
+20207d79
+4741c030
+70458800
+6fe0c611
+207a0000
+6fe145e2
+20207d79
+204033f1
+2437b3be
+204033e3
+243433be
+6fe0c57d
+203a33be
+1fe0fe02
+98007200
+d8c044f7
+d8a045e8
+20407cda
+70461300
+6fe0c610
+205a33fe
+47424030
+6fe0c5ea
+c000b3c4
+c00133d3
+c07fb3c2
+4742c030
+d8a044f7
+df200042
+20207ca1
+2040339b
+2020359b
+2040338d
+2040352e
+6fe0c60a
+6848c5e8
+284ffe03
+7920fe00
+67e0c60a
+c000b3d9
+6fe0c612
+6848c5e8
+284ffe04
+7920fe00
+67e0c612
+6fe145e4
+20207d79
+20403393
+6848c5e8
+284ffe03
+2020b3e1
+6fe145e6
+20207d79
+6fe0c3cb
+1fe67c0e
+2042c469
+6fe0c5de
+247a0000
+7045de01
+6fe245f2
+202035a3
+6fe245f2
+202035a9
+20407dbc
+6fe0c586
+6848c587
+98467c00
+2442fdba
+6fe0c586
+67e0c587
+6fe1c580
+6849c583
+98467c00
+2442fdba
+6fe1c580
+67e1c583
+20600000
+204033be
+20403119
+24778000
+6fe0c4f7
+67e0c589
+20403214
+6fe0c4f8
+2feffe00
+2020b3fd
+204033a5
+204031e5
+20403195
+20203183
+70461401
+58000280
+d8e00008
+20207ce1
+47434030
+70461301
+70461700
+7045a7ff
+20203258
+4743c030
+6fe0c613
+207a0000
+20403245
+24740000
+20403414
+6fe0c617
+1fe0fe01
+1fe17e01
+67e0c617
+c0003419
+c000b41c
+20600000
+6fe0c622
+207a0000
+1fe0ffff
+67e0c622
+20600000
+6fe0c622
+247a0000
+20203460
+6fe0c622
+247a0000
+202032fc
+6fe0c62a
+247a0000
+6fe0c628
+205a344f
+6fe0c625
+c3800000
+79207e00
+67e0c625
+70462401
+70462900
+58000000
+67e14626
+7045a760
+20203258
+47444031
+6fe0c616
+c1000000
+6fe0c62a
+247a0000
+6fe0c628
+247a0000
+6fe0c624
+207a0000
+6fe0c62b
+2fe00603
+2020b44b
+20403245
+24740000
+6fe14626
+1fe0fe01
+67e14626
+d84007d0
+98467c00
+2021344b
+6fe0c629
+1fe0fe01
+1fe17e01
+67e0c629
+c0003514
+c000b2fc
+20600000
+6fe0c622
+243a32fc
+20203514
+70462801
+20203514
+70462400
+20600000
+70462401
+20600000
+4744c031
+6fe0c615
+c3800000
+79207e00
+67e0c615
+6fe0c623
+67e0c141
+70461100
+70090d00
+70460a01
+70457e00
+6fe244f1
+20403236
+20403222
+202033be
+70461100
+70461600
+70461500
+20600000
+6fe0c616
+c1800000
+20403451
+20403518
+202033ab
+47454031
+6fe0c616
+c1808000
+204032ff
+2040330f
+6fe0c610
+247a0000
+6fe0c5d5
+207a0000
+70461300
+20403460
+204033fe
+20203258
+6fe0c615
+c3838000
+79207e07
+67e0c615
+6fe0c623
+67e0c141
+70461700
+70461101
+58000000
+67e1c63d
+67e3c61a
+20403506
+24628000
+6fe0c58e
+67e0c619
+6fe0c58d
+67e0c618
+20600000
+4745c031
+6fe0c616
+c1838000
+20403476
+204034ae
+204033f1
+2437b3be
+20403506
+2042b3ad
+6fe0c60a
+205a344d
+70461600
+6fe0c615
+79207e00
+67e0c615
+6fe0c611
+1fe67c02
+2442b504
+204033be
+204033fe
+20403506
+2022b4a7
+6fe2458f
+684a4634
+98467c00
+2022b4aa
+6fe2458f
+684a4630
+98467c00
+2022b4ac
+20600000
+6fe0c619
+67e0c58e
+20600000
+6fe0c61f
+202034a8
+6fe0c61c
+202034a8
+47464031
+6fe0c617
+1fe0fe01
+1fe17e03
+67e0c617
+c00034d2
+c000b4ec
+c00134b8
+c001b4ec
+20600000
+20403330
+6fe24630
+203a34ae
+20403236
+6fe0c61d
+205a34cd
+6fe0c61b
+67e0c58d
+6848c63e
+6a214644
+204035ab
+6048c63e
+204035b4
+6048c63b
+18467c50
+24610000
+6848c61c
+20403227
+6048c61c
+67e0c61b
+20600000
+70461d01
+d8400000
+2040322c
+67e0c61b
+20600000
+20403338
+6fe24634
+203a34ae
+20403236
+6fe0c620
+205a34e7
+6fe0c61e
+67e0c58d
+6848c63f
+6a214646
+204035ab
+6048c63f
+204035b4
+6048c63c
+18467c50
+24610000
+6848c61f
+20403227
+6048c61f
+67e0c61e
+20600000
+70462001
+d8400000
+2040322c
+67e0c61e
+20600000
+20403330
+6fe244f1
+20403236
+6fe0c61a
+205a3500
+6fe0c618
+67e0c58d
+6848c63d
+6a214642
+204035ab
+6048c63d
+204035b4
+6048c63a
+18467c50
+24610000
+6848c619
+20403227
+6048c619
+67e0c618
+20600000
+70461a01
+6fe0c618
+67e0c58d
+20600000
+70461100
+20600000
+6fe2458f
+684a44f1
+98467c00
+20600000
+6fe0c611
+c1010000
+6fe0c614
+207a0000
+d8e00008
+20407cef
+247a0000
+70461400
+70462200
+2040341f
+4746c031
+70461607
+70461500
+202033be
+47474031
+6fe0c60a
+c000b5ea
+6fe0c612
+c000b52c
+684a460b
+1c427e00
+98467c00
+24413255
+1fe22400
+6fe2460b
+6848c60f
+98408400
+1a427e00
+98467c00
+24610000
+793ffe1c
+67e2460b
+70460a01
+20203222
+70461200
+20203222
+1c427e00
+67e2460b
+20600000
+da6045de
+da40367a
+202042e7
+4747c031
+79200026
+6fe0c5fc
+793ffe01
+79207e02
+67e0c5fc
+6fe0c5e3
+203a3549
+6fe0c5e2
+c000b541
+c0013541
+c001b550
+c0023550
+6fe0c5d1
+67e0c141
+6848c5ec
+6048c58e
+6fe245e4
+2040355a
+6048c5ec
+20600000
+70414103
+6848c5ed
+6048c58e
+6fe245e8
+2040355a
+6048c5ed
+20600000
+70414103
+6848c5ee
+6048c58e
+6fe24604
+2040355a
+6048c5ee
+20600000
+6fe2455f
+207a0000
+67e245e8
+20403236
+20203222
+47484032
+6fe145e0
+d84001f8
+98417e00
+203a3565
+6fe145e0
+1fe0fe01
+67e145e0
+20600000
+2040357f
+20403651
+242c3586
+2437b586
+2040366e
+6fe245cc
+684a458f
+98467c00
+2022b291
+6fe24604
+684a458f
+98467c00
+2042b557
+6fe0c5fc
+793ffe02
+67e0c5fc
+58000000
+67e145d8
+67e145e0
+67e145de
+70066f3c
+2040782b
+4748c032
+df200020
+d8a04519
+20207ca3
+704519ff
+6fe0c589
+67e0c51a
+6fe24604
+67e2451b
+70458806
+202031e5
+47494032
+6fe0c5e3
+203a3222
+6fe145e0
+1fe0fe01
+67e145e0
+2feffe09
+6fe0c5e2
+c000b593
+c0013595
+c001b597
+c0023599
+20203549
+2020b549
+20203541
+2020b550
+20203541
+2020b550
+20203549
+2020b550
+2020329c
+6fe0c5eb
+c000b59f
+c00135a5
+20600000
+6fe0c5de
+247a0000
+6fe245ec
+67e2462c
+67e24630
+20600000
+6fe0c5df
+247a0000
+6fe245ec
+67e2462c
+67e24634
+20600000
+4749c032
+1a227e00
+98408a00
+6fe08009
+e7e08005
+18408401
+6fe0c5d2
+98410400
+20600000
+474a4032
+6fe0c5d2
+1fe0fe01
+67e1069b
+1fe27200
+1a220c00
+dfe00000
+e8408006
+9840fe00
+c20035bb
+6849069b
+9846fc00
+20407d62
+18078400
+c6138000
+18427e00
+c6930000
+20402308
+1fe20400
+20600000
+202022e9
+6fe145f0
+202035dd
+1fe22200
+6848c5ef
+6fe145f0
+98408a00
+1a227e00
+e7e08005
+18408401
+6fe0c5d2
+98410400
+6048c5ef
+20600000
+6fe14640
+204035dd
+6fe14642
+204035dd
+6fe14644
+204035dd
+6fe14646
+207a0000
+1fe20a00
+6fe0c5d2
+1fe0fe01
+1fe27200
+20207ca1
+204035c8
+207a0000
+6848c639
+6a214640
+204035ab
+6048c639
+20600000
+6a214640
+204035b4
+6048c638
+18467c50
+24610000
+20203222
+6fe244f1
+67e24604
+202035c9
+58002fb2
+67e1c608
+58100c0c
+67e1c5a7
+5800bb80
+67e1c60b
+70462105
+20600000
+5800f80c
+67e1c608
+581c1919
+67e1c5a7
+58017700
+67e1c60b
+7046210b
+20600000
+c6930000
+6fe0c5fc
+c280b2a3
+c281355c
+6fe0c618
+c000b6c0
+474ac032
+20403625
+2434369f
+2040363a
+204036e8
+6fe0c3cb
+c004600a
+6fe4460b
+67e445af
+6fe1461d
+67e1461f
+6fe145f8
+20207d79
+474b4032
+204036b4
+24740000
+204036be
+20407de2
+6fe1c608
+20203622
+474bc032
+204036b4
+24740000
+204036be
+6fe445af
+20407d25
+604a40a9
+2020241e
+20403628
+24740000
+202031e5
+6fe145f2
+20407d79
+2034362e
+6fe3c51a
+207a0000
+20207dba
+70460200
+1a20fe01
+67e0c588
+20403636
+67e0c519
+1a420c00
+1a227200
+20207cda
+6fe0c589
+1fe17e07
+67e0c589
+20600000
+58000000
+67e0c601
+67e14622
+20403651
+6fe0c57f
+c000b646
+242c365f
+2437b65f
+2040366e
+6fe0c3cb
+1fe67c08
+2042e262
+2040371a
+2040357b
+6fe0c57e
+1fe0fe01
+67e0c57e
+20403692
+474c4033
+58000000
+67e0c5fd
+67e145fe
+20600000
+474cc033
+7857fc00
+20403195
+6fe0c57f
+c000b183
+18002a00
+6fe2458f
+98001200
+68488008
+2040216f
+204021a6
+20403121
+2057b183
+20600000
+474d4033
+6fe0c3cb
+c00460f9
+6fe0c602
+247a0000
+6fe145fe
+1fe0fe01
+67e145fe
+6fe0c5ff
+c2823676
+2040367c
+6fe14622
+1fe0fe01
+67e14622
+2020363d
+474dc033
+20403214
+6fe0c57d
+207a0000
+98007200
+d8c044f9
+d8a0455d
+20207cda
+474e4033
+58000000
+67e145fe
+70460001
+70066f3a
+2020782b
+474ec033
+6848c601
+6fe0c621
+98467c00
+2421369a
+18408401
+6048c601
+6fe0c621
+c002b689
+6fe0c601
+c0033694
+c0063694
+20600000
+6fe0c601
+c001b694
+c0033694
+20600000
+c517b690
+67e0c53a
+20600000
+67e0c53b
+20600000
+6fe0c589
+c4020000
+6fe0c589
+793ffe04
+67e0c589
+2040368d
+2040371e
+20203222
+2040370e
+2040371e
+20203222
+6fe145f4
+20207d79
+6fe0c602
+205a36a6
+6fe0c618
+c1008000
+2040369d
+6fe145fa
+20207d79
+70458901
+70460201
+20403636
+67e0c519
+58000000
+67e3c51a
+6fe24604
+67e24521
+7045880c
+6fe0c589
+79207e03
+67e0c589
+204031e5
+2020360c
+474f4033
+78347c00
+20402408
+6fe1c0bd
+203a7dbc
+6fe0c094
+203a7dbc
+6fe0c618
+c000fdbc
+20600000
+6fe145f6
+20207d79
+20403245
+24740000
+204036d5
+6fe14619
+1fe0fe01
+67e14619
+6849461b
+98467c00
+2042b6ca
+20203609
+70461800
+58000000
+67e14619
+58000064
+67e1461b
+70461700
+6fe0c5a8
+67e0c5a7
+20600000
+6fe0c5a9
+202036d1
+6fe0c617
+1fe0fe01
+67e0c617
+c00236d3
+c002b6cf
+20600000
+70461801
+58000000
+67e14619
+20600000
+df200002
+d8c0458f
+20407dba
+5800ffff
+e8410006
+98467c00
+2442fdbc
+c20036e3
+20600000
+474fc033
+6fe0c437
+247a0000
+6fe144e9
+c3858000
+6a2145f0
+204035b4
+6048c624
+6fe0c629
+c51336f3
+6fe0c62c
+98467c00
+2421370d
+6fe0c626
+1fe67c02
+242136fb
+6fe0c626
+c000370e
+20600000
+6fe0c626
+6848c627
+98467c00
+24628000
+70462600
+6848c624
+6fe0c628
+c5133704
+6fe0c62b
+98467c00
+24610000
+6fe0c625
+c0003715
+1fe0ffff
+67e0c625
+c0003715
+70414100
+20600000
+70462600
+6fe0c625
+c0013713
+1fe0fe01
+67e0c625
+c000b70b
+70414106
+20600000
+70414185
+20600000
+70462501
+70462600
+20600000
+6fe0c626
+1fe0fe01
+67e0c626
+20600000
+6fe0c626
+1fe67c02
+24413726
+6fe0c626
+c1000000
+1fe0ffff
+67e0c626
+20600000
+70462603
+20600000
+6fe088f3
+67e08709
+1e020c00
+20407c8e
+6fe14826
+20207d79
+7049b81e
+2040378c
+6fe0870a
+c0003739
+c0403d67
+c0413ed4
+c068b799
+c06837ba
+c0693799
+c06ab7bb
+20600000
+d8c0070e
+d8a04959
+20407c8f
+7047e400
+20403bbf
+20403bb1
+2040375e
+2040374f
+20403754
+7047e400
+6fe14828
+20207d79
+58000000
+67e14806
+180a7e00
+1fe17e1f
+1fe0fe1e
+67e0c804
+1fe0fe05
+67e0c803
+20403e53
+20203a71
+6fe08951
+7047e404
+c1008000
+7047e400
+20600000
+58000080
+67e08723
+58000003
+e7e08005
+58000000
+e7e08005
+6fe1870b
+e7e18005
+70072206
+202041b5
+6fe1484c
+c3810000
+20403e3e
+1a20a606
+5fffffff
+e7e40013
+e7e40005
+efe10011
+e7e10013
+1a427e00
+9a20a200
+c2003761
+6fe14848
+20207d79
+58000082
+67e08723
+58000004
+e7e08005
+6fe0870c
+e7e08005
+70072203
+202041b5
+58000082
+67e08723
+5800004e
+e7e08005
+6fe1070c
+e7e10005
+70072204
+202041b5
+58000082
+67e08723
+58000060
+e7e08005
+6fe2070c
+e7e20005
+70072206
+202041b5
+5800005e
+67e08723
+58000000
+e7e08005
+6fe1070c
+e7e10005
+70072204
+202041b5
+6fe0c804
+207a0000
+1fe0fe1e
+67e0c804
+20600000
+da604803
+da4037e4
+202042e0
+da604804
+da403797
+202042e0
+6fe14855
+20207d79
+204037c4
+24740000
+47504034
+6fe1070e
+d840f01f
+98467c00
+2022b7d8
+d840f014
+98467c00
+2022b91c
+d840f013
+98467c00
+2022b907
+d840f017
+98467c00
+2022b819
+d840f018
+98467c00
+2022b845
+d840f016
+98467c00
+2022b86a
+d8400534
+98467c00
+2022b7cf
+d8400533
+98467c00
+2022b7d2
+d8400123
+98467c00
+2022b7d5
+6fe1482c
+20207d79
+20600000
+efe10006
+d84001a8
+98467c00
+24628000
+efe08006
+6848c9b6
+98467c00
+24628000
+20203b2a
+20407dbc
+6fe1070b
+d84001a8
+98467c00
+24628000
+6848c4f1
+6fe0870d
+98467c00
+20628000
+67e0c4f1
+20207dba
+204037f4
+6fe1483c
+20207d79
+204037f4
+6fe1483e
+20207d79
+204037ee
+6fe14840
+20207d79
+204037f0
+6fe20710
+67e244f3
+20203889
+580000d3
+67e08723
+580001a8
+e7e10005
+6fe0c4f1
+e7e08005
+e0410005
+20600000
+d8e00000
+d8400003
+da20f009
+202037fc
+da200100
+202037fc
+df200008
+202037f6
+df200008
+202037f6
+df200006
+202037f6
+df200004
+202037f6
+df200002
+202037f6
+df200001
+202037f6
+1f20fe06
+67e08722
+204037dc
+d8c00710
+20407cda
+202041b5
+20403808
+e2210005
+e0408005
+70072207
+20203806
+20403808
+e2210005
+e0410005
+70072208
+20203806
+20403f6e
+202041b5
+6fe0c7ae
+67e0892b
+580000f0
+67e1094c
+6fe0c4f2
+1fe0fe01
+67e0c4f2
+c0603817
+580000d4
+67e08723
+580001a8
+e7e10005
+6fe0c4f2
+e7e08005
+20600000
+7044f280
+20600000
+18c22200
+6fe08709
+d8400006
+98467e00
+67e0c608
+1fe27200
+1a220c00
+d8a04609
+20407cda
+da400000
+dfe04609
+9a408400
+efe08002
+c07fb83f
+1fe17e7f
+20403837
+1a40a401
+6fe0c608
+9a467c00
+20213823
+2040394a
+d840f017
+204037dc
+d8400000
+e0408005
+18a20400
+2040393b
+1fe0fe07
+67e08722
+202041b5
+207a0000
+1fe0ffff
+1feffe12
+da204503
+9a20a200
+58000000
+e7e08011
+20600000
+df200012
+1f2ff20d
+d8a04503
+20407ca1
+2040394a
+2020382e
+efe08006
+c07fb85e
+67e0c5ff
+efe08006
+1fe0ffff
+1feffe12
+d8c04503
+98c08c00
+d8a045ed
+df200012
+20407cda
+d840f018
+204037dc
+6fe0c5ed
+203a3867
+d8400000
+e0408005
+6fe0c5ff
+e7e08005
+6fe0c5ed
+e7e08005
+6fe445ee
+e7e40005
+70072211
+202041b5
+d840f018
+204037dc
+d84000ff
+e0410005
+18a20400
+2040393b
+1fe0fe08
+67e08722
+202041b5
+d8400080
+e7e08005
+20203856
+efe08006
+67e0c5ff
+1fe17e7f
+1fe0ffff
+1feffe12
+d8a04503
+98a08a00
+6fe0c5ff
+e7e08005
+2040394a
+d840f016
+204037dc
+58000000
+e7e08005
+18a20400
+2040393b
+1fe0fe07
+67e08722
+202041b5
+1c420400
+6fe244f7
+98467c00
+2041388f
+20403896
+98467c00
+20610000
+2040388a
+6fe244f3
+1fe0fe01
+67e244f3
+2020389a
+1c427e00
+67e244f7
+6fe0c4fa
+1fe17e0f
+67e0c4fa
+20600000
+20628000
+1fe22400
+58100000
+1fed7e00
+98408400
+1a427e00
+20600000
+df200014
+1fe0fea0
+c2003897
+20600000
+5800000d
+67e0c602
+1fe0ffff
+1feffe12
+de004503
+9e00e000
+efe08030
+245a38a8
+1e00e1ee
+6fe0c602
+1fe0ffff
+207a0000
+67e0c602
+202038a0
+d8e00007
+afec0000
+20608000
+1fe17e7f
+d840000d
+98467c00
+20610000
+1e020c00
+d8a045ed
+df200012
+20407cda
+6fe0c5fe
+c02cb8bf
+684a44f3
+6fe245ee
+98467c00
+6fe0c5f5
+2022b8e3
+242138bc
+20600000
+58000000
+e7e08030
+20600000
+6fe244f3
+d840003c
+9846fc00
+20407d62
+18077e00
+247a0000
+6fe244f3
+d8454600
+98467e00
+d8493a80
+9846fc00
+20407d62
+18077e00
+d8415180
+9846fc00
+20407d62
+18072200
+18078e00
+6fe0c5f2
+203a38d5
+afefffff
+24608000
+1a227e00
+d840003c
+9846fc00
+20407d62
+18078400
+580001e0
+98408400
+6fe145ee
+da200fff
+9a217e00
+98467c00
+24628000
+6fe0c5f6
+202038e3
+67e0870c
+70460201
+1e027e00
+67e1091f
+6848870c
+68e0c869
+204037e8
+6fe1091f
+1fe26000
+1e008c11
+efe08006
+c02cb8f4
+58000000
+e7e08030
+68e0c869
+204038ff
+2020394a
+6fe0c5f2
+203a38ef
+d840f009
+204037dc
+58000011
+e7e08005
+efe08030
+1fe1fe80
+e7e08005
+70072308
+20203806
+d840f020
+204037dc
+18a20400
+2040393b
+1fe0fe06
+67e08722
+700723d3
+20203806
+d8a045ed
+df200010
+20407cda
+6fe0c5ed
+1fe17e7f
+67e0c5ff
+1fe67c0d
+24610000
+6fe245ee
+d840003c
+9846fc00
+20407d62
+18070400
+98467e00
+67e245ee
+58000000
+67e145fd
+da2045ed
+20403930
+d840f013
+20203928
+d8a045ed
+df200011
+20407cda
+6fe0c5ed
+1fe17e7f
+67e0c5ff
+1fe67c0d
+24610000
+7045fe59
+da2045ed
+20403930
+d840f014
+204037dc
+58000000
+67e08729
+18a20400
+2040393b
+1fe0fe07
+67e08722
+202041b5
+20403937
+1a220c00
+d8a04503
+98a08a00
+df200012
+20407cda
+2020394a
+6fe0c5ff
+1fe0ffff
+1feffe12
+20600000
+da204503
+da400000
+18420a00
+df20000d
+1f20f3ff
+efe08011
+c07fb945
+203a3945
+1a40a401
+e7e08005
+58000012
+9a20a200
+c2003940
+1a427e00
+20600000
+6fe1484a
+20207d79
+4750c034
+58004a5e
+67e14aed
+58004aeb
+67e10919
+70078714
+6fe0c808
+67e08788
+6fe08916
+1fe0fe0b
+1fe0f3fe
+67e08789
+1fe0ffff
+e7e08005
+5800002a
+e7e08005
+d8c04998
+20407ccc
+6a210919
+20403967
+204078b2
+6fe144e9
+2feffe09
+24608000
+20403e5e
+da200787
+202078b2
+1a208c02
+efe10006
+67e143fb
+da200787
+20600000
+58004a5e
+67e143fb
+20600000
+6fe0c9b5
+c1808000
+7049b502
+20203ace
+da20078c
+d8400012
+58000021
+24608000
+da20079e
+68488789
+184085ee
+58000022
+20600000
+d8a0462b
+58000002
+e7e08005
+58000001
+e7e08005
+58000002
+e7e08005
+20600000
+d8401827
+58000003
+e7e08005
+58000003
+e7e08005
+e0410005
+20600000
+204025b8
+20402af5
+2040264e
+24768000
+6fe08002
+1fe0fe01
+67e08002
+6fe14824
+20407d79
+202025bc
+204039a1
+20740000
+2040398b
+20402018
+68494344
+d8e0000a
+204020dc
+20740000
+d8e0000d
+20407cef
+243a3997
+20600000
+68494344
+d8e00004
+204020dc
+20740000
+204039a9
+6fe14344
+d8e0000d
+20207ce1
+6fe0c64a
+1fe0fe01
+67e0c64a
+67e08007
+c1940000
+70464a25
+70000725
+20600000
+6fe0804c
+1fe17e0f
+c00039b6
+c00139b6
+20600000
+e8408006
+18467c06
+20610000
+18467c25
+24610000
+1840a3fa
+18c0a406
+e8408012
+18467c01
+20610000
+18467c1e
+24610000
+18427e00
+207a0000
+47514034
+efe08006
+c07fb9d1
+c0153f7c
+1840fe01
+9a267c00
+20610000
+9a40a400
+18467fff
+9a20a200
+1a227e00
+207a0000
+202039bd
+7007aa00
+20203cfa
+6fe08000
+1fe0fe01
+67e08000
+4751c034
+204025b8
+df200027
+d8c04169
+d8a007aa
+20407ccc
+70000725
+db600708
+78287c00
+7856fc00
+20402af5
+204039f0
+180a7e00
+d84001ff
+98417e00
+1fe0fe64
+20407c91
+6fe08007
+1fe0fe01
+67e08007
+c09439e0
+df200027
+d8a04169
+d8c007aa
+20407ccc
+202025bc
+d8400002
+6048c169
+6848c62a
+1840fe06
+67e0c16a
+6fe342db
+67e3416b
+18427200
+d8c0462b
+20407ccc
+2020273e
+47524034
+684908f4
+6fe088f3
+18420c00
+da20476e
+de00477e
+20403c5a
+20407dbc
+1a627e00
+9e008c00
+684a477e
+6fe10910
+1fe22200
+df20000a
+efe20011
+203a3a16
+98467c00
+20628000
+1a20a204
+c2003a09
+6fe10910
+1fe20a00
+1fe08c04
+df200024
+20407ccc
+e0420005
+20207dba
+e0420011
+20207dba
+6fe0c857
+c000ba43
+20403a21
+20403a25
+20403a2c
+20403a30
+20403a34
+20403a35
+20203a39
+d840001a
+da20480a
+5801ffa0
+20206c4d
+d8400013
+da2047ef
+5801e000
+20406c4d
+6fe0c7ff
+67e0c871
+20600000
+d8400010
+da204959
+5801e100
+20206c4d
+d8400010
+da2046a0
+5801e200
+20206c4d
+20600000
+d8400003
+da204992
+5801f000
+20206c4d
+6fe1484c
+c3810000
+d8400040
+da2006a1
+5801e400
+20406c4d
+20403e3e
+d8c006a1
+1a20a206
+20203a6b
+20403a4a
+20403a4e
+20403a55
+20403a59
+20403a5d
+20403a5e
+20203a62
+d840001a
+da20480a
+da400000
+20206ce1
+d8400013
+da2047ef
+da40001a
+20406ce1
+6fe0c7ff
+67e0c871
+20600000
+d8400010
+da204959
+da40002d
+20206ce1
+d8400010
+da2046a0
+da40003d
+20206ce1
+20600000
+d8400003
+da204992
+da40004e
+20206ce1
+6fe1484c
+c3810000
+d8400040
+da2006a1
+da400051
+20406ce1
+20403e3e
+d8c006a1
+1a20a206
+1a220a00
+20407c8f
+1a427e00
+9a20a200
+c2003a6b
+20600000
+6fe0c857
+c000ba83
+c0013a74
+20403a77
+20403a7b
+20203a7f
+d8400013
+da2047ef
+5801e000
+20206c33
+d8400010
+da204959
+5801e100
+20206c33
+d8400010
+da2046a0
+5801e200
+20206c33
+20403a86
+20403a8a
+20203a8e
+d8400013
+da2047ef
+da40001a
+20206cd3
+d8400010
+da204959
+da40002d
+20206cd3
+d8400010
+da2046a0
+da40003d
+20206cd3
+6fe1c992
+6849cc24
+98467c00
+24610000
+1fe0fe80
+67e1cc24
+6fe0c857
+c000ba9e
+d8400003
+da204c24
+5801f000
+20206c33
+d8400003
+da204c24
+da40004e
+20206cd3
+20403aad
+6fe0c857
+c0013aa9
+d8400040
+da2006a1
+da400051
+20206cd3
+d8400040
+da2006a1
+5801e400
+20206c33
+20403e3e
+d8a006a1
+1a20a206
+1a220c00
+20407c8f
+1a427e00
+9a20a200
+c2003ab0
+20600000
+6fe0c857
+c000babb
+5801e000
+67e1c419
+20206bfa
+20600000
+6fe0c857
+c1810000
+5801d000
+da204503
+d840000d
+184f8412
+20206c33
+6fe0c857
+c1810000
+da204503
+d840000d
+184f8412
+5801d000
+20206c4d
+20404073
+20203ad2
+20403b23
+20203b19
+70464b01
+20600000
+70464b00
+20600000
+da403ad6
+da20001d
+d8e0000e
+20203b0e
+6fe0c7e4
+c000bafd
+c001badc
+c0013b0d
+c0003ade
+20203ade
+70438800
+20203ad0
+2040396c
+da200787
+204078dc
+24740000
+6fe0c9b7
+c2813aef
+6fe08787
+1fe0ffff
+e7e08012
+1fe17e7f
+205a3af5
+6fe0c9b7
+c4000000
+d8a0462a
+d8c00789
+20407c8d
+202039d3
+da200787
+204078ca
+204078fa
+247a0000
+20403afb
+20203ad0
+da200787
+204078ca
+204078fa
+247a0000
+70464f04
+20203ad0
+7049b500
+20600000
+20403ce0
+20403cec
+20403b05
+24628000
+6fe0c7e4
+c001bb09
+c000bb0b
+20600000
+6fe0c64e
+1fe0ffff
+67e0c64e
+20600000
+70464f58
+20203ad0
+70464f06
+20203ad0
+202039d3
+6fe0c64b
+c1808000
+180a7e00
+1fe17e07
+9a20a200
+20407cef
+247a0000
+1a227e00
+20407ce1
+1a427e00
+20207d79
+da60464c
+da403b1c
+202042e7
+6fe0c7e4
+c1808000
+6fe0c7e7
+79207e00
+67e0c7e7
+7047e403
+20203b31
+da60464f
+da403b26
+202042e0
+6fe0c7e4
+c000bb2f
+c0003afb
+20600000
+20403e5a
+2040420b
+70464f00
+20403ad0
+20203afb
+70464e06
+20203ace
+70464e06
+20203ace
+da403b37
+da200020
+d8e0000f
+20203b10
+6fe0c9b5
+247a0000
+2040406e
+da200787
+204078dc
+24740000
+6fe08787
+1fe0ffff
+e7e08012
+205a78ca
+d8a0462a
+d8c00789
+20407c8d
+202039d3
+20403b4b
+20403b53
+20403b59
+20403b5f
+20403b67
+20203b6b
+20403b78
+d8c046c0
+df20000f
+20403be7
+20403c01
+d8c001bd
+d8a046b0
+20207c8f
+20403b7b
+20403b75
+20403c01
+d8c001bd
+d8a04660
+20207c8f
+20403b7b
+20403b78
+20403c01
+d8c001bd
+d8a04690
+20207c8f
+6fe44680
+67e44658
+6fe44688
+67e44650
+d8c04650
+da2046b0
+de004670
+20203c48
+d8c04680
+da2046b0
+de004680
+20203c48
+d8c04670
+df200010
+20403be4
+d8c046d9
+df200009
+20403be7
+20403c01
+d8c001bd
+d8a046a0
+20207c8f
+20403b79
+d8c04680
+20203be3
+20403b76
+d8c04688
+20203be3
+d8c0480a
+df200004
+20403bea
+d8c0480e
+df200006
+20403bea
+d8c04814
+df200010
+20403be4
+20403bf1
+20203bec
+20403b92
+da2047ec
+da4001bd
+df20000b
+efe10011
+e8410012
+9842fe00
+e7e10011
+1a20a202
+1a40a402
+c2003b8a
+20600000
+d8c04670
+df200010
+20403be4
+d8c046cf
+df20000a
+20403be7
+20203c01
+d8c047ef
+d8a0470d
+20407c8f
+d8c0470d
+da20471d
+de00472d
+20403c4a
+de00473d
+da400001
+58000000
+20403c4c
+6fe0c74c
+1fe17e7f
+67e0c74d
+de00475e
+da400002
+58000010
+da20473d
+20403c4c
+de00474e
+da400003
+58000010
+da20475e
+20203c4c
+d8c04959
+da20476e
+de00477e
+20403c4a
+d8c0478e
+da20477e
+de00479e
+58000004
+20403c5a
+6fe0c7ad
+1fe17e3f
+79207e06
+67e0c7ae
+20600000
+d8c047ef
+da2047af
+de0047bf
+20403c4a
+d8c047cf
+da2047bf
+de0047d4
+58000005
+20403c5a
+6fe144e9
+c3848000
+70438801
+20600000
+da204999
+6fe3c99f
+20203bd1
+da200923
+6fe38929
+67e388da
+58000000
+67e288d1
+20403bda
+6fe308e1
+e8430011
+9842fe00
+e7e30011
+20600000
+6fe2486e
+67e208d6
+d8c0474e
+2040735f
+d8c008d1
+20407361
+204072d1
+d8a008e1
+20207375
+df200008
+20403bf1
+20403c39
+20203bee
+20403bf1
+20407cda
+20203bee
+20403bf1
+20403c39
+5800002c
+e7e08005
+18a27e00
+67e146f3
+20600000
+18c20400
+1f222200
+6fe146f3
+1fe20a00
+6fe0c6e2
+205a3bfa
+18420c00
+1a227200
+20600000
+7046e201
+20403bfe
+d8a007d1
+20600000
+df200100
+d8a007d1
+20207ca3
+20403c17
+20403c32
+580007d1
+67e146fa
+20404134
+6fe146fa
+1fe20c00
+d8a00231
+20407c81
+2040413b
+6fe146fa
+1fe0fe40
+67e146fa
+6fe0c6f7
+1fe0ffff
+67e0c6f7
+243a3c06
+20404176
+da2001bd
+df200020
+20407cb1
+20600000
+7046e200
+6fe146f3
+1fe20a00
+d8400080
+e0408005
+d84007d1
+98467e00
+67e446e3
+1fe98400
+604c46eb
+1ff1a600
+1a6b2600
+1fe17e3f
+1fe67c37
+24413c30
+1a60fe01
+67e0c6f7
+1fefa240
+1ff22600
+1a60a7ff
+580007cd
+9a20a200
+6fe246eb
+e7e20011
+20600000
+1a60a601
+20600000
+da2007d1
+df200004
+20407cb1
+1a20a202
+1a60a7ff
+2422bc33
+20600000
+efe08006
+1ff18400
+20403c42
+e0408005
+1fe1040f
+20403c42
+e0408005
+c2003c39
+20600000
+18467c09
+20213c46
+18408457
+20600000
+18408430
+20600000
+58000020
+20203c5a
+58000010
+20203c5a
+6848c6fc
+18408401
+98408400
+60488230
+1a220c00
+1fe27200
+20407ccc
+6848c6fc
+18427200
+20407cda
+1a427e00
+e7e08005
+da20472d
+20203c5d
+67e08230
+1fe27200
+20407ccc
+1a220c00
+d8a006a1
+20407c8f
+204071c1
+1e020a00
+20407375
+20600000
+684888fe
+20203c67
+18000401
+18007000
+6fe108f1
+1fe20c00
+efe18006
+1fed7e00
+9841de00
+1f00f001
+efe20006
+1fe25e00
+1f00f001
+efe20006
+1fe25e00
+1f00f001
+1a30de00
+1df05e00
+efe10006
+9de1de00
+20600000
+6fe088f3
+1fe22200
+20403c64
+204072d1
+1800700c
+1de27e00
+1a227200
+684908f4
+18420c00
+20407349
+2020728c
+7008fe19
+20203c88
+7008fe09
+20203c88
+67e088f3
+604908f4
+4752c034
+20403c79
+18007008
+98005e00
+1800700d
+1de27e00
+18007009
+98005e00
+18002200
+18422600
+20403c66
+204072d7
+20403cc7
+604c08f6
+6fe088f3
+1fe22400
+20403ccf
+684888f3
+6fe108f4
+9840a200
+684c08f6
+e0420011
+6fe088fe
+1fe67e09
+207a0000
+e0440011
+20600000
+7008fe19
+20203ca9
+7008fe09
+20203ca9
+67e088f3
+604908f4
+18422600
+1fe22400
+9a608c00
+47534034
+efe40006
+18007008
+98005e00
+18007009
+1fef7e00
+98005e00
+18002200
+20403c66
+204072d7
+20403cc7
+604c08f6
+20403ccf
+20403c79
+20403cc7
+6fe088fe
+c00cbcc4
+604a08fa
+6fe208f6
+684a08fa
+98467e00
+20600000
+6fe408f6
+98467e00
+20600000
+1800700c
+1de27e00
+1800700d
+1de20400
+18500400
+18500400
+98418400
+20600000
+1a20a201
+20403c66
+1a620c00
+2040735d
+204072d7
+2040737c
+1a60a610
+1a40a5f0
+20213ccf
+20600000
+4753c034
+7047e401
+7047e500
+70464b01
+58001770
+67e1464c
+20600000
+580001a8
+67e108ff
+6fe0c7e6
+e7e08005
+6fe2480a
+20407cc6
+e7e20005
+6fe342db
+e7e30005
+6fe1c7e7
+e7e18005
+20600000
+20403cee
+202039d3
+70462a15
+58000014
+67e0c62b
+5800002b
+e7e08005
+58000000
+e7e08005
+d8c008ff
+20407c8f
+6fe147ea
+e7e10005
+20600000
+20403d5a
+24740000
+efe08006
+c0003d01
+c0013d1c
+47544035
+20600000
+20403d0f
+24740000
+20403b45
+20403d07
+204040fa
+20600000
+d8400012
+20403d46
+58000001
+e7e08005
+6fe14812
+e7e10005
+d8c04680
+20207c8f
+20407dbc
+e8410006
+d8a04680
+20407c8f
+6fe14812
+98467c00
+24628000
+6fe0c7e5
+c3808000
+79207e01
+67e0c7e5
+7047e402
+20207dba
+20403d27
+684947ec
+6fe14812
+98467c00
+24628000
+20403bbf
+204040fa
+6fe087aa
+c1810000
+7047e405
+20600000
+4754c035
+18c22200
+6fe0c7e4
+c1000000
+6fe0c7e5
+c4008000
+c3810000
+1a220c00
+df200016
+d8a047ec
+20407cda
+20403b86
+684947ec
+6fe14812
+98467c00
+24628000
+6fe0c7e5
+79207e02
+67e0c7e5
+20403b99
+6fe0c7ff
+67e0c871
+20403d3f
+20600000
+d8400006
+20403d46
+58000003
+e7e08005
+6fe3480e
+e7e30005
+20600000
+47554035
+5800012c
+67e14806
+6fe087aa
+1fe67c00
+2042bace
+2442bad0
+1840fe09
+67e0c62a
+2040397c
+1840fe05
+e7e08005
+580000ff
+e7e08005
+580001a8
+1ff0fe00
+e7e10005
+6fe0890f
+e7e08005
+20600000
+20407dbc
+e8410006
+580001a8
+1ff0fe00
+98467c00
+24628000
+efe08006
+67e0890f
+20207dba
+da604806
+da403d66
+202042e7
+20203e61
+6fe0870b
+c0043d92
+c024bdb1
+c00dbdbd
+c00e3dc4
+c0793d6e
+20600000
+20403dec
+20403d83
+20403dc2
+58000080
+67e08723
+580000f3
+e7e08005
+58000000
+e7e08005
+6fe1070c
+e7e10005
+6fe08709
+d8400004
+98467200
+d8c0070e
+20407cda
+6fe08709
+1fe0fe01
+67e08722
+d8e00000
+20203806
+6fe0870e
+207a0000
+1fe67c08
+24413d90
+98007200
+d8c0070f
+1a208a02
+20203d8b
+efe10006
+1ff0fe00
+e7e10005
+c2003d8b
+20600000
+58000008
+20600000
+7047e406
+58000002
+67e08723
+58000000
+e7e08005
+580001a8
+e7e10005
+58000000
+e7e10005
+58000001
+e7e10005
+58000005
+e7e10005
+58000003
+e7e10005
+58000000
+e7e10005
+58000002
+e7e08005
+58000002
+e7e08005
+58000000
+e7e10005
+58001000
+e7e10005
+580001a8
+e7e20005
+580101a8
+e7e20005
+7007221c
+202041b5
+70480514
+58000080
+67e08723
+5800004a
+e7e08005
+70072202
+202041b5
+da604805
+da403dbb
+202042e0
+20403e50
+20206ca3
+20403de2
+6fe1484c
+c3810000
+20403dec
+20403df5
+6fe14848
+20207d79
+20403de2
+6fe1484c
+c3810000
+20403dec
+6849070e
+184cfe00
+1ff1fe00
+c0063dd3
+18508400
+20403dd8
+24740000
+58000000
+e7e10011
+6fe14848
+20207d79
+5fffffff
+e7e40011
+e7e40005
+6fe14848
+20207d79
+df200008
+efe10011
+da40ffff
+9a467c00
+2022fdba
+98467c00
+2022fdba
+1a20a202
+c2003dd9
+20207dbc
+58000080
+67e08723
+5800001f
+e7e08005
+58000000
+e7e08005
+6fe3070c
+e7e30005
+70072209
+202041b5
+20403e3e
+1a20a206
+6fe1070c
+68494800
+18508400
+98467e00
+9a4ffe00
+9a20a200
+20600000
+6849070e
+df200008
+efe10011
+203a3dff
+da40ffff
+9a467c00
+2022bdff
+1a20a202
+c2003df7
+20600000
+18508400
+e0410011
+20600000
+20407396
+2040739e
+580039b1
+67e14824
+58003e42
+67e143db
+58004016
+67e14842
+58003745
+67e14828
+58003aa2
+67e14848
+58003a92
+67e14846
+58003e4a
+67e143e3
+5800372e
+67e14826
+58004090
+67e143df
+580040e3
+67e143dd
+58003ab6
+67e14853
+58003abc
+67e1484a
+20403ac3
+70464a24
+20403817
+4755c035
+58000428
+67e149b9
+20403e58
+58000422
+67e14a5e
+20403e5a
+58000a22
+67e10a8d
+20403e5c
+20404071
+20404071
+20403a18
+20403e3a
+6fe0c7ef
+c07fbcd9
+20404291
+20403bbf
+20403bb1
+20403b99
+180a7e00
+1fe17e1f
+1fe0fe32
+67e14804
+1fe0fe05
+67e0c803
+20600000
+6fe3480e
+20407cc0
+67e342db
+20600000
+6f20c84e
+6a21484f
+6a414851
+20600000
+47564035
+2040387d
+20403aca
+204041d8
+2040396f
+20403b33
+20404060
+20203995
+20403acc
+20403db8
+20403d63
+20403794
+20403791
+20204289
+20403e53
+6fe14853
+20207d79
+6fe0c857
+c1810000
+5801d000
+67e1c419
+20206bfa
+20404292
+202078ad
+2040396c
+202078ad
+20403e5e
+202078ad
+58000a8d
+67e143fb
+20600000
+70438801
+58001770
+67e1464c
+6fe0c7e7
+793ffe00
+67e0c7e7
+7047e401
+7047e500
+70474d00
+20203b2f
+4756c035
+6fe0892b
+c283be70
+70496900
+2020417d
+20403e76
+20740000
+20403e97
+20740000
+20403ea7
+20203eb4
+20407dbc
+df200003
+da20092c
+20407cb1
+6a21892c
+1a21041f
+6048c85c
+6fe0c863
+98467c00
+24217dba
+1a31fe00
+1fe37e00
+1fe1041f
+6048c85b
+1ff1fe00
+1fe37e00
+da201fff
+9a210400
+1fe22400
+6fe14859
+98467c00
+2442be93
+60494859
+1a4cfe00
+1ff1fe00
+1fe37e00
+67e0c858
+67e0c969
+20600000
+58000000
+67e2485d
+70486200
+20600000
+20407dbc
+6fe0c85b
+1fe20e00
+6fe2485d
+afefffff
+2020fdba
+f9207e00
+67e2485d
+6848c85c
+1840f201
+1f208fff
+afefffff
+24608000
+c2003ea1
+70486101
+20600000
+6fe08921
+1fe0fffa
+1fe27200
+6848c862
+98408400
+6048c862
+6fe14864
+98000a00
+6fe0c85b
+1feffe0c
+98a08a00
+d8c0092f
+20207cda
+6fe0c861
+c1000000
+58000000
+67e2c85d
+68490925
+18508400
+5800e000
+98410400
+6fe14859
+9841fe00
+1ff0fe00
+67e10925
+20204187
+6fe08722
+1fe08401
+1fe27200
+60488916
+6fe0892b
+793ffe07
+67e0c9a1
+d8c00723
+20407ccc
+20204052
+1a208404
+1a227200
+60488916
+d8a049a5
+20407ccc
+6fe0892b
+79207e07
+67e0c9a1
+20204052
+6fe0870b
+c000bedb
+c0013ee1
+c0213ee6
+c0263ee9
+c02f3eef
+20600000
+da603edd
+20203f53
+6fe14830
+20407d79
+67e0870c
+2020376c
+da603ee3
+20203f53
+2040376c
+6fe14832
+20207d79
+20403784
+6fe14834
+20207d79
+6fe1070c
+20403efe
+67e08711
+20403774
+6fe14836
+20207d79
+6fe14866
+6849070e
+98467c00
+20628000
+6fe1070e
+20403f10
+67e08716
+6fe1070e
+67e14866
+6fe14838
+20407d79
+6049070c
+2040377c
+6fe1483a
+20207d79
+207a0000
+1feffe64
+d840ffff
+9846fc00
+20407d62
+18070400
+184c8400
+1807fe00
+18467cff
+24628000
+1fe0fe01
+20600000
+dfe0ffff
+984ffe00
+1fe6fc64
+20407d62
+18078400
+20600000
+d8400320
+98462200
+20403f1f
+1a227e00
+9846fc00
+20407d62
+1807fe00
+20600000
+18422200
+20403f1f
+1a227e00
+984ffe00
+d8400320
+98408400
+20600000
+58004e20
+d8400320
+98467e00
+1fe6fc64
+20407d62
+18078400
+20600000
+d8e00000
+6f20c84e
+20407dbc
+6fe14800
+98467c00
+2022bf32
+1ff0fe00
+1fe0fe01
+1ff0fe00
+18e08e01
+c2003f2a
+20600000
+70486800
+60e0c869
+20403f6e
+20207dba
+d8e00000
+da600000
+20403e3e
+20407dbc
+6fe1484c
+c3013f49
+efe10011
+98467c00
+2042bf47
+1a427e00
+9a20a200
+18e08e01
+c2003f3a
+1a627e00
+207a0000
+67e0c868
+20207dba
+f9202600
+20600000
+1a208c06
+de000008
+efe10006
+98467c00
+2022bf51
+1e00e1ff
+2022bf3f
+20203f4b
+20403f47
+20203f3f
+d8e00000
+6fe0c868
+203a3f5f
+1fe22400
+6f20c84e
+60e0c869
+aa4fffff
+2040bf5f
+68e0c869
+18e08e01
+c2003f58
+20600000
+20403f64
+20403f6e
+1a627e00
+20407d79
+20203f69
+67210917
+62210919
+6241091b
+6261091d
+20600000
+6f210917
+6a210919
+6a41091b
+6a61091d
+20600000
+47574035
+6fe14800
+1ff0fe00
+98e0fe00
+1ff0fe00
+67e14995
+20403e3e
+18e27e00
+9a4ffe00
+9a20a200
+1a208c17
+efe10006
+67e143fb
+20600000
+70095100
+18467c0c
+20610000
+18467c1e
+24610000
+4757c035
+2040400e
+20403f8c
+24740000
+20403fdd
+24740000
+20403bcf
+20403fa1
+24740000
+20403fb2
+20203fb7
+20407dba
+6fe08921
+d8c00925
+98c08c00
+efe20006
+e8420006
+98428400
+df200010
+d8c009fd
+efe20006
+98467c00
+2022fdbc
+c2003f95
+6fe0c86a
+1fe0fe04
+d8a009fd
+98a08a00
+e0420005
+1fe17e3f
+67e0c86a
+20600000
+20407dba
+684a8924
+df200010
+d8c00a3d
+efe28006
+98467c00
+2022fdbc
+c2003fa5
+6fe0c86b
+1fe0fe01
+1fe17e0f
+67e0c86b
+1feffe05
+d8a00a3d
+98a08a00
+e0428005
+20600000
+6fe08951
+c1000000
+6fe10927
+67e1486c
+20600000
+20404005
+6fe08921
+d8400929
+20403ca7
+24628000
+47584036
+6fe08951
+1fe67c02
+2042c106
+68490929
+20403f26
+20543fcf
+20343fea
+df20001d
+d8a007ab
+d8c00922
+20407cda
+20403fd3
+df20001d
+d8c007ab
+d8a00922
+20407cda
+6fe14842
+20207d79
+70095201
+6fe14995
+67e10953
+20600000
+20403f36
+20343fea
+704868ff
+5800ffcf
+98467c00
+2022bfea
+5800ffff
+98467c00
+2022bfea
+20600000
+20407dbc
+68488922
+1851fe00
+1fe97e00
+6a20c871
+1a212201
+9a267c00
+24628000
+1841047f
+6fe0c74d
+98467c00
+24628000
+20207dba
+da204872
+df20000a
+68490927
+efe10011
+203a3ff4
+98467c00
+2022bff5
+1a20a205
+c2003fec
+da204872
+e0410011
+6049094c
+1a20a602
+efe18013
+67e1894e
+20203ffa
+20404002
+6fe1894e
+68498924
+98467c00
+20610000
+e0418013
+20404002
+20203e6b
+da200924
+df200003
+20207cb1
+20404008
+d8c0475e
+2020735f
+d8a0093f
+58000000
+e7e08005
+6fe30923
+e7e40005
+20204069
+1840fff4
+67e08921
+df20001d
+d8a00922
+20407ca1
+1840f3ff
+d8a00922
+20207ccc
+2040406e
+20404036
+24740000
+2040404a
+7007871e
+6fe08921
+1fe0840d
+60488789
+184085ff
+e0408005
+5800002a
+e7e08005
+1840f3ff
+6fe38922
+d8c00922
+20407cda
+da200787
+204078b2
+2040402b
+24740000
+20203961
+684907b2
+20407dbc
+6fe08978
+207a0000
+98007200
+d8c00968
+efe10006
+98467c00
+2022fdba
+c2004031
+20600000
+20407dbc
+6fe08951
+c1008000
+6fe1484c
+c3808000
+6fe0c7e4
+c1800000
+68490927
+20403f26
+20347dbc
+2040404f
+24740000
+6fe08923
+203a7dbc
+1fe0ffff
+203a7dbc
+67e08923
+580048cc
+67e143fb
+20207dba
+20404005
+6fe08921
+d8400929
+20403c86
+20203bcf
+580048a4
+67e10910
+202039fb
+4758c036
+20404056
+2040405f
+2020394c
+6fe08916
+1fe0a202
+1fe0fe04
+67e08916
+d840499f
+2020405c
+20404005
+1a227e00
+20203c86
+20203bcc
+20403e5e
+204078fa
+207a0000
+20402a28
+247a0000
+da200787
+204078ca
+24740000
+202040f0
+6fe2486e
+e7e20005
+18a0fff3
+67e108f1
+20600000
+580048cc
+67e143fb
+20600000
+2040406e
+202078ad
+204029c9
+6fe0c7e4
+c000c083
+c0004079
+c002c079
+20600000
+38010214
+3804c080
+380a8030
+380c3060
+67e4c348
+58182816
+e7e20005
+6fe447dc
+e7e40005
+20600000
+20403ce0
+3801021d
+3804c080
+380a7030
+380c5460
+67e4c348
+58182716
+e7e18005
+d8c008ff
+20407c8f
+6fe147ea
+e7e10005
+20600000
+47594036
+6fe14398
+c0074095
+c00a40d6
+20600000
+1a420400
+efe08011
+c00040e1
+c001409a
+20600000
+2040400e
+6fe08921
+1fe0fffc
+67e08921
+20403fdd
+24740000
+20403bcf
+6fe08923
+c283c0a4
+20600000
+204040da
+6fe08921
+d8400929
+20403ca5
+24628000
+20404106
+6fe0892b
+c00040bd
+c000c0ae
+20600000
+6f208921
+1f20f3fd
+1f237e00
+68490978
+9840fe00
+1fe67c08
+24610000
+67e10978
+d8a00968
+1843fe00
+98a08a00
+d8c0092c
+20407cda
+6fe0897a
+202040bf
+efe08006
+67e0897a
+67e0c9a2
+6fe10978
+1ff0fe00
+67e149a3
+7049a103
+6fe48922
+67e4c998
+6fe14995
+67e1499d
+20404253
+20404267
+204040da
+58000006
+d840499f
+20403c84
+2040405f
+da200016
+d8400010
+20402dee
+58000002
+e7e08005
+d8c04998
+20207c8d
+7007aa02
+1a420400
+1a220c00
+20203cfa
+d8a0095b
+58000003
+e7e10005
+6fe28924
+e7e38005
+20404069
+20204006
+70095102
+20203f7d
+1a627e00
+c00ac0e8
+c00a40e7
+20600000
+202040eb
+58000000
+67e1486c
+20204317
+58000000
+67e10978
+d8a00968
+df200010
+20207ca3
+20402a28
+247a0000
+6fe08789
+1fe0a3ff
+d8400010
+20402dee
+58000000
+e7e08005
+d8c0078c
+20207c8d
+6fe087aa
+c1000000
+6fe144e9
+c4048000
+20402a28
+247a0000
+6fe0c62a
+1fe0a3fb
+d8400016
+20402dee
+d8c04630
+20207c8d
+6fe10968
+247a0000
+6fe10927
+67e10968
+6fe10978
+1fe0fe01
+67e10978
+20600000
+efe20006
+18002204
+18a08a03
+e7e08005
+1fecfe00
+18a08bfe
+1a20a3ff
+2422c111
+18a08a05
+c200410e
+20600000
+18ebfe00
+99608c00
+efe20006
+20600000
+18006010
+d9600231
+1e008ff9
+20404119
+98000400
+1e008ff0
+20404119
+98408400
+1e008ffe
+20404119
+1fee7e01
+98408400
+1e008ff1
+20404119
+1fee7e00
+98408400
+1e0bfe00
+99608a00
+e0420005
+1e00e001
+2e01fe40
+2420c11f
+20600000
+d8c00549
+18007007
+efe20006
+98005e00
+1f00f1ff
+20214136
+20600000
+4759c036
+2040411d
+d8a00331
+18007000
+1de27e00
+e7e20005
+1f00f001
+2f01fe08
+2420c13f
+d96095ed
+de000231
+18007240
+e8420030
+efe2000b
+19609604
+1e00e004
+9840fe00
+18007007
+9de08400
+18007004
+1dee7e03
+98408400
+18007005
+1de27e00
+18007006
+9de2fe00
+18007004
+9de17e00
+18007006
+9de2fe00
+98408400
+18007007
+18425e00
+18007003
+1de27e00
+9840de00
+18007000
+1de27e00
+18007001
+9de10400
+9de1fe00
+18007002
+9de17e00
+98418400
+18007000
+1dee7e02
+9840fe00
+18007007
+9de0de00
+980efc00
+c2004147
+d8c00331
+18007000
+efe20006
+9de0de00
+1f00f001
+2f01fe08
+2420c170
+20600000
+d8a001bd
+18007007
+1de27e00
+e7e20005
+1f00f1ff
+20214178
+20600000
+c3034180
+204041a2
+20204182
+204041af
+20204182
+6fe08921
+1fe0fff9
+de00092c
+20407dbc
+20204194
+6fe0892b
+c303418b
+204041a2
+2020418d
+204041af
+2020418d
+6fe0c969
+245a7dba
+205a7dbc
+6fe0c862
+1fe0fffc
+70486200
+de004b3c
+1e020400
+2040419c
+24628000
+2040419f
+24740000
+6fe108f4
+1fe26000
+20203728
+24343ca7
+1fe0fffc
+20203ca5
+5800496a
+67e10910
+202039fb
+204041a5
+d8c04959
+2020735f
+d8a0093f
+58000001
+e7e08005
+6fe0c969
+d8400000
+7d3a0407
+e0408005
+6fe38924
+e7e38005
+20204069
+204041b2
+d8c046a0
+2020735f
+d8a0093f
+58000002
+202041a7
+475a4036
+2040425b
+204041bd
+20740000
+204041d0
+20404292
+da200983
+202078b2
+20407dbc
+d8400001
+6fe08951
+1fe67c02
+79228407
+60488983
+6fe4c998
+67e48987
+6fe08723
+c1ea0000
+6fe0c7e4
+c0807dba
+6fe08726
+67e08986
+6fe08983
+1fe0fe01
+79207e05
+67e08983
+20600000
+6fe08722
+1fe27200
+67e08990
+6fe0892b
+67e08991
+d8a00996
+d8c00723
+20207cda
+6fe0c9b5
+247a0000
+20404292
+da200983
+204078dc
+24740000
+68488983
+18417e0f
+203a420b
+7049b501
+204041fc
+68488983
+20404202
+67e0c9b6
+6fe0c9b7
+284ffe07
+7920fe02
+67e0c9b7
+79200404
+184085ff
+e0408012
+68488983
+284ffe04
+2420c20f
+68488990
+60488722
+18427200
+d8a00723
+d8c00996
+20407cda
+18467c0f
+242141f9
+20203ec1
+6fe20992
+67e2097e
+20204230
+6fe08991
+67e0892b
+6fe48987
+67e4c998
+67e48922
+20600000
+7049b701
+6fe08986
+284ffe05
+20608000
+58000000
+20600000
+1a208a1a
+e7e08005
+20600000
+7049b600
+20404292
+da200983
+202078ca
+20404253
+20404267
+6fe4c998
+67e48987
+20404228
+58000000
+67e0c969
+20404249
+68488722
+60488990
+18427200
+d8c00723
+d8a00996
+20407cda
+18467c0f
+24214222
+da200984
+204078eb
+20203ec1
+2040426f
+6fe2097e
+67e20992
+da200984
+204078eb
+20204230
+6fe08990
+1fe27200
+67e08722
+6fe08991
+67e0892b
+d8c00996
+d8a00723
+20207cda
+2040427c
+58000723
+67e1097b
+204041fc
+20404253
+20404267
+68488722
+5800000c
+20407db0
+1fe22200
+18427e00
+9a267e00
+67e08722
+6fe1097b
+1fe20c00
+9a208400
+6049097b
+20403ecb
+6fe08722
+207a0000
+6fe08980
+1fe0fe01
+67e08980
+2040427c
+20204233
+6fe0892b
+c303424d
+204041a2
+2020424e
+204041af
+6fe08722
+1fe08404
+60488722
+d8400723
+20203c86
+6fe1c992
+1fe0fe01
+67e1c992
+6fe0c808
+1fe0fe01
+67e0c808
+6fe14846
+20207d79
+6fe0c871
+1ff27e00
+1fe9fe00
+6848c74d
+9841fe00
+67e0c998
+6fe0c997
+67e0c999
+6fe14995
+67e1499d
+6fe1094c
+67e1499f
+6fe1c992
+67e1c99a
+da20499a
+df200003
+20407cb1
+6fe44999
+67e40923
+20600000
+6fe08722
+1fe6fc0c
+20407d62
+18078400
+18077e00
+205a428f
+60488981
+70098000
+6fe1c992
+d8401fff
+98417e00
+67e1097e
+20600000
+6fe1097e
+1ff27e00
+1fe3fe00
+68488980
+9841fe00
+1ff27e00
+1fe3fe00
+68488981
+9841fe00
+67e1c9a2
+df200003
+da2049a2
+20207cb1
+da6049b8
+da40428c
+202042e0
+df200028
+d8a0496a
+20207ca1
+184085ff
+20600000
+20203b2a
+580049b9
+67e143fb
+20600000
+44d8c016
+6fe0c3cb
+203a4295
+c00247b7
+c004e2ae
+c0055099
+c00743b2
+c003646e
+c006c672
+c007c959
+c0066882
+c00453e0
+c005be02
+20600000
+20758000
+20406f74
+6fe0c3cb
+c004e3d9
+c00363d9
+c00247c2
+c0045428
+c007d42c
+c006c772
+20600000
+20407774
+20407841
+204042b4
+6fe143db
+20207d79
+6fe143d9
+20207d79
+44d94016
+da2044d3
+20407d97
+207a0000
+1fe22600
+204042bd
+202042c1
+da600000
+20600000
+c00842d0
+c00a42c7
+c00ac2cb
+20600000
+6fe143dd
+20207d79
+6fe143d3
+20207d79
+6fe143d7
+20207d79
+6fe144e9
+79207e09
+67e144e9
+20600000
+70439600
+6fe144e9
+793ffe09
+67e144e9
+2020432d
+6fe143f1
+79207e00
+67e143f1
+20600000
+67e0821d
+44d9c016
+6fe0821d
+207a0000
+1fe0ffff
+67e0821d
+20407780
+2040430e
+20406beb
+6fe143e3
+20407d79
+202042d5
+efe08013
+207a0000
+1fe0ffff
+e7e08013
+247a0000
+1a427e00
+20207d79
+efe10013
+207a0000
+1fe0ffff
+e7e10013
+247a0000
+1a427e00
+20207d79
+68494430
+1840a601
+da4042f2
+202042e0
+20404343
+c000c2f5
+20204327
+58000002
+e7e08013
+1840a408
+efe10012
+20207d79
+204042fc
+20204327
+58000000
+67e143ef
+20600000
+58000000
+67e143f1
+20600000
+6fe143f1
+79207e07
+67e143ef
+58000000
+67e143f1
+20600000
+d8e00009
+202024e7
+d8e00009
+202024eb
+7043ed05
+20204308
+da6043ed
+da40430a
+202042e0
+70066f0f
+20207834
+70066f10
+20207834
+70066f0e
+20207834
+70066f0d
+20207834
+70066f17
+20207834
+70066f18
+20207834
+70066f16
+20207834
+70066f11
+20207834
+70066f15
+20207834
+70066f14
+20207834
+70066f13
+20207834
+70066f19
+20207834
+70066f1f
+20207834
+7920000d
+20600000
+793f800d
+20600000
+20404343
+c0014339
+58000001
+e7e08013
+1840a203
+1840a406
+e8408011
+1a60a601
+e0408013
+202042f8
+58000000
+e7e08013
+6fe144e9
+c304c33f
+204030c5
+2040431f
+68494430
+1840a202
+1840a404
+20204335
+68494430
+1840a600
+efe08013
+20600000
+20404343
+c080434a
+20204327
+1840a40a
+202042f8
+6fe44ceb
+67e44cfe
+704d0e00
+6fe0cd02
+1febfe00
+d8404b87
+98408400
+efe20002
+67e24cfa
+6fe0cd0e
+243a435f
+68494cf4
+efe08002
+67e0cd0a
+18408401
+60494cf4
+1ff1fe00
+67e0ccf9
+20204362
+6fe0cd0a
+1fe17e0f
+67e0ccf9
+6fe0cd0e
+79407e00
+67e0cd0e
+d8404b77
+6fe0ccf9
+98408400
+efe08002
+6848cd02
+2040439a
+67e0cd02
+6fe0ccf9
+1fe10408
+6048ccf8
+1fe10407
+6048ccf9
+204043a3
+604a4d06
+6fe0ccf8
+203a4379
+6fe24cfe
+684a4d06
+98467e00
+2020437c
+6fe24cfe
+684a4d06
+9840fe00
+67e24cfe
+d8407fff
+98467e00
+c28fc382
+604a4cfe
+20204388
+6fe24cfe
+d8408000
+9840fe00
+c30fc388
+d85f8000
+604a4cfe
+6fe0cd02
+1febfe00
+d8404b87
+98408400
+efe20002
+67e24cfa
+6fe14cf6
+68494cfe
+e041003f
+1fe0fe02
+67e14cf6
+6fe0ccf3
+1fe0ffff
+67e0ccf3
+243a4355
+6fe44cfe
+67e44ceb
+20600000
+9840fe00
+c303c39e
+58000000
+20600000
+1fe17eff
+1fe67c58
+20610000
+58000058
+20600000
+6a224cfa
+1a290400
+6fe0ccf9
+c30143a9
+1a227e00
+98408400
+6fe0ccf9
+c300c3ad
+1a237e00
+98408400
+6fe0ccf9
+c4000000
+1a2b7e00
+98408400
+20600000
+20407396
+20758000
+580045be
+67e145e0
+5800330a
+67e145e2
+5800465e
+67e145e4
+5800442e
+67e143d5
+58004430
+67e143d7
+58004455
+67e143db
+58004476
+67e143dd
+58004308
+67e143d3
+580044d1
+67e143df
+58004494
+67e143e3
+44974005
+20404412
+20404463
+204078ad
+7040c002
+7049b700
+6fe0c779
+67e0c648
+c00043db
+6fe0c77a
+67e0c4ec
+70438800
+20407776
+20407780
+7047a101
+6fe144e9
+c3860000
+20204327
+202043f9
+7047a102
+70438801
+58000020
+204063c7
+d8a04273
+6fe0c2db
+1fe104f0
+18518400
+204043f3
+e0408005
+1fe1040f
+204043f3
+e0408005
+20402955
+6848c26b
+18427200
+d8a0434b
+d8c0426c
+20407cda
+6848c26b
+18427200
+d8a0436b
+d8c0426c
+20207cda
+18467c09
+202143f7
+18408437
+20600000
+18408430
+20600000
+6fe0c76e
+c0ffc40b
+6fe0c76c
+c0ffc40e
+6fe0c777
+c0ffc410
+6fe0c6da
+1fe27200
+580046db
+1fe22200
+1a220c00
+efe08006
+18c22200
+c07fc409
+1fe20400
+20406ef7
+c2004403
+20600000
+6fe4476e
+67e446dd
+202043fb
+67e0c6db
+202043fd
+67e0c6dc
+202043ff
+204045ba
+20404640
+da200000
+20407055
+204043f9
+2040446b
+2040442c
+2020441b
+20600000
+6fe0c9a4
+1fe27200
+580049a5
+1fe22200
+1a220c00
+efe08006
+18c22200
+c07fc426
+1fe20400
+67e0c9a9
+20404428
+c200441f
+20600000
+6fe0c9a9
+c17f8000
+98000400
+20206ef7
+70477d64
+20600000
+20404431
+20407de2
+2020701b
+2040788b
+df200010
+d8c08070
+18c20a00
+efe08006
+c00fc445
+c0104445
+c010c445
+c0114445
+c011c445
+c0164445
+c016c445
+c0004445
+c2004434
+dfe080dc
+98c67c00
+2022c44b
+df200008
+d8c080d4
+20204434
+58000040
+e7e08005
+2020443e
+58000080
+e7e08005
+2020443e
+6fe0c9a4
+1fe27200
+d8c049a5
+efe08006
+79207e07
+d840003e
+20406f20
+c200444e
+20600000
+20207027
+2040446d
+20404458
+20204454
+6fe144e9
+c3848000
+6fe0c9b7
+c000c45d
+20600000
+6fe0c798
+c1008000
+70479801
+20404467
+20404469
+20204480
+6fe149bc
+67e149be
+7049c000
+20600000
+58000000
+20204464
+da200000
+202077bf
+da200000
+202077c4
+6fe144e9
+c4048000
+20402a28
+247a0000
+da2046c6
+204078ca
+24740000
+d8c046c6
+202063cb
+1a627e00
+c016c347
+c008432f
+c00a447c
+c00ac486
+20600000
+20404467
+20404469
+793f8027
+20204482
+6fe14799
+67e1479b
+70477c14
+70409400
+20404315
+2020432b
+79200027
+20404463
+2040456e
+20404562
+58000000
+67e2c74a
+204078ad
+70470c0a
+70470e0a
+7047100a
+7040c002
+58000020
+204063c7
+20204317
+2040450f
+20404512
+20404515
+204044a1
+20204499
+da6049b8
+da400000
+202042e0
+da6049be
+da40449f
+202042e7
+7049c001
+20600000
+da60479b
+da4044a4
+202042e7
+70479802
+7049b700
+2020448a
+6fe0c776
+207a0000
+da60477c
+da4044ac
+202042e0
+6fe0c77b
+67e0c77c
+6fe0c77f
+247a0000
+20406fb0
+67e14796
+da204790
+20406fd7
+6848c77d
+98467c00
+202144b9
+67e0c77d
+1fe20400
+6048c77e
+6fe0c778
+98467c00
+204144c4
+6048c789
+df200006
+d8c04784
+204044cb
+67e0c78a
+da204781
+202078b2
+6fe0c780
+247a0000
+70478001
+da200001
+202077c4
+da200001
+202077bf
+da200000
+efe08006
+9a20a200
+c20044cc
+1a217eff
+20600000
+6fe0c397
+c00944d4
+20600000
+6fe14398
+c00cc4eb
+20600000
+4497c005
+efe28011
+67e286f1
+6fe106f1
+d8406b5a
+98467c00
+24628000
+6fe106f4
+1ff0fe00
+67e106f4
+1fe27200
+1a20a205
+1a220c00
+d8a006f6
+20407cda
+efe08006
+67e08700
+da2006f3
+da4006f6
+20600000
+58000000
+67e2c700
+67e2c705
+204044d7
+1a420c00
+d8a04700
+df20000a
+20407cda
+44984006
+efe08011
+c001451e
+c001c533
+c002453a
+c002c53a
+c00345aa
+c003c5ab
+c00445ae
+20600000
+204044eb
+6fe086f3
+c0024502
+c002c502
+20600000
+6fe0c700
+245a4509
+6fe0c702
+245a450b
+6fe0c704
+245a450d
+20600000
+7049a105
+20600000
+7049a205
+20600000
+7049a305
+20600000
+da6049a1
+da404518
+202042e0
+da6049a2
+da40451a
+202042e0
+da6049a3
+da40451c
+202042e0
+70470000
+2020453a
+70470200
+2020453a
+70470400
+2020453a
+6fe0c700
+67e0c70b
+6fe0c701
+67e0c70d
+20204544
+6fe0c700
+67e0c70d
+20204552
+6fe0c70c
+2040452b
+6fe0c701
+67e0c70b
+20204550
+c001452f
+c001c531
+67e0c70c
+20600000
+70470c05
+20600000
+70470c0a
+20600000
+6fe0c700
+2040452b
+6fe0c70c
+2040459e
+204045a1
+70067100
+2020707a
+6fe0c79e
+247a0000
+6fe34700
+67e3470b
+6fe0c70c
+6848c70e
+98417e00
+6848c710
+98417e00
+205a4556
+4498c006
+6fe144e9
+2feffe09
+2440c463
+20404550
+20404552
+2020454b
+6fe0c70b
+6848c70d
+9840fe00
+243a788d
+2020788b
+d8c0470b
+20204558
+d8c0470d
+2020455d
+d8c0470f
+2020457a
+70477f00
+20600000
+efe08006
+c0004562
+c000c566
+c001456a
+20600000
+efe08006
+c000456e
+c0014572
+c000c576
+20600000
+6848c9a5
+20406ef3
+6848c9a6
+20206ef3
+6848c9a5
+20406ef7
+6848c9a6
+20206ef3
+6848c9a5
+20406ef3
+6848c9a6
+20206ef7
+6848c9a7
+20406ef3
+6848c9a8
+20206ef3
+6848c9a7
+20406ef7
+6848c9a8
+20206ef3
+6848c9a7
+20406ef3
+6848c9a8
+20206ef7
+44994006
+efe08006
+c0004587
+c000c580
+c0014582
+20600000
+70472900
+20204583
+70472901
+efe08006
+67e0c72b
+efe40012
+2020458c
+efe08012
+204070bd
+1a40a401
+efe08012
+202070bd
+67e4472c
+70477f01
+6fe0c729
+c000459a
+6fe0c72d
+67e0c72e
+6fe0c72c
+204070bd
+6fe0c72b
+2040459e
+67e0c733
+6fe3472e
+67e30670
+20207066
+6fe0c72c
+67e0c72e
+6fe0c72d
+20204593
+1feffe05
+1fe0fe32
+20600000
+d8402ee0
+984ffe00
+1fe6fc64
+20407d62
+18078400
+18422200
+58002ee0
+98462400
+20600000
+20600000
+6fe44700
+67e4474a
+20600000
+6fe0c767
+67e0c75d
+6fe0c768
+67e0c75e
+6fe0c769
+67e0c75f
+df20000d
+d8c04758
+204044cb
+67e0c765
+da204755
+202078b2
+58000000
+67e445d6
+2040339f
+20203402
+204045c2
+204045ca
+2040460e
+20204665
+20403407
+6fe0c616
+c1808000
+6fe0c9b8
+243a3460
+6fe0c798
+c0013460
+20600000
+6fe0c616
+c1800000
+204045d9
+2037c5d7
+6fe0c9c0
+207a0000
+6fe0c9c1
+1fe0fe01
+67e0c9c1
+c00245d7
+20403222
+204045ea
+2437c5ce
+7049c100
+20600000
+6fe0c616
+c1800000
+204045de
+20403518
+202045ea
+6fe0c615
+c3800000
+79207e00
+67e0c615
+6fe0c623
+67e0c141
+70461100
+70090d00
+70460a01
+70457e00
+6fe249da
+2020345d
+204033f1
+2437b3be
+204033e3
+243433be
+6fe0c57d
+203a33be
+1fe0fe02
+98007200
+d8c044f7
+d8a045e8
+20407cda
+70461300
+6fe0c610
+205a33fe
+6fe0c5ea
+c07fc5fc
+c000c601
+202033bb
+6fe0c610
+247a0000
+6fe0c5d5
+207a0000
+2020359b
+2040352e
+6fe0c60a
+6848c5e8
+284ffe03
+7920fe00
+67e0c60a
+c000c609
+202033cb
+6fe0c3cb
+1fe67c0e
+2042f88d
+6fe245f2
+202035a3
+6fe0c616
+c1808000
+204032ff
+2040465b
+204033be
+20403119
+2437b3be
+2040331e
+204033f4
+20403399
+20403317
+6fe0c5d5
+243a4621
+2040350a
+6fe0c614
+207a0000
+58000000
+67e24630
+20600000
+70461300
+da200000
+2040788d
+20403460
+20403258
+6fe244f1
+67e249da
+6fe0c9e6
+245a462c
+6fe249da
+20203236
+6fe0c9e6
+207a0000
+6fe0c62d
+67e0c9dd
+6fe0c4f2
+67e0c9dc
+6fe0c62c
+67e0c9db
+6fe0c4f1
+67e0c9da
+20600000
+2040464a
+6fe249da
+684a49de
+98467c00
+20628000
+1a622400
+da2049da
+df200004
+20206b45
+6fe244f1
+67e249da
+6fe0c9e6
+207a0000
+20600000
+2040464a
+6fe249de
+207a0000
+67e249da
+20600000
+20600000
+6fe0c9e6
+207a0000
+da600700
+1a622400
+da2049e2
+df200004
+20406b74
+6fe249e2
+207a0000
+67e249de
+1a627e00
+d84007cc
+98467c00
+20610000
+1a60a604
+2020464e
+6fe24630
+207a0000
+20203236
+6fe144e9
+c3848000
+6fe14799
+67e1479b
+7049b701
+da2045eb
+202044fd
+6fe0c9c0
+207a0000
+2040466d
+24740000
+6fe1c5af
+20407d25
+604a40a9
+2020241e
+78347c00
+20402408
+6fe1c0bd
+203a7dbc
+20204430
+20758000
+20404772
+20406ff7
+58004756
+67e145f2
+580046b6
+67e145f6
+580046b1
+67e143d5
+580046f0
+67e143db
+580046f2
+67e143dd
+5800473b
+67e143e3
+580046a6
+67e146ee
+58004696
+67e146f2
+4499c006
+20406cc1
+204046ad
+204078ad
+6fe0c6be
+67e0c62d
+c0004695
+6fe0c6bf
+67e0c4ec
+204046a6
+20407776
+20407780
+7046ea01
+6fe144e9
+c3860000
+20204327
+7046ea02
+204046a6
+da200000
+204077c4
+20404719
+6fe24700
+67e2458f
+203a3291
+6fe2458f
+67e245e8
+6fe145dc
+67e145de
+20203534
+d8400004
+da20458f
+da400000
+20600000
+449a4006
+6fe0c6bc
+c0ffc6ab
+6848c699
+20206ef7
+67e0c699
+202046a9
+204035f0
+6fe146e6
+67e146e8
+20600000
+204046b6
+6fe0c68f
+79207e07
+d840003f
+20206f20
+20406f35
+2020701b
+20407027
+204046c9
+204046bc
+202046d7
+6fe0c6f5
+c1808000
+6fe246f9
+203a46c3
+7046ff00
+78347c00
+2020788d
+6fe0c6ff
+c17f8000
+1fe0fe01
+67e0c6ff
+78547c00
+2020788b
+6849442e
+18417e01
+18430400
+67e0c6f9
+18417e01
+18430400
+67e0c6fa
+18417e01
+18430400
+67e0c6fb
+18417e01
+18430400
+67e0c6fc
+20600000
+449ac006
+204046e6
+204046eb
+204046dd
+24740000
+20204752
+6fe0c6f5
+c1808000
+6fe0c6ff
+207a0000
+1fe67c01
+24610000
+6fe145dc
+67e145de
+20207dba
+6fe0c6f9
+243a4746
+6fe0c6fa
+243a4748
+2020474e
+6fe0c6fb
+243a474a
+6fe0c6fc
+243a474c
+20204750
+20404730
+202046b8
+1a627e00
+c016c347
+c008432f
+c01cc6fa
+c01e4701
+c01d46f9
+20600000
+2020357b
+449b4006
+6fe245e8
+67e24700
+6fe0c70c
+245a4706
+6fe24700
+20403236
+7045fc00
+7046f601
+7046f701
+7045de00
+20600000
+6fe0c70c
+207a0000
+6fe0c4f2
+67e0c703
+6fe0c5e9
+67e0c702
+6fe0c4f1
+67e0c701
+6fe0c5e8
+67e0c700
+20404720
+6fe24700
+684a4704
+98467c00
+20628000
+1a622400
+da204700
+df200004
+20206b45
+6fe0c70c
+207a0000
+20404720
+6fe24704
+207a0000
+67e24700
+20600000
+6fe0c70c
+207a0000
+da600700
+1a622400
+da204704
+df200004
+20406b74
+6fe24708
+207a0000
+67e24704
+1a627e00
+d84007cc
+98467c00
+20610000
+1a60a604
+20204723
+6fe0c6f6
+c1000000
+6fe0c6f5
+c1008000
+7046f501
+da200000
+202077bf
+da200000
+204077bf
+204046a6
+20204327
+204042ee
+2040328e
+20403531
+2020473f
+6fe0c6c0
+207a0000
+6fe0c42e
+243a46ae
+da6046e8
+da404737
+202042e7
+7046c701
+20600000
+7046c702
+20600000
+7046c901
+20600000
+7046c902
+20600000
+7046c700
+20600000
+7046c900
+20600000
+da2046c1
+202078b2
+da2046ce
+202078b2
+6fe0c6f7
+c000c760
+da2046d7
+204078ca
+24344765
+d8c046d7
+efe08006
+1fe22200
+da4046d8
+20600000
+7046f700
+78347c00
+da200001
+da4046f8
+20600000
+6fe0c6da
+c0024769
+c002c769
+20600000
+6fe0c6dd
+243a4770
+6fe0c6df
+243a4770
+6fe0c6e1
+243a4770
+20600000
+78347c00
+2020475b
+7044eb14
+7044e401
+5800060f
+67e1462e
+5800462e
+67e143fb
+70409401
+7040a606
+7040c102
+70462d00
+5800468d
+67e144ef
+7044ee01
+70468eff
+58000296
+67e14690
+5800073a
+67e14692
+580046ea
+67e14430
+58000c0c
+67e146ec
+580046a1
+67e1442c
+7046be00
+7046bcff
+7046bfff
+7046ba00
+7046bb00
+7046bd00
+7046c001
+58004e55
+67e146ad
+67e146af
+58000007
+67e146b3
+70440702
+38035a0c
+3804011a
+38080060
+380c0028
+67e4c6c1
+3802000a
+38040002
+e7e20005
+38035a08
+3804019a
+38080000
+380c0000
+67e4c6ce
+58000064
+67e146e6
+70414100
+70458901
+70460306
+7045ae01
+7045e300
+20403278
+204035fb
+2040325b
+58000708
+67e145d6
+58000050
+67e145dc
+580a7700
+67e1c60b
+58604800
+67e1c5af
+20600000
+580047ea
+67e145e0
+580048d4
+67e145e4
+580048e5
+67e145e6
+580048ab
+67e145e2
+580047f9
+67e10859
+20207912
+449bc006
+204047ef
+204047e5
+6fe0c669
+2feffe05
+2020c7cb
+6fe0c669
+2feffe06
+2040b26b
+6fe0c694
+67e0c141
+7045d2ff
+5800099f
+67e14640
+58000a9f
+67e14642
+58000b9f
+67e14644
+58000c9f
+67e14646
+7045d185
+70469200
+70462b00
+20403281
+6fe0c669
+2feffe03
+2040b284
+2040339f
+20403287
+2040325b
+6fe0c673
+67e0885b
+6fe4c66a
+67e4885c
+20600000
+70409918
+6fe0c669
+c4038000
+70409910
+20600000
+6fe0c610
+c000489b
+c000c822
+c007c81e
+20600000
+449c4007
+da401fdf
+da204648
+df200001
+20206b74
+449cc007
+df200001
+da204648
+da401fdf
+20206b45
+6fe0c669
+c28247fd
+6fe0c648
+c0ad4801
+7046485a
+6ff2137a
+79207e1d
+67e207b4
+20404818
+20407966
+20404805
+2020480e
+6fe0885c
+207a0000
+6fe0c648
+c02d480c
+6fe2085d
+67e207b4
+20600000
+6fe20861
+2020480a
+6fe0c648
+c02d4814
+58009272
+67e107a7
+7007d81a
+20600000
+5800928d
+67e107a7
+7007d83f
+20600000
+6fe0c674
+207a0000
+d8c04674
+d8a0081d
+df20001e
+20207cda
+20403460
+204048a3
+20404867
+2020481f
+20403460
+204048a3
+20403469
+20404867
+20204823
+2040482b
+2040483b
+2040484c
+20204859
+449d4007
+6fe0c668
+207a0000
+d8e0000d
+20407cef
+247a0000
+70466800
+58000001
+67e08913
+58000000
+e7e38005
+70090c20
+6fe0890d
+79207e02
+67e0890d
+20600000
+449dc007
+6fe0c665
+207a0000
+d8e0000e
+20407cef
+247a0000
+70466500
+d8a00923
+20407c99
+6fe40923
+67e44651
+70092300
+70090b10
+6fe0890d
+79207e01
+67e0890d
+20600000
+6fe0c667
+207a0000
+d8e0000a
+20407cef
+247a0000
+70466700
+d8a00943
+20407c99
+70094302
+6fe10943
+67e1465f
+70090c22
+20204837
+449e4007
+6fe0c666
+207a0000
+d8e0000c
+20407cef
+247a0000
+70466600
+d8a00933
+20407c99
+70093303
+6fe18933
+67e1c65c
+70090c21
+20204837
+449ec007
+6fe08901
+205a48b5
+20407906
+6fe088f7
+207a0000
+7008f700
+6fe108f5
+d84002ba
+98467c00
+24628000
+6fe08875
+c1dd0000
+6fe08876
+c050487c
+c050c882
+c053488e
+c053c890
+c054c896
+7008f800
+20600000
+6fe08877
+c040c87f
+2020487a
+204032fc
+7008f801
+20600000
+6fe08877
+c000c887
+c042488a
+c053c88c
+2020487a
+6fe0c5d5
+67e088b6
+20204880
+20403461
+20204887
+7008b6a1
+20204880
+7008b615
+20204880
+6fe0c616
+c0004894
+c000c88c
+20600000
+7008b6a0
+20204880
+7008b600
+7008b700
+7008b801
+7008b907
+20204880
+20403402
+20403407
+2040342d
+204048a3
+20403469
+20403488
+20404867
+2020489c
+449f4007
+6fe0c616
+c1800000
+20403464
+20404827
+6fe0c610
+247a0000
+2020350a
+6fe0c589
+c000c8ae
+c00148b7
+6fe0c693
+c28048bd
+202048b9
+6fe0c3cb
+c1820000
+70469303
+20600000
+70469300
+20600000
+6fe0c693
+c280c8c1
+6fe0c611
+c000c8c8
+c001c8cc
+20600000
+6fe0c693
+793ffe00
+67e0c693
+202048c4
+6fe0c693
+793ffe01
+67e0c693
+70458801
+580000ff
+67e0c519
+20600000
+70461101
+2040337e
+24778000
+2020330a
+6fe0c4f9
+c000c8c8
+c07fc8c8
+7008f900
+70458801
+6fe0c621
+67e0c519
+20600000
+58000001
+67e08913
+6fe3c5eb
+e7e38005
+6fe0c5eb
+245a48dd
+6fe0c5eb
+205a48e1
+20204836
+70466801
+58000180
+d8e0000d
+20207ce1
+70466800
+58000000
+d8e0000d
+20207ce1
+6fe0c5eb
+c00048ea
+c001491d
+c001c905
+202033be
+6fe0c5ed
+67e0c611
+7045ed00
+d8a00923
+d8c045ec
+df200008
+20407cda
+6fe40923
+245a48fd
+6fe40923
+205a4901
+6fe40923
+67e44649
+684c4651
+98467c00
+2442c847
+6fe44649
+67e44651
+202033be
+70466501
+58000180
+d8e0000e
+20207ce1
+70466500
+58000000
+d8e0000e
+20207ce1
+d8a00933
+d8c045eb
+df200003
+20407cda
+6fe10934
+245a4915
+6fe10934
+205a4919
+6fe18933
+67e1c659
+6849c65c
+98467c00
+2442c865
+6fe1c659
+67e1c65c
+202033be
+70466601
+58000180
+d8e0000c
+20207ce1
+70466600
+58000000
+d8e0000c
+20207ce1
+d8a00943
+d8c045eb
+df200002
+20407cda
+6fe10943
+245a492d
+6fe10943
+205a4931
+6fe10943
+67e1465f
+68494662
+98467c00
+2442c935
+6fe1465f
+67e14662
+202033be
+70466701
+58000180
+d8e0000a
+20207ce1
+70466700
+58000000
+d8e0000a
+20207ce1
+70090c22
+20204837
+6fe0c3cb
+c1820000
+6fe0c648
+c12d0000
+70469201
+20600000
+6fe0c3cb
+c1820000
+6fe0c692
+207a0000
+70067800
+7046485a
+204047f4
+204047ef
+6fe08678
+1fe0fe01
+67e08678
+c07feca3
+6fe0c648
+c0ad4942
+20206ca3
+6fe0c3cb
+c1878000
+204054ac
+24342002
+6fe0c846
+203a2002
+6fe0c655
+c17f8000
+1fe20e00
+6fe2069d
+afec0000
+2040ce45
+20202003
+20407396
+204049a1
+204049c8
+204049ea
+20758000
+20404966
+20404a7a
+6fe0c663
+c3838000
+6fe144e9
+c2864b95
+20405eb6
+20204bcf
+6fe44713
+c4068000
+5800496c
+67e10859
+704664a5
+2020498e
+2040496f
+20404974
+20204984
+70466500
+6fe44713
+c40b0000
+7046655a
+20600000
+6fe44713
+c28ec97b
+c28f497e
+c28fc981
+70466219
+70085b08
+20600000
+7046620c
+70085b04
+20600000
+70466206
+70085b02
+20600000
+70466203
+70085b01
+20600000
+20407966
+20404987
+2020498c
+6fe0885c
+207a0000
+6fe0c665
+c02d480c
+20204809
+6fe0c665
+2020480f
+44a0c008
+6848886c
+20406ee6
+2020c993
+2020499a
+6fe0c664
+c1528000
+704664a5
+70090e00
+70070900
+70090000
+20204962
+6fe0c664
+c12d0000
+7046645a
+20406018
+20405aaa
+20404f70
+20207912
+20758000
+204035f0
+2040325b
+204049af
+6848c865
+20406ef3
+20404b6d
+20406177
+20402a41
+6fe44713
+c28a49fd
+c289dd60
+c2895d6e
+20600000
+2040543b
+7048eb00
+58230170
+67e1c62d
+58015301
+e7e18005
+d8a047a0
+df200014
+20407ca1
+6fe0c26b
+1fe67c0c
+242149c6
+5806ff06
+67e1c7a0
+58000300
+e7e18005
+58000080
+e7e08005
+6fe0c26b
+1fe0fe01
+1fe27200
+d8c04369
+20207cda
+d8a047a0
+202049c1
+6848c864
+20406f0f
+6848c863
+20406f0f
+6848c865
+20406f0f
+5800486e
+67e14896
+58004876
+67e14898
+5800488a
+67e1489a
+6fe14896
+1fe22400
+df200008
+e8408012
+18467cff
+2442c9e7
+1a40a401
+c20049d7
+204023fd
+6fe14898
+1fe22400
+1fe22600
+df20000b
+e8408012
+284ffe07
+2440ef0f
+1a40a401
+c20049e1
+20600000
+20406f0f
+e8408012
+20206ec6
+6fe0c666
+c000c9f1
+585d4800
+67e24613
+6fe0c40c
+c4000000
+20205fe4
+70496b0c
+6fe0c40c
+c4000000
+70496b10
+6fe0c77e
+203a5c01
+20600000
+6fe149df
+d8400528
+98467c00
+24610000
+2020235a
+44a14008
+6fe0c666
+c0004a02
+c000ca0c
+20600000
+db000050
+58000400
+9b06fc00
+20407d62
+1807fe00
+67e10670
+dfe01fcc
+d8400004
+dd600004
+20204a16
+db000118
+58000400
+9b06fc00
+20407d62
+1807fe00
+67e10670
+dfe01fc2
+d840000e
+dd60000e
+20204a16
+60488678
+da2049c7
+da600000
+1fe22400
+6f208678
+20406b74
+6fe449c7
+684c49cf
+9841fe00
+684c49d7
+9841fe00
+203a4a28
+1a60a601
+6fe10670
+9a667c00
+1a427e00
+9b067e00
+20204a19
+1a667c00
+2022ca38
+1a427e00
+9b00fe00
+9d667e00
+1fe22400
+6f208678
+20406b74
+6fe449c7
+684c49cf
+9841fe00
+684c49d7
+9841fe00
+203a4a3a
+1a427e00
+20204a2c
+6560c9df
+20600000
+44a1c008
+58001fd0
+9a467e00
+67e149df
+1a427e00
+9d60a400
+6f208678
+da2049c7
+20406b74
+6fe0c666
+c0004a47
+c000ca4a
+20600000
+6fe349c7
+67e24691
+20204a76
+6fe0c9c7
+1fe67c03
+24417dca
+67e0c9c6
+6fe0c9c8
+67e0c667
+6fe349c9
+67e34668
+6fe349cf
+67e3466e
+20205c6f
+2020235a
+44a24008
+6fe44713
+c28a4a5c
+c289dcb1
+c2895cb9
+20600000
+20600000
+6fe0c666
+c0004a61
+c000ca6b
+20600000
+684949df
+58001fd0
+98462400
+da204691
+df200004
+20406b45
+684949df
+18408404
+604949df
+20600000
+684949df
+58001fd0
+98462400
+1a40a401
+da204668
+df200006
+20406b45
+1a40a407
+da20466e
+df200006
+20206b45
+6fe24691
+67e245e8
+67e2458f
+20600000
+44a2c008
+58006109
+67e143e9
+58004fe5
+67e145f2
+58004ff8
+67e145f4
+58004f41
+67e145f6
+58004be6
+67e143d9
+58004f5d
+67e143d7
+58004a9a
+67e143dd
+58004bcc
+67e143db
+58004f62
+67e143d5
+58005b08
+67e143df
+58004b19
+67e143e3
+580055fa
+67e143e7
+580054c5
+67e143d3
+58006221
+67e143e1
+58006228
+67e143e5
+20600000
+44a34008
+1a627e00
+c0194acb
+c0224ad3
+c0204add
+c00acab8
+c00a4aaa
+c0084b90
+c018daed
+c014daef
+c01f4329
+c0225b10
+c01ccae2
+c01e4ae5
+c01d4afe
+20600000
+70477d00
+70479401
+20406042
+6fe0c795
+243a4ab0
+70479614
+6fe143f1
+793ffe00
+67e143f1
+70484500
+6fe147be
+67e147c0
+20405c0b
+20204bbd
+58000000
+67e147c0
+67e0c860
+67e0c861
+67e0c794
+7047c200
+70495600
+204029cb
+20204ac1
+20405b7b
+6fe143ef
+c283cac6
+c28042fc
+20204b95
+20405b21
+6fe143ef
+c28042fc
+20407d7c
+20204f6c
+6fe0c795
+c000cad0
+70484414
+70486205
+20205af6
+20405aef
+70484405
+20205af6
+6fe081a2
+1fe67c0c
+24215b06
+6fe081a4
+6848c96b
+98467c00
+20215b1d
+6fe081a4
+67e0c0c0
+20205b1f
+6fe0c860
+247a0000
+70486001
+7048611e
+20600000
+20404af9
+20405c0b
+20206086
+20404af9
+6fe2458f
+67e245e8
+67e24691
+2040355a
+2040618e
+20405c0b
+20206075
+70485f02
+20404f3e
+70472c03
+20600000
+df200006
+d8c04858
+efe08006
+c029caf9
+c01ccaf9
+c023caf9
+c2004af3
+20600000
+7049ab03
+7048f401
+20600000
+7049a901
+20600000
+6fe0c600
+243a4b11
+6fe0c5e2
+c0014b0a
+c001cb04
+20204b04
+20406018
+6fe0c77f
+243a5f1b
+6fe0c666
+c0004f6c
+20600000
+6fe44713
+c29f6034
+c2986034
+c31d6067
+6fe24691
+203a4e39
+20206067
+70460000
+20403647
+5fffffff
+67e445af
+58000000
+67e3c846
+70473f01
+20204f9a
+44a3c008
+2040553d
+20404b4f
+2040614d
+2040328e
+20403531
+20405fdd
+20404b62
+20404b68
+20404b43
+20404b58
+20405be1
+20404b5c
+20405be4
+20404b5f
+20404b55
+20405bfe
+204056b6
+20404b48
+20404b72
+20404b82
+20404b87
+6fe0c666
+c0004b8a
+20205c05
+6fe0c980
+c1808000
+da604981
+da405a94
+202042e0
+6fe148fa
+684949ff
+98467c00
+2022cb3f
+18508400
+98467c00
+2022cb3f
+20205bba
+6fe0c980
+c1008000
+70498001
+20600000
+da604790
+da404b46
+202042e7
+20404bbd
+20204f6c
+da6046f3
+da404b4b
+202042e0
+20404a56
+6fe0c793
+243a5ed1
+20600000
+6fe0c637
+203a4b53
+7046313a
+20600000
+70463135
+20600000
+da604862
+da40502f
+202042e0
+da604845
+da405bd9
+204042e0
+20205bd6
+6fe44713
+c39d8000
+20205bee
+da604861
+da405aef
+202042e0
+6fe0c9a9
+207a0000
+7049a900
+7048f401
+20403625
+20204fa0
+da6049ac
+da404b6b
+202042e0
+7049ab00
+20600000
+204061ea
+20404b7c
+6848c868
+20206ef3
+20600000
+6fe0c866
+c17f8000
+6fe14781
+207a0000
+6fe14725
+68494781
+98460400
+6fe14869
+98467e00
+20214b7e
+6848c866
+20206ef3
+6fe0c9aa
+c300cb7c
+6848c866
+20206ef7
+da6048ee
+da404b85
+202042e7
+7048eb01
+20204327
+da6049c4
+da404d9e
+202042e0
+da604781
+da404b8d
+202042e7
+6fe0c666
+c0004b11
+20205aad
+280ffe26
+2040e018
+20405aad
+20405b21
+20204b95
+44a44009
+204061ab
+6fe144e9
+2feffe0b
+2040dc3e
+58000000
+67e147c0
+20404b7c
+7049c6ff
+6fe144e9
+2feffe0b
+2040dc3e
+20405aa8
+6fe144e9
+c285cbac
+6fe44713
+c3044bac
+68494695
+18408401
+60494695
+604942dc
+180a7e00
+67e0c2db
+6fe1c797
+67e1c2de
+2040432d
+6fe14638
+67e14790
+58000000
+67e14781
+67e147c0
+67e0c845
+67e0c792
+67e0c956
+d8e00002
+20405f00
+20405ef4
+20205b62
+70463700
+2020616e
+44a4c009
+58000000
+67e14790
+d8e00006
+20405f04
+70479200
+20405c3e
+20204b6d
+44a54009
+6fe44713
+c4010000
+d8e00002
+20405f04
+20405c4a
+20205c48
+44a5c009
+2040620e
+202078aa
+44a64009
+6fe44713
+c30acbdc
+20406f82
+20406fb0
+67e14633
+6fe1440a
+98467c00
+20214bcf
+da20462d
+20405563
+6fe0c40c
+c280cf6b
+6fe0c9a4
+205a4e24
+6fe0c9a3
+247a0000
+6fe0c666
+c000602f
+20405aa8
+6fe34668
+203a5a94
+202054a0
+44a6c009
+20402a28
+247a0000
+6fe0c78f
+c07fcbee
+6fe0c843
+1fe17e03
+c1818000
+6fe44713
+c280db5b
+c2805b5b
+c282db5b
+c2835b5b
+20404e47
+24740000
+20405abc
+204056b1
+6fe44713
+c30b5b3c
+6fe0c96c
+20205b3d
+6fe0c3cb
+c1878000
+20404c00
+20404c8b
+20204df5
+44a74009
+20404c85
+58000000
+67e148e9
+d8c0489c
+d8a048b0
+df200014
+20407cda
+5800489c
+67e148e3
+580048d8
+67e148e5
+20404c2f
+20404c53
+20404c83
+6fe1489a
+1fe22400
+7048e800
+e8408012
+6fe14898
+1fe22200
+1a222600
+df200014
+efe08011
+98467c00
+2022cc23
+1a20a201
+c2004c17
+1a40a401
+6fe0c8e8
+1fe0fe01
+67e0c8e8
+1fe67c0a
+20214c12
+20600000
+6fe148e3
+1fe20a00
+1a227e00
+9a667e00
+98a08a00
+6fe148e5
+1fe22600
+6fe0c8e8
+9a60a600
+efe08013
+e7e08005
+20204c1c
+44a7c009
+20404c83
+20404c81
+6fe148e9
+1fe0fe01
+67e148e9
+c284cc71
+6848c864
+20406ee6
+2420cc32
+20000014
+20404c79
+20404c85
+7048e800
+20404c7b
+20404c46
+20404c79
+20404c46
+1fe67c09
+20214c3d
+20404c7b
+20404c46
+20204c79
+7048e700
+20000032
+20404c65
+6fe148e5
+1fe20a00
+6fe0c8e8
+98a08a00
+6fe0c8e7
+e7e08005
+6fe0c8e8
+1fe0fe01
+67e0c8e8
+20600000
+20000014
+6fe14898
+1fe22400
+7048e800
+7048e700
+e8408012
+284ffe07
+2020cc5f
+20406ef7
+20404c65
+e8408012
+20406f0f
+1a40a401
+6fe148e3
+20404c4a
+1fe67c13
+20214c57
+20600000
+6fe14896
+1fe22600
+df200008
+e8408013
+20406ee6
+6fe0c8e7
+1fe37e00
+7920fe07
+67e0c8e7
+1a60a601
+c2004c68
+20600000
+6848c865
+20406ef7
+20000014
+6848c865
+20406ef3
+20001770
+20600000
+20204c00
+6848c864
+20206ef3
+6848c864
+20206ef7
+18467cff
+20628000
+793f8407
+20206edd
+6848c864
+20206edd
+6848c863
+20206ef3
+6848c863
+20206ef7
+7048eb00
+6fe148ec
+67e148ee
+20600000
+44a8400a
+da20489c
+da4048b0
+df200014
+20407d64
+2422cc87
+20404cc5
+205a4c87
+20404ccd
+6fe0c97b
+247a0000
+6fe0c9c1
+c1008000
+c1010000
+c1020000
+7048e800
+da20489c
+da4048c4
+e8408011
+efe08012
+9842fe00
+203a4cbd
+67e0c8e7
+6048c8f6
+e0408012
+7048f401
+7048f700
+6fe0c8e7
+c3004cb3
+6fe0c8e8
+1feffe08
+6848c8f7
+9840fe00
+d8c04901
+98c08c00
+efe08006
+67e0c8f5
+20404cfc
+20404d3a
+20404dbb
+6fe0c8e7
+1fe37e00
+67e0c8e7
+6fe0c8f6
+1fe37e00
+67e0c8f6
+6fe0c8f7
+1fe0fe01
+67e0c8f7
+c2004ca6
+1a20a201
+1a40a401
+6fe0c8e8
+1fe0fe01
+67e0c8e8
+1fe67c13
+20214c9d
+20600000
+6fe4489c
+247a0000
+6fe448a4
+247a0000
+6fe248ac
+247a0000
+7049c100
+20600000
+44a8c00a
+70497b00
+7048f100
+da20489c
+df200014
+7048f000
+efe08011
+203a4cf7
+6848c8f0
+18408401
+6048c8f0
+1fe20400
+1fe0ffff
+98417e00
+2422ccd5
+6fe0c8f0
+6848c8f1
+98408400
+6048c8f1
+1fe67c01
+20214cf7
+18467c02
+20214cf7
+7048e800
+7048f200
+e8408011
+da40489c
+6fe0c8e8
+1fe0fe01
+67e0c8e8
+1fe67c13
+24214cf7
+efe08012
+98417c00
+2022ccfa
+6fe0c8f2
+1fe0fe01
+67e0c8f2
+1fe67c01
+20214cfa
+70497b01
+20600000
+1a20a201
+c2004cd2
+20600000
+1a40a401
+20204ce8
+44a9400a
+6fe0c8f6
+245a4d4e
+6fe0c9a1
+245a4d11
+6fe0c9ae
+6848c9a1
+9842fe00
+20628000
+6fe0c8f5
+c014cd19
+c0264d1b
+1fe67c45
+24610000
+d840003a
+98467e00
+24610000
+d8c049b0
+98c08c00
+efe08006
+20204d38
+6fe0c8f5
+c0294d1d
+c028cd21
+c0284d25
+c027cd29
+c0704d2d
+c0164d35
+20600000
+6fe0c9af
+20204d38
+6fe0c9bc
+20204d38
+6fe0c9bd
+207a0000
+5800004b
+20204d38
+6fe0c9bd
+207a0000
+5800004e
+20204d38
+6fe0c9bd
+207a0000
+5800004a
+20204d38
+6fe0c9bd
+207a0000
+5800004d
+20204d38
+6fe0c9be
+207a0000
+6fe0c9c6
+c0004d33
+580000fd
+20204d38
+580000aa
+20204d38
+6fe0c9bf
+207a0000
+580000ab
+67e0c8f5
+20600000
+44a9c00a
+6fe0c8f5
+c0234d50
+c025cd56
+c0274d5c
+c0254d5e
+c026cd60
+c052cd62
+c0534d69
+c053cd6b
+c0544d6d
+c054cd6f
+c0554d7a
+c055cd81
+c0564d8c
+20600000
+6fe0c8f6
+247a0000
+7049c40a
+20600000
+7049c400
+20600000
+6fe0c9c6
+c1000000
+c1008000
+7049c20a
+7049c320
+20204d95
+7049c352
+6fe0c9c6
+c1000000
+c1008000
+7049c208
+20204d95
+7049c351
+20204d57
+7049c350
+20204d57
+7049c34f
+20204d57
+7049c304
+7049c201
+6fe0c9c6
+c0004d95
+c000cd95
+7049c208
+20204d95
+7049c306
+20204d63
+7049c319
+20204d63
+7049c31b
+20204d63
+6fe0c9c6
+c0004d74
+c001cd77
+580000fc
+20204d38
+7049c208
+7049c30f
+20204d95
+7049c209
+7049c314
+20204d95
+6fe0c9c6
+c0004d7e
+580000fd
+20204d38
+7049c209
+7049c312
+20204d95
+6fe0c9c6
+c0004d88
+c000cd8a
+7049c201
+7049c32c
+20404d4a
+20204d95
+7049c208
+20204d85
+7049c202
+20204d85
+6fe0c9c6
+c0004d92
+c000cd92
+7049c201
+7049c352
+20204d95
+7049c208
+7049c32b
+20204d95
+7048f500
+6fe0c8f6
+c3004d9c
+6fe0c9c1
+c001cda8
+7049c101
+20600000
+7049c104
+20600000
+7049c106
+20600000
+67e0c856
+6048c858
+20407dba
+70485500
+20204e89
+6fe0c9c2
+d8400000
+20404da0
+7049c102
+20600000
+7049c103
+6fe0c9c2
+6848c9c3
+20204da0
+70485500
+6fe0c9c2
+d8400000
+20404da0
+6fe0c9c4
+203a4d9e
+7049c105
+20600000
+20204da2
+7049c100
+dfe00000
+d8400000
+20204da0
+44aa400a
+6fe0c8f5
+1fe67ce7
+20214dc3
+7049c501
+6fe0c8f6
+c2804dc3
+7049c502
+70490000
+6fe0c8f6
+c2804ddd
+6848c8f5
+df200006
+d8c048fa
+efe08006
+203a4dd4
+98467c00
+2422cdd3
+efe08006
+18c08dfe
+e7e08006
+207a0000
+18c08c01
+e0408006
+c2004dc9
+18467ce7
+24610000
+18467cbf
+20610000
+18410e07
+6fe0c8f8
+f93ffe00
+67e0c8f8
+20600000
+6848c8f5
+df200006
+d8c048fa
+efe08006
+203a4dee
+98467c00
+20628000
+c2004de0
+18467ce7
+24610000
+18467cbf
+20610000
+18410e07
+6fe0c8f8
+f9207e00
+67e0c8f8
+20600000
+18467ce7
+24214df2
+18467cbf
+24214de9
+18c08dff
+e0408006
+20600000
+44aac00a
+20404e14
+7049a100
+7049a200
+7049a300
+6fe0c8f8
+245a4e41
+d8c048fa
+df200006
+efe08006
+1fe67c7f
+2042ce43
+1fe67cde
+2042ce45
+c2004dfe
+6fe0c666
+c0004e11
+20404b37
+6fe0c9a4
+203a4e24
+6fe148fa
+684949a5
+98467c00
+2022ce29
+18508400
+98467c00
+2022ce29
+20600000
+6fe0c9a4
+203a4e24
+20204e32
+6fe0c9a4
+247a0000
+6848c655
+18467cff
+20628000
+20406ee6
+2420ce20
+df200008
+d8a048f8
+20407ca1
+7048fade
+20600000
+6fe0c8fa
+c1ef0000
+7048fa00
+20600000
+44ab400a
+6fe0c9a3
+207a0000
+6fe0c666
+c0004e39
+7048f400
+6fe0c666
+c1000000
+6fe44713
+c3830000
+d8e00006
+20405f00
+204042d0
+20204b90
+6fe148fa
+684949a7
+98467c00
+2022ce39
+18508400
+98467c00
+24628000
+204049f8
+7048f400
+6fe145d8
+247a0000
+58000000
+67e14781
+20404b7c
+20206047
+7049a201
+20600000
+7049a101
+20600000
+7049a301
+20600000
+44abc00a
+78547c00
+70496c00
+70496d00
+70496e00
+6fe0c9c1
+c000cda5
+c0014daa
+c001cdaa
+c0024dae
+c0034db7
+6fe0c8f4
+203a4e64
+1fe0ffff
+67e0c8f4
+20404e61
+7049ac0a
+20405c0b
+6fe0c9c1
+c002cdb6
+d8a04855
+df20000a
+20407ca1
+20404e74
+70485f00
+20600000
+7040c003
+70477e0a
+20600000
+6fe0c666
+c1008000
+6fe0c9ab
+207a0000
+6fe0c9a9
+247a0000
+6848c9ad
+6fe0c9ac
+98467c00
+67e0c9ad
+20628000
+d8a04855
+df20000a
+20407ca1
+20407dba
+20204e89
+6fe0c9c5
+c0014f05
+d8c048fa
+df200006
+efe08006
+1fe67ce7
+24214e9c
+c2004e78
+6fe0c8f1
+205a4e92
+70485500
+6fe0c8fa
+1fe67c7f
+2022ce95
+d8c048f8
+d8a04856
+df200008
+efe08006
+c03fce9a
+e7e08005
+c2004e85
+20404f10
+6fe0c85f
+c000fdba
+c0014e90
+c001ce90
+c0024e90
+c002ce90
+20405917
+20207dba
+d8a048f8
+df200009
+20207ca1
+6fe148f8
+67e14856
+6fe348fb
+67e34858
+20204e89
+58000000
+20204e87
+1fe20400
+44ac400b
+18427e00
+70485503
+6848c8f1
+18467c00
+2022cf05
+c0744ebb
+c074cebe
+c0754ec1
+c075cec4
+c0764ec7
+c076ceca
+c0774ecd
+c077ced0
+c0784ed3
+c078ced6
+c0794ed9
+c079cedc
+c07a4edf
+c07acee2
+c07b4ee5
+c07bcee8
+c07c4eeb
+c07cceee
+c07d4ef1
+c07dcef7
+c07e4efa
+c07ecefd
+c07fcf0c
+20204e89
+58000183
+67e14856
+20204e89
+580000cd
+67e14856
+20204e89
+580000b7
+67e14856
+20204e89
+580000b6
+67e14856
+20204e89
+580000b5
+67e14856
+20204e89
+580000ea
+67e14856
+20204e89
+580000e9
+67e14856
+20204e89
+580000e2
+67e14856
+20204e89
+58000194
+67e14856
+20204e89
+5800018a
+67e14856
+20204e89
+58000192
+67e14856
+20204e89
+58000070
+67e14856
+20204e89
+5800006f
+67e14856
+20204e89
+5800022a
+67e14856
+20204e89
+58000225
+67e14856
+20204e89
+58000224
+67e14856
+20204e89
+58000226
+67e14856
+20204e89
+58000227
+67e14856
+20204e89
+6fe0c9c6
+c0014ef7
+c001cef7
+58000221
+67e14856
+20204e89
+58000223
+67e14856
+20204e89
+58000030
+67e14856
+20204e89
+6fe0c9c6
+c000cf02
+580001ae
+67e14856
+20204e89
+58000307
+67e14856
+20204e89
+7048f402
+6fe0c8f1
+205a4e92
+7049c500
+58000003
+67e1c855
+20204e89
+70485502
+58000002
+67e0c856
+20204e89
+44acc00b
+6fe0c666
+c0804f18
+7049a900
+6fe14855
+245a4afc
+6fe34858
+245a4afc
+6fe0c855
+c0004f23
+c000cf1e
+c001cf2e
+c0014f36
+20600000
+70485f01
+d8c04855
+d8a04846
+df200007
+20207cda
+70485f02
+20404f3e
+6fe0c666
+c000cf2a
+20404af1
+6fe0c9ab
+67e0c857
+d8c04855
+d8a0472a
+df200009
+20207cda
+70485f04
+20404f3e
+58000003
+20405f15
+d8c04856
+d8a0472b
+df200002
+20207cda
+70485f05
+20404f3e
+58000002
+67e4472a
+67e44733
+6fe0c856
+67e0c72b
+20600000
+df200012
+d8a0472a
+20207ca1
+20407de2
+2040561c
+6848c64a
+20406eb2
+6848c64b
+20406eb2
+6848c655
+20406eb6
+6fe14898
+1fe22400
+df200014
+e8408012
+284ffe07
+2440eef7
+1a40a401
+c2004f4c
+6fe14896
+1fe22400
+df200008
+e8408012
+18467cff
+2442eeb2
+1a40a401
+c2004f54
+20600000
+6fe0c8eb
+203a6eb6
+20206eb2
+c6130000
+20404f41
+6fe08015
+247a0000
+20206ed3
+44ad400b
+704659ff
+2040739a
+20404f70
+204056a9
+204054dc
+20405d9e
+6848c659
+20206ed3
+20404f70
+44adc00b
+20404f75
+20407d7c
+20204327
+44ae400b
+20404b6d
+20404b71
+20404b7c
+20204b6f
+44aec00b
+20407de2
+20404f70
+20405a92
+20404f41
+204054f9
+6848c65b
+204055b5
+204055b9
+202054f2
+6fe145e0
+1fe17ee0
+203a4f86
+6fe145e0
+1fe0fe01
+67e145e0
+20600000
+2040357f
+20403651
+242c3586
+2437b586
+20405028
+2020356a
+20403625
+24344f91
+20404fa0
+20404fd5
+20204fdb
+6fe4489c
+243a4f8e
+6fe448a4
+243a4f8e
+6fe248ac
+243a4f8e
+6fe0c618
+c1008000
+2040369d
+20404fc8
+24740000
+6fe0c73f
+245a4f75
+6fe245af
+20203622
+44af400b
+70460100
+69610040
+34730200
+20404df5
+6fe0c9a3
+243a5ed1
+20403651
+6fe0c57f
+c000b646
+242c4faf
+2437cfaf
+20405028
+70473f00
+20203646
+6fe0c602
+247a0000
+6fe145fe
+1fe0fe01
+67e145fe
+6fe0c5fe
+c07fb676
+20404fb8
+20204fa2
+6848c601
+18467c14
+20214fbe
+df200019
+20407c96
+20203694
+18408401
+6048c601
+6fe2458f
+684a45e4
+98467c00
+2022b222
+6fe0c601
+1fe67c03
+20610000
+2020369a
+78347c00
+20402408
+6fe1c0bd
+203a7dbc
+6fe0c9a1
+243a7dbc
+6fe0c9a2
+243a7dbc
+6fe0c9c4
+243a7dbc
+6fe0c618
+c000fdbc
+202036b9
+6fe2458f
+684a45e4
+98467c00
+2422b6e9
+7041419e
+20600000
+6fe4460b
+67e445af
+6fe1461d
+67e1461f
+44afc00b
+204036b4
+24740000
+20407de2
+6fe1c608
+20203622
+c6930000
+20404e47
+24740000
+6fe44713
+c30b60a1
+6fe0c96c
+243a4fed
+202060a1
+70458902
+da200009
+6fe0c96d
+243a4ff3
+da404733
+20600000
+da40472a
+20600000
+58000000
+67e1c6f8
+20600000
+44b0400c
+6fe44713
+c4070000
+6fe0c77d
+207a0000
+6fe0c602
+207a0000
+6fe0c6f5
+1fe0fe01
+1fe17e03
+67e0c6f5
+247a0000
+7046f600
+6fe0c6f6
+1fe0fe01
+67e0c6f6
+1fe67c08
+24215010
+2040357f
+20403651
+242c5016
+2437d016
+20405028
+20405020
+2040357b
+6fe0c6f7
+1fe0fe01
+67e0c6f7
+c0085018
+20600000
+20403222
+20205005
+7046f700
+6fe0c6f8
+c3800000
+79207e00
+67e0c6f8
+6fe14723
+67e14781
+20600000
+6fe0c602
+203a4ff5
+7046f700
+6fe0c6f8
+c4000000
+793ffe00
+67e0c6f8
+20205c0b
+2040366e
+6fe0c4f8
+2fe1f008
+24608000
+6fe0c4f9
+c07fcb11
+20600000
+7049f101
+da200017
+da400004
+204029fb
+58000006
+e7e08005
+58000001
+e7e10005
+5800ffff
+e7e10005
+58002800
+e7e10005
+d8c049e1
+20207c8f
+44b0c00c
+6fe0c9f1
+207a0000
+1a220c00
+efe18006
+67e1c397
+c005d091
+c004d078
+c003d048
+c000d05b
+20202b96
+6fe0c9f1
+c001506c
+7049c602
+20205050
+6fe0c2cb
+67e0c9c6
+20205050
+7049c603
+7049f100
+684949df
+58001fd0
+98462400
+da2049c6
+df200001
+20406b45
+684949df
+1840840e
+604949df
+20600000
+6fe0c9f1
+c001504c
+7049f102
+da200009
+da400004
+204029fb
+58000006
+e7e08005
+58000001
+e7e10005
+5800ffff
+e7e10005
+58002800
+e7e10005
+df200002
+d8c049f2
+20207cda
+da200007
+da400004
+204029fb
+58000008
+e7e08005
+68494339
+18408405
+efe20002
+e7e20005
+58002803
+e7e10005
+20600000
+6fe14335
+1fe0fffe
+1fe6fc07
+20407d62
+1807f200
+6fe14339
+1fe08c06
+20205080
+18c08c03
+efe10006
+1fe22600
+efe10006
+d8402a29
+98467c00
+2022d089
+c2005080
+2020504c
+da200003
+da400004
+204029fb
+5800000a
+e7e08005
+1a627e00
+e7e10005
+20600000
+6fe14335
+df200009
+6fe14339
+1fe0a205
+da4049f4
+20407d64
+2022d04f
+2020504c
+2035d0bd
+20402952
+580050c7
+67e143db
+580050ca
+67e143dd
+580050c3
+67e143d3
+58005180
+67e143e1
+580053b0
+67e143df
+580053c1
+67e143e3
+44b1400c
+204050ab
+204050be
+2020533b
+6ff08060
+793ffe00
+67f08060
+6fe44500
+20406d68
+6fe14508
+20406d73
+20406d82
+70807708
+70807649
+7080790a
+70807a0b
+d8400081
+6fe1450f
+2feffe00
+79208404
+60588060
+20600000
+202050ab
+6848c4f5
+20406ef7
+204050ed
+6848c4f3
+20206edd
+6848c4f3
+20406ee6
+2420c30a
+20204308
+204069a9
+247a0000
+202050ef
+1a627e00
+c00a50dc
+c00ad0d8
+c0185375
+c018d377
+c0195381
+c019d37f
+c01a536f
+c01ed34f
+c020d0e2
+c02150e4
+c021d36d
+c01dd358
+20600000
+204029cb
+70451100
+204050e0
+20205321
+204050e7
+6fe0c4fe
+67e0c0c0
+2020531f
+20405149
+202050e5
+204030f3
+20202ed5
+20205391
+6848c4f5
+20206ef7
+204050e9
+202050ed
+6fe0c4f8
+2feffe01
+2040c315
+20600000
+6848c4f5
+20206ef3
+6ff0810b
+c3810000
+20406d96
+efe08003
+c080d105
+6ff10112
+1fe67c02
+20610000
+efe08003
+67e086e2
+e8408003
+18622200
+604886e3
+18408403
+6ff10112
+98460400
+24610000
+7006e401
+20405113
+6fe086e4
+c1000000
+2020510e
+20407c95
+2040535e
+20205108
+44b1c00c
+20406d96
+6ff10112
+207a0000
+98608600
+20205112
+20406d96
+18608602
+efe08003
+98608600
+20206d9c
+44b2400c
+6fe086e2
+c000d13d
+c0015142
+c0025150
+c004d154
+c005d1ab
+c00751ac
+c007d1b4
+c00851bc
+c00951c0
+c01351c4
+c01451c9
+c01551cc
+c015d1ff
+c0165205
+c018520c
+c018d211
+c0195222
+c019d22d
+c01a525a
+c01ad25d
+c01b5266
+c01bd26f
+c01c5275
+c020527d
+c0215287
+c024528c
+c028d297
+c030d29b
+c03b52aa
+c03bd2b0
+c03c52b5
+c03d52eb
+c03dd2f9
+c04852ff
+c048d304
+c0495308
+c049d30d
+c04a5311
+c07fd317
+20205319
+6fe086e3
+c0835319
+efe30003
+67e342db
+2020531c
+6fe086e3
+c080d319
+e8408003
+6048c4ff
+2040531c
+6fe144e9
+c3848000
+6fe0c4f8
+2feffe01
+24608000
+6848c4ff
+284ffe02
+2020c317
+20204315
+dfe0001d
+d8a0426b
+20405260
+20202952
+6fe144e9
+c304d319
+204051a8
+20345319
+7006e400
+6fe1450f
+c2845179
+6fe0c511
+247a0000
+7006e401
+efe10003
+67e14512
+60614514
+6fe086e3
+1fe0fffe
+24215319
+2022d319
+67e0c511
+68494512
+184085ff
+20402cd2
+203a517c
+e8420006
+59280302
+98467c00
+2422d17c
+efe08006
+67e0c516
+1fe17e30
+203a517c
+7006e400
+204029c9
+20405180
+20405180
+20405180
+6fe1450f
+c4040000
+7006e401
+204053d6
+2020531c
+70451100
+7006e401
+204053d6
+20205319
+6fe0c511
+207a0000
+20402a28
+247a0000
+204051a3
+44b2c00c
+6fe142e1
+20407db0
+1fe20400
+6fe0c396
+c3800000
+1840fffd
+d84000fb
+20407db0
+6848c511
+20407db0
+1fe22200
+18427e00
+9a267e00
+67e0c511
+2040519e
+6fe14514
+1fe20600
+1a227200
+20406dca
+18627e00
+67e14514
+6fe0c511
+247a0000
+202053d4
+68494512
+6fe0c516
+c282adf7
+c2822dee
+20600000
+d8400017
+6fe1450f
+c3808000
+684942e3
+20600000
+6fe1450f
+c2812dc7
+20207dbc
+2020533f
+efe08003
+6848c50f
+7d3a0400
+6048c50f
+68588060
+7d3a0404
+60588060
+2020531c
+6f2086e3
+20407d33
+20406d77
+67e14508
+2040531c
+20406dae
+6fe14508
+20206d73
+da200002
+da4044f1
+d8400000
+20205323
+6fe144e9
+c304d319
+2040531c
+2020431f
+6f2086e3
+6fe143f8
+1fe20a00
+20406dca
+2020531c
+6fe144e9
+c284d28c
+20205319
+df200040
+d8a04348
+20407ca1
+58000000
+67e08688
+1a220600
+18627e00
+67e1068c
+204051fa
+6fe08688
+68488678
+18408401
+9840fe00
+67e08688
+1fe67c1f
+242151e6
+6848c348
+58004349
+9840fe00
+67e10691
+68488678
+18408401
+6fe0c348
+9840fe00
+67e0c348
+202051ef
+6848c368
+58004369
+9840fe00
+67e10691
+68488678
+18408401
+6fe0c368
+9840fe00
+67e0c368
+6fe10691
+1fe20a00
+6fe1068c
+1fe20600
+18427200
+20406dca
+6fe086e3
+68488688
+98467c00
+2422d1d2
+2020531c
+efe08003
+67e08678
+efe08003
+67e08684
+20600000
+d8400000
+da200002
+6fe1450c
+67e106a1
+da4006a1
+20205323
+6fe086e3
+c080d319
+efe08003
+67e0c50a
+58000000
+67e1450c
+2020531c
+6fe086e3
+c0825319
+6fe144e9
+c284d2eb
+20205319
+6fe086e3
+c081d319
+efe08003
+c0005217
+c000d21d
+20205319
+2040531c
+e8408003
+efe08003
+c0016f0f
+7d3a0407
+20206edd
+2040531c
+e8408003
+efe08003
+203a6ef7
+20206ef3
+6fe086e3
+c080d319
+e8408003
+20406ee6
+58000000
+7d20fe00
+da200001
+67e106a1
+da4006a1
+d8400000
+20205323
+efe08003
+1fe20400
+c040d23c
+c0415240
+c041d245
+c0425249
+67e0c2fe
+204074ff
+20402ec4
+6fe0c2fe
+c000524d
+c000d250
+c0015252
+c0025254
+20205319
+6048c2fe
+20402ec0
+7042c70d
+2020524e
+6048c2fe
+20402ec0
+7042c70d
+7042c501
+2020531c
+6048c2fe
+20402ec0
+7042c70d
+20205258
+6048c2fe
+20402ec0
+7042c70d
+20205256
+7042c700
+7042c503
+2020531c
+7042c701
+2020524e
+7042c705
+20205258
+7042c705
+20205256
+7042c502
+2020531c
+7042c500
+2020531c
+dfe0001f
+d8a04348
+20205260
+dfe0001f
+d8a04368
+20205260
+6f2086e3
+9f267c00
+24215319
+e7208005
+20406dca
+2020531c
+6fe144e9
+c304d319
+6fe086e3
+c0845319
+efe40003
+67e442d3
+70066f12
+20407834
+2020531c
+efe10003
+67e14389
+6048c0a6
+9840fe00
+67e140a4
+2020531c
+6fe0c2fe
+203a5319
+6fe0c2fc
+c0805319
+6fe0c2fd
+c0805319
+204078a9
+2020531c
+6fe086e3
+c082d319
+efe08003
+67e0c4f9
+efe20003
+67e244fa
+6848c4f9
+20406ef7
+204053ae
+2020531c
+6fe086e3
+c080d319
+efe08003
+67e0c141
+2020531c
+efe08003
+c000d295
+6fe0c2fa
+c001d293
+c0035293
+c003d293
+20205319
+7042fb01
+2020531c
+20402f2a
+2020531c
+2040531c
+20406dae
+70801001
+2020235a
+6fe086e3
+c0005319
+efe08003
+203a52a8
+6fe086e3
+c082d319
+efe20003
+d84f4240
+98467c00
+20215319
+67e242ff
+204029c1
+2020531c
+204029c3
+2020531c
+d8400001
+20402cd2
+18c08bfe
+58000000
+e7e10005
+2020531c
+204052b9
+204052e7
+58000000
+e7e10005
+20205388
+efe08003
+204052bd
+204052c4
+20205388
+204052e4
+58280002
+e7e18005
+20600000
+67e08670
+204052e4
+59280302
+e7e20005
+6fe08670
+e7e18005
+20600000
+20402cf6
+efe08003
+1fe1721f
+1fe22200
+2a2ffe07
+7920840f
+2a2ffe06
+7920840e
+e0410005
+1f227e00
+e7e08005
+20406ddd
+204052e7
+58000000
+e7e10005
+184104ff
+184085ff
+20402cd2
+18c08c04
+efe08006
+c28252dc
+c282d2dc
+18408401
+20600000
+20402cf6
+2a2ffe05
+7920840f
+e0410005
+5a290202
+e7e40005
+184085ff
+20600000
+20402cf6
+e0410005
+20600000
+efe08003
+1fe27200
+e7e08005
+20206ddd
+6fe0c2fc
+c082d319
+6fe0c2fe
+c00252f7
+c04252f1
+20205319
+7042f902
+7042fa08
+202052f4
+efe20003
+67e242ff
+2020531c
+204052f4
+20202f13
+efe30003
+67e342cc
+7001bc1b
+70451701
+70434301
+2020531c
+6fe086e3
+c0815319
+e8410003
+20402a2d
+2020531c
+d8400000
+da200002
+da404075
+20205323
+6fe086e3
+c0845319
+efe40003
+20402a2b
+2020531c
+ea208003
+ea410003
+d8400000
+20205323
+6f2086e3
+1f20f3fe
+efe10003
+1fe20a00
+20406dca
+2020531c
+70409400
+2020531c
+d8400001
+da200000
+20205323
+d8400000
+da200000
+20205323
+7006e202
+2020533c
+7006e205
+2020533c
+6fe086e2
+1fe22600
+7006e206
+58000002
+9a20fe00
+20405397
+1a627e00
+e7e08003
+e0408003
+1a227200
+1a420c00
+20406dc4
+202053a1
+7006e208
+1f20fe02
+20405397
+6fe1070d
+e7e10003
+6fe1070b
+1fe20c00
+20406db1
+18c27e00
+67e1070b
+202053a1
+7006e209
+58000000
+20405397
+202053a1
+7006e20a
+58000001
+20405397
+20405349
+6fe144e9
+d8e00009
+afefffff
+79208405
+e0408003
+202053a1
+d8400000
+6fe0c388
+d8e00000
+afefffff
+79208402
+20600000
+7006e20d
+6fe0c3fa
+1feffe22
+1fe27200
+20405397
+6fe143f8
+1fe20c00
+20406db1
+202053a1
+7006e20e
+58000004
+20405397
+6fe205fa
+e7e20003
+202053a1
+7006e20f
+6ff10112
+d8400040
+20407db0
+1fe22200
+1fe27200
+20406d96
+d8a006a1
+20406dca
+1a227e00
+1a227200
+20405397
+d8c006a1
+20406db1
+202053a1
+7006e210
+2020533c
+7006e211
+58000004
+20405397
+6fe242ff
+e7e20003
+202053a1
+da200180
+20205379
+da200080
+20205379
+7006e214
+58000002
+20405397
+1a227e00
+e7e10003
+202053a1
+da600000
+20205382
+da600001
+7006e215
+58000001
+20405397
+1a627e00
+e7e08003
+202053a1
+60490678
+7006e229
+58000002
+20405397
+68490678
+e0410003
+202053a1
+7006e22b
+2020533c
+7006e240
+58000002
+20405397
+6fe14075
+e7e10003
+202053a1
+7006e102
+67e086e3
+604c0678
+44b3400c
+204053a3
+684c0678
+20406da2
+6fe186e1
+e7e18003
+20600000
+44b3c00c
+20206da4
+204053ac
+20608000
+204053aa
+6fe244fa
+1feb7e00
+207a0000
+20207c91
+6848c4f9
+20206ef7
+6848c4f9
+20206f02
+6848c4f9
+20206ef3
+6221070b
+62410709
+6fe14398
+67e1070d
+204051a8
+20740000
+68490709
+6fe0c50e
+20407db0
+1fe27200
+18427e00
+9f267e00
+67e10709
+20405330
+6fe10709
+207a0000
+202053b6
+20600000
+6fe0c50a
+207a0000
+6fe0c50b
+207a0000
+1fe0ffff
+67e0c50b
+247a0000
+70450b05
+20406f82
+20406fb0
+1fe6fc0a
+20407d5f
+1fe6fc64
+20407d5f
+18070400
+67e0c50c
+6048c50d
+20600000
+d8e00008
+202053dc
+d8e00008
+202053d8
+6fe1450f
+f93ffe00
+67e1450f
+20600000
+6fe1450f
+f9207e00
+67e1450f
+20600000
+20407396
+20405410
+20405949
+20758000
+20405747
+20405f37
+204053ec
+204059ed
+6fe144e9
+c2865c1a
+20405eb6
+2020548c
+44b4400d
+58006235
+67e145f8
+5800622b
+67e145fa
+58006109
+67e143e9
+58006096
+67e145f2
+580060c1
+67e145f4
+5800550c
+67e145f6
+58005b23
+67e143d9
+58005507
+67e143d7
+58005ac1
+67e143dd
+58005e5d
+67e143db
+580054d5
+67e143d5
+58005b08
+67e143df
+58005b85
+67e143e3
+580055fa
+67e143e7
+580054c5
+67e143d3
+58006221
+67e143e1
+58006228
+67e143e5
+20600000
+20758000
+204035f0
+2040325b
+204062aa
+20405589
+204055c6
+2040544a
+20406177
+20402a41
+44b4c00d
+6fe44713
+c289dd60
+c2895d6e
+c28a5da6
+20600000
+70409910
+6fe44713
+c3860000
+70409918
+20600000
+20403281
+6fe44713
+c41e8000
+20203284
+44b5400d
+6fe44713
+2feffe05
+2040df08
+6fe1463a
+67e145d6
+6fe0c63d
+67e145dc
+6fe2c63f
+67e2c628
+6fe0c63e
+67e0c5d1
+6fe0c5b9
+245a326b
+44b5c00d
+2040541f
+20405424
+20405fe4
+20203287
+58009000
+67e142f7
+7040c103
+7040a608
+70497f00
+70498000
+58000200
+67e140a4
+7042e117
+7042e317
+580047c3
+67e1433f
+58000010
+67e14341
+20205539
+44b6400d
+2040543b
+70487a00
+58000a77
+67e143f5
+38001224
+38044000
+38080000
+e7e28005
+6fe44713
+c30dd458
+58000006
+67e142d3
+67e142d5
+20405481
+6fe44713
+c30c545c
+20405476
+6fe1c608
+67e1c75d
+6fe0c666
+67e0c9a1
+6fe1c2de
+67e1c797
+58000000
+67e3c846
+6fe0c4eb
+67e0c97c
+67e0c97d
+20402969
+44b6c00d
+6fe0c64f
+67e0c958
+6fe0c64e
+c17f8000
+6848c64e
+204055b5
+6848c64e
+20406ee6
+2040d473
+202055b1
+6fe0c650
+67e0c958
+20600000
+6fe1c743
+67e1c608
+6fe1c746
+67e1c60b
+6fe0c749
+67e0c621
+6fe24755
+67e24751
+58100c0c
+67e1c5a7
+20600000
+6fe1c74a
+67e1c608
+6fe1c74d
+67e1c60b
+6fe0c750
+67e0c621
+6fe24759
+67e24751
+581c1919
+67e1c5a7
+20600000
+44b7400d
+6fe44713
+c29f602d
+6fe0c666
+c000601c
+20405aa8
+6fe0c666
+c000d496
+c001549b
+20600000
+6fe34668
+684b46e6
+98467c00
+2022da94
+202054a0
+6fe34675
+684b46e6
+98467c00
+2022da94
+202054a0
+44b7c00d
+2040619f
+da204667
+6fe0c666
+1fe0ffff
+1feffe1d
+9a20a200
+efe08011
+67e0c3f3
+6fe0c3f3
+c01a54b6
+20205a94
+44b8400e
+78547c00
+6fe44713
+c305d4b3
+6ff08132
+c28254b3
+78347c00
+6fe0c780
+67e0c77f
+20600000
+70479501
+6848c71e
+6fe0c78f
+c07fd4bb
+6848c63c
+6048c845
+2040432d
+6fe1c79d
+67e1c34d
+20405b6b
+58000004
+e7e08006
+d8c04369
+20405b72
+20207870
+c5134308
+6fe0c956
+203a4308
+6fe0c7c2
+c000c308
+6fe0c857
+243a4308
+2020430a
+44b8c00e
+58000006
+204069e5
+c281d4d3
+204059da
+204059ed
+204054dc
+20204327
+44b9400e
+2040739a
+204056a9
+204054dc
+20405d9e
+6848c659
+20206ed3
+44b9c00e
+20405a92
+20407de2
+2040611a
+2040550c
+204054f9
+6848c65b
+204055b5
+204055b9
+204061fd
+204054f2
+202054e8
+6fe44713
+c41e0000
+6848c64a
+20406ed3
+6848c64b
+20406ed3
+6848c64a
+204055b1
+6848c64b
+202055b1
+6fe44713
+c40a8000
+6fe0c407
+c1810000
+6fe0c635
+d84000c0
+20206f21
+d8c08070
+df200010
+efe08006
+243a5500
+58000080
+18c08bff
+e7e08005
+c20054fb
+dfe080dc
+98c67c00
+20628000
+df200008
+d8c080d4
+202054fb
+c6130000
+2040550c
+6fe08015
+247a0000
+20206ed3
+44ba400e
+6848c64a
+20406edd
+6848c64b
+20406edd
+2040561c
+6fe0c64c
+20405943
+204069dc
+6848c644
+20406eb6
+6848c646
+20406eb6
+6848c645
+20406eb6
+6848c647
+20406eb6
+6848c648
+20406eb6
+6848c649
+20406eb6
+6848c655
+20406eb6
+6848c656
+20406eb6
+6848c64a
+20406eb2
+6848c64b
+20406eb2
+6848c652
+20406eb2
+6848c653
+20406eb2
+6848c659
+20206eb6
+6fe144e9
+c4048000
+1a227e00
+243a29d5
+202029da
+44bac00e
+6fe0c407
+c1810000
+6848c635
+20206f0f
+6fe44713
+c40a8000
+70463601
+20600000
+44bb400e
+6fe44713
+c40a8000
+20405534
+6fe0c407
+c0015545
+70463603
+20205547
+70463602
+20205547
+44bbc00e
+20406f82
+20406fb0
+67e14633
+6fe0c407
+c0815553
+68494633
+184ffe08
+1fe6fc0a
+20407d5f
+9840fe00
+67e14633
+da20462d
+20405563
+6fe0c40c
+c280d4cd
+c300555c
+70463701
+2020555a
+d8e00004
+20205f00
+d8e00004
+20405f04
+70470901
+6fe0c637
+207a0000
+70463700
+2020616e
+44bc400f
+efe40011
+67e40670
+6fe0c636
+c000556a
+c001556a
+c001d588
+20406ff3
+20406feb
+6fe10676
+68490672
+98467c00
+24416fef
+68490674
+98467c00
+24416fe7
+6fe10676
+68490670
+98467c00
+20215584
+68490672
+98467e00
+24215586
+203a5586
+1fefa264
+6fe10670
+68490672
+98460400
+1a227e00
+9846fc00
+20407d5f
+67e0c7bd
+20600000
+7047bd64
+20600000
+7047bd00
+20600000
+2020556a
+6848c427
+20406ef7
+6848c644
+204055b5
+6848c646
+204055b5
+6848c645
+204055b5
+6848c647
+204055b5
+6848c648
+204055b5
+6848c649
+204055b5
+6848c654
+204055b5
+6848c655
+204055b5
+6848c656
+204055b5
+6848c64a
+204055b5
+6848c64b
+204055b5
+6848c652
+204055b5
+6848c653
+204055b5
+6848c659
+204055b5
+6848c65a
+204055b5
+6848c64e
+202055b5
+18467cff
+20628000
+18410e7f
+6ff2011c
+afefffff
+2020d5b5
+18467cff
+20628000
+79200407
+20206edd
+18467cff
+20628000
+793f8407
+20206edd
+6fe1c73c
+67e18670
+df20000d
+d8400000
+6fe18670
+2feffe00
+2040ef0f
+6fe18670
+1fe3fe00
+67e18670
+18408401
+c20055bd
+20600000
+44bcc00f
+6fe4498d
+207a0000
+6fe0c98c
+1fe22200
+1fe67c0b
+242155dd
+204055d6
+d8a047a9
+204055d3
+d8a0436b
+204055d3
+d8a0426c
+d8c0498d
+1a227200
+20207cda
+d8a047a9
+204055db
+d8a0436b
+204055db
+d8a0426c
+df20000b
+20207ca1
+204055f3
+6fe0c98c
+1fe0fe01
+67e0c7a0
+7047a109
+d8c0498d
+d8a047a2
+1a227200
+20407cda
+6fe0c98c
+1fe0fe01
+67e0c369
+70436a09
+d8c0498d
+d8a0436b
+1a227200
+20407cda
+d8c0498c
+d8a0426b
+1a227200
+1f20f201
+20207cda
+d8a047a0
+df200014
+20207ca1
+204055fb
+7043f573
+204055fa
+202069e0
+20206bc6
+6fe0c64c
+d8400021
+20406f21
+6fe0c64d
+d8400023
+20206f21
+44bd400f
+78547c00
+58000000
+67e34847
+204059f6
+58000089
+204069e4
+20405747
+20405612
+20405617
+204057a6
+6fe0c846
+1fe17e1f
+67e0c846
+24345f37
+20405f26
+20205c0b
+6fe0c856
+207a0000
+67e0c84b
+70485600
+20207dba
+6fe0c852
+207a0000
+67e0c84c
+70485200
+20207dba
+20405629
+20405665
+6fe0c850
+6848c84f
+67e0c84f
+98467c00
+2422c30c
+6fe0c854
+6848c853
+67e0c853
+98467c00
+2422c30c
+20600000
+6fe0c652
+c17f8000
+da200000
+6848c652
+20406ee6
+7920a200
+6848c653
+20406ee6
+7920a201
+1a227e00
+67e0c850
+c000d639
+c001563d
+6fe0c851
+c283d649
+20600000
+6fe0c84f
+c0005641
+c001d643
+20600000
+6fe0c84f
+c0005645
+c001d647
+20600000
+70485182
+20600000
+70485181
+20600000
+70485180
+20600000
+70485183
+20600000
+6fe0c851
+793ffe07
+67e0c851
+c0005651
+c000d654
+c0015657
+c001d65a
+20600000
+6fe0c850
+c001d65d
+20600000
+6fe0c850
+c000565d
+20600000
+6fe0c850
+c001d661
+20600000
+6fe0c850
+c0005661
+20600000
+6fe0c852
+1fe0fe01
+67e0c852
+20600000
+6fe0c852
+1fe0ffff
+67e0c852
+20600000
+6fe0c64a
+c17f8000
+da200000
+6848c64a
+20406ee6
+7920a200
+6848c64b
+20406ee6
+7920a201
+1a227e00
+67e0c854
+c000d675
+c0015679
+6fe0c855
+c283d685
+20600000
+6fe0c853
+c000567d
+c001d67f
+20600000
+6fe0c853
+c0005681
+c001d683
+20600000
+70485582
+20600000
+70485581
+20600000
+70485580
+20600000
+70485583
+20600000
+6fe0c855
+793ffe07
+67e0c855
+c000568d
+c000d690
+c0015693
+c001d696
+20600000
+6fe0c854
+c001d699
+20600000
+6fe0c854
+c0005699
+20600000
+6fe0c854
+c001d69d
+20600000
+6fe0c854
+c000569d
+20600000
+6fe0c856
+1fe0fe01
+67e0c856
+20600000
+6fe0c856
+1fe0ffff
+67e0c856
+20600000
+6848c64a
+20406eb2
+6848c64b
+20406eb2
+6848c652
+20406eb2
+6848c653
+20206eb2
+6848c64a
+204055ab
+6848c64b
+204055ab
+6848c652
+204055ab
+6848c653
+202055ab
+6fe1484b
+207a0000
+70485701
+7048580a
+20600000
+da604858
+da4056b9
+202042e0
+70485700
+20600000
+6fe0c649
+c17f8000
+da200000
+70497705
+6848c649
+204056c8
+67e0c974
+6fe0c654
+c07fd6d8
+204058df
+1a227e00
+c282d6e0
+202056e7
+6fe44713
+c295d6de
+6fe0c974
+1fe22600
+6fe0c654
+c07fd931
+6fe0c97b
+243a56db
+20406ee6
+6848c654
+2020d6de
+6848c654
+20406ef7
+6848c649
+6fe0c974
+20205925
+6848c649
+204055b5
+202056c5
+70487a00
+70497400
+20600000
+6fe0c974
+20205925
+6fe0c87a
+c1008000
+70487a01
+6fe44713
+c3940000
+c39b0000
+202056f7
+6fe0c87a
+c1000000
+70487a00
+6fe44713
+c29456ee
+c29b56ee
+20600000
+6fe0c87b
+243a56f2
+6fe0c97d
+245a56f7
+70487b00
+6fe0c4eb
+67e0c97d
+67e0c97c
+20600000
+44bdc00f
+20405728
+20740000
+6fe0c690
+1fe20400
+6fe44713
+c28bd704
+18427e00
+1fe0fe01
+1fe17e03
+67e0c690
+20405744
+20205cac
+6fe0c98a
+243a5721
+6fe44713
+c28e5715
+18427e00
+c1008000
+c0005711
+c001570f
+20600000
+58000002
+20205701
+58000000
+20205701
+58000001
+20205701
+58000003
+20205701
+18427e00
+c1008000
+c0005711
+c0015713
+c001d70f
+20600000
+18427e00
+c1010000
+c0005713
+c000d70f
+c001d70d
+20600000
+6fe44713
+c28e571b
+18427e00
+c1010000
+c000570d
+c000d70f
+20600000
+78547c00
+6fe44713
+c3958000
+20205eb1
+6fe44713
+c2945730
+c29b5737
+20600000
+6fe0c87a
+c1808000
+da60497d
+da405735
+202042e0
+70487b01
+20205ec6
+6fe0c87a
+c1808000
+da60497c
+da40573c
+202042e0
+70487b01
+20205ba3
+6fe44713
+c38e0000
+6fe0c690
+c1818000
+70469000
+20600000
+44be400f
+2040573e
+2040613a
+44bec00f
+6fe0c957
+c006576b
+c001d785
+c005d799
+6fe0c690
+c0005753
+c000d751
+c0015755
+c001d757
+6848c869
+20205758
+6848c868
+20205758
+6848c86a
+20205758
+6848c86b
+6fe0c957
+c0025767
+c002d767
+c0045769
+c003d769
+c0035767
+6048c879
+58000006
+204069e5
+1fe104f8
+6fe0c879
+9840fe00
+1fed7e00
+1fe0fe06
+202069e4
+184085ff
+2020575e
+18408402
+2020575e
+6fe0c690
+c000576f
+c000d775
+c0015778
+6fe0c874
+1fe22200
+2020577d
+6fe0c875
+1fe22200
+2020577d
+6fe0c876
+1fe22200
+2020577d
+6fe0c877
+1fe22200
+2020577d
+6fe0c878
+1fe22200
+5800c309
+204069e4
+1a227e00
+1fed7e00
+1fe0fe23
+204069e4
+58000009
+202069e4
+6fe0c690
+c000578c
+c000d78a
+c001578e
+c001d790
+6fe0c86d
+20205791
+6fe0c86c
+20205791
+6fe0c86e
+20205791
+6fe0c86f
+67e0c879
+1fed7e00
+1fe22200
+1fe0fe0d
+204069e4
+1a227e00
+1fe0fe0e
+202069e4
+6fe0c690
+c00057a0
+c000d79e
+c00157a2
+c001d7a4
+6fe0c871
+20205791
+6fe0c870
+20205791
+6fe0c872
+20205791
+6fe0c873
+20205791
+2040584c
+6fe0c987
+243a5860
+6fe0c982
+243a585f
+20405888
+204057bc
+2040552f
+204057b7
+1a227e00
+6848c84e
+67e0c84e
+67e0c846
+9842fe00
+1fe67c00
+20628000
+20207dba
+c6930000
+1a227e00
+207a0000
+67e0c846
+20207dba
+70497900
+70497a00
+70497b00
+1fe22400
+6848c644
+6fe0c647
+98467c00
+2022d7cc
+6fe0c648
+98467c00
+2022d7d1
+6848c645
+6fe0c647
+98467c00
+2022d7e0
+202057e3
+6848c645
+6fe0c648
+98467c00
+2022d7d6
+202057d9
+6848c645
+6fe0c647
+98467c00
+2022d7db
+202057de
+204057ef
+204057fb
+202057e5
+204057ef
+202057e1
+204057f8
+204057f2
+202057e5
+204057f8
+202057e4
+204057f2
+204057fe
+202057e5
+204057fb
+204057f5
+20405801
+20405804
+6fe0c97a
+207a0000
+6fe0c979
+207a0000
+70497b01
+6fe0c84e
+1fe22200
+20600000
+1a417e09
+c004d80c
+20600000
+1a417e09
+c009580c
+20600000
+1a417e09
+c005580c
+20600000
+1a417e09
+c008d80c
+20600000
+1a417e14
+c00a580c
+20600000
+1a417e14
+c009580c
+20600000
+1a417e18
+c00c580a
+20600000
+18417e07
+c001d80a
+c002d80a
+c003580a
+c003d80a
+20600000
+70497a01
+20600000
+70497901
+20600000
+6fe44713
+c40b8000
+c3165816
+6fe0c658
+20405943
+20405824
+6848c658
+202055b5
+6fe0c658
+20405946
+70498b00
+6848c658
+6fe0c988
+2040583d
+20405828
+6848c658
+202055b5
+204055b5
+6fe0c989
+c1008000
+70498901
+202056f7
+70498b00
+6848c658
+6fe0c988
+20405833
+67e0c988
+6fe0c98a
+203a582f
+6fe0c989
+c1008000
+70498901
+202056f7
+6fe0c989
+c1000000
+70498900
+20600000
+1fe3fe00
+1fe22400
+20406ee6
+7920a400
+1a417e07
+6848c98b
+18420e00
+c003d848
+c000584a
+20600000
+1fe3fe00
+1fe22400
+204055b1
+20406ee6
+7920a400
+1a417e07
+6848c98b
+18420e00
+c003d848
+c000584a
+20600000
+70498a01
+20600000
+70498a00
+20600000
+da400000
+6fe0c657
+c17f8000
+6fe44713
+c3175859
+6848c657
+204055b5
+6848c657
+20406ee6
+7920a400
+1a427e00
+67e0c987
+20600000
+6848c657
+204055b1
+6848c657
+20406ee6
+7d20a400
+20205856
+c0025878
+2040587b
+6fe24983
+d84000a0
+98408400
+1c427e00
+98467c00
+24610000
+67e24983
+6fe0c982
+c000586e
+c000d871
+c0015874
+c001d876
+20600000
+70498201
+70484601
+20207dba
+70498202
+70484600
+20207dba
+70498203
+2020586f
+70498200
+20205872
+70498200
+70484600
+20600000
+684a4983
+1c427e00
+98467c00
+24415880
+20600000
+58000000
+67e24983
+20600000
+20405895
+20405888
+58000000
+67e1c96f
+20600000
+44bf400f
+6fe0c73f
+245a5895
+da200000
+20405898
+204058a1
+204058aa
+204058b3
+204058cf
+2040584c
+204058ec
+1a227e00
+20600000
+58030303
+67e1c96f
+20600000
+6fe0c644
+20405943
+70497700
+6848c644
+6fe0c96f
+20405925
+67e0c96f
+6848c644
+202055b5
+6fe0c646
+20405943
+70497701
+6848c646
+6fe0c970
+20405925
+67e0c970
+6848c646
+202055b5
+6fe0c645
+20405943
+70497702
+6848c645
+6fe0c971
+20405925
+67e0c971
+6848c645
+202055b5
+6fe0c647
+c17f8000
+70497703
+6fe0c972
+1fe22600
+6848c647
+6fe0c654
+c07fd8c8
+20406ee6
+2020d8c4
+6848c654
+20406ef7
+6848c647
+6fe0c972
+20405925
+67e0c972
+202058df
+6848c654
+6fe0c972
+20405925
+202058c2
+6fe0c647
+20405946
+6848c647
+20405931
+67e0c972
+6848c647
+202055b5
+6fe0c648
+c17f8000
+70497704
+6fe0c973
+1fe22600
+6848c648
+6fe0c654
+c07fd8e5
+20406ee6
+2020d8e1
+6848c654
+20406ef7
+6848c648
+6fe0c973
+20405925
+67e0c973
+6848c654
+202055b5
+6848c654
+6fe0c973
+20405925
+202058de
+6fe0c648
+20405946
+6848c648
+20405931
+67e0c973
+6848c648
+202055b5
+70496c00
+6fe0c656
+c17f8000
+6fe44713
+c40b0000
+c297d8fd
+70497707
+6848c656
+6fe0c976
+20405925
+67e0c976
+1a227e00
+c283d917
+2040591a
+6fe0c96d
+67e0c96e
+20600000
+70497707
+6fe0c976
+1fe22600
+6848c656
+6fe0c654
+c07fd90f
+20406ee6
+2020d90b
+6848c654
+20406ef7
+6848c656
+6fe0c976
+20405925
+20205913
+6848c654
+6fe0c976
+20405925
+20205913
+6fe0c656
+20405946
+6848c656
+20405931
+67e0c976
+204058f7
+6848c656
+202055b5
+70496d01
+2040591d
+202058fa
+70496d00
+6fe0c96e
+207a0000
+70496c01
+20600000
+20406ee6
+6848c977
+18420e00
+2020d92f
+f93fa200
+20600000
+1fe3fe00
+1fe22400
+20406ee6
+7920a400
+1a417e07
+6848c977
+18420e00
+c003d92f
+c0005923
+20600000
+f9202200
+20600000
+44bfc00f
+1a627e00
+67e0c978
+1fe3fe00
+1fe22400
+18422600
+204055b1
+1a620400
+20406ee6
+7d20a400
+2040593d
+2020592a
+6848c978
+18410401
+1a417e01
+98467c00
+2422dabc
+20600000
+c17f8000
+d840003f
+20206f21
+c17f8000
+d840003e
+20206f21
+44c04010
+204055f6
+20758000
+204059e7
+44c0c010
+20405958
+c018595f
+c018d9c6
+c02c59cf
+20405955
+20001af4
+2020594d
+6848c64c
+204069c7
+202055fb
+58000001
+204069e5
+67e0c85a
+58000000
+204069e5
+67e0c859
+20600000
+6fe0c85a
+c02d596e
+c06c5974
+c068d968
+c069598c
+c0015993
+c02a599c
+c02859c3
+2020594d
+58000049
+204069e5
+c050d96c
+20205983
+7049570c
+20600000
+70495705
+204059da
+20407c95
+da6048d6
+20405995
+20205747
+58000016
+204069e5
+1fe67cbd
+2422d949
+58000019
+204069e5
+1fe67c55
+2422d949
+5800001b
+204069e5
+1fe67c1d
+2422d949
+70495706
+da60491a
+20205995
+70495700
+da604890
+20405995
+da60489a
+20405995
+58000943
+204069e4
+da6048b4
+20205995
+70495702
+da604886
+20405995
+da60489a
+20405995
+da6048b4
+20205995
+70495703
+da60487c
+efe10013
+d840ffff
+98467c00
+20628000
+204069e4
+1a60a602
+20205995
+204059d8
+58009a5b
+204069e4
+5800000d
+204069e5
+1fe67c12
+2022d9b0
+1fe67c0a
+2422d9b3
+5800000e
+204069e5
+1fe67ce5
+2422d94d
+58000010
+204069e5
+1fe67ca5
+2022d9b0
+204059c0
+70495708
+20600000
+70495709
+da6048fc
+20205995
+1fe67c10
+2422d94d
+5800000e
+204069e5
+1fe67cc5
+2422d94d
+58000010
+204069e5
+1fe67c38
+2422d94d
+204059c0
+7049570a
+20600000
+5800005b
+204069e4
+202059d6
+70495707
+da60493a
+20205995
+204059e7
+6fe0c85a
+c03859cd
+c00059cb
+2020594d
+70495701
+20600000
+70495704
+20600000
+204059e7
+6fe0c85a
+c02cd9d3
+2020595f
+7049570b
+da60492a
+20205995
+58000009
+202069e4
+58005a09
+202069e4
+d8408006
+6fe0c957
+c085d9de
+d8409706
+18427e00
+204069e4
+20002ee0
+20600000
+da604946
+6fe0c957
+c1858000
+da60494e
+20600000
+44c14010
+204055f6
+204059da
+204059e2
+20405995
+20205747
+44c1c010
+20405949
+204055f6
+d8400806
+6fe0c957
+c085d9f4
+d8401f06
+18427e00
+202069e4
+6fe0c420
+c1800000
+6fe0c957
+c0005a02
+c000da02
+c0045a02
+c0015a02
+c001da26
+c0025a02
+c0035a4b
+c005da44
+20205a02
+20405a6d
+78547c00
+6fe0c659
+c07fda09
+6848c659
+20406ee6
+24608000
+58000000
+204069e5
+c0985a1c
+58000002
+204069e5
+c4038000
+20405a84
+6fe0c847
+20405a7c
+67e14847
+6fe0c849
+20405a7c
+67e14849
+6fe0c958
+c0005a1e
+c000da20
+c0015a22
+c001da24
+20600000
+c018da0c
+20205955
+20405a56
+20205a8b
+20405a5e
+20205a8b
+20405a5a
+20205a8b
+20405a66
+20205a8b
+20405a6d
+6fe0c659
+c07fda2c
+6848c659
+20406ee6
+24608000
+58000000
+204069e5
+c0985955
+58000002
+204069e5
+c4038000
+20405a84
+20405a42
+67e0c84d
+1ff1fe00
+20405a80
+67e0c848
+6fe0c84d
+1fe17e0f
+20405a80
+67e0c84a
+6fe0c958
+c0005a56
+c000da5e
+c0015a5a
+c001da66
+20600000
+58000012
+202069e5
+20405a6d
+6fe0c659
+c07fda4a
+6848c659
+20406ee6
+24608000
+20205a2f
+20405a6d
+78547c00
+58000002
+204069e5
+c4038000
+58000008
+204069e5
+203a5a0f
+58000000
+67e34847
+20600000
+6fe14847
+1fe67e00
+67e14847
+20207dba
+6fe14849
+1fe67e00
+67e14849
+20207dba
+6fe14849
+1fe67e00
+67e14849
+6fe14847
+1fe67e00
+67e14847
+20405a68
+20207dba
+20405a68
+20207dba
+6fe14849
+68494847
+67e14847
+60494849
+20600000
+6fe0c860
+205a5a84
+70486001
+20600000
+70495601
+204029c9
+20205949
+6fe0c659
+c1ff8000
+6fe0c77d
+c1808000
+58000000
+67e0c77d
+67e24847
+20205a73
+c4038000
+d840ff00
+9841fe00
+20600000
+c4018000
+d84000f0
+9841fe00
+20600000
+dfe00003
+204069e5
+67e14847
+dfe00004
+204069e5
+67e14849
+20600000
+6848c64d
+20406ee6
+20608000
+5800000a
+204069e5
+200003e8
+20205a8b
+58008100
+202069e4
+70478fff
+7043f334
+580f0f0f
+67e1c2db
+67e1c2de
+202054a9
+44c24010
+20405c6f
+20405aa8
+6fe0c666
+c000daa1
+c0015aa3
+20600000
+6fe34668
+20205aa4
+6fe34675
+684b46e6
+98467c00
+2022dc1a
+202054a0
+70478f5a
+20600000
+6fe144e9
+c284c31f
+20205c39
+58000000
+67e14781
+6fe144e9
+c284c31f
+20600000
+6fe44713
+c40d8000
+24345aba
+6fe0c959
+1fe0fe01
+1fe17e0f
+67e0c959
+247a0000
+70495900
+20207dbc
+6fe0c659
+c1ff8000
+7040c000
+70477e1e
+20600000
+44c2c010
+1a627e00
+c00a5ad0
+c00adae0
+c0085c15
+c018daed
+c014daef
+c0195af1
+c01f4329
+c0205afc
+c01ce084
+c01d6053
+c01e6075
+c0225b10
+20600000
+2040618e
+70477d00
+20405a73
+70479401
+20406042
+6fe0c795
+243a5ad8
+70479614
+6fe143f1
+793ffe00
+67e143f1
+70484500
+6fe147be
+67e147c0
+20405c0b
+20205c39
+58000000
+67e147c0
+70479400
+d8400006
+6fe44713
+c28ddae7
+d8400007
+604942d3
+604942d5
+7047c200
+70495600
+204029cb
+20205b76
+d8e00002
+20205af8
+70066f12
+20207834
+6fe0c795
+c000daf4
+20205af6
+20405aef
+70484414
+d8e00001
+20205af8
+6fe0c843
+f9207e00
+67e0c843
+20600000
+6fe1433c
+c1000000
+6fe0816a
+1feb7e00
+1fe67c0c
+20610000
+58000009
+67e142d3
+67e142d5
+20405aef
+7047c201
+20600000
+6fe0c795
+247a0000
+6fe0c398
+1fe67e22
+24628000
+70484400
+d8e00000
+20205af8
+6fe081a2
+1fe67c0c
+24215b06
+67e142d3
+67e142d5
+6fe081a4
+203a5b1d
+6848c96b
+98467c00
+20215b1d
+6fe081a4
+67e0c0c0
+20205b1f
+6fe0c96b
+67e0c0c0
+7047c200
+20600000
+70484300
+20600000
+44c34010
+20402a28
+247a0000
+6fe0c78f
+c07fdb2b
+6fe0c843
+1fe17e03
+c1818000
+6fe0c956
+205a5a71
+6fe44713
+c280db5b
+c2805b5b
+c282db5b
+c2835b5b
+20405601
+20405ab2
+24740000
+20405abc
+20405a74
+204056b1
+6fe44713
+c30b5b3c
+6fe0c96c
+c000db3d
+20205b5d
+6fe0c96d
+203a5b4d
+6fe4472b
+67e40670
+6fe0c72a
+c001db4f
+c0015b52
+7047b408
+684947b5
+6fe0c7b4
+1fe22200
+20402dee
+6848c7b4
+18427200
+d8c00670
+20207cda
+6fe44734
+20205b40
+7047b403
+684947b7
+20205b46
+7047b402
+684947b9
+20205b46
+da200001
+684947bb
+20402dee
+6fe0c7bd
+e7e08005
+20600000
+58000000
+67e3c846
+7047b407
+6fe3c846
+67e38670
+6849439b
+20205b46
+70479500
+6fe1c79a
+67e1c34d
+20405b6b
+58000005
+e7e08006
+d8c047a0
+20405b72
+20207870
+da204349
+efe08011
+207a0000
+98c0a200
+efe08006
+c1008000
+20205b6c
+d8a04354
+df200013
+20407cda
+20202969
+20405b7b
+6fe143ef
+c283db81
+c28042fc
+20205c1a
+58000000
+67e4484f
+e7e20005
+70486000
+70429a00
+20600000
+20405b21
+6fe143ef
+c28042fc
+202054cd
+44c3c010
+2040614d
+2040553d
+20406110
+204061b1
+2040611e
+2040328e
+20403531
+20405fdd
+2040572c
+20405b9b
+20405bab
+20405bce
+20405bd3
+20405be1
+20405bee
+20405be4
+20405bfb
+20405bfe
+204056b6
+20405c0e
+20205c05
+6fe44713
+c29bdb9e
+20600000
+6fe0c97f
+c1808000
+da60497c
+da405ba3
+202042e0
+6fe0c666
+c1000000
+6fe44713
+c3830000
+d8e00006
+20405f00
+204042d0
+20205c15
+6fe0c666
+c0005bb1
+6fe44713
+c41a8000
+6848c727
+20205bb4
+6fe44713
+c4190000
+6848c728
+6048c97e
+20405888
+1fe17e07
+6848c97e
+98467c00
+2022dbc0
+6fe0c4eb
+67e0c981
+6fe0c980
+c1000000
+70498000
+20600000
+20405bc5
+6fe0c980
+c1008000
+70498001
+20600000
+da406047
+da604981
+6fe0c666
+c00042e0
+da405ba3
+204042e0
+6fe0c981
+c000def2
+20600000
+da604790
+da405bd1
+202042e7
+20405c39
+202054cd
+da604845
+da405bd9
+204042e0
+6fe0c845
+c000c313
+20600000
+6fe0c78f
+c07fda9a
+6fe0c77f
+243a5f1b
+6fe44713
+c299dc1a
+c29f603f
+202054cd
+da604844
+da405b0e
+202042e0
+6fe0c794
+207a0000
+da604796
+da405be9
+202042e0
+6fe0c795
+247a0000
+6fe0c2fc
+c1800000
+20202fcd
+6fe44713
+c39d8000
+da6047c0
+da405bf3
+202042e0
+6fe147be
+67e147c0
+20205b55
+6fe0c843
+c3810000
+20405aef
+d8e00000
+20205af8
+da604792
+da4054cd
+202042e0
+da60477e
+da405c01
+202042e0
+6fe0c96b
+67e0c0c0
+70477d01
+20600000
+da604781
+da405c08
+202042e7
+6fe0c666
+c0005ff2
+20205aad
+6fe14725
+67e14781
+20600000
+da6046f3
+da405c11
+202042e0
+20405ca6
+6fe0c793
+243a5ed1
+20600000
+280ffe26
+2040e018
+20405aad
+20405b21
+20205c1a
+44c44011
+204061ab
+6fe144e9
+2feffe0b
+2040dc3e
+20405aa8
+6fe144e9
+c285dc2a
+6fe44713
+c3045c2a
+68494695
+18408401
+60494695
+604942dc
+180a7e00
+67e0c2db
+6fe1c797
+67e1c2de
+2040432d
+6fe14638
+67e14790
+58000000
+67e14781
+67e147c0
+67e0c845
+67e0c792
+67e0c956
+d8e00002
+20405f00
+20405ef4
+20205b62
+44c4c011
+d8e00006
+20405f04
+70479200
+20205c3e
+58000000
+67e0c845
+67e14790
+20207876
+44c54011
+6fe44713
+c4010000
+d8e00002
+20405f04
+20405c4a
+20405c59
+20205ca3
+6fe08032
+c01a5c4d
+20600000
+67e0c95a
+6fe30178
+67e3495b
+6fe3c95a
+d8c04667
+df200003
+e8438006
+98467c00
+2022dc69
+18c08c16
+c2005c53
+20600000
+da204667
+6fe0c666
+1fe0ffff
+1feffe1d
+9a20a200
+6fe08032
+e7e08011
+c01a5c62
+20600000
+6fe30178
+e7e30005
+d8c0428a
+20407c8f
+6fe342db
+e7e30005
+20600000
+18c08dfa
+18c20a00
+684b495b
+18408403
+e0430005
+20600000
+da204667
+6fe0c666
+c1000000
+1fe0ffff
+1feffe1d
+9a20a200
+efe08011
+67e0c3f3
+c01a5c79
+20600000
+efe30006
+67e34116
+d8a0428a
+20407c8f
+efe30006
+67e342db
+20600000
+44c5c011
+6fe1468e
+d840aa55
+98467c00
+2022dc8f
+6049468e
+20405c9c
+6fe0c9a1
+67e0c666
+6fe245e4
+67e245e8
+67e2458f
+6fe0c651
+67e0c690
+20600000
+20405c94
+6fe24691
+67e245e8
+67e2458f
+20600000
+6fe44713
+c4078000
+6fe149fa
+1fe22400
+20405e51
+6fe0c9d4
+205a5c8c
+20600000
+6fe342db
+67e3466e
+1fe0ff00
+67e3467b
+1fe0ff00
+67e34688
+20600000
+6fe0c6f4
+67e0c6f3
+20600000
+44c64011
+6fe44713
+c289dcb1
+c2895cb9
+c28a5cc0
+20600000
+44c6c011
+6fe44713
+c289dcb5
+c28a5d3c
+20600000
+d8400080
+da204666
+da400000
+20206cd3
+d8400001
+da204690
+da40005a
+20206cd3
+20406c20
+20405d7b
+20405d90
+20405d75
+20405d93
+20405d82
+202055f6
+20405cc3
+20405ce5
+20205d26
+6a4149e2
+1a422600
+20405dc0
+6fe0c9a1
+203a5ccf
+67e0c9a0
+1a60a601
+6fe149e4
+9a667c00
+24610000
+1a622400
+20205cc5
+6fe0c9a0
+1fe17ef0
+203a5cd8
+6fe0c666
+67e0c9a2
+df200001
+1a622400
+da2049a2
+20206b45
+6fe0c9a0
+6848c666
+98467c00
+20628000
+18520400
+9840fe00
+67e0c9a2
+1a627e00
+684949e2
+98467c00
+2022dcd4
+1a60a7ff
+20205cd4
+6fe0c666
+c0005cea
+c000dcfe
+c0015d12
+20600000
+6a4149e6
+1a422600
+20405e29
+6fe249da
+203a5cf6
+67e249d6
+1a60a604
+6fe149e8
+9a667c00
+24610000
+1a622400
+20205cec
+6fe249d6
+684a4691
+98467c00
+20628000
+df200004
+da204691
+1a622400
+20206b45
+6a4149ea
+1a422600
+20405de1
+6fe349a9
+203a5d0a
+67e349a3
+1a60a606
+6fe149ec
+9a667c00
+24610000
+1a622400
+20205d00
+6fe349a3
+684b4668
+98467c00
+20628000
+df200006
+da204668
+1a622400
+20206b45
+6a4149f2
+1a422600
+20405e05
+6fe349c1
+203a5d1e
+67e349bb
+1a60a606
+6fe149f4
+9a667c00
+24610000
+1a622400
+20205d14
+6fe349bb
+684b4675
+98467c00
+20628000
+df200006
+da204675
+1a622400
+20206b45
+6fe0c666
+c1000000
+6a4149fe
+1a422600
+20405e3d
+6fe149e0
+203a5d34
+67e149de
+1a60a602
+6fe14a00
+9a667c00
+24610000
+1a622400
+20205d2a
+6fe149de
+68494695
+98467c00
+20628000
+df200002
+da204695
+1a622400
+20206b45
+6fe44713
+c4078000
+6a4149fa
+1a422600
+20405e51
+6fe0c9d4
+203a5d4a
+67e0c9d3
+1a60a601
+6fe149fc
+9a667c00
+24610000
+1a622400
+20205d40
+6fe0c9d3
+1fe17ef0
+203a5d53
+6fe0c690
+67e0c9d5
+df200001
+1a622400
+da2049d5
+20206b45
+6fe0c9d3
+6848c690
+98467c00
+20628000
+18520400
+9840fe00
+67e0c9d5
+1a627e00
+684949fa
+98467c00
+2022dd4f
+1a60a7ff
+20205d4f
+20406cbc
+6fe44713
+2feffe09
+2440ecc4
+20405d66
+20205c80
+d8400080
+da204666
+da400000
+20206ce1
+d8400001
+da204690
+da40005a
+20206ce1
+20406c20
+20405d7b
+20405d75
+20406c4d
+20405d82
+20405c80
+202055f6
+580046e6
+d8404666
+98460400
+6fe1c6ec
+da204666
+20600000
+700678ab
+2040705b
+20406c26
+da2046ef
+68488678
+20405d84
+2020705b
+700678b9
+20205d7c
+e0408011
+1ff10400
+e0408005
+1fec8400
+e0408005
+e7e08005
+1a227e00
+67f10084
+58000000
+67f10088
+70800602
+20206be0
+6fe1c6ec
+67e1c419
+20206bfa
+1fe22600
+1a227e00
+1fe0fffc
+1fe22400
+efe20012
+67e246ef
+1a627e00
+20406c3c
+6fe246ef
+e7e20012
+20600000
+6fe44713
+c4090000
+20405d82
+204069e0
+6848c421
+20406ef3
+6848c426
+202055b1
+20405e43
+20405db4
+20405dcc
+20405e2f
+df200002
+6fe14a02
+1fe22400
+da20468e
+20406b74
+20405c80
+df200002
+da20468e
+6a414a02
+20206b45
+6a4149e2
+1a422600
+20405dc0
+6fe0c9a1
+203a5dc3
+67e0c9a0
+1a60a601
+6fe149e4
+9a667c00
+24215dc3
+1a622400
+20205db6
+df200001
+da2049a1
+20206b74
+6fe0c9a0
+1fe20400
+1fe17ef0
+203a5dc9
+1ff1fe00
+20205dca
+18427e00
+67e0c666
+20600000
+6fe0c666
+c0005e1d
+c000ddd1
+c0015dd3
+20600000
+20405dd5
+20205de7
+20405df9
+20205e0b
+6a4149ea
+1a422600
+20405de1
+6fe349a9
+203a5de4
+67e349a3
+1a60a606
+6fe149ec
+9a667c00
+24215de4
+1a622400
+20205dd7
+df200006
+da2049a9
+20206b74
+6fe349a3
+67e34668
+20600000
+6a4149ee
+1a422600
+20405df3
+6fe349b5
+203a5df6
+67e349af
+1a60a606
+6fe149f0
+9a667c00
+24215df6
+1a622400
+20205de9
+df200006
+da2049b5
+20206b74
+6fe349af
+67e3466e
+20600000
+6a4149f2
+1a422600
+20405e05
+6fe349c1
+203a5e08
+67e349bb
+1a60a606
+6fe149f4
+9a667c00
+24215e08
+1a622400
+20205dfb
+df200006
+da2049c1
+20206b74
+6fe349bb
+67e34675
+20600000
+6a4149f6
+1a422600
+20405e17
+6fe349cd
+203a5e1a
+67e349c7
+1a60a606
+6fe149f8
+9a667c00
+24215e1a
+1a622400
+20205e0d
+df200006
+da2049cd
+20206b74
+6fe349c7
+67e3467b
+20600000
+6a4149e6
+1a422600
+20405e29
+6fe249da
+203a5e2c
+67e249d6
+1a60a604
+6fe149e8
+9a667c00
+24215e2c
+1a622400
+20205e1f
+df200004
+da2049da
+20206b74
+6fe249d6
+67e24691
+20600000
+6fe0c666
+c1000000
+6a4149fe
+1a422600
+20405e3d
+6fe149e0
+203a5e40
+67e149de
+1a60a602
+6fe14a00
+9a667c00
+24215e40
+1a622400
+20205e33
+df200002
+da2049e0
+20206b74
+6fe149e0
+67e14695
+20600000
+6fe44713
+c307dc8c
+6a4149fa
+1a422600
+20405e51
+6fe0c9d4
+203a5e54
+67e0c9d3
+1a60a601
+6fe149fc
+9a667c00
+24215e54
+1a622400
+20205e47
+df200001
+da2049d4
+20206b74
+6fe0c9d3
+1fe20400
+1fe17ef0
+203a5e5a
+1ff1fe00
+20205e5b
+18427e00
+67e0c690
+20600000
+44c74011
+2040620e
+204078aa
+204056bb
+2040580e
+20405e66
+20405eb6
+20405ee7
+2020561c
+6fe44713
+c294de6b
+c29bde6b
+20600000
+70497503
+20405e6d
+20205e7e
+44c7c011
+6fe0c655
+c17f8000
+da200000
+70497706
+6848c655
+20405e81
+67e0c975
+6fe0c654
+c07fde7c
+202058df
+20405e6d
+1a227e00
+c2835ea4
+20205e97
+6848c655
+204055b5
+1a227e00
+c2835ea2
+20205e97
+6fe44713
+c296de8d
+6fe0c975
+1fe22600
+6fe0c654
+c07fd931
+6fe0c97b
+243a5e8a
+20205e8f
+70497f00
+70497500
+20600000
+6fe0c975
+20205925
+20406ee6
+6848c654
+2020de8d
+6848c654
+20406ef7
+6848c655
+6fe0c975
+20205925
+6fe0c97f
+c1000000
+70497f00
+6fe44713
+c39a0000
+6fe0c97c
+1fe67c14
+24415ec6
+6fe0c4eb
+67e0c97c
+20600000
+20405eae
+20740000
+6fe0c97f
+c1008000
+70497f01
+6fe44713
+c29a5ba3
+6fe0c845
+207a0000
+6fe0c63c
+67e0c845
+20600000
+78547c00
+6fe44713
+c3968000
+6fe0c96f
+207a0000
+6fe0c970
+207a0000
+20207dba
+44c84012
+6fe44713
+c4150000
+6848c65a
+204055b5
+6848c65a
+20406ee6
+2020dec2
+6fe0c666
+c1008000
+70466601
+20205aaa
+6fe0c666
+c1000000
+70466600
+20206018
+44c8c012
+6fe0c71b
+c1008000
+20405ed3
+6048c666
+20405eea
+20405aaa
+204042d0
+20405eec
+70479301
+20205ca3
+20405eea
+20206ca3
+6848c666
+18408401
+6fe44713
+c288deda
+18467c02
+24415ee1
+20600000
+6fe0c71b
+1fe0ffff
+98467c00
+24415edf
+20600000
+d8400000
+20600000
+d8400001
+20600000
+d8400001
+da204666
+da400000
+20206cd3
+6fe44713
+c41a0000
+20205e6b
+d8e00000
+20205f00
+d8e00000
+20205f04
+d8e00003
+20205f00
+d8e00003
+20205f04
+d8e00005
+20205f00
+d8e00005
+20205f04
+d8e00015
+20205f00
+d8e00018
+20205f00
+d8e0000e
+20205f00
+d8e0000c
+20205f00
+d8e0001c
+20205f00
+6fe44713
+f9207e00
+67e44713
+20600000
+6fe44713
+f93ffe00
+67e44713
+20600000
+58000000
+67e4472a
+67e44733
+6fe0c729
+c0015f12
+c001df14
+c0025f19
+58070008
+67e4472b
+20600000
+58040005
+20205f10
+58022303
+67e4472a
+58000003
+67e44733
+20600000
+5800cd03
+20205f15
+44c94012
+6fe0c77f
+1fe0ffff
+67e0c77f
+6848c666
+18467c01
+2442ded3
+6048c666
+20405ee3
+20405c59
+202054a0
+44c9c012
+6fe0c957
+c1018000
+6fe44713
+c41c0000
+6fe24847
+207a0000
+20405fcd
+58000003
+20405fc3
+205a5fbf
+245a5fc1
+58000002
+20405fc8
+205a5fbf
+6fe0c861
+c000df3c
+6fe44713
+c41c0000
+df200005
+d8a04861
+20207ca1
+20405f50
+6fe14862
+67e1070b
+6fe14847
+67e1070d
+20405f89
+6fe1070b
+67e14862
+6fe1070d
+67e14847
+6fe14864
+67e1070b
+6fe14849
+67e1070d
+20405f91
+6fe1070b
+67e14864
+6fe1070d
+67e14849
+20600000
+6fe44713
+c41c8000
+44ca4012
+6fe14862
+67e10712
+20405f64
+67e14862
+6fe14847
+67e10712
+20405f72
+67e14847
+6fe14864
+67e10712
+20405f64
+67e14864
+6fe14849
+67e10712
+20405f72
+67e14849
+20600000
+6fe08713
+203a5f67
+20205f6c
+6fe08712
+20405f7f
+67e08712
+6fe10712
+20600000
+6fe08712
+20405fbb
+20405f7f
+205a7dc8
+20405fb7
+20205f6a
+6fe08713
+203a5f75
+20205f79
+6fe08712
+20405f84
+67e08712
+20205f6a
+6fe08712
+20405fbb
+20405f84
+205a7dc8
+20405fb7
+20205f6a
+1feffe04
+1fe6fc05
+20407d62
+1807fe00
+20600000
+1feffe0c
+1fe6fc0a
+20407d62
+1807fe00
+20600000
+6fe1070b
+6849070d
+9840fe00
+6848c866
+9840fe00
+1fe10401
+6048c866
+20205f99
+6fe1070b
+6849070d
+9840fe00
+6848c867
+9840fe00
+1fe10401
+6048c867
+20205f99
+67e1870f
+2feffe10
+2020dfa3
+6fe08710
+c07fdfaa
+6fe0870f
+1fe37e00
+67e1070b
+67e1070d
+20600000
+6fe08710
+c0005fa7
+6fe1870f
+20205f9f
+70071100
+6fe0870f
+20205f9f
+6fe0870f
+20405fb5
+67e0870b
+67e0870d
+203a5fb3
+580000ff
+67e0870c
+67e0870e
+20600000
+58000000
+20205fb0
+20405fbb
+1fe37e00
+20405fbc
+1fe67e00
+67e08712
+20600000
+1fe67e00
+67e08684
+6fe08684
+20600000
+70486100
+20600000
+70486101
+20600000
+9a267c00
+24217dc8
+9a467c00
+24217dc8
+20207dca
+9a267c00
+24610000
+9a467c00
+24610000
+20207dca
+6fe14847
+20405fd4
+1fe22200
+6fe14849
+20405fd4
+1fe22400
+20600000
+67e1070d
+6fe0870e
+c07fdfda
+6fe0870d
+1fe17eff
+20600000
+6fe1070d
+1fe67e00
+20205fd8
+da60461f
+da405fe0
+202042e0
+6fe24613
+67e245af
+70477d01
+20600000
+6fe0c740
+c0005fec
+c000dfee
+c0015fe9
+c001dff0
+580ea600
+67e24613
+20600000
+5805e740
+20205fea
+580927c0
+20205fea
+58124f80
+20205fea
+44cac012
+70460000
+20403647
+5fffffff
+67e245af
+58000000
+67e3c846
+70473f01
+204059ed
+204054dc
+2020622b
+6fe0c73f
+245a6001
+70473f00
+20600000
+2040594c
+6fe44713
+c41e0000
+6fe0c64a
+d8400040
+20406f21
+6fe0c64b
+d8400040
+20206f21
+2040600e
+6fe0c73f
+243a6235
+20203610
+6fe245e8
+684a45e4
+98467c00
+2022e013
+20206016
+70414300
+704141aa
+20600000
+704143ff
+20600000
+793f8026
+7045fc00
+d8e00001
+20205f04
+6fe44713
+c308e02a
+20406195
+204054ac
+20346067
+6fe44713
+c298602f
+c318e02f
+20405883
+1a217e07
+6848c728
+98467c00
+2022e047
+2020602f
+6fe0c77f
+243a5f1b
+20600000
+204054ac
+20346038
+70466600
+6fe14721
+67e145de
+7045e202
+20203534
+6fe145d6
+67e145de
+7045e204
+20203534
+6fe0c666
+c0006067
+20405aa8
+20406018
+70466601
+20405c6f
+202054a0
+204054ac
+203454cd
+20205c1a
+204054ac
+20740000
+6fe44713
+c29f5ca3
+20600000
+20406195
+7045e200
+d8e00001
+20405f00
+58000000
+67e145de
+20405c39
+70458901
+6fe44713
+c30b3291
+70458902
+20203291
+6fe0c600
+243a5ff2
+6fe0c5e2
+c001605f
+c002606b
+c001e070
+20406018
+6fe0c77f
+243a5f1b
+6fe0c666
+c00054cd
+20600000
+6fe44713
+c29f6034
+c2986034
+c31d6067
+6fe24691
+684a46e6
+98467c00
+2022e047
+6fe145dc
+67e145de
+7045e203
+20203534
+6fe44713
+c31f6059
+6fe0c71b
+c000e059
+2020603b
+6fe44713
+c31f6059
+c289e059
+c2896059
+20206035
+6fe2458f
+67e245e8
+67e24691
+2040355a
+20405c0b
+2040618e
+20405a73
+70477d00
+7045fc00
+7045e200
+6fe245e8
+6fe245e4
+98467c00
+20628000
+20206042
+20405a73
+20405a84
+2040618e
+20405c0b
+d8e00001
+20405f04
+58000000
+67e145d8
+67e145de
+67e0c5fc
+67e0c860
+67e0c5e2
+6fe2458f
+67e245e8
+67e24691
+20205ca3
+20407de2
+202023fd
+44cb4012
+c6930000
+20405601
+24740000
+6fe0c77c
+70477c00
+245a6094
+6fe44713
+c30b60a1
+6fe0c96c
+243a60b6
+20405a74
+6fe0c589
+c280e0b0
+6848c51a
+6fe0c846
+9841fe00
+67e0c846
+6848c51f
+6fe0c84b
+9840fe00
+67e0c84b
+6848c520
+6fe0c84c
+9840fe00
+67e0c84c
+70458901
+da200007
+da404846
+6fe1484b
+207a0000
+202036db
+70458902
+da200009
+6fe0c96d
+243a60bc
+da404733
+20600000
+da40472a
+20600000
+58000000
+67e1c6f8
+20600000
+6fe44713
+c4070000
+6fe0c77d
+207a0000
+6fe0c602
+207a0000
+6fe0c6f5
+1fe0fe01
+1fe17e03
+67e0c6f5
+247a0000
+7046f600
+44cbc012
+6fe0c6f6
+1fe0fe01
+67e0c6f6
+1fe67c08
+242160d9
+2040357f
+20403651
+242c60df
+2437e0df
+204060f2
+204060e9
+2040357b
+6fe0c6f7
+1fe0fe01
+67e0c6f7
+c00860e1
+20600000
+20403222
+202060cd
+7046f700
+6fe0c6f8
+c3800000
+79207e00
+67e0c6f8
+6fe14723
+67e14781
+202059ed
+6fe0c602
+203a60be
+7046f700
+6fe0c6f8
+c4000000
+793ffe00
+67e0c6f8
+20405c0b
+2020594c
+2040366e
+6fe0c4f8
+2fe1f008
+24608000
+6fe0c4f9
+c07fdff2
+20600000
+6fe0c793
+247a0000
+20405e78
+204060fe
+20203662
+d8e0000c
+20407cef
+247a0000
+20406106
+2040572c
+d8e0000c
+580000a0
+20207ce1
+6fe44713
+c4140000
+202056bb
+6fe0c666
+c0802421
+6fe0c5ca
+207a0000
+70804202
+708130f8
+20600000
+6fe0c65c
+c17f8000
+6fe14781
+207a0000
+6fe14725
+68494781
+98460400
+6fe1470f
+98467e00
+2021611c
+6848c65c
+202061e5
+6848c65c
+202061e4
+da604711
+da406121
+202042e0
+44cc4013
+6fe0c957
+c001e131
+c005e131
+6848c690
+18408402
+18467c03
+20416134
+24416138
+18427e00
+9fe0fe00
+67e0c70c
+7046fe04
+20406185
+7046fc01
+20206192
+6848c690
+18408401
+20206127
+6fe44713
+c40e0000
+18408401
+20600000
+184085fd
+20600000
+6fe0c661
+c17f8000
+6fe14790
+247a0000
+6fe145d8
+247a0000
+6fe145de
+247a0000
+6fe0c701
+247a0000
+6fe0c712
+203a6121
+67e0c711
+20600000
+78547c00
+6fe0c6fe
+1fe67c04
+24628000
+20207dba
+6fe44713
+c4118000
+c4020000
+6fe14790
+247a0000
+6fe145d8
+247a0000
+6fe145de
+247a0000
+6fe0c701
+247a0000
+20406148
+20740000
+6fe0c70e
+203a6173
+6848c709
+18408401
+6048c709
+6fe0c707
+98467c00
+2441616a
+6fe0c708
+98467c00
+2421616e
+6fe44713
+c29261d9
+c29361d9
+6848c660
+202061e4
+70470901
+6fe0c70e
+1fe0ffff
+67e0c70e
+6fe44713
+c29261eb
+c29361eb
+6848c660
+202061e5
+6fe44713
+c291616e
+2040617e
+2020615c
+7046fb00
+204061fd
+7046fe00
+6fe0c707
+1fe37e00
+67e0c708
+20600000
+6fe0c70d
+67e0c70e
+20600000
+6fe0c6fe
+c000e188
+c001618a
+c001e18c
+6fe0c705
+67e0c706
+20600000
+6fe0c702
+20206186
+6fe0c703
+20206186
+6fe0c704
+20206186
+44ccc013
+6fe0c700
+67e0c701
+7046fc00
+7046fd00
+7046fb01
+20600000
+44cd4013
+6fe0c666
+c1800000
+204061ae
+7046fe01
+20406188
+6fe0c6ff
+207a0000
+6fe0c70a
+202061a9
+6fe0c666
+c1000000
+204061ae
+6fe44713
+c4108000
+7046fe03
+2040618c
+6fe0c6ff
+207a0000
+6fe0c70b
+67e0c70c
+20600000
+7046ff00
+7046fe02
+2040618a
+7046fb01
+7046fc01
+202061d8
+6fe0c6fb
+207a0000
+6fe0c6fc
+c000e1bd
+6fe0c701
+203a61ba
+1fe0ffff
+67e0c701
+202061d9
+7046fb00
+2040617e
+202061eb
+44cdc013
+6fe0c6fe
+207a0000
+c00261c5
+202061c2
+6fe0c6ff
+c000e1c5
+202061c7
+6fe0c70c
+203a61e6
+da604706
+da4061ca
+202042e0
+6fe0c6fe
+c00261d2
+6fe0c6ff
+c000e1d2
+20406181
+6fe0c6fd
+c000e1e8
+202061d6
+6fe0c70c
+1fe0ffff
+67e0c70c
+202061ce
+6fe0c6fe
+c0026208
+7046fd01
+44ce4013
+6fe0c666
+c00061df
+c000e1e1
+c00161e3
+20600000
+6848c65d
+202061e4
+6848c65e
+202061e4
+6848c65f
+20206ef7
+20206ef3
+7046fb00
+7046fe00
+6fe0c6fe
+c0026202
+7046fd00
+44cec013
+6fe0c666
+c00061f1
+c000e1f5
+c00161f9
+20600000
+6848c65d
+6fe44713
+c31061e5
+20206f0f
+6848c65e
+6fe44713
+c31061e5
+20206f0f
+6848c65f
+6fe44713
+c31061e5
+20206f0f
+204061f1
+204061f5
+204061f9
+2040616e
+20206202
+7046fd00
+6fe44713
+c292e1ea
+c29361ea
+6848c661
+202061e5
+7046fd01
+6fe44713
+c292e1d8
+c29361d8
+6848c661
+202061e4
+6fe44713
+c4020000
+6fe0c709
+6848c708
+1fe67c02
+2021621b
+6fe0c666
+c0006218
+70409401
+20600000
+6fe44713
+c38c0000
+202036ca
+6fe0c666
+c00036db
+70409400
+20600000
+6fe08009
+202035cb
+2040621f
+202036e8
+6fe0c843
+2fe00603
+2420fdc8
+2040432b
+20207dca
+6fe144e9
+c284e223
+20600000
+204036b4
+24740000
+70477c01
+204036be
+70477200
+204062aa
+6fe0c73f
+245a54dc
+6fe245af
+20203622
+6fe0c77b
+203a3616
+204036b4
+24740000
+6fe0c772
+70477200
+1fe67c00
+2422e25c
+68494622
+18467c00
+2022e252
+6fe24767
+203a6252
+684a4751
+98460400
+604a4777
+24216255
+6fe1c608
+98467e00
+24216260
+d8400600
+98467c00
+24216260
+67e24773
+20406259
+6fe24773
+20407d25
+604a40a9
+2020241e
+20406259
+6fe1c608
+2020624c
+18460400
+6fe1c608
+9840fe00
+2020624c
+58000000
+67e24777
+20600000
+6fe24767
+684a4777
+9840fe00
+20206242
+70477201
+20600000
+20406264
+20205ffd
+6fe0c77b
+207a0000
+6fe0c618
+c000e2a6
+6fe0c760
+203a62a6
+1b227e00
+684b4761
+67e34761
+20407d10
+67e24767
+6fe0c772
+247a0000
+6fe14622
+247a0000
+6fe24767
+684ac76b
+9840fe00
+67e2c76b
+6848c760
+6fe0c770
+98467c00
+2022e27e
+18408401
+6048c760
+20600000
+70476001
+d8400000
+6fe2c76b
+604ac76b
+6848c770
+9846fc00
+20407d62
+1807a200
+6fe24751
+6848c771
+98460400
+184085d8
+1a227e00
+98467e00
+20216299
+1fe67e00
+1feb7e00
+6849c608
+98408400
+44cf4013
+6fe1c75d
+da201800
+9a20fe00
+98467c00
+242162a4
+6049c608
+20600000
+1feb0400
+6fe1c608
+98460400
+44cfc013
+6fe1c75d
+da201800
+9a267e00
+98467c00
+202162a4
+6049c608
+20600000
+67e1c608
+20600000
+70476001
+1b227e00
+67e34761
+20600000
+58000000
+67e0c760
+67e2c76b
+20600000
+20407396
+20758000
+58006327
+67e143db
+580062d9
+67e143dd
+5800638a
+67e143df
+5800630e
+67e143e3
+58006365
+67e14524
+204062c2
+44d04014
+20406396
+6fe0c51a
+c00062d0
+6fe0c51b
+67e0c4ec
+202063a1
+5800632b
+67e143d5
+58006329
+67e143d7
+58006340
+67e1451f
+5800639a
+67e14521
+70415e07
+20402969
+2040638d
+20406ff7
+204078ad
+202077ac
+7044ecff
+70451c01
+20206340
+6fe0c51c
+c0014308
+204069b9
+6fe0c441
+243a4308
+2020430a
+1a627e00
+c00a62e2
+c00ae2e6
+c01fe2e9
+c02062ef
+c00863b6
+c01662f5
+c016e300
+20600000
+2040632d
+58000000
+67e144f8
+20204325
+204078ad
+7044f100
+20206340
+204078ad
+7044f101
+6fe44502
+67e442d3
+2040432b
+20202e93
+6fe1433c
+c1000000
+6fe4450a
+207a0000
+67e442d3
+20202e93
+6fe0c51a
+c1000000
+6fe0c51c
+c1808000
+204062fb
+20204323
+7046bd01
+df20000b
+d8a046be
+d8c046a7
+20207cda
+6fe0c51a
+c1000000
+6fe0c51c
+c000e305
+202063b2
+6fe0c6bd
+c1808000
+7046bd00
+6fe144e9
+c284c325
+df20000b
+d8c046be
+d8a046a7
+20207cda
+20406311
+20406318
+20206322
+da604518
+da406314
+202042e7
+70451c02
+20404325
+2040634e
+2020639e
+da6046ca
+da40631b
+202042e0
+6fe144e9
+c284e39e
+6fe0c6a7
+c000e39e
+c002639e
+c002e39e
+20204327
+6fe0c51c
+c1808000
+da6044f8
+da406331
+202042e7
+20406376
+20207027
+20406f35
+2020701b
+20406f35
+2020739a
+6fe14514
+67e14516
+67e14518
+20204315
+6fe0c51c
+c1808000
+6fe144e9
+c3848000
+6fe14512
+67e14516
+67e14518
+6fe144f4
+204063c7
+20404321
+6fe244fe
+67e246aa
+6fe144e9
+c3858000
+20204317
+6fe0c51c
+c1808000
+6fe144f8
+684944f6
+604944f8
+247a0000
+6fe144f2
+204063c7
+20404321
+6fe244fa
+67e246aa
+6fe144e9
+c3858000
+20204317
+6fe144e9
+c284c31f
+2020632d
+20407dbc
+6fe144e9
+c284e355
+20600000
+6fe0c4f1
+207a0000
+20207dba
+20407dbc
+6fe144e9
+c3848000
+20207dba
+20206340
+78567c00
+6fe14516
+67e14518
+20406358
+2034635c
+20406351
+24740000
+20207dbe
+2040635d
+24760000
+1a227e00
+203a636c
+20404323
+da60452e
+2020636e
+20404325
+da604556
+dfe00005
+98effe00
+9a60a600
+efe08013
+207a0000
+20406382
+1a60a601
+20206371
+6fe144e9
+c284e379
+20600000
+20402a28
+247a0000
+20406385
+24740000
+1fe0ffff
+1feffe05
+d840457e
+98408c00
+202063cb
+67e08670
+da200670
+202078b2
+da200670
+204078ca
+24740000
+6fe08670
+20600000
+6fe14398
+c00c62e9
+20600000
+7046c902
+58200008
+67e24502
+592c0005
+e7e20005
+7042e117
+5800001b
+67e14332
+20202a41
+df200028
+d8a0457e
+d8c094f9
+20207ccc
+da200000
+da6046b2
+204077ca
+2040634e
+6fe0c6c9
+67e0c6ca
+20600000
+58000000
+204063ad
+7044e401
+20407776
+20407780
+6fe0c6d0
+203a63aa
+6ff08132
+c28263b9
+6fe144e9
+c3860000
+20204327
+68494430
+e7e08002
+efe08005
+67e0c4eb
+20600000
+6fe14430
+efe0803f
+c1800000
+20204327
+68494430
+efe08002
+c000e3c1
+58000001
+68494430
+e7e08002
+18408c02
+efe08006
+e7e0802b
+efe10006
+20207d79
+58000002
+204063ad
+18408c05
+efe10006
+203a4327
+20207d79
+67e140a4
+1fe0fffc
+67e14389
+20600000
+efe08006
+1fe22200
+e8410006
+20407c6d
+20402dee
+1a227200
+20407c67
+20207cda
+580093c0
+67e142f7
+20600000
+580046d2
+67e142f7
+20600000
+6fe146cb
+67e14526
+6fe0c6cd
+67e0c6a9
+67e0c6b4
+6fe0c6ce
+67e0c51a
+6fe0c6cf
+67e0c51b
+58000002
+67e1452e
+67e14533
+58000006
+67e14556
+67e1455b
+58000007
+67e14538
+58000008
+67e14560
+5800451c
+67e14430
+58201400
+67e1c51c
+70409401
+58000100
+67e140a4
+7040a608
+7040c005
+7040c102
+58000096
+67e144fa
+e7e10005
+58000296
+67e144fe
+e7e10005
+38000010
+38048008
+380ac000
+380c0004
+67e4450a
+7044ee01
+580046a7
+67e144ef
+58000000
+67e146a7
+380001a0
+38040068
+38080000
+380c0000
+67e446aa
+58000301
+67e146b2
+380001a0
+380400e8
+38080000
+380c0000
+67e446b5
+5800000e
+67e144f2
+58000140
+67e144f4
+67e14389
+58000050
+67e144f6
+70439307
+70438800
+380000fb
+3806c212
+3808800f
+380c0021
+67e443c0
+38000bb8
+380402ee
+67e24512
+580045d8
+67e143fb
+58002001
+67e145d8
+7043481f
+38010102
+380480c1
+38098120
+380c640c
+67e4c349
+380003c1
+e7e10005
+7043681f
+3802090d
+38074c15
+380a8532
+380dd1d5
+67e4c369
+38026574
+3804001c
+e7e18005
+58004523
+67e1442c
+70452302
+580045fd
+67e143f8
+7043fa05
+6fe0c6d1
+c00063d3
+c000e3d6
+20600000
+6fe34ef4
+67e34526
+70452306
+58004523
+67e1442c
+20600000
+6fe3cef4
+67e3c526
+70452307
+58004523
+67e1442c
+20600000
+6fe44ef4
+67e44526
+70452308
+58004523
+67e1442c
+20600000
+6fe0cef3
+c0036442
+c003e448
+c004644e
+20600000
+44d0c014
+6fe44f1a
+67e44512
+58000096
+67e144f6
+6fe3cf6a
+67e3c6a7
+6fe3cf71
+67e3c6b2
+6fe24f78
+67e244fa
+6fe24f7c
+67e244fe
+5800000e
+67e144f2
+58000140
+67e144f4
+67e14389
+6fe44f12
+67e4450a
+20600000
+20407396
+20758000
+20406454
+20406459
+58006484
+67e143db
+580064df
+67e143dd
+580066c5
+67e143df
+580064b5
+67e143e3
+58006505
+67e14524
+204062c2
+6fe14f97
+67e14332
+6fe4450a
+67e44502
+2040648e
+44d14014
+202062bd
+2040649b
+d8e00009
+20407cef
+247a0000
+58000020
+d8e00009
+20407ce1
+78547c00
+2040701b
+2020656e
+5800001f
+1feffe0a
+d8404c12
+9840a200
+1a20a203
+d8400062
+e0408011
+1a20a20b
+dfe00fff
+98467e00
+1ff27e00
+e7e10011
+20600000
+6fe144e9
+c284e4a0
+d8a045da
+df200023
+20207ca1
+20402a28
+247a0000
+204078fa
+207a0000
+684a49f6
+1c427e00
+98460400
+20628000
+242164ac
+6fe0c9f5
+98467c00
+20610000
+1c427e00
+67e249f6
+20406385
+24740000
+1fe0ffff
+1feffe0a
+d8404c12
+98408c00
+202063cb
+20406858
+2040676c
+2040675a
+204064bc
+204064d3
+20406311
+202064d9
+da604ed1
+da4064bf
+202042e0
+204078fa
+247a0000
+6fe148bc
+247a0000
+20406730
+203a64cd
+18e27e00
+2fe00e04
+2020e4cf
+18e27e00
+2fe00e01
+2020e4d1
+da604ec6
+20206371
+da604eda
+20206371
+da604edf
+20206371
+da604ee9
+20206371
+da604c0f
+da4064d6
+202042e0
+df20000a
+d8a04a04
+20207ca1
+da6046ca
+da4064dc
+202042e0
+6fe144e9
+c284e39e
+20204327
+1a627e00
+c00a64f4
+c00ae4ef
+c018e4e6
+c1200000
+c01966c8
+202062d9
+704ed201
+20406783
+6fe14f84
+67e14ebe
+68494f86
+58000fff
+98467e00
+67e14ec0
+20600000
+704ebb00
+704ed200
+204065ad
+20406500
+202062e6
+1c427e00
+67e249f6
+20406729
+202062e2
+78567c00
+6fe14516
+67e14518
+20406358
+2034635c
+20406351
+24740000
+20207dbe
+704ed500
+20600000
+18e27e00
+c1808000
+2020650c
+204064f8
+24760000
+1a227e00
+203a6537
+44d1c014
+6fe0cfaf
+243a6502
+704c1001
+20404323
+2040652c
+20406561
+20216500
+18e27e00
+6848ced5
+98467c00
+2442e526
+18e27e00
+67e0ced5
+6848ced8
+98467c00
+2022e524
+6fe0ced9
+243a651f
+20406732
+dfe0000a
+2020655a
+2040677f
+18e27e00
+c000e51c
+20406642
+202065f4
+704ed601
+202065f4
+44d24014
+6fe0ced9
+203a64c3
+18e27e00
+c000e4c3
+20600000
+dfe0000a
+98effe00
+da6049fa
+9a60a600
+1c427e00
+e7e20013
+1a60a604
+efe08013
+1fe0fe01
+e7e08013
+20600000
+44d2c014
+6fe0ced9
+205a654b
+dfe0000a
+98effe00
+da6049fa
+9a60a600
+e8420013
+18467c00
+20628000
+1c427e00
+98460400
+24417806
+1a608c09
+efe08006
+243a6566
+1a60a605
+1c427e00
+e7e20013
+20600000
+6fe0cfaf
+243a4323
+20204325
+1a608c04
+efe08006
+20206551
+2040656b
+6fe0ced9
+243a655d
+20406561
+20216500
+20406738
+18e27e00
+c001e740
+dfe0000f
+98effe00
+9a60a600
+20206371
+18e27e00
+c000e554
+c001e554
+20600000
+20407902
+e8408006
+98467e00
+1fe67c0a
+20600000
+704ed001
+2040656b
+da604abe
+dfe00003
+2020655a
+df20000a
+1a620a00
+20207ca1
+6fe148bc
+67e1442e
+204065be
+6fe1442e
+67e148bc
+d8e00000
+6fe0c523
+1fe27200
+da6049fa
+1f227e00
+67e10678
+1a627e00
+67e1068c
+18e27e00
+67e1067a
+204065b4
+6fe1068c
+1fe22600
+6fe1067a
+1fe20e00
+2040658b
+6fe1067a
+1fe08e01
+6fe1068c
+1fe0a60a
+6fe10678
+1fe27200
+c2006577
+20600000
+efe20013
+207a0000
+1fe20400
+1c427e00
+98460400
+24610000
+580009c4
+98467c00
+20610000
+1c427e00
+e7e20013
+1a60a609
+58000001
+e7e08013
+6fe0ced0
+207a0000
+704ed000
+44d34014
+20406755
+6fe0ced7
+c00065a2
+c000e5a5
+20600000
+204065af
+dfe00003
+2020655a
+18e27e00
+6848ced8
+98467c00
+2422e5a2
+6fe0ced9
+79407e00
+67e0ced9
+247a0000
+704ed900
+20204325
+da604aa9
+20406730
+207a0000
+da604bd0
+20600000
+1a60a405
+efe20012
+207a0000
+1fe20400
+1c427e00
+98460400
+24417806
+580003e8
+98467c00
+2020654e
+6fe1442c
+efe0803f
+207a0000
+58000000
+67e106f1
+20407003
+243477a5
+204077a3
+78547c00
+6fe0c388
+247a0000
+44d3c014
+6fe0ced7
+c000e5cf
+20406628
+204065dc
+20740000
+204065d5
+6fe106f1
+67e106f8
+7006fa00
+18000e00
+2020703b
+6fe0ced5
+6848ced8
+98467c00
+2022c323
+6fe0ced9
+243a4325
+20600000
+d8e00000
+da404ad3
+dfe00002
+98effe00
+9a40a400
+efe10012
+207a0000
+684906f1
+9842fc00
+2022e5e8
+18e08e01
+202065dd
+67e14adf
+20404323
+da604ae1
+dfe0000a
+98effe00
+9a60a600
+204065f0
+20206633
+2040677f
+efe08013
+207a0000
+20406642
+2040677f
+20406609
+20406614
+2040661e
+dfe00005
+20406382
+20406730
+207a0000
+7049f578
+dfe00006
+20206382
+6848ceba
+20406730
+207a0000
+6848cebd
+18408401
+6fe0ced6
+207a0000
+6848ceba
+704ed600
+20600000
+204065ff
+18427e00
+207a0000
+67e0cec3
+dfe00013
+20406382
+6fe0cec3
+1fe0ffff
+67e0cec3
+207a0000
+2020660d
+6fe0cebc
+207a0000
+67e0cec4
+dfe00020
+20406382
+6fe0cec4
+1fe0ffff
+67e0cec4
+207a0000
+20206617
+6fe0cebd
+207a0000
+67e0cec5
+dfe00021
+20406382
+6fe0cec5
+1fe0ffff
+67e0cec5
+207a0000
+20206621
+6fe14adf
+207a0000
+684906f1
+18467c00
+2022e636
+98467c00
+20628000
+60494adf
+6fe14ed3
+98467c00
+2042c325
+6fe106f1
+67e1442e
+20207dba
+704ed001
+20404325
+da604b1d
+204065f0
+58000000
+67e14adf
+7048ae32
+20406633
+6fe0c523
+1feff20a
+d8a049fa
+20207ca1
+44d44015
+6fe0ced7
+c000e647
+c000664d
+20600000
+18e27e00
+c002e676
+c0006693
+c002669b
+c00166be
+20600000
+efe08013
+c000e676
+c0016693
+c001e69b
+c00266be
+c002e654
+20600000
+20406730
+243a665e
+58000004
+1feffe0a
+d8404c12
+98408a00
+18a08a03
+6fe1cb27
+e7e18005
+20600000
+58000004
+1feffe0a
+d8404c12
+98408a00
+18a08a03
+6fe14ebe
+e7e18005
+18a08a07
+6fe14ec0
+1ff27e00
+1fed7e00
+e7e18005
+20600000
+6fe0cebc
+207a0000
+1fe0ffff
+67e0cebc
+dfe00062
+20600000
+d840000a
+20406730
+207a0000
+d8400007
+20600000
+20406671
+6fe14ebe
+98467c00
+2441666b
+24610000
+98467e00
+67e14ebe
+44d4c015
+6fe14ebe
+68494ec0
+184d0400
+18520400
+9840fe00
+67e1cb27
+20206654
+6fe14ebe
+d8400062
+98460400
+24610000
+18427e00
+6848cebc
+18467c03
+2022e690
+18408401
+6048cebc
+2020667c
+704ebc00
+dfe00000
+2020667c
+20406730
+245a6685
+20406671
+6fe14ebe
+9840fe00
+d8400fff
+20407d6c
+2020667c
+20406671
+6fe14ec0
+98467e00
+67e14ec0
+68494ec0
+20406730
+203a667d
+58000fff
+98467e00
+d8400062
+98460400
+2421667d
+58000fff
+98467e00
+6848cebd
+18467c05
+2022e6af
+18408401
+6048cebd
+202066bc
+704ebd00
+58000fff
+202066bc
+20406730
+203a66b0
+6fe0cebd
+203a66b0
+1fe0ffff
+67e0cebd
+58000fff
+d8400062
+98467e00
+9a20fe00
+67e14ec0
+2020667d
+20406671
+6fe14ec0
+9840fe00
+d8400fff
+98462200
+202166b2
+202066bc
+6fe14398
+c01262e9
+20600000
+da200017
+da400004
+204029fb
+58000006
+e7e08005
+58000001
+e7e10005
+5800ffff
+e7e10005
+58002800
+e7e10005
+d8c049e4
+20207c8f
+44d54015
+1a220c00
+efe18006
+67e1c397
+c003e704
+c000e725
+c00566f4
+c00666de
+20202b96
+efe10006
+67e106b5
+98002200
+68494398
+6fe14332
+98467c00
+2422ad50
+20406730
+243a66e9
+684949e0
+202066ea
+684949e2
+d8c048be
+20407c6d
+18427e00
+9a267e00
+24212e03
+1fe0fe01
+1fe67c17
+20212d59
+18007e17
+20202d59
+68494398
+6fe0c321
+c281e6f8
+20202d1d
+6fe14332
+98467c00
+2422ad1d
+20402dc7
+243466fe
+20202d46
+6fe14332
+98467c00
+2422ad1d
+d8c048be
+18007e17
+20202d2d
+44d5c015
+704eba05
+7049f401
+704ec201
+7049f5f0
+704ed10a
+704ed601
+204067bf
+6fe0ced2
+207a0000
+20406783
+d8400062
+6fe14f88
+da204ebe
+da404ebc
+2040671e
+d8400062
+6fe14f8a
+da204ec0
+da404ebd
+2040671e
+58000fff
+68494ec0
+98467e00
+67e14ec0
+20600000
+9846fc00
+20407d62
+1807fe00
+18070400
+e7e08012
+e0410011
+20600000
+18c08dfe
+efe08006
+c003672e
+20600000
+704eba01
+7049f400
+704ec200
+7049f50a
+20600000
+20406729
+202067bf
+6fe0c9f4
+20600000
+da604f24
+20406730
+207a0000
+7049f578
+da604b2b
+20600000
+da604a40
+20406730
+207a0000
+da604b67
+7049f50c
+18e27e00
+c1008000
+20600000
+44d64015
+6fe0cc0e
+79407e00
+67e0cc0e
+c0006749
+c000e747
+20600000
+20406750
+20206371
+2040674b
+20206371
+da604a6d
+20406730
+207a0000
+da604b94
+20600000
+da604bfa
+20406730
+207a0000
+da604c04
+20600000
+18e27e00
+c000e777
+c0016765
+c0026761
+20600000
+da604f9d
+da40675d
+202042e0
+704f9d04
+6fe0cc0e
+203a6761
+20206765
+704c0e00
+704f9d04
+da604ab5
+20206371
+704c0e01
+704f9d04
+da604aaf
+20206371
+704c0e00
+704f9d00
+20600000
+da604f9e
+da40676f
+202042e0
+704f9e02
+20406772
+20206371
+da604f9f
+20406730
+207a0000
+da604fa7
+20600000
+6fe0cfaf
+243a677c
+704faf01
+704f9e02
+20600000
+704faf00
+704f9e00
+20600000
+6fe0cebb
+247a0000
+704ebb01
+2020667d
+58000000
+67e3cebc
+20600000
+20406730
+c000e78e
+c00067a0
+20600000
+6fe0cf90
+c000e7a7
+c00067b9
+20600000
+6fe0cebc
+1feffe62
+1fe20400
+6fe14ebe
+9840fe00
+67e14f8c
+6fe0cebd
+1feffe62
+1fe20400
+6fe14ec0
+1fe22200
+58000fff
+9a267e00
+9840fe00
+67e14f8e
+20406730
+67e0cf90
+20600000
+6fe14ebe
+67e14f8c
+6fe14ec0
+67e14f8e
+20406730
+67e0cf90
+20600000
+6fe14f8c
+1fe6fc62
+20407d62
+1807fe00
+18070400
+67e0cebc
+18427e00
+67e14ebe
+6fe14f8e
+1fe6fc62
+20407d62
+1807fe00
+18070400
+67e0cebd
+58000fff
+98467e00
+67e14ec0
+20600000
+6fe14f8c
+67e14ebe
+6fe14f8e
+67e14ec0
+20600000
+2020683c
+20206823
+204067e2
+6fe14f93
+2040684f
+704f9b00
+6fe2cf8c
+704f9c00
+704f9900
+204067e6
+6fe0cf99
+c1000000
+202067c0
+6fe14f80
+1fe0fffb
+67e14f93
+20600000
+6fe14f93
+1fe0fffb
+67e14f93
+20600000
+6fe14f93
+1fe0fe05
+67e14f93
+20600000
+6fe14f95
+1fe0fe05
+67e14f95
+6fe14f95
+1fe20400
+6fe14f80
+98467e00
+d8400005
+98467c00
+24216806
+20600000
+6fe0cf9b
+c000e7cb
+c00067cf
+20600000
+da400000
+1a420400
+6fe14f8c
+a843fe00
+2440e7f6
+da400000
+1a420400
+6fe14f8e
+a843fe00
+2440e7f6
+da400000
+1a420400
+6fe0cf90
+a841fe00
+2440e7f6
+20600000
+6fe0cf99
+1fe0fe01
+67e0cf99
+20600000
+704f9901
+204067d7
+6fe14f95
+2040684f
+20406730
+1fe20400
+6fe0cf90
+a841fe00
+2040e821
+6fe0cf99
+c1000000
+202067fa
+44d6c015
+20406821
+20406730
+203a680b
+20206812
+6fe14f84
+67e14ebe
+68494f86
+58000fff
+98467e00
+67e14ec0
+202067be
+d8400062
+6fe14f88
+da204ebe
+da404ebc
+2040671e
+d8400062
+6fe14f8a
+da204ec0
+da404ebd
+2040671e
+58000fff
+68494ec0
+98467e00
+67e14ec0
+202067be
+704f9900
+20600000
+44d74015
+704f9b01
+204067c0
+6fe14f82
+1fe20400
+6fe14f93
+98467e00
+d8400000
+98467c00
+24610000
+6fe14f93
+1fe20400
+6fe14f80
+1fe0fffb
+98467e00
+6fe14f93
+67e14f95
+204067fa
+6fe14f95
+2442e84f
+704f9900
+204067e6
+6fe0cf99
+c1000000
+2020678a
+44d7c015
+704f9b01
+204067c0
+68494f82
+6fe14f93
+98467e00
+d8400000
+98467c00
+24610000
+68494f93
+6fe14f80
+98467e00
+d8400000
+98467c00
+24610000
+6fe14f93
+67e14f91
+20406786
+20206854
+44d84016
+1fe22400
+df200005
+da204f8c
+20206b74
+df200005
+da204f8c
+6a414f91
+20206b45
+da6048ae
+da4067be
+202042e0
+6fe10912
+e8408013
+1a60a601
+184d0400
+9842fe00
+1f222400
+df200008
+2feffe0f
+1fe3fe00
+2420e867
+68490914
+9842fe00
+c2006862
+1a427200
+c200685c
+67e10912
+20600000
+6fe0c43f
+d840003e
+20206f20
+6fe0c43f
+d840003f
+20206f20
+2040686f
+2040686c
+2020686f
+20406873
+2020686c
+20206873
+20406873
+20206875
+2020686c
+6fe0c440
+2020686d
+6fe0c440
+20206870
+2040687b
+2040687d
+2020687b
+20800000
+204070d7
+2040688d
+2040688f
+204068a3
+204068bf
+204068c3
+70070f01
+70070c04
+204068ce
+2020688b
+70804204
+20600000
+20406893
+20406897
+2040689b
+2020689f
+6fe0c4f1
+247a0000
+7044f107
+20600000
+6fe0c4f2
+247a0000
+7044f206
+20600000
+6fe0c4f3
+247a0000
+7044f309
+20600000
+6fe0c4f4
+247a0000
+7044f40a
+20600000
+58000c00
+67e10670
+58000eff
+e7e10005
+58000f00
+e7e10005
+58000fff
+e7e10005
+6fe40670
+20406d68
+20406d82
+d841c200
+20406d75
+6fe0c4f1
+d8400008
+20406f21
+6fe0c4f2
+d8400049
+20406f21
+6fe0c4f3
+d840000a
+20406f21
+6fe0c4f4
+d840000b
+20406f21
+d8400081
+60588060
+20207d76
+6fe0c4f5
+247a0000
+7044f50c
+20600000
+6fe0c4f5
+d8400010
+20406f21
+da200040
+20407055
+da200000
+da400000
+58000000
+2040707a
+d8e00000
+202070c0
+6ff10112
+1fe0a3fc
+24610000
+20406d96
+efe08003
+c000e8d6
+20407c95
+20206d9e
+efe10003
+67e10710
+d84003ff
+98410400
+60490709
+1feb7e00
+1fecfe00
+67e0870b
+efe08003
+1fe0ffff
+9a267c00
+20610000
+204068e4
+2020693f
+6fe0870b
+c01fe8e7
+2020692b
+44da4016
+6fe08709
+c000692a
+c000e8f2
+c00168f7
+c001e905
+c002690f
+c002e92a
+c0086920
+c00a6926
+2020692a
+70071200
+6ff10000
+67e10713
+df200003
+20206932
+efe10003
+67f10052
+20600000
+efe08003
+1fe20400
+67f08024
+efe08003
+98408400
+79207e07
+67f08023
+efe08003
+98408400
+1fe27200
+20600000
+204068fa
+efe08003
+67f08025
+98408400
+c2006906
+184104ff
+efe08003
+98467c00
+2422e91e
+2020692a
+df200020
+d8a04000
+d8400000
+efe08003
+e7e08005
+98408400
+c2006912
+184104ff
+efe08003
+98467c00
+2422e91e
+70802300
+2040692a
+20406dae
+20202001
+70802300
+2020692b
+efe08003
+1fe27200
+efe10003
+1fe20a00
+20406ddd
+2020692a
+6ff08060
+79207e04
+67f08060
+2020692a
+2020692f
+70071201
+20206930
+7007120c
+20206930
+70071200
+df200001
+20206932
+70070d0e
+1f20fe03
+67e0870e
+2040693b
+6fe1870f
+e7e18003
+d8c00712
+20406dc4
+20206da4
+20406da2
+6fe1870c
+e7e18003
+20600000
+20406d96
+18608603
+efe08003
+98608600
+20206d9c
+70411400
+20600000
+2035e94b
+58004450
+d8a04441
+98a67200
+20407ca1
+20600000
+d8e00000
+da400000
+18e67c07
+24610000
+aa2fffff
+2020e953
+20206957
+18427e00
+203a6957
+f9202400
+184085ff
+18e08e01
+2020694e
+6b01433f
+6d614341
+20407dbc
+2020695d
+44db4016
+204069a9
+243a235a
+204069b9
+df200008
+6848c441
+1f260e08
+a84fffff
+2020e96a
+20406971
+2421696a
+20406987
+2020696e
+1d627e00
+9b00b000
+c2006962
+2020235a
+1b027e00
+1b020a00
+20600000
+44dbc016
+1f260e08
+d8400000
+d9600000
+18e27e00
+c0046982
+6fe0c441
+afefffff
+2020e982
+f9201600
+1d627e00
+98408400
+18e08e01
+1a227e00
+98467c00
+2022e982
+20216975
+18427e00
+9a267c00
+24628000
+f9201600
+20600000
+44dc4017
+204069a9
+243a235a
+204069af
+203a6990
+6fe4c445
+67e4c442
+58000000
+e7e18005
+6160c44b
+6301444c
+20600000
+44dcc017
+204069b2
+18c08c01
+efe10006
+20600000
+44dd4017
+204069b2
+18c20a00
+18c20400
+58000000
+e7e18005
+20600000
+44ddc017
+204069af
+203a235a
+6fe1c448
+67e1c44b
+6fe1c445
+67e1c448
+6fe1c442
+67e1c445
+20600000
+44de4017
+6fe1c442
+20600000
+44dec017
+6fe1c445
+20600000
+44df4017
+6fe1c44b
+20600000
+204069af
+203a69b7
+d8c04442
+efe18006
+203a69b5
+18c08dfd
+20600000
+44dfc017
+df200004
+d8c04442
+d8400000
+efe18006
+1fe17eff
+98418400
+c20069bd
+6048c441
+20600000
+d8e0000c
+202024e7
+d8e0000c
+202024eb
+44e0c018
+18467cff
+20628000
+18427e00
+1fe17eff
+1fe67c0f
+242169d9
+d8a08070
+98a08a00
+18a22200
+d840003e
+e0408005
+204069dc
+2000001e
+1a220a00
+d840003f
+e0408005
+202069e0
+d8a080d4
+1fe0fff0
+202069cf
+6ff08081
+1fe17e7f
+67f08081
+20600000
+6ff08081
+1fe1fe80
+67f08081
+20600000
+20206bd0
+20206bd7
+6ff0806f
+793ffe07
+67f0806f
+20600000
+243469ee
+6ff0806f
+79207e07
+67f0806f
+18427c00
+2022e9f1
+1a627a00
+2fcc0000
+20206b00
+18000404
+da2001e7
+204069e6
+204069ee
+da2055aa
+6fe101e7
+e8410006
+9a267c00
+20600000
+20546a0e
+d8400002
+da2043c8
+204069ee
+6fe143c8
+67e101e0
+20546a04
+20600000
+d8400010
+da2001ed
+204069e6
+204069ee
+d8c001ed
+df200010
+20407353
+204072da
+2040736f
+202072d4
+70802300
+204069e6
+2020736f
+58000000
+67e10699
+7856fc00
+204069f3
+24628000
+7836fc00
+58008000
+67f18022
+da208025
+204069ea
+70802300
+6fe081dd
+c4000000
+d8400006
+204069f4
+2422ea2e
+ea210006
+204069ee
+20406a25
+20206a1e
+6fe10699
+df200006
+d8c001e7
+20407dcc
+6f2101e9
+1a220c00
+20407dcc
+67e10699
+20600000
+6fe0821c
+c02d6a3c
+da20aa55
+6fe101e7
+9a267c00
+2422ea3e
+da2055aa
+6fe101e9
+9a267c00
+2422ea3e
+6fe101eb
+68490699
+98467c00
+2422ea3e
+7920220f
+202069f1
+7001dd00
+20600000
+1fe17eff
+1ff1fe00
+67e0c3cb
+20206a59
+6ff10143
+243a6a40
+20406a59
+6fe143cb
+207a0000
+20406a4b
+202023ba
+6fe0c3cb
+207a0000
+1fe1040f
+6048c3cb
+1ff1fe00
+9842fe00
+c087ebc2
+20206b8d
+6fe08219
+245a23e0
+6fe0821a
+207a0000
+67e0c0c9
+202023e4
+78547c00
+6fe0c3ca
+c4018000
+20406aad
+dfe00ff0
+9a40a400
+18007210
+da2001ed
+20406b74
+70800608
+d8c001ed
+2040735f
+d8a001ed
+20407c99
+20207dba
+70805025
+20406b3a
+da400000
+1800720b
+da2043c8
+20406b75
+6ee2c3c8
+6fe0c3ca
+c3026a78
+70806f07
+6ff0815e
+c083ea72
+6ff08160
+1ff27e00
+67f0806f
+20206a7b
+20406af5
+20407d76
+20407d74
+66e2c3c8
+20406aad
+dfe00fd0
+9a40a400
+df200020
+da2001fd
+20406b74
+20406a53
+20406a44
+6fe0c3ca
+c301ea8f
+6848c3cc
+dfe00000
+79207e06
+79207e07
+98412200
+1a267c00
+2022eaf1
+9a267c00
+2022eaf1
+70003000
+da606b1e
+20406ae5
+24216af1
+6fe143c8
+203a6a9c
+20406a01
+20406a11
+2436ea9c
+6fe081dd
+2fe00603
+2420ea91
+20406aaa
+20406b37
+70003000
+20406ae5
+24216af1
+20406ad7
+20406cc4
+6fe0c3ca
+c2816abd
+20406adf
+2436eab4
+6fe081dd
+2fe00603
+2420ea9e
+20206abd
+580001ff
+dfa00000
+20600000
+da401000
+6ff08144
+c283eab2
+6fe0c3cc
+c4038000
+da400000
+20600000
+20406cc1
+6fe0c3ca
+c2816abd
+20406adf
+2436eabd
+6fe081dd
+2fe00603
+2420ea9e
+20206acd
+70003000
+20406ae5
+24216af1
+6fe0c3ca
+c280eacd
+20406c20
+200000c8
+20406c2f
+20000064
+da606c6c
+204069fc
+20406a11
+2436eacd
+6fe081dd
+2fe00603
+2420eabe
+20406ad1
+6fe0c3ca
+c4000000
+20206882
+d8a001ed
+20407c99
+18007004
+20407370
+70805021
+20600000
+6fe0c429
+6848c428
+98467c00
+2422ecbc
+70442704
+70442817
+70442916
+20206cbc
+58000000
+67e101e0
+da606ce7
+20406ca5
+204069fc
+20206a11
+20406aeb
+6fe08030
+1fe0fe01
+1fe67c03
+67e08030
+20600000
+6fe08030
+207a0000
+6fe0821b
+207a0000
+1fe27200
+20207c96
+20406ad1
+204069e6
+20407d7c
+20600000
+1fe17ee0
+1fe37e00
+67f0806f
+58000001
+d8c043cd
+e8410006
+6059004c
+67f08020
+1fe3fe00
+c301eafa
+20600000
+6fe081dd
+1fe3fe00
+7920fe00
+2a2c000f
+20608000
+67e081dd
+20600000
+6ff0806f
+c4038000
+20206b0d
+6ff08128
+afefffff
+20608000
+6ff08108
+c300eb0a
+204072d4
+20206b0a
+6fe140f0
+207a0000
+70802380
+70802200
+70802400
+684940f2
+184bf200
+98000c00
+efe08006
+67f08025
+c2006b19
+70802300
+20600000
+18427200
+6fe101e0
+98408400
+604901e0
+98002400
+1a225c00
+70800610
+20406b74
+1dc22200
+2a2c000f
+20608000
+205a7dc6
+20206b00
+708ac801
+2000012c
+708ac805
+20000064
+708ac825
+200003e8
+708ac827
+2000012c
+20600000
+20406b2b
+708ac83f
+20600000
+70804783
+708ac800
+20600000
+20406b2b
+70804782
+2000000c
+70804780
+70804782
+20000096
+20600000
+1a49a400
+62510044
+70804600
+20600000
+44e24018
+20406b34
+20406b41
+20406b3b
+e8408011
+1a20a201
+18000e00
+a84c0000
+2020eb6c
+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
+2020eb4c
+6ff10044
+1fe0fe01
+67f10044
+18e08e01
+28e01e08
+2420eb4c
+c2006b49
+20206b38
+44e2c018
+20406b41
+708047a2
+1a40a408
+d8e00000
+5fffffff
+68588007
+e0408011
+984c7e00
+70800620
+62510044
+2a2ffe0f
+2020eb83
+1a20a201
+20206b89
+24346b89
+18e08e01
+28e01e00
+2420eb89
+204072d4
+70800610
+1a40a408
+c2006b7a
+70804782
+20600000
+6fe0c3cb
+c0056b9e
+c0026b9f
+c0046ba3
+c004eba7
+c0036ba7
+c0066b9e
+c006ebb1
+c0076bab
+c005eb99
+c007eb9d
+20206bc2
+dfe043b2
+d8406858
+20406bb7
+20206bae
+20206bae
+20206bbf
+dfe05099
+d8406858
+20406bb7
+20206bae
+dfe043b2
+d84053dc
+20406bb7
+20206bae
+dfe043b2
+d8404770
+20406bb7
+20206bae
+dfe047b7
+d8406858
+20406bb7
+dfe03728
+d8404292
+20206bbc
+dfe047b7
+d8406858
+20406bb7
+dfe02acb
+d840310d
+20206bbc
+18500400
+9841fe00
+202023cf
+dfe02b8f
+d840310d
+18500400
+9841fe00
+202023d6
+dfe03112
+d84036df
+20206bbc
+20406bbf
+dfe02b8f
+d840310d
+20206bb7
+44e34018
+6fe0c3f5
+67f08080
+6fe0c3f6
+67f08081
+580001de
+67f10084
+580001e3
+67f10086
+202069dc
+79207e07
+67e101de
+44e3c018
+70808202
+70808800
+70800602
+20206be0
+18000401
+67e081de
+44e44019
+70808201
+60590088
+70800602
+20406be0
+6fe081e3
+20600000
+20000005
+6ff08128
+c301ebe0
+20600000
+78547c00
+1fe22400
+6fe0c420
+c1800000
+78347c00
+1a427e00
+20206bf2
+6fe0c420
+c000ebf2
+c0016bf8
+c001ec00
+c0026c04
+c002ec0b
+20600000
+67e1c419
+1a227e00
+67e1441c
+6049441e
+70442002
+20206c20
+20406c20
+70442003
+20406c26
+da2001de
+70808204
+6fe1c419
+d8400020
+20206c40
+20406c20
+20406c63
+70442004
+20600000
+44e4c019
+20406c20
+70442005
+20406c26
+20406c18
+20406c3c
+20206c13
+20406c20
+20406c26
+58000005
+20406bd7
+c3800000
+70442000
+6fe143e7
+20207d79
+6fe20678
+6849441c
+184085fc
+e7e20002
+20600000
+6849441c
+18422200
+184085fc
+efe20002
+67e20678
+6849441e
+6fe1c419
+20600000
+44e54019
+20406c8b
+204069dc
+58000000
+67e201de
+20600000
+7001de06
+58000000
+67f10088
+58000001
+67f10082
+580001de
+67f10084
+70800602
+20206be0
+7001deab
+20206c27
+7001deb9
+20206c27
+67e18670
+60490678
+62210684
+475ac036
+20406c26
+6fe18670
+68490678
+6a210684
+20206c3c
+18408404
+60590082
+d8400002
+1a20a3fc
+e0408011
+1ff10400
+e0408005
+1fec8400
+e0408005
+e7e08005
+1a227e00
+67f10084
+58000000
+67f10088
+70800602
+20406be0
+20206c63
+60590088
+1ff10400
+604881df
+1fec8400
+604881e0
+67e081e1
+58000004
+67f10082
+7001de03
+580001de
+67f10084
+1a227e00
+67f10086
+6ff08080
+2a2c000f
+7920fe06
+67f08080
+70800602
+6ff08128
+c283ec5f
+d8e00003
+20206be0
+580007d0
+2040235c
+20406c26
+580001e3
+67f10086
+58000005
+20406bd7
+c2806c63
+20600000
+60590088
+58000004
+67f10082
+7001de03
+580001de
+67f10084
+1a227e00
+67f10086
+6ff08080
+2a2c000f
+7920fe06
+67f08080
+70800602
+6ff08128
+c283ec79
+d8e00003
+20406b07
+20406be0
+2feffe02
+20406b00
+6fe081df
+1ff02400
+6fe101e0
+1ff0fe00
+9a41fe00
+9840fe00
+67e081e1
+1fecfe00
+1ff0fe00
+67e101df
+20600000
+6fe0c421
+6848c423
+98467c00
+2422ec90
+20406c9c
+6fe0c421
+d8400020
+20406f21
+6fe0c424
+d8400021
+20406f21
+6fe0c422
+d8400022
+20406f21
+6fe0c423
+d840001f
+20206f21
+70442101
+70442203
+70442300
+70442402
+7044250b
+7044260a
+20600000
+70801001
+20600000
+70808b05
+70808c07
+70808d07
+70808e07
+70808f07
+70809005
+70809100
+20600000
+70808b0c
+70808c0d
+70808d0d
+70808e0d
+70808f0d
+7080900c
+70809100
+20600000
+20406cd8
+6fe0c428
+d840006c
+20406f21
+6fe0c429
+d840006d
+20206f21
+20406cdf
+20206cb6
+6ff08128
+c302ecbe
+20600000
+79200028
+7043f408
+20600000
+793f8028
+7043f420
+20600000
+6fe0c3eb
+9a40fe00
+67e081e0
+20206cce
+6fe101e0
+1ff0fe00
+67e081e0
+58000003
+67f10092
+7001dfa0
+7001e1a1
+20206ced
+60490678
+20406cd8
+68490678
+20406d07
+20206cdf
+6fe0c427
+c17f8000
+c3036cdd
+580249f0
+2040235c
+6848c427
+20206ef7
+6848c427
+20206ef3
+44e5c019
+c5146cc7
+6fe143eb
+9a40fe00
+1ff0fe00
+67e101e0
+44e64019
+c5146ccb
+58000004
+67f10092
+7001dfa0
+7001e2a1
+580001df
+67f10094
+60590098
+62310096
+58000002
+2a2c000f
+7920fe00
+67f0808a
+70800604
+d8e00005
+20406b07
+20406cbe
+2feffe04
+20406b00
+c5146d02
+6fe101e0
+1ff0fe00
+9840fe00
+1ff0fe00
+67e101e0
+20600000
+6fe081e0
+9840fe00
+1ff0fe00
+67e101e0
+20600000
+6fe143eb
+9a40fe00
+67e10670
+44e6c019
+60490678
+6221068f
+20406d1c
+68490688
+6a21068f
+6fe10670
+20406d3d
+6fe10688
+6849068f
+98408400
+6049068f
+68490670
+98408400
+60490670
+6fe10678
+243a6d0d
+20600000
+44e74019
+6fe0c3f4
+1fe0ffff
+68490670
+9841fe00
+1fe0fe01
+67e1868c
+6fe10678
+9840fe00
+6849868c
+98467e00
+24216d2e
+67e10678
+6fe1868c
+68490670
+98467e00
+67e10688
+20600000
+6fe10678
+67e10688
+58000000
+67e10678
+20600000
+1a427e00
+18408402
+60590092
+1a20a3fe
+e8418011
+18422400
+d84000a0
+e0408011
+e7e08005
+20206d4a
+1fe22400
+44e7c019
+c5146d33
+1a427e00
+18408403
+60590092
+1a20a3fd
+e8418011
+18422400
+d84000a0
+e0408011
+1ff0fe00
+e7e10005
+62310094
+58000000
+67f10098
+70808a01
+70800604
+20406cbe
+e2418011
+44e8401a
+7001e200
+58000001
+67f10092
+7001dfa0
+580001df
+67f10094
+58000000
+67f10098
+67f10096
+58000003
+67f0808a
+70800604
+20406cbe
+6ff08128
+c4030000
+200005dc
+6fe081e2
+1fe0fe01
+67e081e2
+1fe67c28
+24610000
+20206d53
+20407dba
+20206d6a
+1ff10400
+20546d8e
+1fef7e00
+1ff10400
+20546d8a
+6ff10050
+793ffe0f
+67f10050
+20600000
+67f10052
+20600000
+20406d77
+20206d73
+20406d7c
+9846fc00
+20407d62
+1807fe00
+20600000
+6ff08043
+c3006d80
+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
+20406d96
+6ff10112
+98608600
+20206d9c
+20406da6
+20206d92
+20406d9a
+20206daa
+60610697
+61410695
+62010693
+20600000
+68610697
+69410695
+6a010693
+20600000
+6ff1010e
+243a6dae
+20600000
+1f227e00
+207a0000
+1f20f3f8
+20416dbe
+20628000
+20216db3
+1f20f208
+1f20f3fc
+20416dc1
+20628000
+20216db8
+1f20f204
+20206dc4
+efe40006
+e7e40003
+20600000
+efe20006
+e7e20003
+20600000
+1f227e00
+207a0000
+efe08006
+e7e08003
+c2006dc6
+20600000
+1f227e00
+207a0000
+1f20f3f8
+20416dd7
+20628000
+20216dcc
+1f20f208
+1f20f3fc
+20416dda
+20628000
+20216dd1
+1f20f204
+20206ddd
+efe40003
+e7e40005
+20600000
+efe20003
+e7e20005
+20600000
+1f227e00
+207a0000
+efe08003
+e7e08005
+c2006ddf
+20600000
+70066f3d
+2020782b
+44e8c01a
+6fe0c3fa
+207a0000
+20406e87
+2042ee8d
+20407dc0
+20406e18
+6fe0c3fa
+1fe22600
+684943f8
+60490033
+1a627e00
+203a6de3
+1a60a7ff
+18422200
+efe08011
+68488031
+98467c00
+2042ee00
+20216dfc
+efe08011
+1fe0fe01
+e7e08011
+68490033
+18408422
+60490033
+20206df0
+58000000
+e7e08011
+6fe08032
+e7e08005
+c099ee0d
+efe30006
+e7e40005
+58000000
+e7e40005
+1a420c00
+20407c8f
+18007c01
+20600000
+c01b6e11
+c01bee15
+da40428a
+20206e05
+d8c0430d
+20407c8f
+d8c0428a
+20206e0a
+d8c04305
+20407c8f
+20206e13
+44e9401a
+20407dbc
+6fe0c3fa
+207a0000
+44e9c01a
+6fe144e9
+c4048000
+6fe0c2cb
+c0006e34
+6fe0817d
+2fe180c0
+2020ee27
+2fe18040
+2020ee39
+20206e2e
+20366e2b
+6fe0c2c2
+c300ee34
+20206e2e
+20406e34
+20740000
+20206e2e
+6fe0c2fe
+c283ee31
+20206e37
+6fe30178
+67e44305
+20206e37
+70003235
+6fe30178
+20206e3b
+70003237
+20206e3b
+70003236
+20206e3b
+44ea401a
+6fe143f8
+e840803f
+1fe0fe01
+67e10033
+60488031
+6fe0c3fa
+1fe22600
+6fe10033
+1fe22200
+20406e53
+20740000
+68490033
+18408422
+60490033
+184085ff
+efe08002
+67e08031
+1a60a7ff
+2422ee43
+6fe0c3fa
+1fe0ffff
+67e08031
+20600000
+6fe08032
+c099ee5a
+da400032
+df200007
+20407d64
+2022fdba
+20600000
+c01b6e5d
+c01bee78
+20206e55
+e8408011
+98467c00
+24628000
+d8a006a1
+df200010
+20407ca1
+6fe1817b
+67e186a1
+20406e6f
+6fe106be
+1ff0fe00
+1fed0400
+efe08006
+9840fe00
+68498178
+98467c00
+2022fdba
+20600000
+d8c006a1
+20407361
+efe08011
+20407362
+18006c38
+18006c00
+204072cf
+d8a006b1
+20207375
+e8408011
+98467c00
+24628000
+18c22200
+18c0a608
+da404305
+df200008
+20407d64
+2022fdba
+1a622200
+da40430d
+df200008
+20407d64
+2022fdba
+20600000
+6fe143f8
+e840803f
+1fe0fe22
+efe0803f
+98467c00
+20600000
+6fe0c3fa
+1fe27200
+684943f8
+58000000
+e7e08002
+18408422
+1fe0fe01
+c2006e91
+20600000
+20407dbe
+20406e18
+24346ea1
+6fe10033
+1fe08c01
+d8a0430d
+20407c8f
+d8a0428a
+20407c8f
+70429a01
+20600000
+70429a00
+20600000
+70003234
+20206ea5
+6fe0c3cb
+c0056de5
+c0045c42
+20600000
+18417e1f
+1fe37e00
+d8a00016
+98a08a00
+de0000f0
+284c0000
+20608000
+de00000f
+20600000
+44eac01a
+79200407
+20406ee6
+7d208407
+44eb401a
+18467cff
+20628000
+d9000004
+284ffe07
+2020eebd
+d9000002
+20406ea9
+284c0000
+2020eec1
+19121000
+efe08005
+9e017e00
+9901fe00
+e7e08005
+20600000
+44ebc01a
+18467cff
+20628000
+d9000001
+20406ea9
+284c0000
+2020eece
+19121000
+efe08005
+9e017e00
+9901fe00
+e7e08005
+20600000
+44ec401b
+18467cff
+20628000
+20406ea9
+efe08005
+9e017e00
+e7e08005
+20600000
+20406ed3
+20206ee0
+18467cff
+20628000
+2455eeb6
+20406f14
+58000000
+284ffe07
+7d20fe06
+7920fe07
+20206f0d
+44ecc01b
+d8a0811c
+18410e07
+18497e00
+1fe17e03
+98a08a00
+efe08005
+284ffe07
+2020eef1
+afec0000
+20600000
+afefffff
+20600000
+18467cff
+20628000
+2fcffe07
+20206efa
+18467cff
+20628000
+2fcc0007
+58000000
+7d20fe07
+98428400
+20406f14
+5800003f
+284ffe07
+7920fe00
+20206f0d
+18467cff
+2022fdc4
+20406f14
+efe08005
+c2806f09
+284c0007
+20600000
+284ffe07
+20600000
+20406f14
+580000c0
+e7e08005
+20600000
+18467cff
+20628000
+20406f14
+58000000
+20206f0d
+18417e3f
+1fe67c0f
+24216f1a
+d8a08070
+98a08a00
+20600000
+d8a080d4
+1fe0fff0
+20206f18
+1fe104ff
+1fecfe00
+20206f21
+c4038000
+1fe17e3f
+1fe67c0f
+24216f28
+d8a08070
+98a08a00
+e0408005
+20600000
+d8a080d4
+1fe0fff0
+20206f25
+1841043f
+18467c0f
+24216f32
+58008070
+98408c00
+efe08006
+20600000
+580080d4
+184085f0
+20206f2f
+df200010
+d8c08070
+18c20a00
+efe08006
+c00fef48
+c0106f48
+c010ef48
+c0116f48
+c011ef48
+c0166f48
+c016ef48
+c0006f48
+c2006f37
+dfe080dc
+98c67c00
+20628000
+df200008
+d8c080d4
+20206f37
+58000040
+e7e08005
+20206f41
+58000080
+e7e08005
+20206f41
+44ed401b
+20758000
+708a0777
+708a08c9
+708a0b01
+6fe0c409
+67f080cd
+20406f97
+708a08c1
+df200007
+da204412
+708a0a05
+6ff08a0c
+e7e08011
+1a20a201
+6ff08a0a
+1fe0fe20
+67f08a0a
+c2006f5a
+708a0700
+20600000
+6ff080cc
+79207e01
+67f080cc
+df200007
+da204412
+708a0a15
+efe08011
+67f08a09
+1a20a201
+6ff08a0a
+1fe0fe20
+67f08a0a
+c2006f69
+6ff080cc
+793ffe01
+67f080cc
+20600000
+44edc01b
+6fe401fd
+203a6f79
+67e443fd
+20600000
+58000bbe
+67e143fd
+580003f0
+67e14401
+5800027e
+67e143ff
+580003c4
+67e14403
+20600000
+44ee401b
+20406f63
+6ff08a09
+793ffe07
+67f08a09
+708a0777
+708a08c1
+708a0b01
+20406f90
+6fe0c409
+67f080cd
+20406f97
+7080cd00
+20206fa1
+6fe0c408
+1ff27e00
+68588a0b
+1841040f
+98418400
+60588a0b
+20600000
+7080cc03
+6ff08129
+c302ef98
+68590164
+6049440a
+7080cc06
+6ff08129
+c282ef9d
+7080cc00
+20600000
+6fe0c411
+207a0000
+6ff08a09
+79207e07
+67f08a09
+6fe0c409
+67f080cd
+6fe1440d
+67f100ce
+6fe1440f
+67f100d0
+7080cc0b
+200003e8
+7080cc03
+20600000
+44eec01b
+6fe0c407
+c000efb5
+c0016fbb
+20600000
+580003e8
+67e14405
+68494403
+6fe143ff
+da6007d0
+20206fc0
+580007d0
+67e14405
+684943fd
+6fe14401
+da6003e8
+98462200
+6fe1440a
+98467e00
+24216fcd
+68494405
+984fa400
+1a627e00
+9a2ffe00
+9a40fe00
+9a26fc00
+20407d62
+1807fe00
+20600000
+18427e00
+6849440a
+98467e00
+68494405
+984fa400
+1a627e00
+9a2ffe00
+9a467e00
+24217dca
+20206fc9
+efe40011
+67e40670
+6fe10670
+68490672
+98462200
+6fe10676
+98462400
+68490674
+98467c00
+24416fe7
+1a4ffe64
+9a26fc00
+20407d62
+1807fe00
+205a6fef
+20600000
+6fe0c40c
+79207e00
+67e0c40c
+20600000
+6fe0c40c
+793ffe00
+67e0c40c
+20600000
+6848c40c
+79200401
+6048c40c
+20600000
+6848c40c
+793f8401
+6048c40c
+20600000
+6fe1442c
+efe0803f
+207a0000
+1fe27200
+6fe1442c
+1fe0fe03
+1fe22200
+e8408011
+20406edd
+1a20a201
+c2006ffe
+20600000
+6fe1442c
+1fe0fe03
+1fe22200
+18002400
+58000000
+67e106f1
+e8408011
+20406ee6
+44ef401b
+6fe106f1
+1a420e00
+f920fe00
+67e106f1
+1a20a201
+1a40a401
+6fe1442c
+efe0803f
+9a42fc00
+2422f009
+6fe106f1
+6849442e
+9842fc00
+20628000
+20207dba
+6fe1442c
+efe0803f
+207a0000
+1fe27200
+6fe1442c
+1fe0fe03
+1fe22200
+e8408011
+20406eb2
+1a20a201
+c2007022
+20600000
+d8e00009
+20407cef
+247a0000
+58000020
+d8e00009
+20407ce1
+78547c00
+2040701b
+44efc01b
+6fe1442c
+efe0803f
+207a0000
+20407003
+243477a5
+204077a3
+78547c00
+6fe106f1
+67e106f8
+7006fa00
+18000e00
+6fe1442e
+1fe30400
+6049442e
+1fe17e01
+684906f8
+18412201
+18430400
+604906f8
+9a22fc00
+2442f050
+6fe1442c
+efe0803f
+684886fa
+18408401
+604886fa
+18420e00
+98e2fc00
+2422f03b
+6fe106f1
+67e1442e
+20600000
+44f0401c
+6fe1442c
+1fe0fe01
+efe1003f
+20207d79
+6ff08042
+9a21fe00
+67f08042
+6ff10050
+793ffe0d
+67f10050
+20000064
+20600000
+6ff08042
+c2837062
+c283f064
+58b71b00
+20600000
+596e3600
+20600000
+580080e8
+20600000
+68498672
+2040705d
+9846fc00
+20407d62
+18078400
+6fe08675
+984ffe00
+1fe6fc64
+20407d62
+1807a200
+18427e00
+9a262400
+6fe08671
+2040707a
+6fe08670
+68488671
+1841040f
+184d0400
+9841fe00
+202070ba
+98000e00
+20407088
+2020707d
+6ff080be
+f9207e00
+67f080be
+68588042
+284ffe07
+2040f086
+f93ffe00
+67f080be
+20600000
+200001e0
+20600000
+1fe17e0f
+d8a0809c
+1feffe04
+98a08a00
+1a227e00
+e7e10005
+1a427e00
+e7e10005
+20600000
+1a4c8e00
+204070af
+1a4c8e00
+204070a9
+1a2c8e00
+7820fc00
+204070aa
+1a227e00
+204070b5
+1a427e00
+202070ba
+1a227e00
+204070bd
+1a427e00
+204070bd
+1a2c8e00
+7840fc00
+204070aa
+1a4c8e00
+7840fc00
+204070b0
+1a4c8e00
+7840fc00
+202070aa
+28effe07
+18e10e0f
+6ff080bc
+f920fe00
+67f080bc
+20600000
+28effe06
+18e10e0f
+6ff0809b
+f920fe00
+67f0809b
+20600000
+204070c5
+1fed7e00
+18e08410
+9841fe00
+20206f1d
+78347c00
+204070b5
+202070c0
+78547c00
+204070c5
+202070c0
+18e10e0f
+6ff0809a
+f9347e00
+67f0809a
+20600000
+1fec8e00
+18e10e0f
+20600000
+1fe20400
+44f0c01c
+204070d5
+58000800
+98467e00
+1fe20400
+18518400
+60588004
+20000578
+1fe20400
+1841040f
+6058800b
+20600000
+78367c00
+202070d9
+44f1401c
+78567c00
+6ff08043
+79367e03
+67f08043
+20600000
+d8400031
+67f20062
+67f10066
+60588061
+20600000
+6ff1012c
+20600000
+68710066
+69510062
+6a110064
+20600000
+60710066
+20600000
+20407dba
+dd600000
+204070e2
+c001712c
+1fe67c04
+20610000
+204070e4
+e8410003
+5800a654
+20407135
+2421711a
+1b020400
+58017f8e
+20407135
+2421711a
+1b020400
+58002328
+20407135
+20217111
+e8410003
+58001194
+20407135
+20217111
+204070e2
+1fe67c85
+20610000
+df200020
+e8410003
+58000230
+20407135
+20217111
+e8410003
+5800069a
+20407135
+24217116
+1b020400
+58000230
+20407135
+24217117
+1b020400
+5800ffff
+98467c00
+2022f131
+202070e8
+79205620
+1d635600
+c2007105
+20207125
+204070e2
+1fe67c07
+20610000
+e8410003
+58002328
+20407135
+20217111
+e8410003
+580008ca
+20407135
+20217111
+e8410003
+58000230
+20407135
+20217111
+204070e8
+1a627e00
+20207d79
+204070e4
+e8410003
+5800ffff
+98467c00
+24628000
+204070e8
+20407dbc
+1a627e00
+20207d79
+6a40c435
+18423000
+9a4fa400
+18438400
+98462200
+2441713e
+1a2ffe64
+9a467c00
+20600000
+1a262200
+20600000
+44f1c01c
+70023050
+d8a00231
+d8c042ab
+20407c8f
+d8c0448f
+20407c8d
+d8c005fe
+20407c8d
+204071fb
+d8c00158
+204071f6
+204071c1
+d8a006d1
+204071f2
+580f4240
+1fe22200
+6fe206d1
+9a26fc00
+20407d62
+18077e00
+67e205fa
+20600000
+70023041
+d8a00231
+204071a6
+204071a1
+6fe1c2c5
+e7e18005
+20407167
+d8c00158
+20407c8f
+d8c042ab
+20407c8f
+204071fb
+d8c006f1
+d8a006a1
+20407c8f
+202071c1
+6fe242ff
+e7e20005
+20407c9b
+20207c9a
+44f2401c
+70023041
+d8a00231
+204071a1
+204071a6
+6fe1c2be
+e7e18005
+20407167
+d8c042ab
+20407c8f
+d8c00158
+20407c8f
+204071fb
+d8c006f1
+d8a006a1
+20407c8f
+204071c1
+d8a006d1
+202071f2
+70023020
+d8c0063e
+d8a00231
+20407c8d
+204071fb
+d8c005e9
+204071f6
+204071c1
+d8a006a1
+20407375
+d8400001
+20407190
+d8a0428a
+204071f2
+d8400000
+20407190
+d8a006f1
+20207375
+44f2c01c
+70023035
+58000100
+67e10231
+204071a1
+204071a6
+d8c042ab
+20407c8f
+d8c00158
+20407c8f
+58006c65
+e7e10005
+58006274
+e7e10005
+e0408005
+204071fb
+202071c1
+6fe342db
+e7e30005
+6fe0c2d2
+e7e08005
+20600000
+6fe30178
+e7e30005
+6fe0c2cb
+e7e08005
+20600000
+70023041
+6fe0c4d0
+67e08231
+d8c0448f
+20407c8d
+d8c005fe
+20407c8d
+204071fb
+d8c00158
+204071f6
+202071c1
+70023041
+6fe0c4d0
+67e08231
+d8c005fe
+20407c8d
+d8c0448f
+20407c8d
+204071fb
+d8c042ab
+204071f6
+202071c1
+44f3401c
+20407210
+6fe08230
+1fe20400
+1fe0fe0f
+1ff1fe00
+1fe22400
+203a71d3
+18417e0f
+243a71d6
+da6006b1
+dfe00231
+1fe0fff0
+9840a200
+d8a006e1
+df200004
+20407ca9
+202071e1
+da400001
+da200000
+202071d7
+1841220f
+dfe00231
+9840fe00
+9a260c00
+d8a006d1
+20407236
+da6006c1
+da2006d1
+d8a006e1
+df200004
+20407ca9
+2040736f
+204072da
+d8c00231
+1a40a5ff
+1a427e00
+203a71ea
+20407361
+204072d4
+202071e4
+d8a006d1
+20407375
+d8c006e1
+20407361
+204072da
+d8c006d1
+20407361
+202072d4
+18a22200
+20407375
+df200010
+20207cb1
+d8a006a1
+20407c8f
+df200010
+da2006a1
+20207cb1
+6fe08230
+1fe27200
+da200231
+20207cb1
+efe08011
+1fe3fe00
+2a6ffe00
+7920fe00
+2feffe08
+7920a600
+e7e08011
+1a20a3ff
+c20071ff
+20600000
+da2006b1
+1a20a20f
+18007210
+18002600
+202071ff
+da2006c1
+2020720a
+d8c006a1
+2040735f
+18007008
+20407370
+2040736f
+204072d1
+d8a006b1
+20407375
+44f3c01c
+6fe086b1
+2feffe07
+2420f221
+20407209
+da6006b1
+d8a006b1
+2040722b
+20207222
+20407209
+d8c006b1
+d8a006c1
+20407c8f
+6fe086c1
+2feffe07
+2420f20e
+2040720e
+da6006c1
+d8a006c1
+df200003
+d8400000
+20407232
+1a60a604
+c200722c
+d8408700
+18500400
+efe20013
+9842fe00
+e7e20005
+20600000
+44f4401d
+df200010
+dfe00000
+9a267c00
+2022f241
+20217244
+e8408006
+e0408005
+1fe0fe01
+c2007239
+20600000
+d8400080
+e0408005
+2020723e
+d8400000
+20207242
+184d0400
+18500400
+98418400
+20600000
+44f4c01d
+20407306
+d8a0428a
+20207375
+d8a042ab
+2034f251
+d8a00158
+18c22200
+20407c8f
+2040731b
+d8c0429b
+2020738e
+da200158
+2034f259
+da2042ab
+1a220a00
+20407de7
+2020731b
+d8c042e5
+20407361
+d8c0428a
+20407362
+18006c38
+18006c00
+204072cf
+d8a001a8
+20207375
+18007008
+18007e49
+2020726c
+18007e49
+2020726b
+18007e01
+18007000
+184d5e00
+9de1de00
+1f00f001
+184cde00
+1df15e00
+6fe1445e
+1ff07e00
+9de1de00
+1f00f001
+ede20006
+1f00f001
+efe10006
+1a30de00
+1df05e00
+9de1de00
+1f00f001
+20600000
+1a608c01
+efe08006
+98002200
+20407268
+204072d1
+18007000
+efe08013
+1fe17e03
+1ff05e00
+79205e08
+2040736a
+204072d4
+1a227200
+1a608c02
+20407349
+20407353
+204072d4
+1f227e00
+203a7291
+2020728c
+1800700c
+1de27e00
+67e20150
+20600000
+1a20a201
+2040726a
+1a620c00
+2040735d
+204072d7
+2040737c
+1a60a610
+1a40a5f0
+20217295
+20600000
+204072c4
+44f5401d
+70806c00
+70806d01
+6fe0c169
+1fe17e03
+67f0806e
+6fe1068f
+67f10068
+5800416b
+67f1006a
+6a20c16a
+684ac450
+20407265
+70800a02
+70800a03
+6fe0c16a
+67f100c0
+1fe0fe04
+67e0c16a
+6fe2c450
+1fe0fe01
+793ffe27
+67e2c450
+20600000
+6ff1011a
+98467c00
+20628000
+247a0000
+202072b8
+6ff08108
+c303235a
+5800416b
+98408a00
+df00000c
+e5e20005
+202072cd
+44f5c01d
+1800700c
+20407370
+2040736f
+58000000
+67f100c0
+20600000
+6ff08108
+c30372cb
+70800a00
+20600000
+243bf2cf
+20600000
+18006c30
+18006c00
+202072cf
+18006c32
+18006c02
+202072cf
+18006c34
+18006c04
+202072cf
+18006c01
+18006c00
+20600000
+6ff08155
+c30172dd
+20600000
+67f100d2
+18006cc0
+18006c80
+202072dd
+18007000
+1a420c00
+18007204
+204072f3
+18006d80
+18006c80
+204072cf
+1800700c
+1a620a00
+18007204
+1de27e00
+e7e20005
+1f00f001
+c20072ee
+20600000
+efe10006
+e8410006
+18500400
+9841de00
+1f00f001
+c20072f3
+20600000
+18007008
+1a220c00
+18007204
+204072f3
+18007000
+1a420c00
+18007204
+204072f3
+18006d82
+18006c82
+204072cf
+202072eb
+18007000
+6fe20158
+98005e00
+1f00f001
+efe20006
+98005e00
+1f00f001
+6fe242ab
+98005e00
+1f00f001
+efe20006
+98005e00
+1f00f001
+20407370
+1f00f1fc
+6fe242ff
+1fe25e00
+1f00f004
+18006c38
+18006c08
+202072cf
+44f6401d
+6fe342db
+684b0178
+2034f321
+6fe30178
+684b42db
+18007008
+18425e00
+1f00f001
+184f5e00
+1ff07e00
+9de1de00
+1f00f001
+1fef5e00
+1f00f001
+18005e00
+18007e00
+6fe0c2cb
+6848c38c
+2434f331
+6fe0c2d2
+6848c2cb
+67e0c2bb
+6048c2bc
+18007000
+da4042bb
+18007204
+efe20011
+e8420012
+9842de00
+1f00f001
+1a20a204
+1a40a404
+c2007336
+20407370
+1f00f1fc
+6fe242ff
+1fe25e00
+1f00f004
+18006c38
+18006c0c
+204072cf
+2040736f
+18006c3a
+18006c08
+202072cf
+2f200600
+20608000
+18c27e00
+9f208a00
+18007e00
+e7e08005
+1f20f201
+2f200600
+20608000
+2020734e
+18007000
+1f227e00
+203a7358
+efe20006
+1f20f3fc
+98005e00
+1f00f001
+2f001e04
+20608000
+20207354
+18007008
+20207362
+18007004
+20207362
+18007000
+18007204
+efe20006
+98005e00
+1f00f001
+c2007363
+20600000
+d8c001a8
+2020735f
+18007204
+20207372
+18007000
+18007210
+20207371
+18007000
+18007204
+18005e00
+1f00f001
+c2007371
+20600000
+1800700c
+18007204
+1de27e00
+e7e20005
+1f00f001
+c2007377
+20600000
+1800700c
+1a620a00
+1a40f201
+1f267c0f
+20217382
+18007210
+1de27e00
+1f267c03
+2021738a
+e7e20005
+1f20f3fc
+20628000
+1f00f001
+20207382
+e7e08005
+1fecfe00
+c200738a
+20600000
+1800700c
+18007204
+efe20006
+9de67c00
+24628000
+1f00f001
+c2007390
+20207db8
+6ff08050
+793ffe00
+67f08050
+20600000
+6ff08050
+79207e00
+67f08050
+20600000
+d8a004d1
+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
+d8a00569
+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
+202074fc
+44f6c01d
+6fe0c46c
+207a0000
+6fe0c46e
+c1018000
+6fe0c46d
+c00074fc
+20600000
+70446d00
+20600000
+44f7401d
+580005fe
+d8a005f9
+98a67200
+20407ca1
+580044d1
+d8a044cf
+98a67200
+20207ca1
+20407476
+da20061e
+d8a004b1
+2040771c
+da2005fe
+d8a00471
+2040771c
+da200471
+da4005fe
+d8a00471
+20407684
+da200589
+da4005fe
+d8a00491
+20407684
+da200491
+da400471
+d8a00471
+20407720
+da200451
+da400471
+d8a00451
+20407720
+df200020
+da2004b1
+da400451
+20207d64
+da2005c9
+d8a00451
+2040771c
+da2005a9
+d8a00471
+2040771c
+da200471
+da4005a9
+d8a00471
+20407684
+da200589
+da4005a9
+d8a00491
+20407684
+da200491
+da400471
+d8a00471
+20407720
+da200451
+da400471
+d8a00451
+20207739
+18e08fff
+24610000
+180a7e00
+e7e10005
+2020748c
+18e08fff
+2421749c
+efe20011
+1fe20400
+efe20012
+9842fe00
+2422f49b
+1a20a204
+1a40a404
+20207491
+20207dc4
+20207dc6
+1fe10e07
+1fe97e00
+98c08c00
+efe08006
+afec0000
+20600000
+efe40006
+247a0000
+efe40006
+247a0000
+efe40006
+20600000
+efe20011
+98000400
+efe20012
+98467c00
+24628000
+1a20a204
+1a40a404
+c20074a9
+20600000
+18007206
+1a20a214
+1a40a414
+efe20012
+98000400
+efe20011
+98467e00
+24610000
+247a0000
+1a20a3fc
+1a40a5fc
+c20074b5
+20600000
+18007206
+18002600
+efe20011
+98000400
+efe20012
+9840fe00
+9a60fe00
+e7e20005
+2feffe20
+7920a600
+1a20a204
+1a40a404
+c20074c1
+20600000
+18007206
+18002600
+efe20012
+98000400
+efe20011
+98467e00
+9a667e00
+e7e20005
+2feffe20
+7920a600
+1a20a204
+1a40a404
+c20074cf
+20600000
+18007206
+1a20a214
+18002600
+efe20011
+2feffe00
+7920a601
+1fe37e00
+2a6ffe00
+7920fe1f
+e7e20011
+1a20a3fc
+1a632600
+c20074de
+20600000
+18007206
+18002600
+efe20011
+2feffe1f
+7920a601
+1fe3fe00
+2a6ffe00
+7920fe00
+e7e20011
+1a20a204
+1a632600
+c20074eb
+20600000
+18007206
+efe20006
+98005e00
+1f00f001
+c20074f7
+20600000
+44f7c01d
+6fe0c46c
+243a751d
+70446d00
+70446e00
+20600000
+6fe0c46c
+207a0000
+6fe0c46e
+c1018000
+20407552
+20207502
+d8a0446f
+38001abd
+3805b34f
+38099b8a
+380e6562
+e7e48005
+380340b7
+38041efa
+3808aff6
+380cfd41
+e7e48005
+3803d210
+38066cf8
+380b874c
+380f157c
+e7e48005
+3802d4a3
+3807d27d
+38080003
+e7e28005
+20600000
+6fe0c46e
+c1800000
+6fe0c46d
+c1800000
+204073f5
+d8a0446f
+18000e0f
+2040748c
+180a7e00
+1fe37e00
+e7e10005
+6fe0c46b
+245a7508
+d8a003b1
+d8c0446f
+20407c8d
+d8a00291
+d8c005a9
+20407c81
+d8a002d1
+20407c9d
+7002d101
+2040756a
+70446d03
+20600000
+d8a0448f
+d8c002f1
+20407c81
+70446e03
+70446d00
+20600000
+6fe085f9
+c1800000
+6fe0c46d
+c1800000
+d8a003b1
+d8c0446f
+20407c8d
+d8a00291
+d8c005fe
+20407c81
+d8a002d1
+20407c9d
+7002d101
+2040756a
+70446d04
+20600000
+d8a0063e
+d8c002f1
+20407c8d
+7005f903
+70446d00
+20600000
+6fe0c46c
+207a0000
+6fe0c46d
+207a0000
+1fe0fe80
+67e0c46d
+c3838000
+6fe1022e
+203a755c
+20207562
+44f8401e
+20407577
+6fe0c46d
+c001f536
+c002754c
+20600000
+20407589
+6fe1022e
+1fe0ffff
+67e1022e
+d8c003b1
+2040749d
+20608000
+202075da
+44f8c01e
+58000100
+67e1022e
+6fe1022e
+207a0000
+1fe0ffff
+67e1022e
+d8c003b1
+2040749d
+2020f56d
+d8c00291
+d8a00351
+20207c80
+da200391
+d8a00491
+20407646
+da200491
+d8a00431
+2040771c
+da200351
+da400431
+d8a002f1
+20407684
+da200491
+da400431
+d8a00471
+20407684
+da200371
+da400471
+d8a00311
+20207684
+da200391
+d8a00471
+2040771c
+da200471
+d8a00491
+2040771c
+da200589
+da400491
+d8a00491
+20407684
+da200351
+d8a00471
+2040771c
+d8c00471
+d8a00431
+20407c8d
+da200431
+20407723
+da200471
+da400431
+d8a00471
+20407720
+da200471
+da400491
+d8a00471
+20407720
+d8c00351
+d8a00431
+20407c8d
+da200371
+d8a00491
+2040771c
+da200431
+20407723
+da200431
+20407723
+da200431
+da400491
+d8a00431
+20407684
+da200491
+d8a00451
+2040771c
+da200451
+20407723
+da200451
+20407723
+da200451
+20407723
+d8c00371
+d8a00491
+20407c8d
+da200491
+20407723
+da200491
+da400391
+d8a00391
+20407684
+da200471
+d8a00491
+2040771c
+da200491
+da400431
+d8a00491
+20407739
+da200491
+da400431
+d8a00351
+20407739
+da200431
+da400351
+d8a00491
+20407739
+da200491
+da400471
+d8a00491
+20407684
+da200491
+da400451
+d8a00371
+20207739
+da2002d1
+d8a004b1
+2040771c
+da200351
+da4004b1
+d8a00451
+20407684
+da2002d1
+da4004b1
+d8a004b1
+20407684
+da200371
+da4004b1
+d8a00431
+20407684
+da200391
+d8a004b1
+2040771c
+da200291
+da4004b1
+d8a00471
+20407684
+da200391
+da4004b1
+d8a004b1
+20407684
+da2002b1
+da4004b1
+d8a00491
+20407684
+da400451
+da200471
+d8a004b1
+20407739
+da200451
+da400471
+d8a00451
+20407720
+da400431
+da200491
+d8a00471
+20407739
+da200431
+da400491
+d8a00431
+20407720
+da200431
+da4004b1
+d8a00431
+20407684
+da200391
+da4002d1
+d8a00491
+20407684
+da200491
+da4004b1
+d8a00391
+20407684
+da2004b1
+d8a004b1
+2040771c
+da2004b1
+da400451
+d8a00491
+20407684
+da2004b1
+da400431
+d8a00431
+20407684
+da200471
+d8a00351
+2040771c
+da200351
+da400491
+d8a00351
+20407739
+d8c00351
+d8a004b1
+20407c8d
+da2004b1
+20407723
+da200491
+da4004b1
+d8a00491
+20407739
+da200491
+da400471
+d8a00471
+20407684
+da200471
+da400431
+d8a00371
+20407739
+da200371
+da400569
+d8a00371
+18002600
+6fe08371
+2feffe00
+2040f71e
+1a626000
+da200371
+2040774e
+6fe08390
+2e0ffe00
+7920fe07
+67e08390
+20600000
+18a21600
+d8a00451
+20407c9d
+18007e00
+67e20471
+70045101
+d8a003d1
+20407c9f
+d8c00569
+d8a00411
+20407c8d
+1a220c00
+d8a00431
+20407c8d
+d8c00431
+20407758
+203a767d
+da200431
+da400451
+2040775b
+da200411
+da4003d1
+2040775b
+da200431
+da400411
+20407754
+2021766f
+da200411
+da400431
+1a220a00
+2040774c
+da200451
+da4003d1
+1a420a00
+2040771e
+efe08011
+9a60a600
+efe08012
+9a60fe00
+e7e08012
+20207654
+da200431
+da400411
+1a220a00
+2040774c
+da2003d1
+da400451
+1a420a00
+2040771e
+efe08011
+9a60a600
+efe08012
+9a60fe00
+e7e08012
+20207654
+da2003d1
+19620a00
+204076ad
+da200569
+19622400
+19620a00
+20207739
+18a21600
+18007000
+d8a003d1
+20407c9f
+d8a006b1
+20407c9f
+1a220c00
+7006b100
+58000000
+20407716
+1a420c00
+2040771a
+18000e00
+d8a003d1
+d84006b1
+18e22400
+1a4bfe00
+9840a400
+18000400
+18002600
+efe20005
+98002200
+efe20012
+1a627000
+9deffe00
+9a20fe00
+9840fe00
+e7e20005
+1fef0400
+1a60a601
+2a61fe08
+2420f698
+18427e00
+e7e20005
+18a08be0
+18e08e01
+28e1fe08
+2420f692
+da2003d1
+19620a00
+202076ad
+44f9401e
+18a21600
+1a226000
+da400411
+1a420a00
+20407c9b
+e7e40005
+1a208c2c
+20407c89
+20407c83
+1a422200
+20407723
+da400411
+1e022200
+19620a00
+20407720
+da400411
+1a420a00
+20407c9b
+e7e40005
+1e008c30
+20407c8f
+20407c9b
+1a422200
+20407723
+da400411
+19622200
+1a220a00
+20407720
+da400411
+1a420a00
+1e008c20
+20407c83
+20407c9b
+e7e40005
+1e008c38
+20407c89
+19622200
+1a220a00
+20407720
+da400411
+1a420a00
+1e008c24
+20407c83
+1e008c34
+20407c83
+1e008c34
+20407c84
+1e008c20
+20407c84
+19622200
+1a220a00
+20407720
+da400411
+1a420a00
+1e008c2c
+20407c83
+20407c9b
+e7e40005
+1e008c20
+20407c84
+1e008c28
+20407c84
+19622200
+1a220a00
+20407739
+da400411
+1a420a00
+1e008c30
+20407c89
+20407c89
+18007e00
+e7e40005
+1e008c24
+20407c84
+1e008c2c
+20407c84
+19622200
+1a220a00
+20407739
+da400411
+1a420a00
+1e008c34
+20407c83
+1e008c20
+20407c83
+20407c9b
+1e008c30
+20407c84
+19622200
+1a220a00
+20407739
+da400411
+1a420a00
+1e008c38
+20407c89
+20407c9b
+1e008c24
+20407c83
+20407c9b
+1e008c34
+20407c84
+19622200
+1a220a00
+20207739
+18007220
+d8a006b1
+98a08a00
+20207cda
+18007208
+202074f7
+1a222400
+20207684
+18007208
+202074c0
+2040771e
+18a22200
+20207724
+20407751
+2a6ffe00
+2020f72d
+da400569
+1a222600
+1a20a3e0
+20407754
+24610000
+1a622200
+20207735
+20407735
+1a222600
+1a20a3e0
+da400569
+20407754
+24610000
+1a622200
+20207735
+1a20a3e0
+da400569
+1a220a00
+2020774c
+2040774c
+2020f743
+18a0a3e0
+da400569
+20407754
+24610000
+da400569
+18a0a3e0
+1a220a00
+2020774c
+18a0a3e0
+da400569
+1a220a00
+2040771e
+20608000
+18a0a3e0
+da400569
+1a220a00
+2020771e
+18007208
+202074ce
+18007208
+1a20a21c
+202074dd
+18007208
+18002600
+202074eb
+18007208
+1a20a21c
+1a40a41c
+202074b5
+efe40006
+247a0000
+202074a3
+1a226000
+1e022200
+efe08011
+2feffe00
+20608000
+2040774e
+efe08012
+2fec0000
+2020f76b
+da200569
+1a420a00
+2040771e
+efe08012
+9a60fe00
+e7e08012
+1a40a5e0
+1a40a220
+18007209
+204074dd
+2020775c
+20758000
+204023d8
+20407776
+2040781b
+202077ac
+204077cf
+2020780a
+6fe0c4ec
+c17f8000
+98000400
+20406ef7
+6848c4ec
+20406ef3
+20000064
+6848c4ec
+20406edd
+20207780
+44f9c01e
+6fe0c4ec
+c17f8000
+1fe20400
+20406ee6
+2420f792
+2040779c
+6fe144e9
+79207e0c
+67e144e9
+6fe0c4e4
+c1000000
+7044e400
+6fe0c4eb
+67e0c4e3
+204077a3
+70066f2c
+2020782b
+6fe144e9
+793ffe0c
+67e144e9
+6fe0c4e4
+c1008000
+7044e401
+7044e300
+204077a5
+70066f2d
+2020782b
+6fe0c4e3
+207a0000
+1fe0ffff
+67e0c4e3
+247a0000
+70066f10
+2020782b
+d8e00007
+202024e7
+d8e00007
+202024eb
+44fa401e
+6fe144ef
+1a2fa40b
+9a40a400
+20600000
+6fe0c4ee
+207a0000
+1fe27200
+6fe144ef
+1fe22400
+1a40a602
+e8408013
+204077b7
+1a40a40b
+c20077b1
+20600000
+6fe0c4ed
+203a6ef3
+20206ef7
+204077a7
+58000002
+e7e08012
+20407804
+202077db
+204077a7
+58000003
+e7e08012
+20407804
+202077d8
+204077a7
+58000001
+e7e08012
+580000ff
+e7e08005
+202077d8
+204077a7
+df20000b
+1a620c00
+1a420a00
+20207ccc
+6fe0c4ee
+207a0000
+da200000
+204077de
+1a20a201
+6fe0c4ee
+9a267c00
+20628000
+202077d2
+1a40a602
+e8408013
+20206ef3
+1a40a602
+e8408013
+20206ef7
+1a208e0b
+20407cef
+247a0000
+204077a7
+efe08012
+c00177db
+c001f7d8
+c00077d8
+c002f7f2
+204077db
+1a40a607
+20407c49
+efe10013
+20407d79
+20407c55
+58000005
+e7e08012
+1a40a603
+efe10013
+20207802
+204077d8
+1a40a609
+20407c49
+efe10013
+20407d79
+20407c55
+1a40a601
+efe08013
+c07ff7fe
+1fe0ffff
+e7e08013
+203a77bf
+58000004
+e7e08012
+1a40a605
+efe10013
+1a208e0b
+20207ce1
+58000000
+20207802
+58001000
+1ff07e00
+9a40a400
+20600000
+44fac01e
+da200000
+684a44e5
+1c422400
+1a427e00
+98467c00
+24417806
+1a427e00
+184084a0
+184084a0
+98467c00
+2421781e
+1a20a201
+1a217e0f
+243a7811
+da200000
+20407824
+1c427e00
+67e244e5
+20600000
+1a227e00
+207a0000
+18408560
+18408560
+793f841c
+604a44e5
+202042d4
+7044d101
+6fe0c4d2
+243a7826
+20600000
+7044d100
+20600000
+44fb401e
+20407825
+1a227e00
+67e20684
+da2044d3
+20407d8b
+6fe20684
+1fe22200
+20207829
+44fbc01e
+20407825
+1a227e00
+67e20684
+da2044db
+20407d8b
+6fe20684
+1fe22200
+20207829
+58000000
+67e444db
+67e444d3
+20600000
+44fc401f
+6fe0c114
+247a0000
+da2044db
+20407da3
+207a0000
+70066e00
+2040784c
+6fe0866e
+203a7841
+20600000
+20407825
+da2044db
+20407d97
+1fe20400
+20407829
+44fcc01f
+18427e00
+207a0000
+c006f870
+c0077876
+c007f87b
+c0087881
+c009f88b
+c00a788d
+c00af88f
+c00b7899
+c00bf89c
+c00c789e
+c00cf8a1
+67e0866f
+6fe0866f
+c584f869
+44fd401f
+6fe0866f
+c008f886
+c00df8a9
+c009788a
+c00feea3
+20600000
+67e0866f
+2040205d
+2022f86e
+20402062
+24628000
+70066e01
+20207834
+70438801
+70438b00
+6fe144e9
+79207e0b
+67e144e9
+20600000
+6fe144e9
+793ffe0b
+67e144e9
+70438800
+20600000
+70438801
+70438b01
+6fe144e9
+79207e0b
+67e144e9
+20600000
+6fe144e9
+793ffe0b
+67e144e9
+70438800
+20600000
+58000014
+67e10196
+67e142f5
+202030c5
+20202e93
+da200000
+202077bf
+da200000
+202077ba
+da200000
+204077a7
+efe08012
+c000f896
+c0027896
+c002f896
+202077c4
+efe08006
+c17f8000
+202077c4
+70434301
+7041141b
+20600000
+70434301
+20600000
+70434300
+70411400
+20600000
+6fe143d5
+20407d79
+6fe0c4ec
+c07ff8a7
+1fe20400
+20406edd
+2040783d
+20202417
+20202ed5
+6fe0c4e9
+c4060000
+20600000
+6fe143fb
+1fe08a02
+58000000
+e7e18005
+20600000
+44fdc01f
+20407dbc
+204078fe
+207a0000
+6fe143fb
+1fe0a402
+e8408012
+18408401
+e0408012
+e840803f
+18427200
+1fe0a404
+efe08012
+984ffe00
+98c08a00
+1a220c00
+20407cda
+20407902
+1fe0ffff
+e8408012
+18408401
+98410400
+e0408012
+20207dba
+44fe401f
+20407dbc
+204078fa
+207a0000
+6fe143fb
+1fe0a402
+e8408012
+184085ff
+e0408012
+e840803f
+18427200
+1fe0a403
+efe08012
+984ffe00
+98c08c00
+18c08c01
+1a220a00
+202078c2
+20407dbc
+204078fa
+207a0000
+6fe143fb
+e840803f
+18427200
+1fe0a403
+efe08012
+984ffe00
+98c08c00
+18c08c01
+18c22400
+1a220a00
+20407cda
+20207dba
+20407dbc
+204078fa
+207a0000
+6fe143fb
+e840803f
+18427200
+1fe0a403
+efe08012
+984ffe00
+98c08c00
+18c08a02
+1a220c00
+1f20f3ff
+20407cda
+20207dba
+6fe143fb
+1fe08c02
+efe08006
+20600000
+20407902
+e8408006
+98467e00
+20600000
+6fe143fb
+1fe08c01
+efe08006
+20600000
+44fec01f
+6ff08c22
+2feffe03
+2040f915
+6ff10c22
+67f10c22
+67e10709
+20407973
+204079a2
+20407b96
+20407bdf
+2020796b
+44ff401f
+20407396
+20407932
+708c0000
+20002710
+708c1200
+6ff10050
+793ffe0a
+67f10050
+708c1021
+708c119d
+708c003c
+58000763
+67f10c02
+67f10c06
+580007a3
+67f10c04
+708c1280
+708c0100
+708c22ff
+5800095f
+d8a0086d
+98a67200
+20207ca1
+6848886c
+20206edd
+6fe0890e
+207a0000
+6848886c
+20406ee6
+2020f915
+20600000
+70086b02
+58000000
+67e087a6
+67e10865
+1fe0fe01
+67e10867
+1fe0fe01
+67e10869
+d8a007fa
+58030404
+e7e18005
+58000409
+e7e10005
+d8a007ff
+38015906
+380610d2
+38090494
+380c0001
+e7e48005
+d8a0081d
+3801570f
+38055c9a
+380a56c6
+380dcdcd
+e7e48005
+38014420
+38065d99
+380a5636
+380c0001
+e7e38005
+d8a0083b
+3801620a
+38040c8c
+380b0333
+380cc0c0
+e7e48005
+38003130
+e7e10005
+58009272
+67e107a7
+580092cd
+67e107a9
+d8c09371
+d8a007ab
+df200013
+20407cda
+d8c09384
+d8a007be
+df20003c
+20407cda
+6fe10859
+20207d79
+6fe0885b
+207a0000
+67e087e0
+67e087f9
+20600000
+d8e00001
+20407cef
+247a0000
+6fe0890f
+247a0000
+6fe0890e
+245a7c38
+20600000
+6fe08709
+c2817976
+20600000
+2040797b
+20407cee
+58000280
+d8e00001
+20207ce1
+6fe08900
+c0817980
+70090f00
+70091000
+20600000
+6fe08912
+207a0000
+70091200
+70090002
+70090e01
+20600000
+6fe08709
+c28079af
+20600000
+69510c02
+6a110c04
+68710c06
+efe10003
+1fec8400
+18518400
+d8c00fff
+98c17200
+6721070c
+20600000
+20407989
+efe08003
+e7e08005
+c2007994
+60710c06
+20600000
+d8a0095f
+20407994
+d8400963
+60590c0e
+6fe08960
+1fe0fe06
+e7e08002
+708c1808
+20600000
+44ffc01f
+6fe08709
+c4028000
+20407989
+2841fe0d
+2020f999
+d8a0086d
+20407994
+6fe0870c
+c0007986
+c000f9b6
+1fe67c07
+20610000
+47004020
+793f8023
+6fe0886d
+1fe17e80
+c04079ba
+c00079c2
+2020235a
+6fe0886d
+c3838000
+20407b6a
+202079e9
+6fe0886d
+1ff1fe00
+1fe37e00
+1fe17e03
+c00079ca
+c000f9d0
+c00179d5
+2020235a
+6fe0886d
+1ff1fe00
+1fe37e00
+1fe17e03
+c00079d6
+c000f9de
+c00179e3
+2020235a
+6fe0886e
+c00479eb
+c0037a01
+c0057a46
+c0007a58
+202079e4
+6fe0886e
+c0017a8d
+c000fa91
+c001faa2
+202079e4
+202079e4
+6fe0886e
+c000faac
+c001fadb
+c002fb06
+c004fb1f
+c005fb3a
+c003f9e4
+202079e4
+6fe0886e
+c0057b4b
+c004fb5d
+c005fb7c
+202079e4
+202079e4
+4700c020
+6ff08c19
+79207e00
+67f08c19
+202079e9
+708c1b01
+20600000
+6fe0886d
+c0c079e4
+6fe08871
+c08079e4
+6fe08872
+c08079e4
+6fe08873
+c080f9e4
+6fe08874
+c08079e4
+6fe0886f
+c08079e4
+6fe08870
+c08079e4
+6fe0886b
+c00279fd
+c001f9ff
+202079e4
+da400001
+20207a72
+da400001
+20207a70
+47014020
+6fe08870
+c000fa14
+c0017a2d
+c001fa30
+c010fa09
+c0117a3e
+202079e4
+7008fd00
+6fe08871
+c0007a0e
+c000fa11
+202079e4
+6a4087d1
+da2007d1
+20207b8b
+6a4087ea
+da2007ea
+20207b8b
+6fe08911
+245a7a25
+580007ab
+684887ab
+67e10908
+6048890a
+6fe08873
+98467c00
+24217a23
+6fe0890a
+98002400
+6fe10908
+1fe0fe01
+98002200
+20207b8b
+6fe08873
+20207a1e
+6ff08c01
+245a7a29
+70091100
+20600000
+6ff08c01
+79207e07
+67f08c01
+20600000
+580007be
+684887be
+20207a18
+6fe0886f
+1fe67c03
+242179e4
+6fe0886f
+da2007fa
+c0007b89
+79200023
+da2007ff
+c000fb89
+da20081d
+c0017b89
+da20083b
+c001fb89
+20600000
+6fe10871
+c000fa42
+6a2107a7
+20207b89
+70090e01
+70090001
+6a2107a9
+20207b89
+6fe0886b
+c08279e4
+6fe0886d
+c0c0f9e4
+6fe0886f
+c08079e4
+6fe08870
+c08079e4
+6fe08873
+c080f9e4
+6fe08874
+c08079e4
+6fe08871
+c08079e4
+6fe08872
+c08079e4
+da400001
+20207a70
+6fe0886b
+c00179e4
+6fe0886f
+c08079e4
+6fe08870
+c08079e4
+6fe08873
+c08179e4
+6fe08874
+c08079e4
+6fe08872
+c08079e4
+6fe0886d
+c0407a6b
+c040fa76
+c0417a7a
+202079e4
+70090301
+20207a74
+6fe08871
+c08079e4
+da400002
+6fe08901
+c000fa69
+da200865
+20207b8b
+da200867
+20207b8b
+da200869
+20207b8b
+6fe0886b
+c08279e4
+da400002
+20207a70
+6fe0886b
+c08279e4
+6fe08871
+c040fa87
+c0417a89
+c041fa8b
+1fe17e7f
+c0007a83
+202079e4
+6fe08904
+da400002
+c000fa72
+20207a70
+6fe08905
+20207a84
+6fe08906
+20207a84
+6fe08907
+20207a84
+7008fb01
+da2008fc
+da400001
+20207b8b
+6fe1086f
+d84001ba
+98467c00
+2422f9e4
+6fe088f8
+243a7a9f
+7008b500
+6fe08873
+98002400
+da2008b5
+20407b8b
+d8a008b5
+df200040
+20207ca3
+7008f800
+7008b501
+20207a98
+6fe08873
+c080f9e4
+7008fd01
+da400001
+6fe088ff
+c0007aaa
+c000faab
+20207a70
+20207a72
+20207a70
+6fe0886b
+c08279e4
+6fe08873
+c08079e4
+6fe08874
+c08079e4
+6fe08870
+c08079e4
+6fe08872
+c08079e4
+6fe0886d
+c0007abb
+c000fac8
+c0017ac9
+202079e4
+6fe0886f
+c080f9e4
+6ff08c00
+793ffe07
+67f08c00
+70090100
+70090201
+6fe08903
+203a79e9
+70090300
+70090200
+70090002
+202079e9
+202079e4
+6fe0886f
+c08079e4
+6fe08871
+c040fad4
+c0417ad7
+c041fad9
+1fe17e7f
+c0007ad2
+202079e4
+70090400
+202079e9
+70090500
+70091201
+202079e9
+70090600
+20207ad5
+70090700
+20207ad5
+6fe08873
+c08079e4
+6fe08874
+c08079e4
+6fe0886d
+c0007ae4
+c000faf2
+c0017af3
+202079e4
+6fe0886f
+c080f9e4
+204048b1
+6ff08c00
+79207e07
+67f08c00
+70090101
+70090003
+7008f900
+204079e9
+20407cee
+58001388
+d8e0000f
+20207ce1
+202079e4
+6fe0886f
+c08079e4
+6fe08870
+c08079e4
+6fe08871
+c040fb00
+c0417b02
+c041fb04
+1fe17e7f
+c0007afe
+202079e4
+70090401
+202079e9
+70090501
+202079e9
+70090601
+202079e9
+70090701
+202079e9
+6fe0886d
+c08079e4
+6fe08871
+c08079e4
+6fe08872
+c08079e4
+6fe08873
+c08079e4
+6fe08874
+c08079e4
+6fe08870
+c08079e4
+6fe0886f
+1fe17e80
+c08079e4
+6fe0886f
+c0807b1d
+70086b02
+6fe0886f
+67f08c01
+204079e9
+70091101
+20600000
+70086b03
+20207b18
+6fe0886b
+c00179e4
+6fe0886d
+c08079e4
+6fe08871
+c08079e4
+6fe08872
+c08079e4
+6fe08873
+c08079e4
+6fe08874
+c08079e4
+6fe08870
+c08079e4
+6fe0886f
+1fe67c01
+242179e4
+6fe0886b
+c001fb34
+c0027b34
+202079e4
+6fe0886f
+c0007b38
+70086b04
+202079e9
+70086b03
+202079e9
+6fe0886b
+c08279e4
+6fe0886d
+c080f9e4
+6fe0886f
+c08079e4
+6fe08870
+c08079e4
+6fe08873
+c08079e4
+6fe08874
+c08079e4
+6fe08871
+c08079e4
+6fe08872
+c08079e4
+202079e9
+4701c020
+7008fb01
+6fe08870
+67e088fc
+6fe08871
+1fe67c01
+2042fb59
+6fe08900
+c08279e9
+70090002
+204079e9
+20007530
+20007530
+20600000
+70090e01
+70090200
+70090004
+20600000
+20003a98
+d8a00875
+20407993
+7008f701
+20407b6e
+6fe1086f
+67e108f5
+204079e9
+6fe0c3cb
+c1820000
+6fe088f9
+207a0000
+6fe08875
+67e0c621
+7008f900
+70461103
+20600000
+6fe1086f
+d8400200
+98467c00
+24628000
+6fe10871
+d8400000
+98467c00
+24628000
+6fe10873
+d8400001
+98467c00
+24628000
+7008f901
+20600000
+6fe08873
+c08079e4
+6fe0886f
+c0007b82
+c000fb85
+202079e4
+7008fe00
+7008ff01
+202079e9
+7008fa01
+7008fe01
+7008ff00
+202079e9
+ea408011
+1a20a201
+47024020
+7920000e
+c591fb90
+1a40a401
+1a43a400
+622107a4
+624087a6
+20207b96
+20600000
+d8e00000
+20207bd7
+4702c020
+6ff08c25
+c3800000
+6fe087a6
+207a0000
+1fe27200
+98000400
+6fe10873
+1fe67c40
+20217ba4
+1f267c40
+20217ba8
+18007240
+20207ba8
+9f267c00
+20217ba8
+98007200
+67e087a6
+6fe087a6
+9f267e00
+67e087a6
+1f20ffff
+67e0870e
+c591fbba
+1fe37e00
+1f20ffff
+67e0870e
+c5877bba
+793f800e
+e0408005
+58000003
+e7e08005
+1f20f3ff
+1f227e00
+2422fbba
+1f20f201
+6fe107a4
+1fe20c00
+efe08006
+e7e08005
+c591fbc1
+58000000
+e7e08005
+c2007bbc
+18c27e00
+67e107a4
+5800070e
+67f10c08
+d8e00000
+20407bd7
+6fe087a6
+247a0000
+708c1b02
+6fe08900
+c1808000
+70090002
+20600000
+da20074f
+d8e00001
+62310c0a
+1f20ffff
+e7e08011
+efe08006
+e7e08005
+c2007bd4
+58000000
+f9207e00
+67f08c18
+20600000
+d8e00002
+da200759
+62310c0c
+20207bd2
+47034020
+6fe0890d
+207a0000
+6ff08c25
+1fe17e0f
+243a7c30
+6fe0890e
+203a7c06
+6fe08900
+c001fc40
+c0817c06
+6fe08902
+243a7c06
+20407bee
+20207bf9
+6ff08c25
+c3808000
+6fe0890d
+c4008000
+6fe0890d
+793ffe01
+67e0890d
+6fe0890b
+207a0000
+c0087c28
+2020235a
+6ff08c25
+c3810000
+6fe0890d
+c4010000
+6fe0890d
+793ffe02
+67e0890d
+6fe0890c
+207a0000
+c0107c09
+c010fc24
+c0117c2c
+2020235a
+d8a00913
+df200040
+20207ca3
+6fe088fb
+684888fd
+98417e00
+203a7c20
+684888fe
+9840fe00
+c000fc11
+20207c20
+70090c00
+6fe08914
+c0017c21
+c001fc21
+6fe08914
+67e08913
+6fe08915
+e7e08005
+6fe08917
+e7e08005
+6fe08919
+e7e08005
+df200004
+d8c00913
+20207bdb
+70090c00
+df200008
+d8c00913
+20207bdb
+70090c00
+df200003
+d8c00933
+20207bdb
+70090b00
+df200008
+d8c00923
+20207bcf
+70090c00
+df200002
+d8c00943
+20207bdb
+6fe08900
+c0017c33
+20600000
+6ff08c00
+79207e07
+67f08c00
+70091001
+20600000
+6fe08900
+c1018000
+c0017c3c
+20600000
+6fe08910
+207a0000
+70090f01
+20207c43
+d8e0000f
+20407cef
+247a0000
+6ff08c00
+c4038000
+708c00fc
+20007530
+708c003c
+20600000
+60a10691
+604c0678
+61620680
+20407c51
+60c1068f
+6721069b
+60e10699
+20600000
+62220684
+62420688
+6261868c
+20600000
+4703c020
+6fe10691
+98000a00
+684c0678
+69620680
+20407c60
+6f21069b
+68e10699
+6fe1068f
+98000c00
+20600000
+6a220684
+6a420688
+6a61868c
+20600000
+6fe10691
+1fe20a00
+20600000
+6fe1068f
+1fe20c00
+20600000
+18a27e00
+67e10691
+20600000
+18c27e00
+67e1068f
+20600000
+18a27e00
+67e10691
+18c27e00
+67e1068f
+20600000
+6fe10691
+1fe20a00
+6fe1068f
+1fe20c00
+20600000
+98462200
+20610000
+da200100
+9a20fe00
+98462200
+20600000
+20407c8d
+20407c8d
+20207c8d
+20407c89
+efe08006
+e7e08005
+efe18006
+e7e18005
+20600000
+efe40006
+e7e40005
+20600000
+20407c8f
+20407c89
+20407c89
+20407c89
+20207c89
+1fe0ffff
+20000026
+243a7c91
+20600000
+df20000a
+20002ee0
+c2007c96
+20600000
+20407c9a
+20407c9b
+18007204
+20207ca3
+18007220
+20207ca3
+18007240
+20207ca3
+1f227e00
+207a0000
+18007e00
+e7e00005
+20600000
+df200020
+d8a006a1
+20207ca1
+efe20013
+e8420011
+9842fe00
+e7e20005
+1a20a204
+1a60a604
+c2007ca9
+20600000
+47044021
+1f227e00
+1fe67c01
+20610000
+9a20a400
+1a40a5ff
+1f237200
+e8408011
+efe08012
+e7e08011
+e0408012
+1a40a5ff
+1a20a201
+c2007cb8
+20600000
+1fef0400
+20407cc6
+18508400
+1ff07e00
+9841fe00
+20600000
+1ff10c00
+18d08c00
+1ff0fe00
+1ff07e00
+98c1fe00
+20600000
+4704c021
+1f227e00
+207a0000
+1f20f3f8
+20417c89
+20628000
+20217ccf
+1f20f208
+1f20f3fc
+20417c84
+20628000
+20217cd4
+1f20f204
+20207cda
+1f227e00
+207a0000
+efe08006
+e7e08005
+c2007cdc
+20600000
+58000000
+67e10670
+47054021
+20407cef
+68490670
+d8a040f4
+18e3fe00
+98a08a00
+e0410005
+20600000
+d9600800
+19701600
+9960fe00
+20600000
+d8e00000
+4705c021
+684a4095
+1c437e00
+67e24095
+98467c00
+24417cea
+98461600
+19620400
+d8c040f4
+18c20a00
+df200010
+efe10006
+98467e00
+20217cfe
+18007e00
+e7e10005
+c2007cfa
+d8c040f4
+18e3fe00
+98c08c00
+efe10006
+20600000
+98408400
+18427200
+6fe10044
+9f267e00
+20610000
+1fe67e00
+18510400
+18408401
+18500400
+98418400
+20600000
+20407d12
+20207d1f
+78547c00
+98467e00
+20217d17
+78347c00
+1fe67e00
+c4078000
+1fe22800
+d8410000
+6fe10044
+98467e00
+9a80fe00
+793ffe40
+20600000
+68490044
+98000c00
+1ff17e00
+984ffe00
+98c0fe00
+20600000
+1fed7e00
+1ff27e00
+6849c0bd
+9846fc00
+20407d62
+18078400
+20600000
+68490044
+9846fc00
+20407d5f
+1ff07e00
+18070400
+98418400
+20600000
+d8400000
+18422800
+efe08003
+20407d3f
+1a820400
+20407d70
+da40000a
+9a4ffe00
+9840fe00
+1fe20400
+c2007d34
+20600000
+d840003a
+98467c00
+24217d48
+d8400061
+98467c00
+20217d4b
+d8400037
+98467e00
+20600000
+d8400030
+98467e00
+20600000
+d8400057
+98467e00
+20600000
+1f267c00
+20628000
+1fe37e00
+c2007d50
+20600000
+18007e01
+1f267c00
+20628000
+1fe3fe00
+c2007d56
+20600000
+58000000
+1f222200
+e8410006
+9840fe00
+c2007d5b
+9a26fc00
+20407d62
+1807fe00
+20600000
+207a8000
+20207d62
+efe08011
+e8408012
+98467c00
+24628000
+1a20a201
+1a40a401
+c2007d64
+20207db8
+98467c00
+24610000
+18427e00
+20600000
+9840fe00
+98460400
+98467e00
+20600000
+d8a00000
+20207d77
+d8a04000
+df201000
+20207ca3
+207a0000
+1fe27a00
+204070d7
+70820301
+20600000
+67f10205
+6ff08203
+79207e04
+67f08203
+20600000
+67f10207
+6ff08203
+79207e06
+67f08203
+20600000
+67f10205
+70820330
+20600000
+47064021
+e8440011
+18417eff
+243a7d91
+184cfe00
+e7e40011
+1a20a207
+efe08011
+243a235a
+6fe0866f
+e7e08011
+20600000
+4706c021
+df200008
+efe40011
+207a0000
+efe08011
+243a7da0
+1a20a201
+c2007d9b
+2020235a
+d8400000
+e0408011
+20600000
+efe40011
+20600000
+efe08011
+20600000
+efe10011
+20600000
+d8400000
+6fe08006
+c2007daa
+18408401
+c2007daa
+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
+1f267c00
+20628000
+e8408006
+9840fe00
+c2007dce
+20600000
+1f227e00
+207a0000
+18c27e00
+9f20fe00
+1fe0ffff
+1fe20c00
+efe08006
+18c08dfe
+e7e08005
+c2007dd8
+20600000
+1ff07e00
+1feb7e00
+20600000
+1fed7e00
+20207dde
+58000000
+67e40016
+79207e19
+e7e20005
+20600000
+df200010
+180a7e00
+e7e08005
+c2007de8
+20600000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+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
+0105bd2a
+01a10209
+01090185
+090500a1
+08290119
+01250015
+08950175
+01050281
+31093009
+26f80116
+107507ff
+06810295
+81153809
+08757f25
+06810195
+380a0c05
+81019502
+05c0c006
+a1060901
+75028501
+05089501
+29e01907
+250015e7
+95028101
+81087501
+75059503
+19080501
+91052901
+75019502
+95039103
+15087506
+00ff2600
+00190705
+0081ff29
+090c05c0
+8501a101
+2a001903
+001503ff
+9503ff26
+81107501
+0105c000
+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
+01053fc0
+01a10609
+08950175
+e0190705
+0015e729
+02810125
+08750195
+05950381
+08050175
+05290119
+01950291
+03910375
+08750695
+ff250015
+00190705
+0081ff29
+0105a3c0
+01a10209
+01090185
+090500a1
+05290119
+01250015
+01750595
+01950281
+01810375
+30090105
+01163109
+07FF26F8
+02951075
+38090681
+7f258115
+01950875
+0c050681
+9502380a
+c0068101
+090105c0
+8501a180
+19010502
+15882981
+95012500
+81017508
+0c05c006
+01a10109
+00150385
+19038026
+03802a00
+01951075
+06c00081
+0e09ff00
+BA8501a1
+08751f95
+1500ff26
+91010900
+95BA8502
+2608751f
+001500ff
+02810109
+011212C0
+00000200
+31514000
+00021020
+01000201
+3b02093b
+00010200
+040932a0
+03010000
+09000101
+00020021
+001a2201
+03810507
+09020040
+01000104
+00020103
+02002109
+a3220100
+82050700
+02004003
+00020001
+18010228
+03020002
+03200128
+2a050200
+00040001
+02290202
+00050000
+02280002
+00061800
+01280302
+02000702
+43132a00
+73706968
+422d6165
+2020454c
+20202020
+00082020
+01280302
+02000902
+c1022a01
+02000a03
+02012803
+0402000b
+0006082a
+00640006
+000c012c
+02280002
+000d180a
+01280302
+02000e02
+02072a50
+8266248a
+000f0001
+02280002
+00101812
+01280302
+02001106
+01012a4e
+03020012
+13120128
+2a4d0200
+14000002
+29020200
+15000002
+29080200
+16010202
+28030200
+00171201
+022a4d02
+00180000
+02290202
+00190000
+02290802
+001a0103
+01280302
+02001b02
+051b2a4b
+a101090c
+09028501
+09ea09e9
+153009e2
+750c2501
+81019510
+001cc000
+01280302
+02001d02
+11042a4a
+1e010001
+28030200
+001f0401
+012a4c02
+02002000
+0f022800
+02002118
+12012803
+19020022
+0063012a
+00130200
+13020002
+02000100
+00040013
+06001302
+00130200
+13020005
+02000000
+28000017
+00001702
+02000100
+01022800
+02000218
+20012803
+05020003
+0400012a
+29020200
+05000002
+28000200
+06180002
+28030200
+00070201
+112a0002
+4f484355
+3130204e
+20202020
+20202020
+02000820
+02012803
+01020009
+00c8022a
+0302000a
+0b020128
+2a040200
+06000608
+2c006400
+02000c01
+0a022800
+02000d18
+02012803
+5002000e
+8a02072a
+01826624
+02000f00
+f0022800
+020010ff
+12012803
+f1020011
+00000eff
+00000000
+00000000
+00000000
+02020012
+00000229
+03020013
+14080128
+fff20200
+0000000e
+00000000
+00000000
+00000000
+8a2f9800
+37449142
+c0fbcf71
+b5dba5b5
+56c25be9
+f111f139
+3f82a459
+1c5ed592
+07aa98ab
+835b01d8
+3185be12
+0c7dc324
+be5d7455
+deb1fe72
+dc06a780
+9bf1749b
+9b69c1c1
+be4786e4
+c19dc6ef
+0ca1cc0f
+e92c6f24
+7484aa2d
+b0a9dc4a
+f988da5c
+3e515276
+31c66d98
+0327c8a8
+597fc7b0
+e00bf3bf
+a79147c6
+ca6351d5
+29296706
+b70a8514
+1b213827
+2c6dfc2e
+380d134d
+0a735453
+6a0abb65
+c2c92e76
+722c8581
+bfe8a192
+1a664ba2
+4b8b70a8
+6c51a3c2
+92e819c7
+990624d1
+0e3585d6
+6aa070f4
+a4c11610
+376c0819
+48774c1e
+b0bcb527
+1c0cb334
+d8aa4a39
+9cca4f4e
+2e6ff35b
+8f82ee68
+a5636f74
+c8781478
+c7020884
+befffa8c
+506ceb90
+f9a3f7a4
+7178f2be
+000000c6
+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
+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
+00000000
+0000def0
\ No newline at end of file
Index: usb_pc_ai_voice/program/app.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app.prog	(working copy)
@@ -0,0 +1,331 @@
+app_init:
+	bpatch patch16_1,mem_patch16
+	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
+	beq DVC_OP_MESH,ali_mesh_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,mouse_default_parm_init
+	beq DVC_OP_REMOTE_CAR,remote_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 patch16_2,mem_patch16
+	//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 patch16_3,mem_patch16
+	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: usb_pc_ai_voice/program/app_adpcm.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_adpcm.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_adpcm.prog	(working copy)
@@ -0,0 +1,132 @@
+
+ifdef COMPLIE_ADPCM
+/*
+input:
+	mem_ad_in_numSamples
+	mem_ad_in_ptr
+	mem_ad_out_ptr
+*/
+adpcm_decode:
+	fetch 8,mem_ad_state_valpred
+	store 8,mem_ad_valpred
+	jam  0,mem_ad_bufferstep
+	fetch 1,mem_ad_index
+	lshift2 pdata,pdata
+	arg mem_ad_stepsizeTable,temp
+	iadd temp,temp
+	ifetch 4,temp
+	store 4,mem_ad_step
+adpcm_decode_loop:
+	fetch 1,mem_ad_bufferstep
+	nbranch adpcm_next_byte,blank
+	fetcht 2,mem_ad_in_ptr
+	ifetch 1,temp
+	store 1,mem_ad_inputbuffer
+	increase 1,temp
+	storet 2,mem_ad_in_ptr
+	rshift4 pdata,pdata
+	store 1,mem_ad_delta
+	branch adpcm_cal
+adpcm_next_byte:
+	fetch 1,mem_ad_inputbuffer
+	and pdata,0x0f,pdata
+	store 1,mem_ad_delta
+adpcm_cal:	
+	fetch 1,mem_ad_bufferstep
+	setflip 0,pdata
+	store 1,mem_ad_bufferstep
+	arg mem_ad_indexTable,temp
+	fetch 1,mem_ad_delta
+	iadd temp,temp
+	ifetch 1,temp
+	fetcht 1,mem_ad_index
+	call adpcm_cal_index
+	store 1,mem_ad_index
+
+	fetch 1,mem_ad_delta
+	and pdata,0x08,temp
+	storet 1,mem_ad_sign
+	and pdata,0x07,temp
+	storet 1,mem_ad_delta
+
+	call adpcm_cal_vpdiff
+	storet 4,mem_ad_vpdiff
+	
+	fetch 1,mem_ad_sign
+	branch adpcm_cal_valpred,blank
+	fetch 4,mem_ad_valpred
+	fetcht 4,mem_ad_vpdiff
+	isub temp,pdata
+	branch adpcm_cal_valpred_end
+adpcm_cal_valpred:
+	fetch 4,mem_ad_valpred
+	fetcht 4,mem_ad_vpdiff
+	iadd temp,pdata
+adpcm_cal_valpred_end:	
+	store 4,mem_ad_valpred
+	arg 32767,temp
+	isub temp,pdata
+	bbit1 31,adpcm_cal_valpred_overflow
+	storet 4,mem_ad_valpred
+	branch adpcm_cal_valpred_overflow_end
+adpcm_cal_valpred_overflow:	
+	fetch 4,mem_ad_valpred
+	arg 32768,temp
+	iadd temp,pdata
+	bbit0 31,adpcm_cal_valpred_overflow_end
+	arg -32768,temp
+	storet 4,mem_ad_valpred
+adpcm_cal_valpred_overflow_end:	
+	fetch 1,mem_ad_index
+	lshift2 pdata,pdata
+	arg mem_ad_stepsizeTable,temp
+	iadd temp,temp
+	ifetch 4,temp
+	store 4,mem_ad_step
+
+	fetch 2,mem_ad_out_ptr
+	fetcht 2,mem_ad_valpred
+	istoret 2,pdata
+	increase 2,pdata
+	store 2,mem_ad_out_ptr
+
+	fetch 1,mem_ad_in_numSamples
+	increase -1,pdata
+	store 1,mem_ad_in_numSamples
+	nbranch adpcm_decode_loop, blank
+	fetch 8,mem_ad_valpred
+	store 8,mem_ad_state_valpred
+	rtn
+
+adpcm_cal_index:
+	iadd temp,pdata
+	bbit0 7,adpcm_cal_bigger_zero
+	setarg 0
+	rtn
+adpcm_cal_bigger_zero:
+	and pdata,0xff,pdata
+	sub pdata,88,null
+	rtn positive
+	setarg 88
+	rtn
+
+adpcm_cal_vpdiff:
+	fetchr rega,4,mem_ad_step
+	rshift3 rega,temp
+	fetch 1,mem_ad_delta
+	bbit0 2,adpcm_cal_vpdiff1
+	copy rega,pdata
+	iadd temp,temp
+adpcm_cal_vpdiff1:
+	fetch 1,mem_ad_delta
+	bbit0 1,adpcm_cal_vpdiff2
+	rshift rega,pdata
+	iadd temp,temp
+adpcm_cal_vpdiff2:
+	fetch 1,mem_ad_delta
+	rtnbit0 0
+	rshift2 rega,pdata
+	iadd temp,temp
+	rtn
+endif
+
Index: usb_pc_ai_voice/program/app_car.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_car.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_car.prog	(working copy)
@@ -0,0 +1,991 @@
+ifdef COMPILE_CAR
+
+define CAR_TEST_FUNCTION
+
+car_init:
+	call enable_authrom
+	rtn wake
+	setarg car_g24_receive_process
+	store 2,mem_cb_24g_receive_process
+	
+	setarg g24_bind_ackpayload_prep
+	store 2,mem_cb_24g_ackpayload
+	
+	setarg car_g24_cb_data_device1
+	store 2,mem_cb_24g_data_device1
+
+	setarg car_le_before_hibernate
+	store 2,mem_cb_before_hibernate
+	
+	setarg car_le_process_lpm_before
+	store 2,mem_cb_before_lpm	
+		
+	setarg car_scale_process_idle	
+	store 2,mem_cb_idle_process	
+	
+	setarg car_scale_process_bb_event 
+	store 2,mem_cb_bb_event_process	
+	
+	setarg app_get_lpm_wake_lock
+	store 2,mem_cb_check_wakelock
+	
+	setarg car_le_receive_data
+	store 2,mem_cb_att_write
+	
+	setarg car_le_bb_event_timer
+	store 2,mem_cb_event_timer
+	
+	bpatch patch05_6,mem_patch05
+	call car_init_environment
+	call car_lpm_timer_enable
+	call queue_init
+	jam 2,mem_lpm_mult
+	jam POWER_ON,mem_car_24g_received_pac
+	fetch 1,mem_car_config_soft_switch_enable
+	store 1,mem_car_hard_soft_switch
+	beq HARD_SWITCH, car_hard_switch_power_on_signal
+	fetch 1,mem_car_config_soft_switch_gpio
+	store 1,mem_ui_button_gpio
+	jam OFF,mem_le_adv_enable
+car_soft_switch_power_on_init:
+	call ui_button_init
+	call ui_button_polling
+	jam POWER_STARTING,mem_car_power_state
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BTN_DOWN
+ 	branch app_enter_hibernate
+ 	
+
+car_power_off_signal:	
+	branch car_ui_led_init
+	
+car_hard_switch_power_on_signal:
+	jam POWER_STANDBY,mem_car_power_state
+car_soft_switch_power_on_signal:
+	jam ON,mem_le_adv_enable
+	setarg FAST_ADV_INTERVAL_VALUE_CAR
+	call shutter_ble_adv_interval_set
+car_le_modified_name_adv:
+	arg mem_le_name+7,contw
+	fetch 1,mem_le_lap
+car_name_loop:
+	and pdata,0xF0,temp
+	rshift4 temp,temp
+	call car_hex_to_ascii
+	istoret 1, contw
+	and pdata,0x0F,temp
+	call car_hex_to_ascii
+	istoret 1, contw
+	call le_modified_name_att_list
+	fetcht 1,mem_le_name_len
+	copy temp,loopcnt
+	arg mem_le_adv_data+2,contw
+	arg mem_le_name,contr
+	call memcpy
+car_le_modified_name_scan:
+	fetcht 1,mem_le_name_len
+	copy temp,loopcnt
+	arg mem_le_scan_data+2,contw
+	arg mem_le_name,contr
+	branch memcpy
+car_hex_to_ascii:
+	sub temp,9,null
+	branch car_hex_num,positive
+	add temp,55,temp
+	rtn
+car_hex_num:	
+	add temp,48,temp
+	rtn
+
+car_ui_led_init:
+	fetch 1,mem_car_config_blood_led1_gpio
+	bne INVALID_PIN_NUM,car_blood_led_gpio_set
+car_ui_led_init_1:
+	fetch 1,mem_car_config_pairing_led_gpio
+	bne INVALID_PIN_NUM,car_pairing_led_gpio_set
+car_ui_led_init_2:
+	fetch 1,mem_car_config_low_voltage_led_gpio
+	bne INVALID_PIN_NUM,car_low_voltage_led_gpio_set
+car_ui_led_init_3:
+	fetch 1, mem_car_led_num
+	copy pdata,loopcnt
+	setarg mem_car_led_map
+	copy pdata,rega
+car_in_lp1:
+	copy rega,contr
+	ifetch 1,contr
+	copy contr,rega
+	beq INVALID_PIN_NUM,car_in_lp1_end
+	copy pdata,temp
+	call gpio_config_output
+car_in_lp1_end:
+	loop car_in_lp1
+car_ui_led_init_end:
+	rtn
+car_blood_led_gpio_set:
+	fetch 8,mem_car_config_blood_led1_gpio
+	store 8,mem_car_led_map+2
+	branch car_ui_led_init_1
+car_pairing_led_gpio_set:
+	store 1,mem_car_led_map
+	branch car_ui_led_init_2
+car_low_voltage_led_gpio_set:
+	store 1,mem_car_led_map+1
+	branch car_ui_led_init_3
+
+car_init_environment:
+	
+	call car_g24_init
+	call car_g24_load_commom_addr
+	arg 0,rega
+	call pwm_init
+	call car_ui_led_init
+	call car_start_blink
+	call car_init_adc_hvin
+	branch car_motor_init
+car_read_otp_addr:
+        rtn
+car_motor_init:
+	fetch 1, mem_car_motor_gpio_num
+	copy pdata,loopcnt
+	setarg mem_car_motor_gpio_map
+	copy pdata,rega
+p_in_lp1:
+	copy rega,contr
+	ifetch 1,contr
+	copy contr,rega
+	beq INVALID_PIN_NUM,p_in_lp1_end
+	copy pdata,temp
+	store 1, mem_car_gpio
+	call car_ui_gpio_init
+p_in_lp1_end:
+	loop p_in_lp1
+p_car_ui_led_init_end:
+	rtn
+
+car_ui_gpio_init:
+	fetch 1,mem_car_gpio
+	rtneq UI_BUTTON_GPIO_DISABLE
+	iforce temp
+	branch gpio_config_output
+
+	
+car_init_adc_hvin:
+	jam 100,mem_car_notify_vdd_value_last
+	rtn
+	
+car_le_before_hibernate:
+	call car_gpio_set_before_hibernate
+	call clear_wake
+car_le_process_lpm_before:
+	branch keyscan_process_lpm_before
+
+car_gpio_set_before_hibernate:
+	call check_51cmd_led_off
+car_gpio_set_before_lpm_common:
+	arg GPIO_NUMBER,loopcnt
+	arg core_gpio_conf,contr
+car_setgpio_loop:
+	copy contr,contw
+	ifetch 1,contr
+	beq gpcfg_spid_miso,car_setgpio_pullup
+	beq gpcfg_spid_ncs,car_setgpio_pullup
+	beq gpcfg_spid_sck,car_setgpio_pullup
+	beq gpcfg_spid_mosi,car_setgpio_pullup
+	beq gpcfg_spid_sdio,car_setgpio_pullup
+	beq gpcfg_iic_scl,car_setgpio_pullup
+	beq gpcfg_iic_sda,car_setgpio_pullup
+	beq gpcfg_input,car_setgpio_pullup
+car_setgpio_loop_end:
+	loop car_setgpio_loop
+	arg core_gpio_conf_hi+GPIO_NUMBER_EXT,pdata
+	isub contr,null
+	branch car_motor_setgpio,zero
+car_setgpio_loop_ext:
+	arg GPIO_NUMBER_EXT,loopcnt
+	arg core_gpio_conf_hi,contr
+	branch car_setgpio_loop
+
+car_setgpio_pullup:
+	setarg gpcfg_pullup
+	istore 1,contw
+	branch car_setgpio_loop_end
+car_setgpio_pulldown:
+	setarg gpcfg_pulldown
+	istore 1,contw	
+	branch car_setgpio_loop_end
+car_motor_setgpio:	
+	fetch 1,mem_car_motor_gpio_num
+	copy pdata,loopcnt
+	arg mem_car_motor_gpio_map,contr
+car_motor_setgpio_loop:
+	ifetch 1,contr
+	set1 7,pdata
+	arg gpcfg_output_low,temp
+	call gpio_config_function
+	loop car_motor_setgpio_loop
+	rtn
+	 
+car_key_scan_process:
+	branch keyscan_key_process
+
+car_scale_process_idle:
+	call car_le_send_packet
+	call car_g24_status_process
+	branch car_key_scan_process
+
+car_g24_status_process:
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BLE_CONNECTED
+	fetch 1,mem_car_24g_received_pac
+	beq WORK_PAIRED,car_g24_connected_event
+	rtn
+car_g24_connected_event:
+	fetch 1,mem_car_24g_status
+	rtneq WORK_PAIRED
+	jam WORK_PAIRED,mem_car_24g_status
+	call car_lpm_timer_disable
+	call car_stop_blink
+	branch car_g24_connected
+
+car_lpm_timer_enable:
+	fetch 2,mem_car_enter_lpm_timer_count	
+	store 2,mem_car_enter_lpm_timer
+	jam 0,mem_car_enter_lpm_flag
+	rtn
+
+	
+car_lpm_timer_disable:
+	setarg 0
+	branch car_lpm_timer_enable+1
+
+
+car_stop_blink:
+	arg 0,rega
+	branch ui_led_blink_stop_global
+	
+	
+car_start_blink:
+	arg 0,rega
+	branch ui_led_blink_start_global
+	
+
+
+
+
+car_le_send_packet:
+	fetch 2,mem_ui_state_map
+	rtnbit0 UI_STATE_BLE_CONNECTED
+	call le_fifo_check_nearly_full
+	nrtn blank
+	arg mem_car_pop_queue_buff,rega
+	call queue_pop
+	nrtn user
+	arg mem_car_pop_queue_buff,contr
+	branch le_send_notify_from_list
+ 
+car_scale_process_bb_event:
+	copy regc,pdata
+	beq BT_EVT_BUTTON_UP,app_event_button_up
+	beq BT_EVT_BUTTON_LONG_PRESSED,app_button_long_pressed
+	beq BT_EVT_LE_CONNECTED,car_scale_event_le_conn
+	beq BT_EVT_LE_DISCONNECTED,car_scale_event_le_discon
+	rtn
+
+car_scale_event_le_conn:
+	call car_lpm_timer_disable
+	call car_stop_blink
+	set0 mark_24g_rxmode,mark
+	branch car_scale_process_conn
+car_g24_connected:
+	fetch 2,mem_car_24g_no_data_timeout_count
+	store 2,mem_car_24g_no_data_timeout_timer
+car_scale_process_conn:
+	jam 0x14,mem_car_notify_vdd_timer
+	jam 0,mem_lpm_mode
+	call app_ble_stop_adv
+	branch app_lpm_mult_enable
+
+
+car_scale_event_le_discon:
+	set1 mark_24g_rxmode,mark
+	call car_lpm_timer_enable
+	call car_fb_motor_stop
+	call car_lr_motor_stop
+car_g24_disconnect:
+	setarg 0
+	store 5,mem_car_led_control
+	/*setarg 4
+	call pwm_disable
+	setarg 5
+	call pwm_disable
+	setarg 20
+	call pwm_disable
+	setarg 21
+	call pwm_disable
+	setarg 22
+	call pwm_disable
+	setarg 7
+	call pwm_disable*/
+	call queue_init
+	jam 10,mem_motor1_speed
+	jam 10,mem_motor2_speed
+	jam 10,mem_motor3_speed
+//	jam 1,mem_lpm_mode
+	jam 2,mem_lpm_mult
+	setarg FAST_ADV_INTERVAL_VALUE_CAR
+	call shutter_ble_adv_interval_set
+	branch app_ble_start_adv
+
+car_le_bb_event_timer:
+	call car_moto1_blank_data_timer
+	call car_moto2_blank_data_timer
+	call car_moto3_blank_data_timer
+	//call app_power_timer
+	//call car_notify_vdd_timer
+	call car_24g_no_data_timeout_timer
+	branch car_24g_bind_enable_timer
+	//branch car_enter_lpm_timer
+
+car_24g_bind_enable_timer:
+	arg mem_car_24g_bind_enable_delay_count,regc
+	arg 0,regb
+	branch timer_single_step
+
+car_enter_lpm_timer:
+	arg mem_car_enter_lpm_timer,regc
+	arg car_enter_lpm_enable,regb
+	branch timer_single_step_2B
+car_enter_lpm_enable:
+	jam 1,mem_car_enter_lpm_flag
+	rtn
+	
+car_24g_no_data_timeout_timer:
+	arg mem_car_24g_no_data_timeout_timer,regc
+	arg car_24g_no_data_timer_timeout,regb
+	branch timer_single_step_2B
+car_24g_no_data_timer_timeout:
+	jam WORK_SEARCH,mem_car_24g_status
+	jam POWER_ON,mem_car_24g_received_pac
+	branch car_g24_disconnect
+
+car_notify_vdd_timer:
+	fetch 1,mem_car_config_bat_notify_enable
+	rtn blank
+	arg mem_car_notify_vdd_timer,regc
+	arg car_notify_vdd,regb
+	branch timer_single_step
+car_notify_vdd:
+	fetch 1,mem_car_notify_vdd_count
+	store 1,mem_car_notify_vdd_timer
+ 	fetch 1,mem_car_working_flag
+ 	nrtn blank
+car_read_hvin:
+	call vdd_calculate_by_mode
+	store 2,mem_vdd_now_vol
+	arg mem_vdd_calculate_set,rega
+	call adc_bat_percent_lowpower_out
+	fetcht 1,mem_car_notify_vdd_value_last
+	isub temp,null
+	branch car_notify_vdd_next2,positive
+	store 1,mem_car_notify_vdd_value_last
+	copy pdata,temp
+car_notify_vdd_next2:
+	storet 1,mem_car_notify_vdd_percent
+	fetch 1,mem_car_config_low_voltage_percent
+	isub temp,null
+	call car_enter_low_bat,positive
+	storet 1,mem_notify_bat_payload 
+	arg 6,loopcnt
+	arg mem_notify_bat_head,contr
+	call calc_check_sum_start
+	store 1,mem_notify_bat_check_sum
+	arg mem_notify_bat_packet,rega
+	branch queue_push
+car_enter_low_bat:
+	fetch 1,mem_low_bat_flag
+	nrtn blank
+	jam 1,mem_low_bat_flag
+	arg 1,rega
+	branch ui_led_blink_start_global
+car_low_bat_led_off:
+	arg 1,rega
+	branch ui_led_blink_stop_global
+
+////////////////////////check sum////////////////////////
+//loopcnt = sum number,contr = ptr
+calc_check_sum_start:
+	arg 0,rega
+calc_check_sum_loop:
+	ifetch 1,contr
+	iadd rega,rega
+	loop calc_check_sum_loop
+calc_check_sum_and:
+	and rega,0xff,pdata
+	rtn
+
+car_le_receive_data:	
+	fetch 1,mem_le_att_opcode
+	beq ATTOP_WRITE_REQUEST,car_le_parse_att_write_request
+	rtn
+car_le_parse_att_write_request:
+	fetch 2,mem_le_att_handle
+	beq ATT_CAR_CONTROL_HANDLE,car_control_le_receive
+	rtn
+
+/*
+*	typedef struct
+*	{
+*		2byte	packet_head				(mem_app_receive_temp)
+*		1byte	packet_cmd				(mem_app_receive_temp+2)
+*		2byte	packet_payload_length	(mem_app_receive_temp+3)
+*		10byte	packet_payload			(mem_app_receive_temp+5)
+*		1byte	packet_check_sum		(mem_app_receive_temp+15)
+*	}
+*/
+le_app_receive_data:
+	bpatch patch05_7,mem_patch05
+	ifetch 5,rega
+	store 5,mem_app_receive_temp
+	fetch 2,mem_app_receive_temp
+	arg LE_RECEIVE_PACKET_HEAD,temp
+	isub temp,null
+	nrtn zero
+	fetch 2,mem_app_receive_temp+3
+	byteswap pdata,pdata
+	store 2,mem_app_receive_temp+3
+	copy pdata,loopcnt
+	increase 5,rega
+	copy rega,contr
+	arg mem_app_receive_temp+5,contw
+	call memcpy
+	ifetch 1,contr
+	store 1,mem_app_receive_temp+15
+	arg mem_app_receive_temp+2,rega
+	arg mem_app_receive_temp+5,regb
+	rtn
+
+car_control_le_receive:
+	setarg 0
+	store 5,mem_le_receive_payload
+	store 5,mem_le_receive_payload+5
+	call le_app_receive_data
+	copy regb,contr
+	arg mem_le_receive_payload,contw
+	arg 10,loopcnt
+	call memcpy
+car_receive_cmd_select:
+	bpatch patch06_0,mem_patch06
+	ifetch 1,rega
+	beq CAR_CMD_OLD_CAR_CONTROL,car_drive_old
+	beq CAR_CMD_OLD_SPEED_CONTROL,car_speed_set_old
+	beq CAR_CMD_L_R_MOTOR_CONTROL,car_motor_control
+	beq CAR_CMD_F_B_MOTOR_CONTROL,car_motor_control
+	beq CAR_CMD_IR_CONTROL,car_ir_data_rx_from_app
+	beq CAR_CMD_LED_CONTROL,car_led_control_receive
+	beq CAR_CMD_DEVICE_INFO,car_info_request
+	rtn
+
+car_24g_receive_data:
+	call car_control_le_receive
+	fetch 1,mem_app_receive_temp+2	//cmd
+	beq CAR_CMD_L_R_MOTOR_CONTROL,car_24g_receive_data_next
+	beq CAR_CMD_F_B_MOTOR_CONTROL,car_24g_receive_data_next
+	rtn
+car_24g_receive_data_next:
+	fetch 1,mem_le_receive_payload	//moto1
+	ncall car_moto1_enable_blank_data_timer,blank
+	fetch 1,mem_le_receive_payload+2	//moto2
+	ncall car_moto2_enable_blank_data_timer,blank
+	fetch 1,mem_le_receive_payload+4	//moto3
+	ncall car_moto3_enable_blank_data_timer,blank
+	rtn
+
+car_moto1_enable_blank_data_timer:
+	jam 5,mem_car_moto1_blank_timer
+	rtn
+car_moto2_enable_blank_data_timer:
+	jam 5,mem_car_moto2_blank_timer
+	rtn
+car_moto3_enable_blank_data_timer:
+	jam 5,mem_car_moto3_blank_timer
+	rtn
+
+car_moto1_blank_data_timer:
+	arg mem_car_moto1_blank_timer,regc
+	arg car_moto1_blank_data,regb
+	branch timer_single_step
+car_moto2_blank_data_timer:	
+	arg mem_car_moto2_blank_timer,regc
+	arg car_moto2_blank_data,regb
+	branch timer_single_step
+car_moto3_blank_data_timer:		
+	arg mem_car_moto3_blank_timer,regc
+	arg car_moto3_blank_data,regb
+	branch timer_single_step
+
+car_moto1_blank_data:
+	jam 0,mem_le_receive_payload
+	branch car_motor_control
+car_moto2_blank_data:
+	jam 0,mem_le_receive_payload+2
+	branch car_motor_control
+car_moto3_blank_data:
+	jam 0,mem_le_receive_payload+4
+	branch car_motor_control
+	
+	
+///////////////////////Motor//////////////////////////////////////////
+
+car_drive_old:	
+	fetch 1,mem_le_receive_payload
+	store 1,mem_motor1_status
+	fetch 1,mem_le_receive_payload+1
+	store 1,mem_motor2_status
+	branch car_motor_control_common
+
+
+	
+car_left_right_control_old:
+	fetch 1,mem_le_receive_payload
+	store 1,mem_motor2_status
+	branch car_motor2_control
+car_front_back_control_old:
+	fetch 1,mem_motor1_speed
+	call car_reset_old_speed
+	fetch 1,mem_le_receive_payload+1
+	store 1,mem_motor1_status
+	branch car_motor1_control
+car_reset_old_speed:
+	beq SPEED_LEVEL_2,car_reset_old_speed2
+	beq SPEED_LEVEL_3,car_reset_old_speed3
+	store 1,mem_motor1_speed
+	rtn
+car_reset_old_speed2:
+	jam SPEED_LEVEL_5,mem_motor1_speed
+	rtn
+car_reset_old_speed3:
+	jam SPEED_LEVEL_10,mem_motor1_speed
+	rtn
+car_speed_set_old:
+	fetch 1,mem_le_receive_payload
+	call car_reset_old_speed
+	fetch 1,mem_motor1_speed
+	call car_motor_speed_duty_setting
+	call car_motor_speed_duty_transform
+	jam 0x00,mem_pdatatemp+1	//pwm channel0
+	branch pwm_duty_cycle_set
+
+car_motor_control:
+	fetch 1,mem_car_24g_go_die_flag
+	nrtn blank
+	fetch 6,mem_le_receive_payload
+	store 6,mem_motor1_status
+	fetch 1,mem_motor1_speed
+	fetcht 1,mem_motor2_speed
+	iand temp,pdata
+	fetcht 1,mem_motor3_speed
+	iand temp,pdata
+	call car_motor_working_flag,blank	
+car_motor_control_common:
+	bpatch patch06_1,mem_patch06
+	fetch 2,mem_ui_state_map
+	isolate1 UI_STATE_BLE_CONNECTED,pdata
+	ncall car_lpm_timer_enable,true
+	call car_motor1_control
+	call car_motor2_control
+	branch car_conn_led_state
+
+car_conn_led_state:
+	fetch 1,mem_motor1_status
+	fetcht 1,mem_motor2_status
+	iadd temp,pdata
+	nbranch check_51cmd_led_on,blank
+	branch check_51cmd_led_off	
+
+car_motor1_control:
+	arg mem_motor1_status,contr
+	branch car_motor1_status_select
+car_motor2_control:
+	arg mem_motor2_status,contr
+	branch car_motor2_status_select
+car_motor3_control:
+	arg mem_motor3_status,contr
+	branch car_motor_status_select
+car_motor_working_flag:
+	jam 0,mem_car_working_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_motor_status_select:
+	bpatch patch06_2,mem_patch06
+	ifetch 1,contr
+	beq MOTOR_STOP,car_motor_stop
+	beq GO_FRONT,car_motor_positive
+	beq GO_BACK,car_motor_negative
+	rtn
+car_motor_positive:
+	jam 0,mem_motor_select_p_n
+	branch car_motor_negative+1
+car_motor_negative:
+	jam 1,mem_motor_select_p_n
+	ifetch 1,contr
+	store 1,mem_car_motor_speed
+	ifetch 8,regb
+	branch car_motor_work
+
+car_motor_stop:
+	ifetch 1,regb
+	call pwm_disable
+	increase 1,regb
+	ifetch 1,regb
+	branch pwm_disable
+car_motor_work:
+	store 8,mem_motor_pwm_pin1_set
+	jam 1,mem_car_working_flag
+	fetch 1,mem_motor_select_p_n
+	beq 0,car_motor_select_positive
+car_motor_select_negative:
+	fetch 1,mem_motor_pwm_pin2_set
+	store 1,mem_motor_pwm_pin_set
+	fetch 1,mem_motor_pwm_pin1_set
+car_motor_work_next:
+	call pwm_disable
+	fetch 1,mem_car_motor_speed
+	call car_motor_speed_duty_setting
+	store 1,mem_motor_pwm_dute_set
+	fetch 6,mem_motor_pwm_pin_set
+	store 6,mem_pdatatemp
+	branch pwm_out_set
+car_motor_select_positive:
+	fetch 1,mem_motor_pwm_pin1_set
+	store 1,mem_motor_pwm_pin_set
+	fetch 1,mem_motor_pwm_pin2_set
+	branch car_motor_work_next
+
+car_motor_speed_duty_setting:
+	mul32 pdata,5,pdata
+	add pdata,50,pdata
+	rtn
+car_motor_speed_duty_transform:
+	arg 12000,temp
+	imul32 temp,pdata
+	div pdata,100
+	call wait_div_end
+	quotient temp
+	copy temp,rega
+	setarg 12000
+	isub temp,regb
+	rtn
+
+car_ir_data_rx_from_app:
+	rtn
+
+car_led_control_receive:
+	fetch 8,mem_le_receive_payload
+	store 8,mem_car_led_control
+	rtn
+
+car_info_request:
+	fetch 1,mem_car_config_device_select
+	store 1,mem_car_info_request_payload
+	fetch 1,mem_car_config_motor_layout
+	store 1,mem_car_info_request_payload+1
+	fetch 1,mem_car_config_ir_enable
+	store 1,mem_car_info_request_payload+2
+	arg 13,loopcnt
+	arg mem_car_info_request_head,contr
+	call calc_check_sum_start
+	store 1,mem_car_info_request_checksum
+	arg mem_car_info_request,rega
+	branch queue_push
+
+
+/************************************G24 CAR RX FUNC START**************************************/
+car_g24_init:
+	setarg 0
+	store 8,mem_24g_bind_payload
+	call g24_receive_init
+	branch g24_mode_switch_init
+
+car_g24_receive_process:
+	call car_g24_mode_switch
+	call car_g24_work_mode
+	call car_g24_bind_mode
+	branch car_g24_lpm_dipatch
+
+car_g24_mode_switch:
+	call g24_mode_switch_bind_work
+car_g24_bind_mode_enable:
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_BIND
+	fetch 1,mem_car_24g_bind_enable_delay_count	//after power on 10s,enable bind
+	nbranch g24_switch_work_mode,blank
+	fetch 1,mem_car_24g_status	//after paired,disable bind mode
+	beq WORK_SEARCH,g24_switch_work_mode
+	rtn
+
+car_g24_work_mode:
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_WORK
+	call car_g24_work_mode_start
+	branch car_g24_ch_polling_clear,user3
+car_g24_receive_ch_polling:
+	fetch 1,mem_car_enter_lpm_flag
+	rtn blank
+	fetch 1,mem_car_24g_ch_polling
+	increase 1,pdata
+	store 1,mem_car_24g_ch_polling
+	beq 4,car_g24_ch_polling_clear
+	call g24_ch
+	call car_g24_receive_packet_start
+	nbranch car_g24_receive_ch_polling,user3
+car_g24_ch_polling_clear:
+	jam 0,mem_car_24g_ch_polling
+	rtn
+car_g24_work_mode_start:
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_WORK
+	call car_g24_work_init
+	call g24_ch_process
+	branch car_g24_receive_packet_start
+car_g24_work_init:
+	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_lap
+	fetch 4,mem_car_24g_commom_addr
+	branch g24_work_init+12
+car_g24_receive_packet_start:	
+	call g24_receive_transmit_ack
+	nbranch g24_rx_interrupt_clear,user3
+car_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
+	fetch 1,mem_24g_rxdata_temp+2
+	beq DATATYPE_ATTEMP,car_g24_data_attemp	//reconn packet
+	beq DATATYPE_DEVICE1,car_g24_data_device1	//mouse
+	branch g24_receive_packet_parse+14
+car_g24_data_attemp:
+	fetch 1,mem_24g_pair_mode
+	nrtn blank
+	fetch 1,mem_24g_bind_device_status
+	rtn blank
+	//call check_51cmd_led_on
+	branch g24_data_attemp	
+car_g24_data_device1:
+	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,car_g24_data_attemp_device1_abort
+	branch g24_data_device1+7
+car_g24_data_attemp_device1_abort:
+	fetch 1,mem_device_option
+	sub pdata,DVC_OP_CAR,null
+	call check_51cmd_led_on,zero
+	fetch 4,mem_24g_rxdata_temp+10
+	branch g24_store_device1_addr
+	
+car_g24_bind_mode:
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_BIND
+	call g24_bind_init
+	call car_g24_bind_device_addr
+
+	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 g24_bind_data_process+8
+
+	fetch 1,mem_24g_bind_device_status
+	nbranch car_g24_bind_mode_exit,blank
+	call g24_nodata_process
+	fetch 1,mem_24g_nodata_timer_enable
+	rtn blank
+	setarg 0
+	store 4,mem_24g_device1_addr
+	rtn
+car_g24_bind_mode_exit:
+	jam 0,mem_24g_mode_switch
+	arg 0,rega
+	call check_51cmd_led_on
+	call g24_switch_work_mode
+	call g24_timer_init
+
+        fetch 4,mem_24g_lap
+        store 4,mem_car_24g_commom_addr
+        fetch 1,mem_car_save_addr_flag
+        ncall car_g24_save_commom_addr,blank
+		
+	fetch 4,mem_car_24g_commom_addr
+	branch g24_update_addr_and_synccrc8
+
+car_g24_save_commom_addr:
+
+        fetch 1,mem_car_save_addr_flag
+        rtn blank
+	fetch 1,mem_24g_transmitter_addr+1	//Tx lap H
+	store 1,mem_car_24g_commom_addr+3
+
+	fetch 1,mem_24g_lap+1				//Rx lap H
+	store 1,mem_car_24g_commom_addr+2
+
+	fetch 1,mem_24g_transmitter_addr	//Tx lap L
+	store 1,mem_car_24g_commom_addr+1
+
+	fetch 1,mem_24g_lap					//Rx lap L
+	store 1,mem_car_24g_commom_addr
+ifdef CAR_TEST_FUNCTION
+        rtn
+endif // CAR_TEST_FUNCTION  	
+	call car_g24_search_commom_addr
+	fetch 4,mem_car_24g_commom_addr
+	fetcht 4,mem_car_24g_commom_addr_temp 
+	isub temp,null
+	rtn zero        
+        copy regc,regb
+        arg mem_car_24g_commom_addr,rega
+        arg 4,loopcnt        
+        branch otp_write
+        
+car_g24_load_commom_addr:
+
+        fetch 4,mem_24g_lap
+        store 4,mem_car_24g_commom_addr
+        fetch 1,mem_car_save_addr_flag
+        rtn blank
+ifdef CAR_TEST_FUNCTION
+        rtn
+endif // CAR_TEST_FUNCTION         
+        call car_g24_search_commom_addr
+        fetch 4,mem_car_24g_commom_addr_temp
+        rtn blank
+        store 4,mem_car_24g_commom_addr
+        rtn
+
+/* regc=otp start address and output */        
+car_g24_search_commom_addr:
+ifdef CAR_TEST_FUNCTION
+        rtn
+endif // CAR_TEST_FUNCTION 
+        fetch 1,mem_car_save_addr_flag
+        rtn blank
+        arg OTP_OFFSET_CAR_COMMOM_START_ADDR,regc
+car_g24_search_commom_addr_loop:
+        copy regc,regb
+        arg mem_car_24g_commom_addr_read,rega
+        arg 4,loopcnt
+        call otp_read_data
+        fetch 4,mem_car_24g_commom_addr_read
+        rtn blank    
+        store 4,mem_car_24g_commom_addr_temp
+        copy regc,pdata
+        arg OTP_OFFSET_CAR_COMMOM_END_ADDR,temp
+        isub temp,null
+        rtn positive        
+        increase 4,regc
+        branch car_g24_search_commom_addr_loop
+        
+car_g24_bind_device_addr:
+	fetch 4,mem_24g_device1_addr
+	rtn blank
+	branch g24_update_addr_and_synccrc8
+
+car_g24_cb_data_device1:
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BLE_CONNECTED
+	fetch 2,mem_car_24g_no_data_timeout_count
+	store 2,mem_car_24g_no_data_timeout_timer
+	jam WORK_PAIRED,mem_car_24g_received_pac
+	arg mem_24g_rxdata_temp+3,rega
+	branch car_24g_receive_data
+
+car_g24_lpm_dipatch:
+	fetch 1,mem_car_enter_lpm_flag
+	rtn blank
+	call car_g24_lpm_wait
+	nrtn user
+	fetch 3,mem_24g_enter_hibernate	//about 1000ms
+	call clk2lpo
+	storet 4,mem_sleep_counter
+  	branch lpm_sleep
+car_g24_lpm_wait:
+	enable user
+	call lpo_calibration
+	fetch 3,mem_clks_per_lpo
+	branch disable_user,blank
+	branch car_le_process_lpm_before
+
+endif
+
+
+
Index: usb_pc_ai_voice/program/app_car_remote.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_car_remote.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_car_remote.prog	(working copy)
@@ -0,0 +1,466 @@
+ifdef COMPILE_REMOTE_CAR
+//define REMOTE_TEST_FUNCTION
+remote_car_init:
+	rtn wake	
+	call remote_car_default_init
+	call keyscan_key_init
+	setarg remote_car_g24_package_data
+	store 2,mem_cb_24g_transmit_data
+
+	setarg remote_car_process_lpm_before
+	store 2,mem_cb_24g_lpm_before
+	
+	setarg remote_car_le_before_hibernate
+	store 2,mem_cb_before_hibernate
+	
+	setarg remote_car_scale_process_idle
+	store 2,mem_cb_idle_process	
+	
+	setarg remote_car_scale_process_bb_event
+	store 2,mem_cb_bb_event_process
+
+	setarg remote_car_event_timer
+	store 2,mem_cb_event_timer
+	
+	setarg remote_car_power_off_signal
+	store 2,mem_remote_car_power_off_cb
+	
+	setarg remote_car_soft_switch_power_on_signal
+	store 2,mem_remote_car_power_standby_cb
+	
+	
+	bpatch patch06_3,mem_patch06
+	call set_eeprom_size_2k
+	call remote_car_init_environment
+
+	call queue_init
+	fetch 1,mem_remote_car_config_soft_switch_enable
+	store 1,mem_remote_car_hard_soft_switch
+	beq HARD_SWITCH, remote_car_hard_switch_power_on_signal
+	fetch 1,mem_remote_car_config_soft_switch_gpio
+	store 1,mem_ui_button_gpio
+remote_car_soft_switch_power_on_init:
+	call remote_car_ui_led_init
+	call ui_button_init
+	call ui_button_polling
+	jam POWER_STARTING,mem_remote_car_power_state
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BTN_DOWN
+	branch app_enter_hibernate
+
+
+
+remote_car_hard_switch_power_on_signal:
+	jam POWER_STANDBY,mem_remote_car_power_state
+remote_car_soft_switch_power_on_signal:
+	call remote_car_ui_led_init
+	arg 0,rega
+	call ui_led_blink_start_global
+ifdef REMOTE_TEST_FUNCTION	
+	branch g24_pair_start
+endif //REMOTE_TEST_FUNCTION	
+	call remote_car_g24_load_commom_addr
+	fetch 4,mem_remote_24g_commom_addr
+	store 4,mem_24g_addr	
+	branch g24_pair_start,blank
+	fetch 4,mem_24g_addr
+	store 4,mem_24g_receiver_addr
+	fetch 2,mem_24g_reconn_timeout_init
+	store 2,mem_24g_reconn_timeout
+	branch g24_reconn_start
+
+remote_car_set_24g_addr_eeprom:
+	arg 4,temp
+	arg mem_24g_addr,rega
+	arg REMOTE_INFO_EEPROM_OFFECT,regb
+	rtn
+
+
+remote_car_power_off_signal:	
+remote_car_ui_led_init:
+	bpatch patch06_4,mem_patch06
+	fetch 1,mem_remote_car_config_connect_led_gpio
+	bne INVALID_PIN_NUM,remote_car_pairing_led_gpio_set
+remote_car_ui_led_init_1:
+	fetcht 1, mem_remote_car_led_map
+	branch gpio_config_output
+remote_car_pairing_led_gpio_set:
+	store 1,mem_remote_car_led_map
+	branch remote_car_ui_led_init_1
+
+
+remote_car_init_environment:
+	call g24_transmit_init
+remote_no_data_timer_init:
+	fetch 2,mem_remote_car_no_data_timeout
+	store 2,mem_remote_car_no_data_timer
+	rtn
+
+remote_car_le_before_hibernate:
+	call remote_car_process_lpm_before
+remote_gpio_set_before_hibernate:
+	fetch 1,mem_remote_style_struct_led_gpio
+	set1 7,pdata
+	arg gpcfg_output_high,temp
+	branch gpio_config_function
+
+remote_car_process_lpm_before:
+	call gpio_set_before_lpm
+	branch keyscan_process_lpm_before
+
+remote_car_key_scan_process:
+	call keyscan_key_process
+	call get_remote_key_state
+	call remote_conn_led_state
+	branch send_data
+
+remote_conn_led_state:
+	fetch 1,mem_remote_car_24g_status
+	rtnne WORK_PAIRED
+	fetch 4,mem_remote_car_motor1_key0_press_state
+	branch remote_car_stop_state,blank
+	jam 0,mem_remote_car_no_data_check
+	enable user
+	branch check_51cmd_led_on
+remote_car_stop_state:
+	fetch 1,mem_remote_car_no_data_check
+	rtneq 0xff
+	pincrease 1
+	store 1,mem_remote_car_no_data_check
+	disable user
+	branch check_51cmd_led_off
+
+	
+get_remote_key_state:
+	fetcht 2,mem_key_value_retention
+	and temp,0x01,pdata
+	rshift temp,temp
+	store 1,mem_remote_car_motor1_key0_press_state
+	and temp,0x01,pdata
+	rshift temp,temp
+	store 1,mem_remote_car_motor1_key1_press_state
+	and temp,0x01,pdata
+	rshift temp,temp
+	store 1,mem_remote_car_motor2_key2_press_state
+	and temp,0x01,pdata
+	rshift temp,temp
+	store 1,mem_remote_car_motor2_key3_press_state
+	rtn
+send_data:
+	bpatch patch06_5,mem_patch06
+	call remote_car_fb_check
+	call remote_car_lr_check
+	call remote_car_no_data_timeout_check
+	nrtn user
+	branch remote_car_send_key 
+
+
+remote_car_no_data_timeout_check:
+	fetch 1,mem_remote_car_24g_status
+	rtnne WORK_PAIRED
+	fetch 1,mem_remote_car_no_data_check
+	rtn blank
+	sub pdata,1,null
+	nrtn positive
+	fetch 2,mem_24g_reconn_timeout_init
+	store 2,mem_24g_reconn_timeout
+	branch enable_user
+
+
+	
+remote_car_fb_check:
+	fetch 1,mem_remote_car_motor1_key0_press_state
+	nbranch remote_car_send_motor1_key0_press,blank
+	fetch 1,mem_remote_car_motor1_key1_press_state
+	nbranch remote_car_send_motor1_key1_press,blank
+	branch remote_car_send_motor1_key0_rel
+	
+remote_car_lr_check:
+	fetch 1,mem_remote_car_motor2_key2_press_state
+	nbranch remote_car_send_motor2_key2_press,blank
+	fetch 1,mem_remote_car_motor2_key3_press_state
+	nbranch remote_car_send_motor2_key3_press,blank
+	branch remote_car_send_motor2_key2_rel
+
+
+remote_car_scale_process_idle:
+	call remote_car_24g_status_process
+	branch remote_car_key_scan_process
+
+remote_car_scale_process_bb_event:
+	copy regc,pdata
+	beq BT_EVT_BUTTON_UP,app_event_button_up
+	beq BT_EVT_BUTTON_LONG_PRESSED,app_button_long_pressed
+	beq BT_EVT_24G_PAIRING_COMPLETE,remote_car_24g_pairing_complete
+	beq BT_EVT_24G_ATTEMPT_SUCCESS,remote_car_24g_attempt_success
+	beq BT_EVT_24G_ATTEMPT_FAIL,remote_car_24g_attempt_fail
+	rtn
+
+remote_car_24g_attempt_fail:
+	branch g24_txbuf_clear
+
+remote_car_24g_pairing_complete:
+	bpatch patch06_6,mem_patch06
+        fetch 4,mem_24g_receiver_addr
+        store 4,mem_remote_24g_commom_addr
+        fetch 1,mem_remote_save_addr_flag
+        ncall remote_car_g24_save_commom_addr,blank
+	fetch 4,mem_remote_24g_commom_addr
+	call g24_update_addr_and_synccrc8        
+	//call remote_car_set_24g_addr_eeprom
+	//call iicd_write_protect_eep_data
+remote_car_24g_attempt_success:
+	jam 0,mem_24g_conn_sm
+	jam WORK_PAIRED,mem_remote_car_24g_auto_work_step
+	jam WORK_PAIRED,mem_remote_car_24g_pair_success_flag
+	jam 0,mem_24g_reconn_timeout		
+	rtn
+remote_car_g24_save_commom_addr:
+    
+
+        fetch 1,mem_remote_save_addr_flag
+        rtn blank
+	fetch 1,mem_24g_lap+1				//Tx lap H
+	store 1,mem_remote_24g_commom_addr+3
+
+	fetch 1,mem_24g_receiver_addr+1		//Rx lap H
+	store 1,mem_remote_24g_commom_addr+2
+
+	fetch 1,mem_24g_lap					//Tx lap L
+	store 1,mem_remote_24g_commom_addr+1
+
+	fetch 1,mem_24g_receiver_addr		//Rx lap L
+	store 1,mem_remote_24g_commom_addr
+ifdef REMOTE_TEST_FUNCTION
+        rtn
+endif // REMOTE_TEST_FUNCTION 
+	call remote_car_g24_search_commom_addr
+	fetch 4,mem_remote_24g_commom_addr
+	fetcht 4,mem_remote_24g_commom_addr_temp 
+	isub temp,null
+	rtn zero	
+        copy regc,regb
+        arg mem_remote_24g_commom_addr,rega
+        arg 4,loopcnt        
+        branch otp_write
+        
+remote_car_g24_load_commom_addr:
+ifdef REMOTE_TEST_FUNCTION
+        rtn
+endif // REMOTE_TEST_FUNCTION 
+        fetch 1,mem_remote_save_addr_flag
+        rtn blank
+        call remote_car_g24_search_commom_addr
+        fetch 4,mem_remote_24g_commom_addr_temp
+        rtn blank
+        store 4,mem_remote_24g_commom_addr  
+        rtn
+
+/* regc=otp start address and output */        
+remote_car_g24_search_commom_addr:
+ifdef REMOTE_TEST_FUNCTION
+        rtn
+endif // REMOTE_TEST_FUNCTION 
+        fetch 1,mem_remote_save_addr_flag
+        rtn blank       
+        arg OTP_OFFSET_REMOTE_COMMOM_START_ADDR,regc
+remote_car_g24_search_commom_addr_loop:
+        copy regc,regb
+        arg mem_remote_24g_commom_addr_temp,rega
+        arg 4,loopcnt
+        call otp_read_data
+        fetch 4,mem_remote_24g_commom_addr_read
+        rtn blank        
+        store 4,mem_remote_24g_commom_addr_temp
+        copy regc,pdata
+        arg OTP_OFFSET_REMOTE_COMMOM_END_ADDR,temp
+        isub temp,null
+        rtn positive        
+        increase 4,regc
+        branch remote_car_g24_search_commom_addr_loop
+        
+remote_car_24g_status_process:
+	fetch 1,mem_remote_car_24g_auto_work_step
+	rtneq POWER_ON
+	fetch 1,mem_remote_car_24g_status
+	rtneq WORK_PAIRED
+	jam WORK_PAIRED,mem_remote_car_24g_status
+remote_car_scale_process_paired:
+	arg 0,rega
+	branch ui_led_off_global
+remote_car_scale_process_shutdown:
+	arg 0,rega
+	call ui_led_off_global
+	call remote_car_ui_led_init
+	branch app_enter_hibernate
+	
+remote_car_event_timer:
+	call app_power_timer
+	call g24_pair_timeout_timer
+	call g24_reconn_timeout_timer	
+	branch remote_car_no_data_timer
+
+remote_car_no_data_timer:
+	fetch 1,mem_remote_car_config_timeout_shutdown_enable
+	rtn blank
+	fetch 1,mem_key_value_retention
+	nbranch remote_no_data_timer_init,blank
+	arg mem_remote_car_no_data_timer,regc
+	arg remote_car_scale_process_shutdown,regb
+	branch timer_single_step_2B
+
+
+//cross key,control front-back motor layout
+remote_car_send_motor1_key0_press:	//front
+	jam MOTOR_POSITIVE,mem_remote_car_24g_motor1_payload
+	rtn
+remote_car_send_motor1_key1_press:	//back
+	jam MOTOR_NEGATIVE,mem_remote_car_24g_motor1_payload
+	rtn
+remote_car_send_motor2_key2_press:	//left
+	jam MOTOR_POSITIVE,mem_remote_car_24g_motor2_payload
+	rtn
+remote_car_send_motor2_key3_press:	//right
+	jam MOTOR_NEGATIVE,mem_remote_car_24g_motor2_payload
+	rtn
+
+
+remote_car_send_motor1_key0_rel:
+remote_car_send_motor1_key1_rel:
+	jam MOTOR_STOP,mem_remote_car_24g_motor1_payload
+	rtn
+remote_car_send_motor2_key2_rel:
+remote_car_send_motor2_key3_rel:
+	jam MOTOR_STOP,mem_remote_car_24g_motor2_payload
+	rtn
+	
+remote_car_send_key:
+	arg mem_remote_car_24g_motor_packet,rega
+	branch queue_push
+remote_car_send_attack:
+	arg mem_remote_car_24g_fire_packet,rega
+	branch queue_push
+
+remote_car_g24_package_data:
+	fetch 1,mem_remote_car_24g_pair_success_flag
+	beq WORK_PAIRED,remote_car_g24_send_empty
+	arg mem_remote_car_24g_tx_temp,rega
+	call queue_pop
+	nbranch remote_car_moto_data,user
+remote_car_g24_package_data_continue:
+	arg mem_remote_car_24g_tx_temp,contr
+	ifetch 1,contr
+	copy pdata,rega
+	arg mem_remote_car_24g_tx_temp+1,regb
+	//rega: length
+	//regb: tx buffer
+	rtn
+	
+remote_car_g24_send_empty:
+	jam 0,mem_remote_car_24g_pair_success_flag
+	enable user
+	arg 1,rega
+	arg mem_remote_car_empty_packet,regb
+	rtn
+	
+remote_car_moto_data:
+	fetch 1,mem_remote_car_24g_tx_temp+3	//cmd
+	beq CAR_CMD_L_R_MOTOR_CONTROL,remote_car_moto_data_next
+	beq CAR_CMD_F_B_MOTOR_CONTROL,remote_car_moto_data_next
+	rtn
+remote_car_moto_data_next:
+	fetch 1,mem_remote_car_24g_tx_temp+6	//data moto1
+	nbranch remote_car_moto_data_enable_user,blank
+	fetch 1,mem_remote_car_24g_tx_temp+8	//data moto2
+	nbranch remote_car_moto_data_enable_user,blank
+	fetch 1,mem_remote_car_24g_tx_temp+10	//data moto3
+	nbranch remote_car_moto_data_enable_user,blank
+	rtn
+remote_car_moto_data_enable_user:
+	enable user
+	branch remote_car_g24_package_data_continue
+
+
+
+/*************remote car default_init starting*********************/
+remote_car_default_init:
+	jam 0x14,mem_ui_button_timeout
+	jam 0x01,mem_ui_button_last_state
+	setarg 0x060f
+	store 2,mem_remote_car_queue_each_size
+	setarg mem_remote_car_queue_each_size
+	store 2,mem_queue_ptr
+	jam 0x01,mem_lpm_mode
+	jam 0x06,mem_lpm_overhead
+	jam 0x02,mem_lpm_mult_timeout
+	jam 0x00,mem_remote_car_hard_soft_switch
+	setarg mem_remote_style_led_type
+	store 2,mem_ui_led_struct_ptr
+	jam 0x01,mem_ui_led_struct_num
+	jam 0xff,mem_remote_style_blink_count
+	setarg 0x0296
+	store 2,mem_remote_style_on_time
+	setarg 0x073a
+	store 2,mem_remote_style_off_time
+	setarg mem_remote_car_soft_power
+	store 2,mem_power_param_ptr
+	setarg 0x0c0c
+	store 2,mem_remote_car_power_off_timeout
+	setarg mem_remote_car_keyscan
+	store 2,mem_keyscan_ptr
+	jam 0x00,mem_remote_car_config_soft_switch_enable
+	jam 0xff,mem_remote_car_config_connect_led_gpio
+	jam 0xff,mem_remote_car_config_soft_switch_gpio
+	jam 0x00,mem_remote_car_config_key_map
+	jam 0x00,mem_remote_car_config_layout
+	jam 0x00,mem_remote_car_config_check_way
+	jam 0x01,mem_remote_car_config_timeout_shutdown_enable
+	setarg 0x4e55
+	store 2,mem_current_vdd_value_default_mid_x
+	store 2,mem_current_vdd_value_default_mid_y
+	setarg 0x0007
+	store 2,mem_current_vdd_default_range
+	jam 0x02,mem_adc_config_flag
+	setsect 0,0x35a0c
+	setsect 1,0x11a
+	setsect 2,0x60
+	setsect 3,0x28
+	store 9,mem_remote_car_24g_motor_packet
+	setsect 0,0x2000a
+	setsect 1,0x02
+	istore 4,contw
+	setsect 0,0x35a08
+	setsect 1,0x19a
+	setsect 2,0x00
+	setsect 3,0x00
+	store 9,mem_remote_car_24g_fire_packet
+	setarg 0x0064
+	store 2,mem_remote_car_no_data_timeout
+	jam TX_POWER_0DB,mem_tx_power
+	jam 0x01,mem_24g_data_type		//24g init
+	jam 0x06,mem_24g_max_retry
+	jam 0x01,mem_24g_pair_switch
+	jam 0x00,mem_24g_fast_conn_enable
+	call g24_rx_window_init
+	call g24_interval_param_8ms
+	call g24_chmap_param_init
+
+	//call g24_pair_param_init
+	setarg 0x0708
+	store 2,mem_24g_pair_timeout_init
+	setarg 0x0050
+	store 2,mem_24g_reconn_timeout_init
+	setarg 0x0a7700
+	store 3,mem_24g_long_sleep_set
+	setarg 0x604800
+	store 3,mem_24g_enter_hibernate	
+	rtn
+
+/*************remote car default_init ending*********************/
+
+else
+remote_car_init:
+	rtn
+endif
+
+
Index: usb_pc_ai_voice/program/app_dongle.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_dongle.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_dongle.prog	(working copy)
@@ -0,0 +1,553 @@
+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_7,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 patch07_0,mem_patch07
+	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_1,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:
+	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 0x3f,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 30,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:
+	call dongle_g24_ms_blank_data
+	call dongle_g24_kb_blank_data
+	call dongle_g24_kb_sys_ctrl_blank_data
+	branch dongle_g24_kb_mul_blank_data
+
+dongle_g24_ms_blank_data:
+	bpatch patch07_2,mem_patch07
+	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:
+	bpatch patch07_3,mem_patch07
+	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:
+	bpatch patch07_4,mem_patch07
+	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_usb_dispatch:
+	bpatch patch07_5,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:
+	jam FW_VERSION0,mem_usb0_get_report_data+1
+	jam FW_VERSION1,mem_usb0_get_report_data+2
+	jam FW_VERSION2,mem_usb0_get_report_data+3
+	jam FW_VERSION3,mem_usb0_get_report_data+4
+	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_6,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:
+	jam 1,mem_24g_ackpayload_enable
+	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,dongle_g24_bind_ackpayload_prep
+	beq DATATYPE_ATTEMP,dongle_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
+	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_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: usb_pc_ai_voice/program/app_flippen.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_flippen.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_flippen.prog	(working copy)
@@ -0,0 +1,631 @@
+
+
+ifdef COMPILE_PEN
+
+//flippen_init:
+//	branch flippen_cb_function
+
+
+flippen_cb_function:
+	setarg flippen_24g_package_data
+	store 2,mem_cb_24g_transmit_data
+	setarg flippen_bb_event_timer
+	store 2,mem_cb_event_timer
+	rtn
+
+flippen_24g_package_data:
+	call flippen_txpayload_config
+	nrtn user
+	copy regb,contr
+	arg mem_24g_txpayload_buf,contw
+	call memcpy8
+	ifetch 1,contr
+	istore 1,contw
+	fetch 4,mem_24g_receiver_addr
+	istore 4,contw
+	fetch 1,mem_release_data_from_receiver_enable
+	store 1,mem_24g_txpayload_buf+7
+flippen_24g_package_data_filling:
+	jam TYPE_KB,mem_24g_data_type
+	arg 13,rega	//length
+	arg mem_24g_txpayload_buf,regb	//regb: the pointer of txbuff
+	rtn
+
+flippen_txpayload_config:
+	disable user
+	call flippen_keyscan_key_process
+	nbranch flippen_24g_poweron_first_blank_data_enable,user
+	//jam 1,mem_ssp_enable		//need check
+	//jam SP_KEY_VALID,mem_sp_local_key_invalid
+	fetch 1,mem_customer_key
+	nbranch flippen_24g_keyboard_package_data,blank
+	rtn
+
+flippen_24g_keyboard_package_data:
+	call flippen_g24_txbuf_clear
+	fetch 1,mem_customer_data_trigger
+	nbranch flippen_key_press_judge,blank
+	jam 0,mem_key_state
+	fetch 1,mem_release_data_from_receiver_enable
+	nrtn blank
+flippen_24g_key_release:
+	jam 1,mem_release_data_from_transmiter_enable
+flippen_24g_key_release_filling:
+	arg mem_customer_key_release,regb	//tx buff
+	rtn
+
+flippen_24g_poweron_first_blank_data_enable:
+	fetch 1,mem_poweron_first_blank_data_enable
+	rtnne 1
+	jam 2,mem_poweron_first_blank_data_enable
+	enable user
+	call flippen_24g_release_data_from_receiver_enable
+	branch flippen_24g_key_release_filling
+
+flippen_key_press_judge:
+	bpatch patch07_7,mem_patch07
+	fetch 1,mem_customer_key
+	copy pdata,regc
+	jam 1,mem_send_package_before_check
+	call flippen_key_check_once	
+	nbranch flippen_combination_key_down_check,blank
+flippen_key_press_judge_next:
+	jam 0,mem_send_package_before_check
+	fetch 1,mem_combination_key_down_flag
+	nbranch flippen_key_function_disable,blank
+	jam 1,mem_key_state
+	copy regc,pdata
+	bbit1 0,flippen_key0_data_store
+	bbit1 1,flippen_key1_data_store
+	rtn
+	
+flippen_commbination_key_press_process:
+	setarg 0
+	store 2,mem_key0_long_press_flag
+	store 2,mem_key0_press_timer_count
+	store 1,mem_send_package_before_check
+	jam 1,mem_combination_key_down_flag
+	branch disable_user
+
+flippen_key_function_disable:
+	setarg 0
+	store 2,mem_key0_long_press_flag
+	store 2,mem_key0_press_timer_count
+	fetch 1,mem_key_disable_timer
+	nrtn blank
+	jam 3,mem_key_disable_timer
+	branch disable_user
+
+flippen_g24_txbuf_clear:
+	arg mem_24g_txbuf,contw 
+	call memset0_16
+	branch memset0_16
+	
+flippen_24g_release_data_from_receiver_enable:
+	jam 1,mem_release_data_from_receiver_enable
+	jam 0,mem_release_data_from_transmiter_enable
+	rtn
+
+flippen_24g_release_data_from_receiver_disable:
+	jam 0,mem_release_data_from_receiver_enable
+	jam 1,mem_release_data_from_transmiter_enable
+	rtn
+
+
+flippen_key0_data_store:
+	fetch 1,mem_key0_long_press_flag
+	nbranch flippen_key0_longpress_data_store,blank
+flippen_key0_shortpress_data_store:
+	call flippen_24g_release_data_from_receiver_enable
+	arg mem_key_pageup_data,regb
+	rtn	
+flippen_key0_longpress_data_store:
+	fetch 1,mem_key0_long_press_flag
+	nrtn blank
+	jam 1,mem_key0_long_press_flag
+	call flippen_24g_release_data_from_receiver_enable
+	fetch 1,mem_key0_long_press_event
+	beq 0,flippen_shift_f5_data_store
+	beq 1,flippen_esc_data_store
+	rtn
+
+flippen_shift_f5_data_store:
+	jam 1,mem_key0_long_press_event
+	arg mem_key_shift_f5_data,regb
+	rtn
+flippen_esc_data_store:
+	jam 0,mem_key0_long_press_event
+	arg mem_key_esc_data,regb
+	rtn
+
+flippen_key1_data_store:
+	fetch 1,mem_key1_long_press_flag
+	nbranch flippen_key1_longpress_data_store,blank
+flippen_key1_shortpress_data_store:	
+	call flippen_24g_release_data_from_receiver_enable
+	arg mem_key_pagedown_data,regb
+	rtn
+flippen_key1_longpress_data_store:
+	fetch 1,mem_key1_long_press_flag
+	nrtn blank
+	call flippen_24g_release_data_from_receiver_enable	
+	jam 1,mem_key1_long_press_flag
+	arg mem_key_b_data,regb
+	rtn
+
+flippen_key_check_once:
+	jam 0,mem_customer_key
+	arg 0,rega
+	fetcht 1,mem_flippen_key0_gpio
+	call gpio_get_bit
+	setflag true,0,rega
+	fetcht 1,mem_flippen_key1_gpio
+	call gpio_get_bit
+	setflag true,1,rega
+	fetcht 1,mem_flippen_key2_gpio
+	call gpio_get_bit
+	setflag true,2,rega
+	fetcht 1,mem_flippen_key3_gpio
+	call gpio_get_bit
+	setflag true,3,rega
+	fetcht 1,mem_flippen_key4_gpio
+	call gpio_get_bit
+	setflag true,4,rega
+	fetcht 1,mem_flippen_key5_gpio
+	call gpio_get_bit
+	setflag true,5,rega
+	fetcht 1,mem_flippen_key6_gpio
+	call gpio_get_bit
+	setflag true,6,rega
+	fetcht 1,mem_flippen_key7_gpio
+	call gpio_get_bit
+	setflag true,7,rega
+	copy rega,pdata
+	call flippen_key_long_press_flag_clear,blank
+	copy rega,pdata
+	rtn
+flippen_key_long_press_flag_clear:
+	fetch 2,mem_key0_long_press_flag
+	rtn blank
+	setarg 0
+	store 2,mem_key0_long_press_flag
+	store 1,mem_24g_calculate_package_id_disable
+	rtn
+
+
+flippen_keyscan_key_process:
+	arg key_scan_timer,queue
+	call timer_check
+	nrtn blank
+	call flippen_key_check
+	setarg 0x10//10ms
+	arg key_scan_timer,queue
+	branch timer_init
+
+flippen_key_check:
+	disable user
+	call flippen_check_key_gpio
+	call flippen_24g_user_check
+	branch flippen_no_data_timer_init,user
+	rtn
+
+flippen_24g_user_check:
+	rtnmark0 mark_24g
+	copy rega,pdata
+	rtn blank
+	branch enable_user
+
+flippen_no_data_timer_init:
+	fetch 2,mem_flippen_no_data_timeout
+	store 2,mem_mouse_no_data_timer
+	rtn
+
+flippen_start_pair_no_data_timer_init:
+	fetch 2,mem_flippen_start_pair_no_data_timeout
+	store 2,mem_mouse_no_data_timer
+	rtn
+
+flippen_check_key_gpio:
+	bpatch patch08_0,mem_patch08
+	fetch 1,mem_customer_key
+	copy pdata,rega
+	call flippen_check_key0_gpio	//pageup
+	call flippen_check_key1_gpio	//pagedown
+	copy rega,pdata
+	store 1,mem_customer_key
+	rtn
+
+flippen_check_key0_gpio:
+	jam PEN_KEY0,mem_mouse_key_temp
+	fetcht 1,mem_flippen_key0_gpio
+	fetch 1,mem_flippen_key0_press_status
+	call flippen_check_key_connect_gnd
+	copy regc,pdata
+	store 1,mem_flippen_key0_press_status
+	copy rega,pdata
+	bbit1 PEN_KEY0,flippen_key_press_setting
+	call flippen_key_release_setting
+	branch mouse_check_customerkey_gpio_exit
+
+flippen_check_key1_gpio:
+	jam PEN_KEY1,mem_mouse_key_temp
+	fetcht 1,mem_flippen_key1_gpio
+	fetch 1,mem_flippen_key1_press_status
+	call flippen_check_key_connect_gnd
+	copy regc,pdata
+	store 1,mem_flippen_key1_press_status
+	copy rega,pdata
+	bbit1 PEN_KEY1,flippen_key_press_setting
+	call flippen_key_release_setting
+	branch mouse_check_customerkey_gpio_exit
+
+flippen_check_key_connect_gnd:	
+	lshift pdata,pdata
+	copy pdata,regb
+	call gpio_get_bit
+	setflag true,0,regb
+	and regb,KEY_PRESS_COUNT,pdata
+	copy pdata,regc
+	fetcht 1,mem_mouse_key_temp
+	copy temp,queue
+	beq KEY_PRESS_COUNT,flippen_key_press_check		
+	beq KEY_PRESS_NONE,flippen_key_release_check
+	rtn	
+
+flippen_key_press_check:
+	fetch 1,mem_mouse_key_temp
+	beq PEN_KEY0,flippen_key0_press_timer_count
+	beq PEN_KEY1,flippen_key1_press_timer_count
+	rtn
+
+flippen_key0_press_timer_count:
+	fetcht 1,mem_key0_press_timer_count
+	increase 1,temp
+	storet 1,mem_key0_press_timer_count
+	arg 60,pdata		// about 600ms
+	isub temp,null
+	nbranch flippen_key0_long_press,positive
+	jam 1,mem_key0_short_press_flag
+	rtn
+
+flippen_key1_press_timer_count:
+	fetcht 1,mem_key1_press_timer_count
+	increase 1,temp
+	storet 1,mem_key1_press_timer_count
+	arg 60,pdata		// about 600ms
+	isub temp,null
+	nbranch flippen_key1_long_press,positive
+	jam 1,mem_key1_short_press_flag
+	rtn
+
+flippen_key0_long_press:
+	fetch 1,mem_key0_long_press_flag
+	nbranch flippen_24g_calculate_package_id_disable,blank	
+	jam 1,mem_key0_long_press_flag	
+	branch mouse_key_press
+
+flippen_key1_long_press:
+	fetch 1,mem_key1_long_press_flag
+	nbranch flippen_24g_calculate_package_id_disable,blank	
+	jam 1,mem_key1_long_press_flag	
+	branch mouse_key_press
+
+flippen_24g_calculate_package_id_disable:
+	jam 1,mem_24g_calculate_package_id_disable
+	rtn
+
+
+flippen_key_release_check:
+	fetch 1,mem_mouse_key_temp
+	beq PEN_KEY0,flippen_key0_release
+	beq PEN_KEY1,flippen_key1_release
+	rtn
+
+flippen_key0_release:
+	arg 0,regc
+	jam 0,mem_key0_long_press_flag
+	fetch 1,mem_key0_press_timer_count
+	branch flippen_key0_release_set,blank
+	jam 0,mem_key0_press_timer_count	
+	fetch 1,mem_key0_long_press_flag
+	nbranch flippen_key0_release_set,blank
+	jam 0,mem_key0_short_press_flag
+	branch mouse_key_press	
+
+flippen_key0_release_set:	
+	jam 0,mem_key0_long_press_flag
+	branch mouse_key_release
+
+flippen_key1_release:
+	arg 0,regc
+	jam 0,mem_key1_long_press_flag
+	fetch 1,mem_key1_press_timer_count
+	branch mouse_key_release,blank
+	jam 0,mem_key1_press_timer_count
+	fetch 1,mem_key1_long_press_flag
+	nbranch flippen_key1_release_set,blank
+	branch mouse_key_press
+
+flippen_key1_release_set:	
+	jam 0,mem_key1_long_press_flag
+	branch mouse_key_release
+
+
+flippen_key_press_setting:
+	fetch 1,mem_customer_data_trigger
+	qset1 pdata
+	store 1,mem_customer_data_trigger
+	call flippen_key_data_need_send
+	branch mouse_check_customerkey_gpio_exit
+
+flippen_key_release_setting:
+	fetch 1,mem_customer_data_trigger
+	qset0 pdata
+	store 1,mem_customer_data_trigger
+
+	fetch 1,mem_customer_data_trigger_last
+	qisolate1 pdata
+	nrtn true
+	jam 0,mem_24g_calculate_package_id_disable
+	call mouse_key_press 
+flippen_key_data_need_send:
+	fetch 1,mem_customer_key
+	qset1 pdata
+	store 1,mem_customer_key
+flippen_calculate_package_id:
+	fetch 1,mem_24g_calculate_package_id_disable
+	nrtn blank
+	jam 0,mem_24g_package_id_abandon_flag
+	fetch 1,mem_24g_package_id
+	increase 1,pdata
+	store 1,mem_24g_package_id
+	rtn
+
+
+flippen_bb_event_timer:
+	call mouse_adc_read
+	//call flippen_low_voltage_led_timer
+	//call flippen_low_voltage_led_blink_start_timer
+	call mouse_led_multi_timer	
+	call flippen_g24_pair_timeout_timer
+	call g24_reconn_timeout_timer
+	call flippen_commbination_key_process
+	call flippen_key_longpress_enter_hibernatet_timer
+	call flippen_key_disable_timer
+	call mouse_store_information_delay_timer
+	branch flippen_check_no_data_timeout_timer
+
+flippen_g24_pair_timeout_timer:
+	arg mem_24g_pair_timeout,regc
+	arg flippen_g24_stop_24g_mode,regb
+	branch timer_single_step_2B
+flippen_g24_stop_24g_mode:
+	call g24_pair_exit
+	branch g24_stop_24g_mode
+
+flippen_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
+flippen_commbination_key_start:
+	storet 1,mem_mouse_commbination_key
+	call flippen_key_check_once
+	fetcht 1,mem_mouse_commbination_key
+	isub temp,null
+	branch flippen_commbination_key_down,zero
+flippen_commbination_key_up:
+	call flippen_key0_press_count_clear,blank
+	branch mouse_commbination_key_up
+flippen_key0_press_count_clear:
+	fetch 1,mem_key0_short_press_flag
+	nrtn blank
+	jam 0,mem_key0_press_timer_count
+	rtn
+
+flippen_commbination_key_down:
+	call flippen_combination_ui_timer
+	branch mouse_commbination_key_down+1
+
+flippen_combination_ui_timer:
+	arg flippen_24g_start_pair_mode_before,regb
+	branch mouse_combination_ui_timer+1
+
+flippen_24g_start_pair_mode_before:
+	jam 1,mem_combination_key_longpress_flag
+	call flippen_start_pair_no_data_timer_init
+flippen_24g_start_pair_mode:
+	jam 1,mem_24g_pair_enable_flag
+	jam 0,mem_24g_no_ack
+	jam 0,mem_24g_reconn_type
+	fetch 1,mem_24g_ch
+	store 1,mem_24g_ch_work
+	branch mouse_24g_start_pair_mode
+
+flippen_key_longpress_enter_hibernatet_timer:
+	call flippen_key_check_once
+	store 1,mem_key_press_state
+	nbranch flippen_combination_key_down_check,blank
+flippen_combination_key_up:
+flippen_combination_key_init:
+	fetch 1,mem_send_package_before_check
+	nbranch flippen_commbination_key_press_process,blank
+	fetch 2,mem_key_longpress_timer_init
+	store 2,mem_key_longpress_timer
+	rtn
+
+flippen_combination_key_down_check:
+	bne 0x01,flippen_check_next_key1
+	branch flippen_key_down_timer_check
+	
+flippen_check_next_key1:
+	bne 0x02,flippen_check_next_key2
+	branch flippen_key_down_timer_check
+	
+flippen_check_next_key2:
+	bne 0x04,flippen_check_next_key3
+	branch flippen_key_down_timer_check
+	
+flippen_check_next_key3:
+	bne 0x08,flippen_check_next_key4
+	branch flippen_key_down_timer_check
+	
+flippen_check_next_key4:
+	bne 0x10,flippen_check_next_key5
+	branch flippen_key_down_timer_check
+	
+flippen_check_next_key5:
+	bne 0x20,flippen_check_next_key6
+	branch flippen_key_down_timer_check
+	
+flippen_check_next_key6:
+	bne 0x40,flippen_check_next_key7
+	branch flippen_key_down_timer_check
+	
+flippen_check_next_key7:
+	bne 0x80,flippen_combination_key_init
+flippen_key_down_timer_check:
+	fetch 1,mem_send_package_before_check
+	nbranch flippen_key_press_judge_next,blank
+	arg mem_key_longpress_timer,regc
+	arg flippen_24g_hibernate_set_before,regb
+	branch timer_single_step_2B
+	
+flippen_24g_hibernate_set_before:
+	jam 1,mem_longpress_24g_enter_hibernate_flag
+	setarg 0
+	store 2,mem_key0_press_timer_count
+flippen_24g_hibernate_set:
+	jam 0,mem_24g_pair_enable_flag
+	jam 0,mem_g24_connected_state
+	jam 0,mem_g24_pairing_stop_flag
+	jam 0,mem_24g_attempt_fail_flag
+	call g24_transmit_next_packet
+	setarg -1
+	store 8,mem_24g_enter_hibernate	
+	call mouse_setgpio_hibernate
+	call twspi_disable
+	branch g24_long_sleep	
+	
+
+flippen_key_disable_timer:
+	arg mem_key_disable_timer,regc
+	arg flippen_key_enable_timer,regb
+	branch timer_single_step
+
+flippen_key_enable_timer:
+	jam 0,mem_combination_key_down_flag
+	jam 0,mem_24g_pair_key_down_flag
+	jam 1,mem_24g_pairing_stop_flag
+	rtn
+
+flippen_check_no_data_timeout_timer:
+	arg mem_mouse_no_data_timer,regc
+	arg flippen_24g_hibernate_set,regb
+	branch timer_single_step_2B
+
+/*
+/////////////////////////////////////////////////////led start//////////////////////////////////////////////////////////
+flippen_low_voltage_led_timer:
+	call flippen_key_check_once
+	rtn blank
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_LOW_VOLTAGE_FLAG
+	jam 1,mem_low_voltage_led_blink_flag
+	rtn
+
+flippen_low_voltage_led_blink_start_timer:
+	arg mem_low_voltage_led_blink_start_timer,regc
+	arg flippen_low_voltage_blink_enable,regb
+	branch timer_single_step
+
+flippen_low_voltage_blink_enable:
+	jam 1,mem_multi_led_blink_count_limited
+	jam 6,mem_multi_led_blink_count//blink 3 timers
+	jam 2,mem_multi_led_blink_timer_init
+	jam 1,mem_low_voltage_led_blink_flag
+flippen_led_blink_enable:
+	jam 1,mem_multi_led_blink_timer
+	jam ON,mem_multi_led_blink_enable
+	jam MULTI_LED_BLINK,mem_multi_led_type
+	rtn
+	
+flippen_multi_led_blink_timer:
+	fetch 1,mem_multi_led_blink_enable
+	rtn blank
+	fetch 1,mem_multi_led_type
+	beq MULTI_LED_BLINK,flippen_multi_led_type_blink
+flippen_multi_led_type_on:
+	call flippen_multi_led_on
+	fetch 1,mem_multi_led_on_timer
+	increase 1,pdata
+	store 1,mem_multi_led_on_timer
+	fetcht 1,mem_multi_led_on_timer_init
+	isub temp,null
+	call flippen_multi_led_off,zero
+	rtn
+
+flippen_multi_led_type_blink:
+	fetch 1,mem_low_voltage_led_blink_flag
+	branch flippen_multi_led_type_blink_timer,blank
+	fetch 1,mem_low_voltage_led_blink_start_timer
+	nrtn blank
+flippen_multi_led_type_blink_timer:
+	arg mem_multi_led_blink_timer,regc
+	arg flippen_multi_led_type_blink_timeout,regb
+	branch timer_single_step
+flippen_multi_led_type_blink_timeout:
+	fetch 1,mem_multi_led_blink_timer_init
+	store 1,mem_multi_led_blink_timer
+	fetch 1,mem_multi_led_blink_count_limited
+	branch flippen_multi_led_blink_count_no_limited,blank
+	fetch 1,mem_multi_led_blink_count
+	branch flippen_multi_led_blink_off,blank
+	increase -1,pdata
+	store 1,mem_multi_led_blink_count
+flippen_multi_led_blink_count_no_limited:
+	fetch 1,mem_mouse_multi_led_state
+	beq ON,flippen_multi_led_off
+flippen_multi_led_on:
+	jam ON,mem_mouse_multi_led_state	
+	fetcht 1,mem_multi_led_gpio
+	branch gpio_out_inactive
+
+
+flippen_discovery_multi_led_blink:
+	jam 0,mem_poweron_led_blink_flag
+	jam 5,mem_multi_led_blink_timer_init	//500ms
+flippen_discovery_multi_led_blink1:	
+	jam 0,mem_multi_led_blink_count_limited
+	jam 1,mem_multi_led_blink_count
+flippen_multi_led_blink_enable:
+	jam 5,mem_multi_led_blink_timer
+	jam ON,mem_multi_led_blink_enable
+	jam MULTI_LED_BLINK,mem_multi_led_type
+	rtn
+
+flippen_discovey_led_blink_off:
+	fetch 1,mem_multi_led_on_timer
+	nrtn blank
+flippen_multi_led_blink_off:
+	setarg 0
+	store 3,mem_multi_led_blink_timer
+	store 1,mem_low_voltage_led_blink_flag
+	call flippen_no_data_timer_init
+flippen_multi_led_off:
+	fetch 1,mem_multi_led_blink_count
+	nbranch flippen_multi_led_off_wait_blink_over,blank
+	jam 0,mem_multi_led_blink_enable
+	jam 0,mem_multi_led_type
+	jam 0,mem_poweron_led_blink_flag
+flippen_multi_led_off_wait_blink_over:
+	jam 0,mem_multi_led_on_timer
+	jam OFF,mem_multi_led_state
+flippen_multi_led_off_end:
+	jam OFF,mem_multi_led_state
+	fetcht 1,mem_multi_led_gpio
+	branch gpio_out_active
+
+/////////////////////////////////////////////////////led end//////////////////////////////////////////////////////////
+*/	
+endif
+
Index: usb_pc_ai_voice/program/app_kb.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_kb.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_kb.prog	(working copy)
@@ -0,0 +1,2593 @@
+define G24
+define BLE
+define COMPILE_MOUSE
+
+keyboard_softreset_process:
+	fetch 1,mem_device_option
+	rtnne DVC_OP_KEYBOARD
+	call mouse_wakeup_from_power_check
+	nbranch soft_reset+1,user
+	fetch 1,mem_power_on_flag
+	branch soft_reset+1,blank
+	fetch 1,mem_config_select_device_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	
+
+ifdef COMPILE_MOUSE
+keyboard_init:
+	call enable_authrom
+	call keyboard_setting_config
+	
+	call keyboard_gpio_init
+	call keyboard_low_vol_mult_set	
+	rtn wake
+	call keyboard_usb_check_enable
+	call keyboard_cb_fuction
+	fetch 1,mem_usb_addr
+	rtnbit1 7	
+keyboard_init_wireless:	
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BTN_DOWN,keyboard_start_discovery
+	call mouse_check_select_device_by_switch
+	branch keyboard_start_work
+
+
+keyboard_usb_check_enable:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_USB
+	setarg keyboard_usb_config_param
+	store 2,mem_cb_usb_config
+	jam MOUSE_USB_INTERFACE_REMOVE,mem_mouse_usb_vdd_status
+	branch keyboard_usb_interface_check
+
+keyboard_usb_config_param:
+	call keyboard_usb_config_kb_check
+	call keyboard_usb_config_param_init
+	branch keyboard_usb_config_param_setup
+
+keyboard_usb_config_kb_check:
+	jam DONGLE_KB_BIND_EEPROM_OFFECT,mem_mouse_usb_keyboard_flag
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_KEYBOARD
+	jam DONGLE_KB_BIND_SUCCESS,mem_mouse_usb_keyboard_flag
+	rtn
+
+keyboard_usb_config_param_init:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_USB_250,keyboard_usb_report_rate_set_250hz
+	bbit1 MOUSE_ENABLE_USB_500,keyboard_usb_report_rate_set_500hz
+	bbit1 MOUSE_ENABLE_USB_1000,keyboard_usb_report_rate_set_1000hz
+	jam 0x19,mem_wire_usb_interval
+	jam 0x08,mem_usb_tx_interval
+	rtn
+keyboard_usb_report_rate_set_250hz:
+	jam 0x0c,mem_wire_usb_interval
+	jam 0x04,mem_usb_tx_interval
+	rtn
+keyboard_usb_report_rate_set_500hz:
+	jam 0x06,mem_wire_usb_interval
+	jam 0x02,mem_usb_tx_interval
+	rtn
+keyboard_usb_report_rate_set_1000hz:
+	jam 0x03,mem_wire_usb_interval
+	jam 0x01,mem_usb_tx_interval
+	rtn
+
+keyboard_usb_config_param_setup:
+	call usb_tx_interval_config
+	call keyboard_usb_vid_pid_config
+	branch keyboard_usb_hid_icon_config
+
+keyboard_usb_vid_pid_config:
+	fetch 1,mem_usb_vid_pid
+	rtn blank
+	fetch 1,mem_mouse_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_hid_icon_config:
+	fetch 1,mem_mouse_usb_keyboard_flag
+	branch dongle_usb_hid_icon_config+1
+
+
+
+keyboard_usb_interface_check:
+	bpatch patch08_1,mem_patch08
+	fetcht 1,mem_usb_offline_check_gpio
+	call gpio_get_bit
+	branch keyboard_usb_gpio_low,true
+	branch keyboard_usb_gpio_high
+
+
+keyboard_usb_gpio_low:
+	fetch 1,mem_mouse_usb_vdd_status
+	rtneq MOUSE_USB_INTERFACE_REMOVE
+	jam MOUSE_USB_INTERFACE_REMOVE,mem_mouse_usb_vdd_status
+	jam 0,mem_usb_device_enumeration_endflag
+	jam 0,mem_usb_status
+	jam 0,mem_usb_state
+	branch keyboard_init_wireless
+	
+	
+keyboard_usb_gpio_high:
+	fetch 1,mem_mouse_usb_vdd_status
+	rtneq MOUSE_USB_INTERFACE_INSERT
+	jam MOUSE_USB_INTERFACE_INSERT,mem_mouse_usb_vdd_status
+	call mouse_24g_stop
+	call mouse_stop_bluetooth_mode
+	call keyboard_device_led_all_off
+	branch usb_init
+	
+
+
+keyboard_setting_config:
+	rtn wake
+
+	call g24_transmit_init
+	call g24_chmap_param_init
+	
+	call keyboard_param_init
+	fetcht 1,mem_mcu_rstb_gpio
+	call gpio_out_inactive
+
+	call keyboard_device_led_off
+	call mouse_device_multi_led_parm_init
+	call le_set_fixed_ltk_justwork
+
+ifdef debug_eeprom
+	call iicd_read_init_pin
+endif	
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_OTP,keyboard_load_otp_info_check	
+	bbit1 MOUSE_ENABLE_EEPROM,mouse_load_eeprom_info_check
+	bbit1 MOUSE_ENABLE_FLASH,mouse_load_flash_info_check
+	rtn
+
+
+	
+	
+keyboard_param_init:
+
+	call mouse_param_common_init
+
+	jam 0,mem_same_keyvalue_timerout_flag	
+	setarg 0x230170		// 0x0170--3.7V  0x0123--3.0V  0x0146--3.2V  0x0153--3.3V
+	store 3,mem_mouse_vdd_full_vol
+	setarg 0x015301
+	istore 3,contw
+	arg mem_le_adv_swift_pair,contw
+	arg 20,loopcnt
+	call clear_mem
+
+	fetch 1,mem_le_name_len
+	sub pdata,12,null
+	nbranch 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
+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
+	
+ble_name_set_no_swift_pair:
+	arg mem_le_adv_swift_pair,contw
+	branch ble_store_le_name
+
+/////////////////////////////////////////////////////////------gpio------///////////////////////////////////////////////////////////
+keyboard_gpio_init:
+//	call p_lpm_otp_option_disable_ice_mode
+
+	fetcht 1,mem_mcu_clk_gpio
+	call gpio_set_high_impedance
+	fetcht 1,mem_mcu_stb_gpio
+	call gpio_set_high_impedance
+	fetcht 1,mem_mcu_rstb_gpio
+	call gpio_set_high_impedance
+	//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
+
+	fetch 2,mem_kb_row_ptr
+	copy pdata,regb
+	arg 8,loopcnt
+
+keyboard_key_row_init:
+	ifetcht 1,regb
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	ncall keboard_gpio_set_high_impedance,zero
+	increase 1,regb
+	loop keyboard_key_row_init
+	call lpm_write_gpio_wakeup
+	fetch 2,mem_kb_col_ptr
+	copy pdata,regb
+	copy pdata,regc
+	arg 11,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
+keboard_gpio_set_high_impedance:
+
+	call gpio_set_high_impedance
+	ifetcht 1,regb
+	branch gpio_set_low_pullup
+
+
+	
+keyboard_low_vol_mult_set:
+	fetch 1,mem_device_flag
+	beq MODE_BT_DEVICE1,keyboard_low_vol_mult_ble_set
+	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:
+	jam 0x0c,mem_lpm_mult_init
+	fetch 1,mem_adc_power_flag
+	rtnbit0 0
+	jam 0x10,mem_lpm_mult_init
+	fetch 1,mem_mouse_current_mult_timer
+	branch mouse_current_mult_reinit,blank
+	rtn
+///////////////////////////////////////otp/////////////////////////////////////////////////////////////
+
+keyboard_pairing_check_otp_offset:
+	fetch 2,mem_otp_read_retention_offset
+	arg 0x528,temp   //24*55
+	isub temp,null
+	nrtn positive
+	branch assert
+//  otp process	
+keyboard_load_otp_info_check:
+	bpatch patch08_2,mem_patch08
+	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 80,regd
+	setarg 0x400
+	idiv regd
+	call wait_div_end
+	quotient pdata
+	store 2,mem_pdatatemp
+	arg 0x1fcc,pdata
+	arg 4,temp
+	arg 4,rege
+	branch keyboard_load_otp_device_info
+keyboard_load_otp_device_info_ble_init:
+	arg 280,regd
+	setarg 0x400
+	idiv regd
+	call wait_div_end
+	quotient pdata
+	store 2,mem_pdatatemp
+	arg 0x1fc2,pdata
+	arg 14,temp		
+	arg 14,rege
+	branch keyboard_load_otp_device_info
+keyboard_load_otp_device_info:
+	storet 1,mem_temp
+	arg mem_otp_read_retention_memory,rega
+	arg 0,regc
+keyboard_load_otp_info_check_page_loop:
+	copy pdata,regb
+	fetchr loopcnt, 1,mem_temp
+	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
+//	nbranch p_keyboard_load_otp_info_check_overwise,positive
+	copy regb,pdata
+	isub regd,pdata
+	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:
+	copy regb,pdata
+	iadd regd,pdata
+keyboard_load_otp_info_check_first_time_loop:	
+	isub rege,pdata
+	copy pdata,regb
+	fetchr loopcnt, 1,mem_temp
+	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
+	copy regb,pdata
+	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:
+	bpatch patch08_3,mem_patch08
+	setarg 0x1fd0
+	isub regb,pdata
+	store 2,mem_otp_read_retention_offset		//store the next field offset ,convenient for next storage
+	copy regb,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_mouse_24g_addr
+	branch keybaord_load_device_info
+
+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
+	branch mouse_select_reconn_device
+
+
+keyboard_load_otp_info_check_overwise:
+	branch assert
+
+	
+keyboard_store_device_info:
+	bpatch patch08_4,mem_patch08
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_OTP,keyboard_store_otp_device_info
+	bbit1 MOUSE_ENABLE_EEPROM,mouse_store_eeprom_device_info
+	bbit1 MOUSE_ENABLE_FLASH,mouse_store_flash_device_info
+	rtn
+	
+keyboard_store_otp_device_info:
+	rtn
+	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 0x1fd0
+	isub temp,regb
+	arg mem_mouse_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:
+	fetcht 2,mem_otp_read_retention_offset
+	setarg 0x1fd0
+	isub temp,regb
+	
+
+	add regb,1,regb	
+	arg mem_device1_addr,rega
+	arg 6,loopcnt
+	call otp_write
+
+	add regb,7,regb	
+	arg mem_device1_locall_addr,rega
+	arg 6,loopcnt
+	branch otp_write 
+
+keybaord_load_device_info:
+	fetch 4,mem_mouse_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_24g_addr
+	rtn
+
+/////////////////////////////////////cb_function//////////////////////////////////////////////////////
+keyboard_cb_fuction:
+	bpatch patch08_5,mem_patch08
+	setarg mouse_24g_before_lpm_sleep
+	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
+	setarg mouse_spi_write_flash_cb
+	store 2,mem_cb_spi_flash_write_complate
+	setarg mouse_lpm_check_wake_lock
+	store 2,mem_cb_check_wakelock
+	setarg mouse_le_transmit
+	store 2,mem_cb_ble_transmit
+	setarg mouse_set_lpm_mult
+	store 2,mem_cb_bt_set_mult
+	rtn
+
+/////////////////////////////////////keyboard event/////////////////////////////////////////////////////////////////////
+
+keyboard_priority_bb_event:	
+	bpatch patch08_6,mem_patch08
+	copy regc,pdata	
+
+	beq BT_EVT_LE_START_ENC,keyboard_le_ll_start_encryt
+	beq BT_EVT_LE_PARSE_CONN_PARAM_ACCEPTED,keyboard_le_parse_conn_param_accepted
+	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
+
+/***************************le*************************/
+
+
+
+keyboard_le_bb_event_connected:
+	jam 0,mem_mouse_long_mult_flag
+
+	jam 1,mem_mouse_le_bb_connected_flag
+	call mouse_24g_first_store_reconn_info
+	fetch 1,mem_mouse_le_reconnect_flag
+	nbranch keyboard_le_bb_event_connected_next,blank
+	jam 0x14,mem_mouse_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_mouse_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_mouse_le_bb_connected_flag	
+keyboard_le_bb_disconnected_next:	
+	jam LE_LPM_ENABLE,mem_mouse_le_conn_param_reject
+	jam 0,mem_mouse_clear_sensor_data_flag
+	call le_clr_config_more_data
+	branch keyboard_bb_disconnected
+keyboard_bb_disconnected:
+	call mouse_bb_discon_clear_stack
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason
+	bbit1 APP_DISC_BLE,keyboard4_0_event_bb_disconn
+	bbit1 APP_DISC_BY_BUTTON,app_disconn_reason_clear
+	branch keyboard_start_discovery
+keyboard4_0_event_bb_disconn:
+	call mouse_le_clean_connect_flag
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason
+	bbit1 APP_DISC_BY_BUTTON,app_disconn_reason_clear
+	call ice_break
+	branch keyboard_app_enter_hibernate	
+
+	
+keyboard_le_ll_start_encryt:
+	fetch 1,mem_mouse_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_parse_conn_param_accepted:
+	fetch 1,mem_le_new_conninterval
+	sub pdata,LE_INTERVAL_15MS,null
+	nbranch mouse_le_conn_param_lpm_disable,positive
+	fetch 1,mem_le_new_connslavelatency
+	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
+
+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_24g_pairing_complete:
+	call keyboard_get_24g_led_enable
+	call mouse_no_data_timer_init
+	branch mouse_24g_pairing_complete_common
+
+keyboard_24g_attempt_success:
+	call keyboard_get_24g_led_enable
+	fetch 4,mem_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_mouse_24g_addr		// if need store 24g address to eeprom/flash,need get mem_24g_addr
+	call g24_ch_syncword_crc8_init
+	call mouse_device_poweron_led_config
+	call mouse_no_data_timer_init
+	branch mouse_24g_attempt_success
+
+keyboard_24g_get_led:
+	jam DEVICE_DATA_TPYE_STANDARD_KEYBOARD,mem_keyboard_data_send_flag
+	call keyboard_clear_key_data
+	jam 0x03,mem_customer_key_press+2
+	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 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 mouse_24g_stop
+	fetch 1,mem_reconn_times
+	nbranch mouse_polling_device,blank
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_app_enter_hibernate
+	rtn	
+
+keyboard_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_mouse_24g_addr		// auto pair first time
+	branch keyboard_24g_start_pair_mode,blank
+	branch mouse_24g_reconn_dongle_start
+
+keyboard_24g_hibernate_set:
+	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_sensor_shutdown_flag
+	branch keyboard_g24_long_sleep
+
+
+/////////////////////////////////////keyboard timer/////////////////////////////////////////////////////////////////////
+
+keyboard_bb_event_timer:
+	bpatch patch08_7,mem_patch08
+	call mouse_adc_read
+	call keyboard_low_voltage_param_set
+	call mouse_low_voltage_led_timer
+
+	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
+	
+	//led
+	
+	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 mouse_wheel_trigger_timer
+	call keyboard_store_information_delay_timer
+	call keyboard_capslock_led_on_timer
+	call keyboard_long_press_timer
+	call keyboard_commbination_delay_release_timer
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_check_no_data_timeout_timer
+	branch mouse_check_no_data_timeout_timer
+
+
+keyboard_commbination_key_process:
+	fetch 1,mem_commbination_key_statue
+	rtnne COMMBINATION_KEY_STATE_DOWN	
+	arg mem_combination_ui_button_count,regc
+	arg mouse_bluetooth_fast_conn_init,regb
+	branch timer_single_step
+
+keyboard_commbination_fast_conn_bt_check:
+	fetch 2,mem_keyboard_keyvalue_buffer+2
+	fetcht 2,mem_keyboard_commbination_fast_conn_bt
+	isub temp,null
+	branch keyboard_commbination_key_down,zero
+	byteswap temp,temp
+	isub temp,null
+	branch keyboard_commbination_key_down,zero
+	branch mouse_commbination_key_up
+
+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_check_discovery_timeout_timer:
+	arg mem_mouse_discovery_timer,regc
+	arg keyboard_check_discovery_timeout,regb
+	branch timer_single_step_2B
+
+keyboard_check_discovery_timeout:
+	call keyboard_stop_discovery
+	branch keyboard_app_enter_hibernate	
+
+
+
+
+keyboard_store_information_delay_timer:
+	arg mem_store_information_delay_timer,regc
+	arg keyboard_store_device_info_check,regb
+	branch timer_single_step
+	
+keyboard_store_device_info_check:
+	call keyboard_store_device_info
+	fetch 1,mem_mouse_need_soft_reset
+	nbranch mouse_soft_reset,blank
+	rtn
+
+keyboard_low_voltage_param_set:
+	fetch 1,mem_mouse_adc_last_low_voltage_flag
+	branch keyboard_low_voltage_param_set_33V,blank
+	jam 58,mem_mouse_vdd_low_vol
+	rtn
+keyboard_low_voltage_param_set_33V:
+	jam 53,mem_mouse_vdd_low_vol
+	rtn	
+
+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_mouse_direct_timer,regc
+	arg mouse_check_direct_timeout,regb
+	call timer_single_step
+	branch mouse_check_direct_timeout_timer+3
+
+keyboard_le_battery_updata_timer:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_LE_BATTERY_SERVICE_CANCEL
+	branch mouse_le_battery_updata_timer
+
+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
+	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_device_led_off:
+	call mouse_device_multi_led_off
+	call keyboard_capslock_led_off
+keyboard_power_led_off:
+	fetcht 1,mem_keyboard_power_led_gpio
+	branch gpio_out_inactive
+keyboard_numlock_led_off:
+	rtn
+
+
+keyboard_capslock_led_on_timer:
+	fetch 1,mem_keyboard_caps_led_gpio
+	rtneq GPIO_DISABLE
+	fetch 2,mem_mouse_no_data_timer
+	rtn blank
+	fetch 2,mem_mouse_no_data_timeout
+	fetcht 2,mem_mouse_no_data_timer
+	isub temp,temp
+	fetch 2,mem_keyboard_caps_led_on_timer
+	isub temp,pdata
+	branch keyboard_capslock_led_check_on,positive
+keyboard_capslock_led_off:
+	fetcht 1,mem_keyboard_caps_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_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 app_enter_hibernate
+
+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_check_no_data_timeout_timer:
+	arg mem_mouse_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_bb_event_discovery_btn:
+	isolate1 mark_24g,mark
+	call mouse_24g_stop,true
+	call mouse_disconnect
+	call mouse_le_clean_connect_flag
+	branch keyboard_start_discovery
+	
+keyboard_start_discovery:
+	bpatch patch09_0,mem_patch09
+	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
+
+	setarg 0
+	store 2,mem_le_battery_level_updata_timer
+	call keyboard_capslock_led_off
+	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 MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_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_mouse_le_lap_temp
+	store 3,mem_le_lap+3
+	call app_lpm_mult_disable
+	fetch 2,mem_mouse_discovery_timeout
+	store 2,mem_mouse_discovery_timer
+	setarg 0
+	store 2,mem_mouse_no_data_timer
+	store 2,mem_le_battery_level_updata_timer
+	store 1,mem_mouse_direct_timer
+	store 1,mem_mouse_bluetooth_reconnect_timeout
+	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
+
+	
+keyboard_low_voltage_led_blink_disable:
+	jam 0,mem_mouse_adc_last_low_voltage_flag
+	branch mouse_low_voltage_led_off_judge
+	
+keyboard_stop_discovery:
+	bpatch patch09_1,mem_patch09
+	setarg 0
+	store 2,mem_mouse_discovery_timer	
+	arg MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,queue
+	call mouse_disable_function_flag
+	jam 0,mem_mouse_bluetooth_reconnect_timeout
+	call mouse_stop_le_adv
+	branch keyboard_device_led_off
+
+
+keyboard_store_remote_bdaddr:
+	bpatch patch09_2,mem_patch09
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_STORE_EEPROM_FLAG
+	arg MOUSE_STORE_EEPROM_FLAG,queue
+	call mouse_disable_function_flag
+	call mouse_check_device_addr
+	branch mouse_unplug_clean_bdaddr
+	
+/////////////////////////////////////keyboard process///////////////////////////////////////////////////////////////////////////////
+keyboard_idle:
+	bpatch patch09_3,mem_patch09
+	call mouse_low_voltage_led_no_enter_lpm
+	branch ui_check_paring_button
+	
+
+
+keyboard_start_work:
+	bpatch patch09_4,mem_patch09
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_ADC,keyboard_start_work_next
+	call enable_adc
+	call vdd_calculate_by_mode
+	store 2,mem_mouse_vdd_now_vol
+//	fetcht 2,mem_2v_adc_vinlpm_data
+	fetch 2,mem_adc_current_value
+	isub temp,null
+	branch keyboard_start_work,positive
+	arg mem_mouse_vdd_calculate_set,rega
+	call mouse_adc_bat_percent_lowpower_out
+	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,mouse_24g_reconn_general_dongle
+	call mouse_bluetooth_fast_conn_disable
+	fetch 6,mem_device1_addr	
+	branch mouse_bluetooth_fast_conn_init ,blank
+	branch mouse_start_reconnect_device
+
+
+	
+
+
+
+	
+
+
+
+/////////////////////////////////////keyboard le///////////////////////////////////////////////////////////////////////////////////////
+keyboard_le:
+	bpatch patch09_5,mem_patch09
+	call le_fifo_check_nearly_full
+	nrtn blank
+	fetch 1,mem_mouse_bluetooth_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 MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_24G_PAIRING_FLAG,mouse_le_send_empty_packet
+	bbit1 MOUSE_SELECT_DEVICE_FLAG,mouse_le_send_empty_packet
+	bbit1 MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG,mouse_le_send_empty_packet
+	bbit1 MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,mouse_le_send_empty_packet
+	call keyboard_motion
+	nrtn user
+	call mouse_current_mult_update
+	call mouse_wheel_trigger
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_KEYBOARD,mouse_le_send_mouse_data
+	fetch 1,mem_customer_key
+	branch mouse_le_send_keyboard_package_data		
+
+
+
+
+
+/***********************************kscan and value process***********************************************/
+kscan_dispatch:
+	fetch 1,mem_device_option
+	rtnne DVC_OP_KEYBOARD
+	call keyboard_keyscan
+	call keyboard_key_process
+	branch keyboard_special_key_check
+/***********************************kscan and value process***********************************************/
+
+
+
+
+/***********************************kscan process***********************************************/
+keyboard_keyscan:
+	bpatch patch09_6,mem_patch09
+	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_keyscan_get_exmcu_value
+	call keyboard_keyscan_get_mcu_value
+	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 11 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,10,null
+	branch keyboard_compare_col_excol_gpio_loop,positive
+	
+	rtn
+	
+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*11 times
+	bpatch patch09_7,mem_patch09
+	call keyboard_stb_state_high
+	call keyboard_clk_input	
+keyboard_keyscan_exmcu_start:
+	fetch 2,mem_keyscan_exmcu_wait_wake_count
+	increase 1,pdata
+	store 2,mem_keyscan_exmcu_wait_wake_count
+	bbit1 9,keyboard_keyscan_reset_exmcu 				// 953us reset exmcu
+	fetcht 1,mem_mcu_clk_gpio							// waiting for exmcu wake done
+	call gpio_get_bit
+	nbranch keyboard_keyscan_exmcu_start,true
+	nop 20
+	call keyboard_clk_state_high
+	call keyboard_stb_state_low
+	jam 0,mem_keyscan_col_loop_count
+keyboard_keyscan_exmcu_start_loop:	// clk:0 1 0 1 0 1 0 1 0 1 0
+	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,9,null
+	branch keyboard_keyscan_exmcu_start_loop,positive
+	call keyboard_clk_state_low
+	call keyboard_keyscan_exmcu_get_col_value
+	branch keyboard_clk_state_high	
+	
+keyboard_keyscan_exmcu_get_col_value:
+	jam 0,mem_keyscan_value_temp
+	nop 50
+	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: 		// 8*20 = 130us
+	nop 20					// wait exmcu keyscan done
+	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		//???c????0012?? io
+	call gpio_out_active
+	call keyboard_keyscan_get_col_value
+	ifetcht 1,regb
+	call gpio_set_high_impedance
+keyboard_keyscan_mcu_start_loop:
+	increase 1,regb
+	fetch 2,mem_keyscan_value_ptr		//mcu c?????
+	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:
+	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_keyscan_reset_exmcu:
+	fetcht 1,mem_mcu_rstb_gpio
+	call gpio_out_active
+	nop 20
+	fetcht 1,mem_mcu_rstb_gpio
+	call gpio_out_inactive
+	nop 6000						// waiting for exmcu reset done 502us > 301.9us
+	rtn
+	branch keyboard_keyscan	
+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_gpio_config_input_pu:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero 
+	set0 GPIO_ACTIVE_BIT,temp
+	branch gpio_config_input
+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
+	bpatch patch0a_0,mem_patch0a
+	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_mouse_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
+	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
+	loop keyboard_keyvalue_change
+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
+	nrtn blank
+	fetch 8,mem_keyscan_value_current+8
+	nrtn blank
+	fetch 4,mem_keyscan_value_current+16
+	nrtn blank
+	jam CAMMBINATION_KEY_FREE,mem_keyboard_commbination_key_step
+	rtn
+
+/************************************ghost key ******************************************/
+//**input:mem_keyscan_value_current   **output:mem_mouse_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 patch0a_1,mem_patch0a
+	jam 0,mem_mouse_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
+	jam 1,mem_mouse_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_fn_replace:
+	bpatch patch0a_2,mem_patch0a
+	fetch 1,mem_keyboard_press_flag_temp
+	ncall keyboard_commbination_delay_release_clear,blank
+	fetch 1,mem_keyboard_fn_flag
+	ncall keyboard_keyvalue_fn_replace_press,blank
+	fetch 1,mem_keyboard_fn_first
+	fetcht 1,mem_keyboard_fn_flag
+	ixor temp,pdata
+	rtn zero
+	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_replace_press:
+	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
+	rtn
+
+keyboard_keyvalue_fn_esc:
+	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_up_arrow:
+	fetch 1,mem_keyboard_fn_arrow_enable_flag
+	rtn blank
+	setarg HID_KEY_PAGE_UP
+	branch keyboard_keyvalue_store_temp
+	
+keyboard_keyvalue_fn_down_arrow:
+	fetch 1,mem_keyboard_fn_arrow_enable_flag
+	rtn blank
+	setarg HID_KEY_PAGE_DOWN
+	branch keyboard_keyvalue_store_temp
+
+keyboard_keyvalue_fn_left_arrow:
+	fetch 1,mem_keyboard_fn_arrow_enable_flag
+	rtn blank
+	setarg HID_KEY_HOME
+	branch keyboard_keyvalue_store_temp
+
+keyboard_keyvalue_fn_right_arrow:
+	fetch 1,mem_keyboard_fn_arrow_enable_flag
+	rtn blank
+	setarg HID_KEY_END
+	branch keyboard_keyvalue_store_temp
+
+keyboard_keyvalue_fn_left_ctrl:
+	fetch 1,mem_keyboard_fn_left_ctrl_enable_flag
+	rtn blank
+	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 1,mem_keyboard_fn_space_enable_flag
+	rtn blank
+	setarg HID_KEY_LANGUAGE
+keyboard_keyvalue_store_temp:
+	store 1,mem_keyboard_keyvalue_temp
+	rtn
+/**********************************key value process*******************************/	
+
+
+
+/*******************************commbine keyvalue *************************************/
+keyboard_keyvalue_commbination_replace:
+	bpatch patch0a_3,mem_patch0a
+	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_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
+	nrtn blank
+	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_ANDRIOD
+	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_ANDRIOD
+	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_ANDRIOD,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_language:
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_WINDOWS,keyboard_commbination_language_windows
+	beq SYSTEM_OS_ANDRIOD,keyboard_commbination_language_andriod
+	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_andriod:
+	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_ANDRIOD,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:
+	bpatch patch0a_4,mem_patch0a
+	fetch 1,mem_keyboard_keyvalue_temp
+	sub pdata,HID_KEY_RIGHT_GUI,null
+	branch keyboard_keyvalue_standard,positive		// value  <= 0xe7
+	jam KEYBOARD_CONSUMER_KEY_PRESS,mem_keyboard_consumer_key_status		
+	fetch 1,mem_keyboard_press_flag_temp
+	bbit1 0,keyboard_keyvalue_standard
+	jam KEYBOARD_CONSUMER_KEY_RELEASE,mem_keyboard_consumer_key_status
+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
+	branch keyboard_keyvalue_standard_out_next+1,blank
+	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
+	sub temp,HID_KEY_RIGHT_GUI,null
+	nrtn positive
+	sub temp,0xbf,null
+	rtn positive
+keyboard_keyvalue_control_key_out:
+	and temp,0x07,queue
+	fetch 1,mem_keyboard_keyvalue_buffer
+	qset0 pdata
+	store 1,mem_keyboard_keyvalue_buffer
+	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
+	sub temp,HID_KEY_RIGHT_GUI,null
+	nrtn positive
+	sub temp,0xbf,null
+	rtn positive
+keyboard_keyvalue_control_key_in:
+	and temp,0x07,queue
+	fetch 1,mem_keyboard_keyvalue_buffer
+	qset1 pdata
+	store 1,mem_keyboard_keyvalue_buffer
+	rtn
+	
+keyboard_keyvalue_standard_in_data:
+	sub temp,HID_KEY_RIGHT_GUI,null
+	nbranch keyboard_keyvalue_standard_in_data_next,positive
+	sub temp,0xbf,null
+	nbranch keyboard_keyvalue_control_key_in,positive
+keyboard_keyvalue_standard_in_data_next:	
+	increase -1,contr
+	istoret 1,contr
+	rtn
+	
+/******************************** special key ****************************************************/
+// check Fn,pairing button,control key
+keyboard_special_key_check:
+	bpatch patch0a_5,mem_patch0a
+	call keyboard_pairing_button_check
+	jam 0,mem_keyboard_fn_flag
+	jam 0,mem_keyboard_control_key_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
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_special_key_check_24g
+keyboard_special_key_check_bluetooth:
+	call keyboard_commbination_fast_conn_bt_check
+	fetch 1,mem_keyboard_pairing_type
+	branch keyboard_enable_bt_button_pairing,blank
+	fetch 2,mem_keyboard_keyvalue_buffer+2
+	fetcht 2,mem_keyboard_commbination_key_bt
+	isub temp,null
+	branch keyboard_long_button_bt_discovery,zero
+	byteswap temp,temp
+	isub temp,null
+	branch keyboard_long_button_bt_discovery,zero
+	rtn
+keyboard_special_key_check_24g:
+	fetch 1,mem_keyboard_pairing_type
+	branch keyboard_enable_bt_button_pairing,blank
+	branch keyboard_commbination_pairing_24g_check	
+	
+keyboard_pairing_button_check:
+	fetch 1,mem_keyboard_pairing_type
+	nrtn blank
+	fetcht 1,mem_config_select_device_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_6,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:
+//	call keyboard_pairing_check_otp_offset
+	jam 0,mem_keyboard_data_change_flag
+	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 keyboard_bb_event_discovery_btn
+
+	
+
+keyboard_commbination_pairing_24g_check:
+	fetch 2,mem_keyboard_keyvalue_buffer+2
+	fetcht 2,mem_keyboard_commbination_key_24g
+	isub temp,null
+	branch keyboard_24g_start_pair_mode,zero
+	byteswap temp,temp
+	isub temp,null
+	nrtn zero
+keyboard_24g_start_pair_mode:
+	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_mouse_no_data_timer
+	call keyboard_capslock_led_off
+	branch mouse_24g_start_pair_mode
+
+
+keyborad_control_key_set:
+	jam 1,mem_keyboard_control_key_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 patch0a_7,mem_patch0a
+	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
+	rtneq MODE_BT_DEVICE1
+	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:
+	fetch 1,mem_keyboard_consumer_key_status
+	beq KEYBOARD_CONSUMER_KEY_RELEASE,keyboard_value_consumer_release
+	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
+keyboard_value_tpye_check_loop:	
+	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
+	fetch 1,mem_keyboard_keyvalue_buffer+2
+	sub pdata,HID_KEY_FN,null
+	branch keyboard_tx_data_skip_fn,zero
+	arg mem_keyboard_keyvalue_buffer,contr
+	arg mem_keyboard_tx_data+1,contw
+	arg 8,loopcnt
+keyboard_tx_data_store:
+	ifetch 1,contr
+	beq HID_KEY_FN,keyboard_tx_data_clear_fn
+keyboard_tx_data_store_loop:
+	istore 1,contw
+	loop keyboard_tx_data_store
+
+keyboard_motion_data_check_next:
+	call keyboard_device_data_tpye_check
+
+	fetch 1,mem_keyboard_data_send_flag
+	beq DEVICE_DATA_TPYE_MOUSE,enable_user
+	beq DEVICE_DATA_TPYE_STANDARD_KEYBOARD,device_send_keyboard_data
+	beq DEVICE_DATA_TPYE_NONSTARNDARD_KEYBOARD,device_send_keyboard_data
+	beq DEVICE_DATA_TPYE_CONSUMER,device_send_keyboard_data
+	beq DEVICE_DATA_TPYE_SYSTEM_CONCTOL,device_send_keyboard_data
+device_send_keyboard_data:
+	call mouse_customerkey_press
+	branch enable_user
+
+keyboard_value_release_all_key:
+	arg mem_keyboard_keyvalue_buffer,contw
+	arg 9,loopcnt
+	branch clear_mem
+
+
+keyboard_tx_data_skip_fn:
+	fetch 2,mem_keyboard_keyvalue_buffer
+	store 2,mem_keyboard_tx_data+1
+	fetch 6,mem_keyboard_keyvalue_buffer+3
+	store 6,mem_keyboard_tx_data+3
+	branch keyboard_motion_data_check_next
+
+keyboard_tx_data_clear_fn:
+	setarg 0
+	branch keyboard_tx_data_store_loop
+
+////////////////////////////////////////////////////---fn---//////////////////////////////////////////////////////////
+keyboard_value_tpye_consumer_set:
+	copy pdata,temp
+	bpatch patch0b_0,mem_patch0b
+	copy temp,pdata
+	jam HID_REPORTID_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_PALY,keyboard_value_play
+	beq 	HID_KEY_MULTIKEY_STOP,keyboard_value_stop
+	beq 	HID_KEY_MULTIKEY_PRE_TRACK,keyboard_value_pre_track
+	beq 	HID_KEY_MULTIKEY_NEXT_TRACK,keyboard_value_next_track
+	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_MY_COMPUTER,keyboard_value_my_computer
+	beq 	HID_KEY_MAIL,keyboard_value_mail
+	beq 	HID_KEY_CALCULATOR,keyboard_value_calculator
+	beq 	HID_KEY_LIGHT_DOWN,keyboard_value_light_down
+	beq 	HID_KEY_LIGHT_UP,keyboard_value_light_up
+	beq 	HID_KEY_AC_FAVORITES,keyboard_value_ac_favorites
+	beq 	HID_KEY_AC_FORWARD,keyboard_value_ac_forward
+	beq 	HID_KEY_AC_BACK,keyboard_value_ac_back
+	beq 	HID_KEY_AC_STOP,keyboard_value_ac_stop
+	beq 	HID_KEY_AC_REFRESH,keyboard_value_ac_refresh
+	beq 	HID_KEY_AC_SEARCH,keyboard_value_ac_search
+	beq 	HID_KEY_AC_HOME,keyboard_value_ac_home
+	beq 	HID_KEY_IOS_ANDROID_OS_LOCK,keyboard_value_os_lock
+	beq 	HID_KEY_OS_SOFT_KB,keyboard_value_os_soft_kb
+	beq 	HID_KEY_SYSTEM_SLEEP,keyboard_value_system_sleep
+	branch keyboard_motion_data_check_next
+
+keyboard_value_media:
+	setarg 0x0183
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_play:
+	setarg 0x00cd
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_stop:
+	setarg 0x00b7
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_pre_track:
+	setarg 0x00b6
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_next_track:
+	setarg 0x00b5
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next	
+keyboard_value_vol_down:
+	setarg 0x00ea
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_vol_up:
+	setarg 0x00e9
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_mute:
+	setarg 0x00e2
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_my_computer:
+	setarg 0x0194
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_mail:
+	setarg 0x018a
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_calculator:
+	setarg 0x0192
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next	
+keyboard_value_light_down:
+	setarg 0x0070
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_light_up:
+	setarg 0x006f
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_ac_favorites:
+	setarg 0x022a
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_ac_forward:
+	setarg 0x0225
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_ac_back:
+	setarg 0x0224
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_ac_stop:
+	setarg 0x0226
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_ac_refresh:
+	setarg 0x0227
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_ac_search:
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_IOS,keyboard_value_ac_home
+	beq SYSTEM_OS_MAC,keyboard_value_ac_home
+	setarg 0x0221
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next	
+keyboard_value_ac_home:
+	setarg 0x0223
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_os_lock:
+	setarg 0x0030
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_os_soft_kb:
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_ANDRIOD,keyboard_value_os_soft_kb_andriod
+	setarg 0x01ae
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_os_soft_kb_andriod:
+	setarg 0x0307
+	store 2,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+	
+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 0x03
+	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:
+	bpatch patch0b_1,mem_patch0b
+	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:
+	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_SYSTEM_CTRL,keyboard_system_control_data_send
+	rtn
+
+keyboard_mouse_data_send:
+	jam DEVICE_DATA_TPYE_MOUSE,mem_keyboard_data_send_flag
+	arg mem_keyboard_tx_data,contr
+	arg mem_mouse_key,contw
+	arg 7,loopcnt
+	branch memcpy
+	
+keyboard_standard_data_send:
+	jam DEVICE_DATA_TPYE_STANDARD_KEYBOARD,mem_keyboard_data_send_flag
+	call keyboard_clear_key_data
+	fetch 1,mem_device_flag
+	beq MODE_BT_DEVICE1,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:
+	arg mem_keyboard_tx_data,contr
+	arg mem_customer_key_press,contw
+	arg 9,loopcnt
+	branch memcpy
+
+keyboard_consumer_data_send:
+	jam DEVICE_DATA_TPYE_CONSUMER,mem_keyboard_data_send_flag
+	call keyboard_clear_key_data
+	setarg 0x03
+	call mouse_customer_media_key_set
+	arg mem_keyboard_tx_data+1,contr
+	arg mem_customer_key_press+1,contw
+	arg 2,loopcnt
+	branch memcpy
+
+keyboard_system_control_data_send:
+	jam DEVICE_DATA_TPYE_SYSTEM_CONCTOL,mem_keyboard_data_send_flag
+	call keyboard_clear_key_data
+	setarg 0x02
+	store 8,mem_customer_key_press
+	store 8,mem_customer_key_release
+	fetch 1,mem_keyboard_tx_data+1
+	store 1,mem_customer_key_press+1
+	rtn
+
+
+keyboard_clear_key_data:
+	arg 18,loopcnt
+	arg mem_customer_key_press,contw
+	branch clear_mem
+
+
+
+////////////////////////////////////////lpm/////////////////////////////////////////////////////////////////////////	
+keyboard_lpm_before_common:	
+	call clear_wake
+	call mouse_wheel_check
+	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_config_select_device_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
+
+	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 gpio_set_wake_by_current_state,zero
+	increase 1,regb
+	loop keyboard_key_row_wake_init
+	rtn
+
+keyboard_key_row_wake_set:
+	fetch 1,mem_same_keyvalue_timerout_flag
+	branch gpio_set_wake,blank
+	branch gpio_set_wake_by_current_state
+keyboard_process_lpm_before:
+	rtnmark1 mark_24g
+	call keyboard_lpm_before_common
+	fetch 1,mem_lpm_current_mult
+	nrtn blank					// 7.5ms, no gpio wakeup
+	branch gpio_clr_wake
+keyboard_before_hibernate:
+	bpatch patch0b_2,mem_patch0b
+	jam 0xff,mem_sensor_motion_gpio
+	call disable_authrom
+	call keyboard_device_led_all_off
+	call mouse_before_hibernate_wheel_gpio_set
+	call mouse_setgpio_hibernate
+	call mouse_flash_power_down
+	fetcht 1,mem_sensor_motion_gpio
+	branch gpio_clr_wake
+	
+keyboard_power_down:
+	call keyboard_device_led_all_off
+keyboard_app_enter_hibernate:
+	bpatch patch0b_3,mem_patch0b
+	call keyboard_setgpio_hibernate
+	call ice_break
+	branch app_enter_hibernate
+	
+keyboard_device_led_all_off:
+	bpatch patch0b_4,mem_patch0b
+	call keyboard_device_led_off
+	call keyboard_numlock_led_off
+	call keyboard_capslock_led_off
+	branch keyboard_power_led_off			
+
+
+
+
+
+	
+keyboard_setgpio_hibernate:
+	bpatch patch0b_5,mem_patch0b
+	call clear_wake
+	call keyboard_device_led_all_off
+	call mouse_set_sdio_high
+	call keyboard_lpm_before_common
+	call mouse_gpio_pd_idle
+	fetcht 1,mem_mouse_reuse_2ice_gpio
+	call mouse_gpio_config_input_pu
+	call mouse_gpio_set_high_impedance
+	branch mouse_adc_gpio_set_before_hibernate
+////////////////////////////////////////24g/////////////////////////////////////////////////////////////////////////	
+
+
+
+
+
+
+
+
+
+
+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 keyboard_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,blank
+	fetch 8,mem_keyscan_value_current+8
+	nbranch keyboard_g24_transmit_start,blank
+	fetch 4,mem_keyscan_value_current+16
+	nbranch keyboard_g24_transmit_start,blank
+
+	fetch 1,mem_24g_transmit_by_interrupt
+	rtneq G24_TX_TIMER_INT_ENABLE
+	call g24_search_receiver
+keyboard_g24_long_sleep:
+	call keyboard_g24_lpm_wait
+	nrtn user
+	fetch 1,mem_sensor_shutdown_flag
+	ncall keyboard_setgpio_hibernate,blank
+	fetch 4,mem_24g_enter_hibernate
+	branch g24_long_seep2
+
+keyboard_g24_transmit_process:
+	bpatch patch0b_6,mem_patch0b
+	jam 0,mem_24g_retry
+keyboard_g24_transmit_loop:
+	fetchr timeup,2,mem_param_rx_setup
+	until clkn_rt,meet
+	call keyboard_special_key_check
+	fetch 1,mem_keyboard_bt_button_flag
+	nbranch mouse_soft_reset,blank
+	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 keyboard_g24_ackpayload_parse
+	jam 0,mem_sensor_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
+	call keyboard_g24_transmit_hop_process
+	branch keyboard_g24_transmit_loop
+
+
+keyboard_g24_transmit_hop_process:
+	fetcht 1,mem_24g_retry
+	sub temp,20,null
+	branch keyboard_g24_tx_fast_hop,positive		//  1-3 current channel  4~ 20 fast hop
+	arg 25,loopcnt
+	call delay_ms_wait
+	branch g24_hop_ch_disable
+
+keyboard_g24_tx_fast_hop:
+	increase 1,temp
+	storet 1,mem_24g_retry
+	fetch 4,mem_24g_addr
+	fetcht 4,mem_24g_fast_conn_addr
+	isub temp,null
+	branch g24_ch,zero
+	fetch 1,mem_24g_retry
+	sub pdata,3,null
+	rtn positive
+	branch g24_tx_fast_hop
+
+
+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_F30DB,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 patch0b_7,mem_patch0b
+	call g24_lpm_wait
+	nrtn user
+	call clear_wake
+	fetch 3,mem_24g_short_sleep_set
+	branch g24_long_seep2	
+	
+
+
+
+
+
+keyboard_24g_package_data:
+	
+	rtnmark0 mark_24g
+	call keyboard_motion
+	nrtn user
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_KEYBOARD,mouse_24g_mouse_package_data
+	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
+	arg 9,rega	//length
+	fetch 1,mem_customer_data_trigger
+	nbranch keyboard_customer_key_press,blank
+	arg mem_customer_key_release,regb	//tx buff
+	rtn
+keyboard_customer_key_press:
+	arg mem_customer_key_press,regb
+	rtn
+
+
+/**************************************g24 search receiver*****************************************/
+
+keyboard_24g_search_dongle_init:
+	setarg 0
+	store 3,mem_mouse_search_dongle_action
+	rtn
+
+keyboard_24g_search_dongle:
+	bpatch patch0c_0,mem_patch0c
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_24G_SEARCH_DONGLE
+	fetch 1,mem_mouse_long_mult_flag
+	rtn blank
+	fetch 1,mem_24g_abort_pac
+	rtn blank
+	fetch 1,mem_mouse_search_dongle_interval
+	increase 1,pdata
+	and_into 3,pdata
+	store 1,mem_mouse_search_dongle_interval
+	nrtn blank	//400ms
+	jam 0,mem_mouse_search_dongle_ch
+keyboard_24g_search_dongle_loop:
+	
+	fetch 1,mem_mouse_search_dongle_ch
+	increase 1,pdata
+	store 1,mem_mouse_search_dongle_ch
+	sub pdata,G24_CH_NUMBER,null
+	nbranch keyboard_24g_search_dongle_loop_end,positive
+	call g24_reconn_data_prep
+	call g24_transmit_receive_ack
+	nbranch keyboard_24g_search_dongle_loop_retry,sync
+	nbranch keyboard_24g_search_dongle_loop_retry,user3
+	call keyboard_g24_ackpayload_parse
+	call keyboard_24g_search_dongle_success
+keyboard_24g_search_dongle_loop_end:
+	call g24_txbuf_clear
+	fetch 1,mem_mouse_search_dongle_count
+	increase 1,pdata
+	store 1,mem_mouse_search_dongle_count
+	beq G24_CH_POLL_COUNT,keyboard_24g_search_dongle_check
+	rtn
+
+keyboard_24g_search_dongle_loop_retry:
+	call g24_ch
+	branch keyboard_24g_search_dongle_loop
+
+keyboard_24g_search_dongle_check:
+	jam 0,mem_mouse_search_dongle_count
+	fetch 1,mem_mouse_search_dongle_action
+	rtnbit1 G24_DISCONN_STATE
+	set1 G24_DISCONN_STATE,pdata
+	store 1,mem_mouse_search_dongle_action
+	fetch 2,mem_mouse_24g_search_dongle_time_init		//3min
+	store 2,mem_mouse_no_data_timer
+	rtn
+	
+	
+keyboard_24g_search_dongle_success:
+	fetch 1,mem_24g_abort_pac
+	branch keyboard_24g_search_dongle_init,blank
+	jam 0,mem_mouse_search_dongle_count
+	fetch 1,mem_mouse_search_dongle_action
+	rtnbit0 G24_DISCONN_STATE
+	set0 G24_DISCONN_STATE,pdata
+	store 1,mem_mouse_search_dongle_action
+	branch mouse_no_data_timer_init
+
+
+keyboard_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,keyboard_24g_hibernate_set
+	rtn
+
+
+
+/////////////////////////////////////////////////////// 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_att_auto_reco_process:
+	bpatch patch0c_1,mem_patch0c
+	fetch 1,mem_le_connect_ios_mac_flag
+	rtn blank
+	copy rega,contr
+	ifetch 3,contr
+	store 3,mem_le_att_opcode
+	beq ATTOP_READ_RESPONSE,keyboard_le_parse_att_manu_resp
+	beq ATTOP_READ_BY_TYPE_RESPONSE,keyboard_le_send_att_read_by_type_rsp_mac	
+	beq ATTOP_FIND_BY_TYPE_VALUE_RESPONSE,keyboard_le_parse_att_find_by_type_value_rsp	
+	beq ATTOP_ERROR_RESPONSE,keyboard_le_send_att_find_by_type_value_request_mac
+	branch le_parse_att2
+	
+keyboard_le_parse_att_find_by_type_value_rsp:
+	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_otp_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_otp_store_computer_system_ble
+keyboard_le_parse_att_find_mac_report:	
+	jam SYSTEM_OS_MAC,mem_kb_computer_system
+keyboard_otp_store_computer_system_ble:
+	jam 0,mem_le_connect_ios_mac_flag
+	fetcht 2,mem_otp_read_retention_offset
+	setarg 0x1fd0
+	isub temp,regb
+	arg mem_kb_computer_system,rega
+//	copy regb,temp
+	arg 1,loopcnt
+	call otp_write   
+	fetcht 2,mem_otp_read_retention_offset
+	increase 14,temp
+	storet 2,mem_otp_read_retention_offset
+	rtn
+
+
+// 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
+	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 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
+	branch keyboard_le_check_att_read_type_manu_loop
+
+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 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
+	
+
+
+
+
Index: usb_pc_ai_voice/program/app_module.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_module.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_module.prog	(working copy)
@@ -0,0 +1,1389 @@
+
+ifdef COMPILE_MODULE
+
+module_init:	
+	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 patch0c_2,mem_patch0c
+	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 patch0c_3,mem_patch0c
+	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 patch0c_4,mem_patch0c
+	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 patch0c_5,mem_patch0c
+	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 patch0c_6,mem_patch0c
+	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 patch0c_7,mem_patch0c
+	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: usb_pc_ai_voice/program/app_mouse.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_mouse.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_mouse.prog	(working copy)
@@ -0,0 +1,5303 @@
+
+ifdef COMPILE_MOUSE
+mouse_init:
+	call enable_authrom
+	call mouse_setting_config
+	call mouse_init_sunt
+	rtn wake
+	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
+	branch mouse_start_work
+
+
+mouse_cb_fuction:
+	bpatch patch0d_0,mem_patch0d
+	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_spi_write_flash_cb
+	store 2,mem_cb_spi_flash_write_complate
+	setarg mouse_lpm_check_wake_lock
+	store 2,mem_cb_check_wakelock
+	setarg mouse_le_transmit
+	store 2,mem_cb_ble_transmit
+	setarg mouse_set_lpm_mult
+	store 2,mem_cb_bt_set_mult
+	rtn
+
+
+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_le_name_modify
+	call mouse_param_init
+	call mouse_device_multi_led_parm_init
+	call le_set_fixed_ltk_justwork
+mouse_load_device_info_check:
+	bpatch patch0d_1,mem_patch0d
+	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
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_24G_2M_PHY
+	branch g24_enable_2M
+
+mouse_default_init:
+	bpatch patch0d_2,mem_patch0d
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	isolate1 MOUSE_KEYBOARD_ENABLE,pdata
+	call mouse_customer_key_enable,true
+	
+mouse_default_parm_init:
+	fetch 2,mem_mouse_24g_pair_timeout_init
+	store 2,mem_24g_pair_timeout_init
+
+	fetch 1,mem_mouse_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_mouse_24g_pair_tx_power
+	store 1,mem_24g_pair_tx_power
+
+	fetch 1,mem_24g_ch_map_update
+	ncall g24_chamap_param_update,blank
+mouse_default_parm_init_next:
+	bpatch patch0d_3,mem_patch0d
+	call mouse_xtal_init
+	call mouse_24g_phy_select
+	call mouse_24g_long_sleep_set
+	branch g24_pair_param_init
+
+mouse_param_common_init:
+	setarg MOUSE_BLE_ATT_LIST_ADDR				//ble attlist start address
+	store 2,mem_ui_le_uuid_table
+	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
+
+	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 mouse_adc_gpio_mux_init
+	
+mouse_param_init:
+	bpatch patch0d_4,mem_patch0d
+	call mouse_param_common_init
+	jam DPI_BUTTON_STATE_UP,mem_mouse_dpi_button_state	
+//===========init spi param==============================
+	setarg 0x0a77
+	store 2,mem_spi_init_clk
+	setsect 0,0x1224
+	setsect 1,0x4000
+	setsect 2,0x0
+	istore 5,contw
+//======================================================	
+	
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_BT_125Hz,mouse_param_init_intervl_end
+	setarg LE_INTERVAL_7_5MS
+	store 2,mem_le_interval_min
+	store 2,mem_le_interval_min+2
+mouse_param_init_intervl_end:
+	call mouse_g24_interval_param_8ms
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_24G_250Hz,mouse_24g_short_sleep_set_end
+	call mouse_g24_interval_param_4ms
+mouse_24g_short_sleep_set_end:
+	fetch 3,mem_24g_short_sleep_set
+	store 3,mem_mouse_24g_short_sleep_set_init
+	fetch 1,mem_device_flag
+	store 1,mem_device_flag_temp
+	fetch 3,mem_le_lap+3
+	store 3,mem_mouse_le_lap_temp
+	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
+	call le_modified_name_adv
+mouse_sensor_set_angle:
+	bpatch patch0d_5,mem_patch0d
+	fetch 1,mem_sensor_angle_default
+	store 1,mem_config_sensor_angle
+	fetch 1,mem_select_sensor_angle_gpio
+	rtneq GPIO_DISABLE
+	fetcht 1,mem_select_sensor_angle_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_select_sensor_angle_gpio
+	call gpio_get_bit
+	call mouse_sensor_switch_angle,true
+	branch mouse_gpio_config_input_pd
+mouse_sensor_switch_angle:
+	fetch 1,mem_sensor_angle_switch
+	store 1,mem_config_sensor_angle
+	rtn
+
+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 1,mem_mouse_24g_fast_hop_count_4ms
+	store 1,mem_24g_fast_hop_count
+	fetch 4,mem_mouse_24g_tsniff_4ms
+	store 4,mem_mouse_24g_tsniff	
+mouse_report_rate_set_250hz:
+	setarg 0x100c0c
+	store 3,mem_24g_interval
+	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 1,mem_mouse_24g_fast_hop_count_8ms
+	store 1,mem_24g_fast_hop_count
+	fetch 4,mem_mouse_24g_tsniff_8ms
+	store 4,mem_mouse_24g_tsniff
+mouse_report_rate_set_125hz:
+	setarg 0x1c1919
+	store 3,mem_24g_interval
+	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
+
+
+mouse_start_work:
+	bpatch patch0d_6,mem_patch0d
+	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_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_mouse_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_mouse_compare_addr
+	isub temp,null
+	branch mouse_bluetooth_fast_conn_init,zero
+	branch mouse_start_reconnect_device
+	
+mouse_start_reconnect_device:
+	bpatch patch0d_7,mem_patch0d
+	call mouse_device_le_reconn_led_config
+	arg mem_device1_type,rega
+	fetch 1,mem_device_flag
+	increase -1,pdata
+	mul32 pdata,29,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 patch0e_0,mem_patch0e
+	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_mouse_le_reconnect_flag
+	fetcht 1,mem_mouse_fast_direct_timeout
+	fetch 1,mem_mouse_bluetooth_fast_conn_flag
+	beq 0xff,mouse4_0_check_reconn_target_next
+	fetcht 1,mem_mouse_direct_timeout
+mouse4_0_check_reconn_target_next:	
+	storet 1,mem_mouse_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_mouse_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_delay_enter_hibernata:
+//	fetch 1,mem_mouse_direct_timeout
+//	store 1,mem_mouse_bluetooth_reconnect_timeout
+//	rtn
+ 
+mouse_app_enter_hibernate:
+	bpatch patch0e_1,mem_patch0e
+	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 patch0e_2,mem_patch0e
+	call disable_authrom 
+	call mouse_before_hibernate_wheel_gpio_set
+	call mouse_setgpio_hibernate
+	call mouse_flash_power_down
+	fetcht 1,mem_sensor_motion_gpio
+	branch gpio_clr_wake
+
+
+mouse_setgpio_hibernate:
+	bpatch patch0e_3,mem_patch0e
+	call mouse_set_sdio_high
+	call clear_wake
+	call mouse_logo_led_off
+	call mouse_lpm_before_common
+	call mouse_gpio_pd_idle
+	fetcht 1,mem_mouse_reuse_2ice_gpio
+	call mouse_gpio_config_input_pu
+	call mouse_gpio_set_high_impedance
+	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 mouse_gpio_config_input_pd
+	fetcht 1,mem_whee_b_data_gpio
+	branch mouse_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
+	fetch 1,mem_adc_channel_gpio
+	arg gpcfg_no_ie,temp
+ 	branch gpio_config_function_int
+	
+
+//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 patch0e_4,mem_patch0e
+	fetcht 1,mem_whee_a_data_gpio		//reinit gpio pu after disable wheel wakeup
+	call gpio_config_input
+	fetcht 1,mem_whee_b_data_gpio
+	call gpio_config_input
+	
+	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
+	
+	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 patch0e_5,mem_patch0e
+	fetch 1,mem_adc_config_flag
+	rtnne ADC_CONFIG_GPIO
+	fetcht 1,mem_adc_channel_gpio
+	branch gpio_set_high_impedance
+
+mouse_adc_gpio_mux_init:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_ADC
+	jam MOUSE_ADC_CHECK_MULTIPLE,mem_adc_mux_status
+	rtn
+
+mouse_adc_read:
+	bpatch patch0e_6,mem_patch0e
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_ADC
+	call mouse_adc_gpio_set
+	fetch 1,mem_adc_config_flag
+	beq ADC_CONFIG_GPIO,mouse_adc_read_gpio_mux_start	// gpio + dpi/switch
+	jam MOUSE_ADC_CHECK_HVIN_MULTIPLE,mem_adc_mux_status
+	branch mouse_adc_read_start
+
+mouse_adc_read_gpio_mux_start:
+	jam MOUSE_ADC_CHECK_GPIO_MULTIPLE,mem_adc_mux_status
+	branch mouse_adc_read_start
+	
+mouse_adc_read_start:
+	bpatch patch0e_7,mem_patch0e
+	call enable_adc
+	call vdd_calculate_by_mode
+	store 2,mem_mouse_vdd_now_vol
+	fetch 1,mem_adc_config_flag
+	bne ADC_CONFIG_GPIO, mouse_adc_data_process
+	fetcht 2,mem_mouse_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_mouse_vdd_now_vol
+mouse_adc_data_process:	
+	arg mem_mouse_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_mouse_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_mouse_adc_last_low_voltage_flag
+	rtn blank
+	jam 0,mem_mouse_adc_last_low_voltage_flag
+	branch mouse_low_voltage_led_off_judge
+	
+
+mouse_adc_bat_percent_lowpower_out:
+	bpatch patch0f_0,mem_patch0f
+	ifetch 8,rega
+	store 8,mem_pdatatemp
+	fetch 1,mem_adc_mux_status
+	beq MOUSE_ADC_CHECK_BATTERY_ONLY,mouse_adc_bat_percent_lowpower_out_battery
+	beq MOUSE_ADC_CHECK_GPIO_MULTIPLE,mouse_adc_bat_percent_lowpower_out_battery
+	beq MOUSE_ADC_CHECK_HVIN_MULTIPLE,mouse_adc_bat_percent_lowpower_out_hvin_multiple
+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
+
+mouse_adc_bat_percent_lowpower_out_hvin_multiple:
+	branch mouse_adc_bat_percent_lowpower_out_battery
+	
+/****************************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 mouse_gpio_config_input_pu
+	fetcht 1,mem_rbutton_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_mbutton_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_bk_button_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_fw_button_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_dpi_button_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_matrix_public_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_config_select_device_button_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_customer_key_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_whee_a_data_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_whee_b_data_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_whee_ta_data_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_whee_tb_data_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_sensor_motion_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_device_switch_gpio
+	call mouse_gpio_config_input_pu
+	
+	fetcht 1,mem_select_sensor_angle_gpio
+	branch mouse_gpio_config_input_pu
+
+
+mouse_gpio_set_pupd_by_input:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	and temp,0x7f,queue
+	fetch 4,core_gpio_in
+	qisolate1 pdata
+	branch mouse_gpio_config_input_pu,true
+mouse_gpio_config_input_pd:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	set1 GPIO_ACTIVE_BIT,temp
+	branch gpio_config_input
+
+mouse_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_high_impedance:
+	fetch 3,mem_mouse_set_high_impedance_bit_set
+	store 3,mem_pdatatemp
+	arg 13,loopcnt
+	arg 0,temp
+mouse_gpio_set_high_impedance_bit_loop:	
+	fetch 3,mem_pdatatemp
+	isolate1 0,pdata
+	call gpio_set_high_impedance,true
+	fetch 3,mem_pdatatemp
+	lshift pdata,pdata
+	store 3,mem_pdatatemp
+	increase 1,temp
+	loop mouse_gpio_set_high_impedance_bit_loop
+	rtn
+
+/****************************gpio end*******************************/
+
+
+/***********************le device info modify*****************************/
+mouse_le_name_modify:
+	bpatch patch0f_1,mem_patch0f
+	fetch 8,mem_le_name_patch
+	rtn blank
+	fetch 1,mem_le_name_patch_len
+	copy pdata,rega
+	sub pdata,11,null
+	nbranch mouse_le_name_patch_len_overflow,positive
+	
+	call mouse_le_name_clear
+	
+	arg mem_le_adv_swift_pair+9,contw
+	call mouse_le_name_modify_next
+	
+	arg mem_le_scan_data+2,contw
+	call mouse_le_name_modify_next
+	
+	arg mem_le_name,contw
+mouse_le_name_modify_next:
+	arg mem_le_name_patch,contr
+	copy rega,loopcnt
+	branch memcpy
+
+mouse_le_name_clear:
+	arg mem_le_adv_swift_pair+9,contw
+	call mouse_le_name_clear_next
+	
+	arg mem_le_scan_data+2,contw
+	call mouse_le_name_clear_next
+
+	arg mem_le_name,contw
+mouse_le_name_clear_next:
+	arg 11,loopcnt
+	branch clear_mem	
+
+mouse_le_name_patch_len_overflow:
+	call mouse_le_swift_pair_disable
+	
+	fetch 1,mem_le_name_patch_len
+	increase 1,pdata
+	store 1,mem_le_adv_swift_pair
+	jam 9,mem_le_adv_swift_pair+1
+	arg mem_le_name_patch,contr
+	arg mem_le_adv_swift_pair+2,contw
+	copy rega,loopcnt
+	call memcpy
+
+	fetch 1,mem_le_name_patch_len
+	increase 1,pdata
+	store 1,mem_le_scan_data
+	jam 9,mem_le_scan_data+1
+	arg mem_le_name_patch,contr
+	arg mem_le_scan_data+2,contw
+	copy rega,loopcnt
+	call memcpy
+
+	arg mem_le_name_patch_len,contr
+	arg mem_le_name_len,contw
+	copy rega,loopcnt
+	increase 1,loopcnt
+	branch memcpy
+
+mouse_le_swift_pair_disable:
+	arg mem_le_adv_swift_pair,contw
+	arg 20,loopcnt
+	branch clear_mem
+
+/***********************le device info modify 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 patch0f_2,mem_patch0f
+	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:
+	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 mouse_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
+mouse_dpi_check_next:
+	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_3io6key_check
+mouse_dpi_key_check_next:
+	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_3io6key_dpi_check_end:
+	fetcht 1,mem_dpi_button_gpio
+	call mouse_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 patch0f_3,mem_patch0f
+	call mouse_dpi_ghost_check
+	rtn user
+	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 patch0f_4,mem_patch0f
+	call mouse_setting_dpi_4_level
+	call mouse_dpi_led_blink_delay
+mouse_setting_sensor_type:
+	bpatch patch0f_5,mem_patch0f
+	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
+mouse_set_S201_dpi_0:	//1200
+	fetch 1,mem_sensor_s201_dpi_0
+	copy pdata,rega
+	branch mouse_dpi_S201_store
+
+mouse_set_S201_dpi_1:	//1600
+	fetch 1,mem_sensor_s201_dpi_1
+	copy pdata,rega
+	branch mouse_dpi_S201_store
+	
+mouse_set_S201_dpi_2:	//2400
+	fetch 1,mem_sensor_s201_dpi_2
+	copy pdata,rega
+	branch mouse_dpi_s201_store
+
+mouse_set_S201_dpi_3:	//3200
+	fetch 1,mem_sensor_s201_dpi_3
+	copy pdata,rega
+	branch mouse_dpi_s201_store
+
+mouse_set_S201_dpi_4:	//800
+	fetch 1,mem_sensor_s201_dpi_4
+	copy pdata,rega
+mouse_dpi_s201_store:
+	setarg 0xc309
+	call twspi_write
+	copy rega,pdata
+	lshift8 pdata,pdata
+	add pdata,0x23,pdata
+	call twspi_write
+	setarg 0x0009
+	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_L_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_L_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_BK_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_M_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 mouse_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 mouse_gpio_config_input_pu	
+
+mouse_dpi_another_down_new:
+	call mouse_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 mouse_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 mouse_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 mouse_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 patch0f_6,mem_patch0f
+	fetch 1,mem_sensor_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 mouse_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 mouse_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 mouse_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 mouse_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 mouse_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 mouse_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_OR_MATRIX,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_gpio_next:
+	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
+	fetcht 1,mem_customer_key_gpio
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_customer_key_check_vin
+	call gpio_get_bit
+	branch mouse_check_customer_button_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_customer_key_gpio
+	fetch 1,mem_mouse_customerkey_press_status
+	call mouse_check_key_connect_gnd
+	branch mouse_check_customerkey_gpio_over
+
+mouse_check_customer_button_connect_gnd:
+	fetcht 1,mem_matrix_public_gpio
+	fetch 1,mem_mouse_customerkey_press_status
+	call mouse_check_key_connect_gnd
+	branch mouse_check_customerkey_gpio_over
+
+mouse_3io6key_customer_key_check_vin:
+	fetch 1,mem_customer_key_gpio
+	call mouse_gpio_config_output_low
+	fetcht 1,mem_customer_key_gpio
+	call mouse_3io6key_check
+mouse_check_customerkey_gpio_over:	
+	store 1,mem_mouse_customerkey_press_status
+	call mouse_check_customerkey_gpio_next
+	fetcht 1,mem_customer_key_gpio
+	branch mouse_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_1:
+	and regb,0x07,pdata
+mouse_check_key_connect_gnd_next:
+	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 patch0f_7,mem_patch0f
+	copy regc,pdata
+	store 1,mem_mouse_key_status
+	lshift pdata,pdata
+	copy pdata,regb
+	copy temp,regc
+	call mouse_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:
+	rtneq GPIO_DISABLE
+	arg gpcfg_output_high,temp
+	branch gpio_config_function_int
+
+//input:pdata gpio number
+mouse_gpio_config_output_low:
+	rtneq GPIO_DISABLE
+	arg gpcfg_output_low,temp
+	branch gpio_config_function_int	
+	
+/*************************key***************************************/
+
+/**********************sensor******************************/	
+mouse_init_sunt:
+	bpatch patch10_0,mem_patch10
+	call mouse_sensor_spi_init
+	rtn wake
+mouse_init_sensor_wakeup:	
+	call mouse_sensor_poweron
+mouse_init_sensor:
+	bpatch patch10_1,mem_patch10
+	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
+	call mouse_sensor_wr_seq
+	branch mouse_setting_sensor_type
+
+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 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_sensor_enable_wp:
+	setarg 0x0009
+	branch twspi_write
+mouse_sensor_disable_wp:
+	setarg 0x5a09
+	branch twspi_write
+
+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 patch10_2,mem_patch10
+	call mouse_sensor_spi_init
+	call mouse_sensor_reset
+	call mouse_sensor_poweron_init
+	call mouse_sensor_wr_seq
+	branch mouse_setting_sensor_type
+
+mouse_sensor_powerdown:
+	bpatch patch10_3,mem_patch10
+	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
+	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:
+	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
+	rtnne 1
+	setarg 0
+	store 1,mem_mouse_long_mult_flag
+	store 4,mem_mouse_x
+	branch mouse_init_sensor_reset
+
+mouse_data_extsign:
+	rtnbit0 7
+	arg 0xff00,temp
+	ior temp,pdata
+	rtn
+
+mouse_data_extsign_bit3:
+	rtnbit0 3
+	arg 0xf0,temp
+	ior temp,pdata
+	rtn
+
+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
+	store 2,mem_mouse_y
+	rtn
+
+	/* 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_mouse_bluetooth_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 patch10_4,mem_patch10
+	call mouse_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_mouse_compare_addr
+	isub temp,null
+	branch mouse_start_discovery ,zero
+	branch mouse_start_reconnect_device
+
+mouse_bluetooth_fast_conn_disable:
+	jam 0x5a,mem_mouse_bluetooth_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_mouse_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 patch10_5,mem_patch10
+	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_mouse_le_bb_connected_flag
+	call mouse_24g_first_store_reconn_info
+	fetch 1,mem_mouse_le_reconnect_flag
+	nbranch mouse_le_bb_event_connected_next,blank
+	jam 0x14,mem_mouse_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_mouse_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_mouse_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_mouse_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_mouse_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
+	store 2,mem_le_interval_min
+	store 2,mem_le_interval_min+2
+	call mouse_updata_le_param
+mouse_le_conn_param_lpm_disable:
+	jam LE_LPM_DISABLE,mem_mouse_le_conn_param_reject
+	rtn
+
+mouse_le_bb_event_connect_complete:
+	fetch 1,mem_mouse_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
+	store 2,mem_le_interval_min
+	store 2,mem_le_interval_min+2
+	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_mouse_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_mouse_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 patch10_6,mem_patch10
+	call le_fifo_check_nearly_full
+	nrtn blank
+	fetch 1,mem_mouse_bluetooth_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,mouse_le_send_empty_packet
+	bbit1 MOUSE_SELECT_DEVICE_FLAG,mouse_le_send_empty_packet
+	bbit1 MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG,mouse_le_send_empty_packet
+	bbit1 MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,mouse_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,mouse_le_send_mouse_data
+	fetch 1,mem_customer_key
+	beq 1,mouse_le_send_keyboard_package_data		
+mouse_le_send_mouse_data:
+	branch mouse_fill_mouse_data_le
+
+
+mouse_le_send_keyboard_package_data:
+	fetch 1,mem_customer_data_trigger
+	branch mouse_le_release_keyboard_data,blank
+	fetch 8,mem_customer_key_press+1
+mouse_fill_keyboard_package_data_le:
+	store 8,mem_pdatatemp
+	fetch 1,mem_customer_key_press
+	beq KB_MULTIKEY_REPORT_ID,mouse_fill_multimedia_key_data_le
+	beq KB_SYSTEM_CONCTRL_REPORT_ID,mouse_fill_systemctrl_key_data_le
+	jam 8,mem_le_data_len
+	fetcht 2,mem_le_keyboard_handle
+mouse_fill_data_le:
+	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_pdatatemp,contr
+	branch memcpy
+	
+mouse_le_release_keyboard_data:
+	fetch 8,mem_customer_key_release+1
+	branch mouse_fill_keyboard_package_data_le
+
+mouse_fill_multimedia_key_data_le:
+	jam 3,mem_le_data_len
+	fetcht 2,mem_le_multimedia_handle
+	branch mouse_fill_data_le
+
+mouse_fill_systemctrl_key_data_le:
+	jam 2,mem_le_data_len
+	fetcht 2,mem_le_systemctrl_handle
+	branch mouse_fill_data_le
+
+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
+	istore 1,contw
+	rtn
+
+mouse_le_send_empty_packet:
+	setarg 0
+	store 7,mem_mouse_key
+mouse_fill_mouse_data_le:
+	jam 7,mem_le_data_len
+	fetch 7,mem_mouse_key
+	store 7,mem_pdatatemp
+	fetcht 2,mem_le_notify_handle
+	branch mouse_fill_data_le
+
+mouse_check_51cmd_adv:
+	jam 0,mem_mouse_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_bb_disconnected:
+	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 4,contw             //clean wheel statue
+	jam 0,mem_mouse_move_flag
+	jam 0,mem_ltk_exists
+	rtn
+
+mouse4_0_event_bb_disconn:
+	call mouse_le_clean_connect_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 patch10_7,mem_patch10
+	//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
+	//24g
+	call g24_pair_timeout_timer
+	call g24_reconn_timeout_timer
+	call mouse_24g_long_sleep_param_update_timer
+	//poll
+	call mouse_dpi_key_check_long_press
+	call mouse_bt_discovery_check
+	call mouse_commbination_key_process
+	call mouse_check_discovery_timeout_timer
+	//ble
+	call mouse_check_direct_timeout_timer
+	call mouse_le_enable_att_list_timer
+	call mouse_le_battery_updata_timer
+	call mouse_le_send_smp_security_request_timer
+	//bt
+	call mouse_check_reconnect_delay_long_sleep		//delete 3.0,reconnect fail
+	call mouse_current_mult_update_timer
+	call mouse_wheel_trigger_timer
+	call mouse_store_information_delay_timer
+	branch mouse_check_no_data_timeout_timer
+
+mouse_bt_discovery_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_PB_BUTTON_LONG_PRESS_DISCONVERY,mouse_bt_discovery_by_pb_button
+	rtn
+
+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_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 pdata,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_mouse_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_mouse_direct_timer,regc
+	arg mouse_check_direct_timeout,regb
+	call timer_single_step
+	fetch 1,mem_mouse_direct_timer
+	beq 1,app_ble_stop_direct_adv
+	rtn
+
+mouse_check_direct_timeout:
+	fetch 1,mem_mouse_bluetooth_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_mouse_le_bb_connected_flag
+	rtn blank
+	arg mem_mouse_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_mouse_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_check_reconnect_delay_long_sleep:
+	arg mem_mouse_bluetooth_reconnect_timeout,regc
+	arg mouse_app_enter_hibernate,regb
+	branch timer_single_step
+
+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
+	jam 1,mem_mouse_long_mult_flag
+	rtn
+
+
+mouse_check_no_data_timeout_timer:	
+	arg mem_mouse_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_mouse_no_data_timeout
+	store 2,mem_mouse_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_mouse_need_soft_reset
+	nbranch mouse_soft_reset,blank
+	rtn
+
+mouse_bb_event_discovery_btn:
+	isolate1 mark_24g,mark
+	call mouse_24g_stop,true
+	call mouse_disconnect
+	call mouse_le_clean_connect_flag
+	branch mouse_start_discovery
+	
+mouse_start_discovery:
+	bpatch patch11_0,mem_patch11
+	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 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
+mouse_start_discovery_norandom:
+	fetch 3,mem_mouse_le_lap_temp
+	store 3,mem_le_lap+3
+	call app_lpm_mult_disable
+	fetch 2,mem_mouse_discovery_timeout
+	store 2,mem_mouse_discovery_timer
+	setarg 0
+	store 2,mem_mouse_no_data_timer
+	store 2,mem_le_battery_level_updata_timer
+	store 1,mem_mouse_direct_timer
+	store 1,mem_mouse_bluetooth_reconnect_timeout
+	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 patch11_1,mem_patch11
+	arg MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,queue
+	call mouse_disable_function_flag
+	jam 0,mem_mouse_bluetooth_reconnect_timeout
+	branch mouse_stop_le_adv
+mouse_stop_le_adv:
+	setarg 0
+	store 1,mem_mouse_direct_timer
+	store 2,mem_mouse_discovery_timer
+	branch check_51cmd_stop_adv
+
+mouse_store_remote_bdaddr:
+	bpatch patch11_2,mem_patch11
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_STORE_EEPROM_FLAG
+	arg MOUSE_STORE_EEPROM_FLAG,queue
+	call mouse_disable_function_flag
+	call mouse_check_device_addr
+mouse_unplug_clean_bdaddr:
+	call mouse_before_store_reconn_info
+	branch mouse_store_device_info_delay
+
+mouse_check_device_addr:
+	fetch 1,mem_record_bt_mode
+	beq REC_4_MODE,mouse_check_le_device_addr
+	rtn
+mouse_check_le_device_addr:
+	store 1,mem_device_addr_temp
+	fetch 6,mem_le_plap
+mouse_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
+mouse_check_device_addr_end:
+	ifetcht 7,contr
+	isub temp,null
+	branch mouse_clean_addr,zero
+	increase 22,contr
+	loop mouse_check_device_addr_end
+	rtn
+mouse_before_store_reconn_info:
+	arg mem_device1_type,rega
+	fetch 1,mem_device_flag
+	increase -1,pdata
+	mul32 pdata,29,pdata
+	iadd rega,rega
+	fetch 1,mem_record_bt_mode
+	istore 1,rega
+	beq REC_4_MODE,mouse_store_le_device
+	rtn
+	
+mouse_store_le_device:
+	fetch 6,mem_le_plap
+	istore 6,contw
+	arg mem_le_ltk,contr
+	call memcpy16
+	fetch 6,mem_le_lap
+	istore 6,contw
+	rtn
+
+mouse_clean_addr:
+	increase -6,contr
+	copy contr,contw
+	fetcht 6,mem_device_addr_temp+1
+	increase 3,temp
+	istoret 6,contw
+	rtn
+	
+mouse_select_reconn_device:
+	arg mem_device1_type,rega
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	increase -1,pdata
+	mul32 pdata,29,pdata
+	iadd rega,rega
+	ifetch 1,rega
+	store 1,mem_xrecord_mode
+	beq REC_4_MODE,mouse_load_le_device
+	rtn
+
+mouse_load_le_device:
+	ifetch 6,contr
+mouse_load_le_device_end:
+	store 6,mem_hci_plap
+	arg mem_le_ltk,contw
+	call memcpy16
+	ifetch 6,contr
+	store 6,mem_le_lap
+	rtn
+
+mouse_app_initflag_check:
+	bpatch patch11_3,mem_patch11
+	fetch 2,mem_store_flag
+	arg EEPROM_INIT_FLAG,temp
+	isub temp,null
+	branch mouse_load_device_info,zero
+mouse_app_initflag_check_next:
+	storet 2,mem_store_flag
+	call mouse_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
+mouse_load_default_dpi:
+	fetch 1,mem_config_sensor_dpi
+	store 1,mem_mouse_dpi
+	rtn
+
+mouse_load_device_info:
+	call mouse_otp_load_dpi
+//	call mouse_select_reconn_device
+	fetch 4,mem_mouse_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_24g_addr
+	rtn	
+
+mouse_otp_load_dpi:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_LOAD_AND_STORE_DPI
+	fetch 2,mem_otp_offset_dpi
+	copy pdata,regb
+	call mouse_read_otp_dpi_common			
+	fetch 1,mem_mouse_dpi_temp
+	call mouse_load_default_dpi,blank
+	rtn
+	
+mouse_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
+
+/******************************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 patch11_4,mem_patch11
+	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 patch11_5,mem_patch11
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_EEPROM,mouse_store_eerpom_dpi
+	bbit1 MOUSE_ENABLE_OTP,mouse_store_otp_dpi
+	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 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
+	call mouse_spid_flash_powerdown
+	branch mouse_sensor_spi_init
+
+
+
+/******************otp data store****************/
+mouse_store_otp_device_info:
+	call mouse_write_otp_device_flag
+	call mouse_write_otp_device_info
+	branch mouse_write_otp_le_addr_increase_count_info
+
+
+/**********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_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
+	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:
+	fetch 1,mem_device_flag_last
+	fetcht 1,mem_device_flag
+	isub temp,null
+	rtn zero
+	lshift4 temp,temp
+	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
+
+
+/**********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_mouse_24g_addr
+	isub temp,null
+	rtn zero
+	arg 4,loopcnt
+	arg mem_mouse_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 2,mem_random_addr_increase_count_temp
+	branch mouse_le_addr_increase_count_store,blank	
+	store 2,mem_random_addr_increase_count_last
+	increase 2,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 2,mem_random_addr_increase_count_last
+	fetcht 2,mem_random_addr_increase_count
+	isub temp,null
+	rtn zero
+	arg 2,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,blank
+	fetch 1,mem_mouse_dpi
+	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:
+	fetch 1,mem_mouse_dpi_last
+	fetcht 1,mem_mouse_dpi
+	isub temp,null
+	rtn zero
+	lshift4 temp,temp
+	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
+	
+/******************************store info end**************************************/
+	
+
+
+/******************************load info start**************************************/
+
+/******************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 mouse_eeprom_load_recon_info
+	branch mouse_app_initflag_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 spid_init_flash
+	call mouse_spid_flash_release_form_powerdown
+	call mouse_information_flash_parameters
+	call spid_read_flash
+	call mouse_spid_flash_powerdown
+	call mouse_app_initflag_check
+	branch mouse_sensor_spi_init
+	
+mouse_information_flash_parameters:
+	setarg mem_mouse_information_end
+	arg mem_mouse_information_start,temp
+	isub temp,temp
+	fetch 3,mem_flash_base
+	arg mem_mouse_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 mouse_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_read_otp_device_info
+	call mouse_read_otp_le_addr_increase_count_info
+mouse_otp_load_app_initflag:
+	arg 2,loopcnt
+	fetch 2,mem_otp_offset_app_initflag
+	copy pdata,regb
+	arg mem_store_flag,rega
+	call otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */
+	call mouse_app_initflag_check
+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_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_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:
+	store 1,mem_device_flag
+	rtn
+
+/****************otp load addr*************/
+mouse_read_otp_device_info:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_read_otp_24g_addr
+	beq MODE_BT_DEVICE1,mouse_read_otp_le_device1
+	beq MODE_BT_DEVICE2,mouse_read_otp_le_device2
+	rtn
+	
+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
+	store 6,mem_device1_locall_addr
+	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
+	store 6,mem_device2_locall_addr
+	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_mouse_24g_addr
+	rtn
+
+/**************load le addr increase count**********/
+mouse_read_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_read_otp_le_addr_increase_count_loop:
+	call mouse_read_otp_le_addr_increase_count_common
+	fetch 2,mem_random_addr_increase_count_temp
+	branch mouse_le_addr_increase_count_load,blank	
+	store 2,mem_random_addr_increase_count_last
+	increase 2,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 2,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 2,mem_random_addr_increase_count_temp
+	store 2,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:
+	store 1,mem_mouse_dpi
+	rtn
+
+/******************************load info end**************************************/
+
+
+mouse_idle:
+	bpatch patch11_6,mem_patch11
+	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
+	branch mouse_wheel_check
+	
+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_check_once:
+	jam 0x03,mem_mouse_pbkey_press_status
+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 patch11_7,mem_patch11
+	fetch 1,mem_config_select_device_button_gpio
+	rtneq GPIO_DISABLE
+	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:
+	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 mouse_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_mouse_direct_timer
+	rtn blank
+	fetch 1,mem_mouse_direct_timeout
+	store 1,mem_mouse_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
+	branch enable_user
+	
+mouse_check_select_device_by_switch:
+	bpatch patch12_0,mem_patch12
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+	fetcht 1,mem_device_switch_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_device_switch_gpio
+	call gpio_get_bit
+	branch mouse_check_select_24g_device,true
+mouse_select_btdevice:
+	fetch 1,mem_device_flag
+	rtneq MODE_BT_DEVICE1
+	jam MODE_BT_DEVICE1,mem_device_flag
+	branch mouse_stop_bluetooth_mode
+	
+mouse_check_select_24g_device:	
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	jam MODE_24G_DEVICE,mem_device_flag
+	branch mouse_24g_stop
+
+mouse_ready_reconnection_by_button:
+	bpatch patch12_1,mem_patch12
+	fetch 1,mem_device_number
+	rtneq 1		// 1channel
+	call mouse_select_device_number
+	storet 1,mem_device_flag
+mouse_store_device_number_before_reset:	
+//	jam 0,mem_link_key_exists
+	call mouse_select_device_enable
+	call mouse_stop_bluetooth_mode
+	call app_evt_button_long_pressed
+	call mouse_select_device_disable
+	jam 1,mem_mouse_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
+	ncall mouse_select_device_count_clean_bt,positive
+	rtn
+	
+mouse_select_device_number_24g:	
+	fetch 1,mem_device_number
+	increase -1,pdata
+	isub temp,null
+	ncall mouse_select_device_count_clean_24g,positive
+	rtn
+
+mouse_select_device_count_clean_24g:
+	arg 0,temp
+	rtn
+mouse_select_device_count_clean_bt:
+	arg 1,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_customer_key_enable:
+	setarg 0
+	store 8,mem_customer_key_press
+	store 8,mem_customer_key_release
+	fetch 1,mem_mouse_customer_function	// 01--win+d     02--ctrl+alt+a    03--AC home    04--play
+	beq 2,mouse_customer_key_ctrl_alt_a
+	beq 3,mouse_customer_AC_home
+	beq 4,mouse_customer_key_play
+	setarg 0x070008
+mouse_customer_standrad_key_set:	
+	store 8,mem_customer_key_press+1		// win + d
+	rtn
+
+mouse_customer_key_ctrl_alt_a:
+	setarg 0x040005
+	branch mouse_customer_standrad_key_set
+
+mouse_customer_AC_home:
+	setarg 0x022303
+mouse_customer_media_key_set:	
+	store 8,mem_customer_key_press
+	setarg 0x03
+	store 8,mem_customer_key_release
+	rtn
+	
+mouse_customer_key_play:
+	setarg 0x00cd03
+	branch mouse_customer_media_key_set
+
+	
+mouse_polling_device:
+	bpatch patch12_2,mem_patch12
+	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 mouse_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 patch12_3,mem_patch12
+	fetch 1,mem_config_sensor_type
+	rtneq P3212
+	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
+	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 patch12_4,mem_patch12
+	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
+	store 2,mem_mouse_y
+	rtn
+
+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
+	call wait_div_end
+	quotient pdata
+	rtn
+mouse_current_xy_get_0_6_times:	//0.6 times
+	mul32 pdata,12,pdata
+	div pdata,10
+	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
+	jam 1,mem_mouse_long_mult_flag
+	rtn
+
+
+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 patch12_5,mem_patch12
+	jam 0,mem_24g_attempt_fail_flag
+	call g24_transmit_next_packet
+	setarg -1
+	store 4,mem_24g_enter_hibernate
+	setarg 0
+	store 7,mem_mouse_key
+	jam 1,mem_sensor_shutdown_flag
+	call mouse_sensor_powerdown
+	call mouse_setgpio_hibernate
+	branch mouse_24g_long_sleep
+
+mouse_wakeup_24g:
+	fetch 1,mem_sensor_shutdown_flag
+	ncall mouse_wakeup_24g_from_long_sleep,blank
+	jam 0,mem_sensor_shutdown_flag
+	rtn
+
+mouse_wakeup_24g_from_long_sleep:
+	call mouse_init_sensor_wakeup
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_WHEEL_WAKE_UP_CANCEL
+mouse_wheel_gpio_init:
+	fetch 1,mem_whee_a_data_gpio
+	arg gpcfg_pullup,temp
+ 	call gpio_config_function_int
+	fetch 1,mem_whee_b_data_gpio
+	arg gpcfg_pullup,temp
+ 	branch gpio_config_function_int	
+
+mouse_24g_transmit_start:
+	call mouse_24g_fast_conn_mode_check
+	fetch 1,mem_sensor_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
+	branch mouse_soft_agc_disable
+
+mouse_soft_agc_enable:
+	jam 0,mem_gain_fix
+	jam TX_POWER_FACTORY,mem_tx_power
+	rtn
+mouse_soft_agc_disable:
+	jam 0xff,mem_gain_fix
+	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_mouse_24g_power_on_fast_conn_timer
+	store 2,mem_24g_reconn_timeout
+	jam FAST_CONN_AND_3_0_ADDR,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 mouse_select_reconn_device
+	branch mouse_start_reconnect_device
+
+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
+	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:
+	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 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_mouse_24g_addr		// auto pair first time
+	fetcht 4,mem_mouse_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
+	branch mouse_24g_start_auto_pair+1
+	
+mouse_24g_attempt_success:
+	fetch 4,mem_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_mouse_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
+	fetch 4,mem_24g_fast_conn_addr
+	isub temp,null
+	rtn zero
+	branch mouse_24g_first_store_reconn_info
+	
+mouse_24g_pairing_complete:
+	call mouse_init_sensor_reset
+	call mouse_read_sensor_common
+mouse_24g_pairing_complete_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_mouse_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 patch12_6,mem_patch12
+	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
+	fetch 1,mem_customer_data_trigger
+	nbranch mouse_customer_key_press,blank
+	arg mem_customer_key_release,regb	//tx buff
+	rtn
+mouse_customer_key_press:
+	arg mem_customer_key_press,regb
+	rtn
+
+
+/**************************************g24 search receiver*****************************************/
+
+mouse_24g_search_dongle_init:
+	setarg 0
+	store 3,mem_mouse_search_dongle_action
+	rtn
+
+mouse_24g_search_dongle:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_24G_SEARCH_DONGLE
+	fetch 1,mem_mouse_long_mult_flag
+	rtn blank
+	fetch 1,mem_24g_abort_pac
+	rtn blank
+	fetch 1,mem_mouse_search_dongle_interval
+	increase 1,pdata
+	and_into 3,pdata
+	store 1,mem_mouse_search_dongle_interval
+	nrtn blank	//400ms
+	jam 0,mem_mouse_search_dongle_ch
+mouse_24g_search_dongle_loop:
+	bpatch patch12_7,mem_patch12
+	fetch 1,mem_mouse_search_dongle_ch
+	increase 1,pdata
+	store 1,mem_mouse_search_dongle_ch
+	sub pdata,G24_CH_NUMBER,null
+	nbranch mouse_24g_search_dongle_loop_end,positive
+	call g24_reconn_data_prep
+	call g24_transmit_receive_ack
+	nbranch mouse_24g_search_dongle_loop_retry,sync
+	nbranch mouse_24g_search_dongle_loop_retry,user3
+	call mouse_g24_ackpayload_parse
+	call mouse_24g_search_dongle_success
+mouse_24g_search_dongle_loop_end:
+	call g24_txbuf_clear
+	fetch 1,mem_mouse_search_dongle_count
+	increase 1,pdata
+	store 1,mem_mouse_search_dongle_count
+	beq G24_CH_POLL_COUNT,mouse_24g_search_dongle_check
+	rtn
+
+mouse_24g_search_dongle_loop_retry:
+	call g24_ch
+	branch mouse_24g_search_dongle_loop
+
+mouse_24g_search_dongle_check:
+	jam 0,mem_mouse_search_dongle_count
+	fetch 1,mem_mouse_search_dongle_action
+	rtnbit1 G24_DISCONN_STATE
+	set1 G24_DISCONN_STATE,pdata
+	store 1,mem_mouse_search_dongle_action
+	fetch 2,mem_mouse_24g_search_dongle_time_init		//3min
+	store 2,mem_mouse_no_data_timer
+	branch mouse_sensor_powerdown
+	
+mouse_24g_search_dongle_success:
+	fetch 1,mem_24g_abort_pac
+	branch mouse_24g_search_dongle_init,blank
+	jam 0,mem_mouse_search_dongle_count
+	fetch 1,mem_mouse_search_dongle_action
+	rtnbit0 G24_DISCONN_STATE
+	set0 G24_DISCONN_STATE,pdata
+	store 1,mem_mouse_search_dongle_action
+	call mouse_no_data_timer_init
+	branch mouse_init_sensor_wakeup
+
+mouse_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
+	rtn
+
+/**************************************g24 search receiver*****************************************/
+
+
+mouse_g24_retransmit:
+	fetch 1,mem_mouse_need_soft_reset
+	nrtn blank
+	call mouse_retransmit_select_device_by_pb_button
+	call mouse_select_device_by_dpi_button_once
+	branch g24_retransmit0
+
+mouse_select_device_by_dpi_button_once:
+	arg 12,queue
+	call timer_check
+	nrtn blank
+	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
+//	jam 0x03,mem_mouse_dpikey_press_status
+	branch mouse_dpi_check
+
+/**************************************g24 new process start********************************************/
+mouse_24g_before_lpm_sleep:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,lpm_sleep_skip_cb_function
+	fetch 1,mem_24g_disable_fec1
+	rtn blank
+mouse_peripheral_clock_off:
+	jam 2,core_clksel			//use rc clock
+	jam 0xf8,core_lpm_ctrl
+	rtn
+
+/**************************************g24 new process end********************************************/
+
+/*******************logo led*******************/
+mouse_logo_led_on_timer:
+	fetch 1,mem_mouse_logo_led_gpio
+	rtneq GPIO_DISABLE
+	fetch 2,mem_mouse_no_data_timer
+	rtn blank
+	fetch 2,mem_mouse_no_data_timeout
+	fetcht 2,mem_mouse_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 patch13_0,mem_patch13
+	fetch 1,mem_config_sensor_type
+	beq P3212,mouse_dpi_led_blink_init_another		//result:    level3: 1  2  3     level4: 2  3  4  1
+	beq KA8G2,mouse_dpi_led_blink_init_another	//result:    level3: 1  2  3     level4: 2  3  4  1
+	fetcht 1,mem_mouse_dpi
+	increase 2,temp	// 2 3 4 (5)
+mouse_dpi_led_blink_init_next:
+	sub temp,3,null
+	call mouse_dpi_led_blink_init_level_4,positive
+	ncall mouse_dpi_led_blink_count_clean,positive
+	copy temp,pdata
+	iadd pdata,pdata
+	store 1,mem_mouse_multi_led_blink_count
+mouse_multi_dpi_led_blink_enable:
+	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_init_another:
+	fetcht 1,mem_mouse_dpi
+	increase 1,temp
+	branch mouse_dpi_led_blink_init_next
+
+mouse_dpi_led_blink_init_level_4:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_DPI_LEVEL_4
+	increase 1,temp  	// 2-->3   3-->4
+	rtn
+mouse_dpi_led_blink_count_clean:
+	increase -3,temp		// 4-->1  5-->2
+	rtn
+
+
+mouse_dpi_led_blink_delay:
+	fetch 1,mem_mouse_dpi_gpio
+	rtneq GPIO_DISABLE
+	fetch 2,mem_mouse_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_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_mouse_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
+	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
+	bbit1 MOUSE_ENABLE_DPI_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
+	bbit1 MOUSE_ENABLE_DPI_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 patch13_1,mem_patch13
+	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 patch13_2,mem_patch13
+	fetch 1,mem_device_flag
+	rtnne MODE_24G_DEVICE
+	call mouse_multi_led_blink_enable_init
+	jam 1,mem_mouse_multi_led_blink_type
+	call mouse_device_24g_led_blink_timer_init
+	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
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	call mouse_multi_led_blink_enable_init
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_BT_RECONN_LED_EFFECT
+	jam 3,mem_mouse_multi_led_blink_type
+	call mouse_device_le_reconn_led_blink_timer_init
+	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
+	jam 0,mem_mouse_le_reconn_blink_limit
+	jam 2,mem_mouse_multi_led_blink_type
+	call mouse_device_le_discovery_led_blink_timer_init
+mouse_multi_led_blink_enable_init:
+	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
+	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
+	call mouse_multi_low_led_blink_count_init
+	branch mouse_device_led_off
+
+mouse_multi_led_type_blink:
+	bpatch patch13_3,mem_patch13
+	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
+	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 patch13_4,mem_patch13
+	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 patch13_5,mem_patch13
+	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_high_impedance
+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_high_impedance
+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_high_impedance
+
+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
+	bbit1 MOUSE_ENABLE_DPI_LOW_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
+	bbit1 MOUSE_ENABLE_DPI_LOW_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
+	jam 1,mem_lpm_mode
+	rtn
+
+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
+	jam 0,mem_lpm_mode
+	rtn
+
+
+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_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_set_lpm_mult:
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,mouse_le_set_lpm_mult
+	rtn
+
+mouse_24g_long_sleep:
+	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_sensor_shutdown_flag
+	ncall mouse_setgpio_hibernate,blank
+	fetch 4,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_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:
+	store 4,mem_mouse_24g_sleep_time_temp
+	call mouse_24g_miss_temp_clear
+	fetch 4,mem_mouse_24g_sleep_time_temp
+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_last_miss:
+	fetch 4,mem_mouse_24g_tx_time_last_delt
+	fetcht 4,mem_mouse_24g_sleep_miss_temp
+	iadd temp,pdata
+	branch mouse_24g_short_sleep_notify
+	
+mouse_24g_short_sleep_2:
+	jam 1,mem_mouse_24g_sleep_miss
+	rtn
+
+
+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_tx_time_last_delt
+mouse_24g_send_time_check_1:
+	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
+	increase -40,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 patch13_6,mem_patch13
+	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
+	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 patch13_7,mem_patch13
+	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
+	storet 3,mem_24g_short_sleep_set
+	rtn
+
+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
+	
+
+/*****************close define  COMPILE_MOUSE**********/
+else
+
+endif
+
+
+
Index: usb_pc_ai_voice/program/app_shutter.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_shutter.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_shutter.prog	(working copy)
@@ -0,0 +1,656 @@
+
+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 patch14_0,mem_patch14
+	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
+	fetch 8,mem_ble_shutter_interval_min
+	store 8,mem_le_interval_min
+	call app_lpm_mult_enable
+	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
+/**************************************/
+
+/******************soft swtich event**********************/
+//shutter_process_soft_swtich_button_long_press:
+//	branch ui_soft_switch_botton_long_press
+
+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:
+	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_load_ble_gatt_form_DataRom:
+//	arg BLE_GATT_LIST_SIZE,loopcnt
+//	arg BLE_SHUTTER_GATT_LIST_ADDR,contr
+//	branch memcpy_fast
+
+//shutter_load_dy_keyvalue_buffer_config_form_DataRom:
+///load data Rom/////////
+//	arg BT_DY_KEY_VALUE_LIST_SIZE,loopcnt
+//	arg mem_shutter_mousekey_value_list,contw
+//	arg BLE_SHUTTER_DY_MOUSEKEY_VALUE_LIST_ADDR,contr
+//	branch memcpy_fast
+
+
+/////////////////////////////////////////////////////////////////
+//shutter_soft_swtich_power_on:
+//	branch shutter_start_reconnect
+
+
+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_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 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
+//	jam 0x01,mem_shutter_bluetooth_type
+//	setarg 0x0030
+//	store 2,mem_classic_shutter_random_mac_offset_addr
+//	setarg 0x0000
+//	store 2,mem_shutter_config_eeprom_offset_addr
+	setarg 0x0002
+	store 2,mem_key0_press
+	store 2,mem_key1_press
+	setarg 0x0006
+	store 2,mem_key0_release
+	store 2,mem_key1_release
+	setarg 0x0007
+	store 2,mem_key2_press
+	setarg 0x0008
+	store 2,mem_key2_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: usb_pc_ai_voice/program/app_shutter_dy.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_shutter_dy.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/app_shutter_dy.prog	(working copy)
@@ -0,0 +1,1416 @@
+
+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 patch14_1,mem_patch14
+	//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
+
+	fetch 8,mem_ble_shutter_dy_interval_min_new
+	store 8,mem_ble_shutter_interval_min_new
+	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
+
+	call shutter_common_init
+	
+	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 patch14_2,mem_patch14
+	branch shutter_power_switch
+
+
+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 0x1f
+	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
+	branch shutter_dy_android_like_loaction_mid,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_android_like_loaction_mid:
+	arg mem_shutter_android_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
+	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_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 patch14_3,mem_patch14
+	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 patch14_4,mem_patch14
+	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 patch14_5,mem_patch14
+	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
+	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 patch14_6,mem_patch14
+	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 patch14_7,mem_patch14
+	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_move_down_left_corner
+	call shutter_dy_move_x_max
+	call shutter_dy_move_y_max
+	arg 0x05,pdata
+	call queue_push_one_byte
+	call shutter_dy_check_iphone
+	rtn blank
+	jam 120,mem_send_data_delay
+	arg 0x06,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 0x13,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 0x20,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 0x21,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 patch15_0,mem_patch15
+	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 4
+	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_get_move_data_iphone:
+	setarg 4
+	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 patch15_1,mem_patch15
+	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
+	branch shutter_dy_get_move_data
+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_every_move_size_set
+	fetch 2,mem_shutter_move_data_y
+	isub temp,pdata
+	store 2,mem_shutter_move_data_y
+shutter_dy_move_y_check_max:
+	fetcht 2,mem_shutter_move_data_y
+	call shutter_dy_check_iphone
+	branch shutter_dy_move_data_store,blank
+	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_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 0xfff
+	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_every_move_size_set
+	fetch 2,mem_shutter_move_data_y
+shutter_dy_move_down_next:
+	iadd temp,pdata
+	arg 0xfff,temp
+	isub temp,rega
+	branch shutter_dy_move_y_empty_check,positive
+	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 patch15_2,mem_patch15
+	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 patch15_3,mem_patch15
+	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 patch15_4,mem_patch15
+	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 patch15_5,mem_patch15
+	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:
+//	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
+	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 patch15_6,mem_patch15
+	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 patch15_7,mem_patch15
+	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:
+	bpatch patch16_0,mem_patch16
+	copy pdata,regb
+	arg SHUTTER_PARA_TOTAL_NUM,loopcnt
+//	fetch 2,mem_otp_read_offset_addr
+	arg mem_otp_move_config,rega
+	branch otp_read_data
+
+
+shutter_dy_shutter_write_move_config_to_otp_addr:
+	arg SHUTTER_PARA_TOTAL_NUM,loopcnt
+	arg mem_otp_move_config,rega
+	fetchr regb, 2, mem_otp_write_offset_addr
+	branch otp_write
+
+shutter_dy_shutter_1s_timer:
+	arg mem_shutter_1s_timer,regc
+	arg shutter_dy_store_move_config_info,regb
+	branch timer_single_step
+
+
+
+/*************shutter dy ending*********************/
+	
+endif
+
Index: usb_pc_ai_voice/program/ble_protocol_stack/le.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le.prog	(working copy)
@@ -0,0 +1,1868 @@
+ifdef COMPILE_LE
+//******************************************//
+//*************LE INIT ****************//
+//******************************************//
+
+le_init_conn:
+	bpatchx patch21_6,mem_patch21
+	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 patch21_7,mem_patch21
+	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 patch22_0,mem_patch22
+	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 patch22_1,mem_patch22
+	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 patch22_2,mem_patch22
+	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
+	disable master
+	rtn
+	
+le_master_disconn:
+	call le_disconnect
+	disable master
+	rtn
+	
+//******************************************//
+//***********LE slave process***********//
+//******************************************//
+le_slave_dispatch:
+	bpatchx patch22_3,mem_patch22
+	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 patch22_4,mem_patch22
+	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 patch22_5,mem_patch22
+	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 patch22_6,mem_patch22
+	call end_of_packet
+	call le_lpm_set_mult
+	branch calc_clke_offset
+
+
+le_check_md:
+	disable user
+	bmark1 mark_ble_rx_md,enable_user
+	bmark1 mark_ble_tx_md,enable_user
+	bmark1 mark_ble_crc_fail,enable_user
+	rtn
+
+
+le_slave_more_data:
+	bpatchx patch22_7,mem_patch22
+	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 patch23_0,mem_patch23
+	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 patch23_1,mem_patch23
+	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 patch23_2,mem_patch23
+	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 patch23_3,mem_patch23
+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 patch23_4,mem_patch23
+	set0 mark_ble_2M,mark
+	set0 mark_ble_lr,mark
+	rtn
+
+
+le_disable:
+	bpatchx patch23_5,mem_patch23
+	set0 mark_ble_encryption,mark
+	jam 0x01,0x8901
+	jam 0x80,0x8920
+	jam 0x03,0x8930
+	rtn
+	
+le_prep:
+	bpatchx patch23_6,mem_patch23
+	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 patch23_7,mem_patch23
+	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 patch24_0,mem_patch24
+	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 patch24_1,mem_patch24
+	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 patch24_2,mem_patch24
+	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 patch24_3,mem_patch24
+ 	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 patch24_4,mem_patch24
+	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
+	fetcht 6,mem_sync_clke
+	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 patch24_5,mem_patch24
+	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_mic_error,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 patch24_6,mem_patch24
+	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_mic_error
+ 	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 patch24_7,mem_patch24
+	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 patch25_0,mem_patch25
+	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 patch25_1,mem_patch25
+	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_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 patch25_2,mem_patch25
+	call ccm_ctrl_clr
+	branch end_of_packet
+	
+calc_clke_all_modem:
+	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 patch25_3,mem_patch25
+	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 patch25_4,mem_patch25
+	call le_transmit
+	branch end_of_packet
+	
+le_transmit:
+	bpatchx patch25_5,mem_patch25
+	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 patch25_6,mem_patch25
+	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 patch25_7,mem_patch25
+	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 patch26_0,mem_patch26
+	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 patch26_1,mem_patch26
+	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 patch26_2,mem_patch26
+	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 patch26_3,mem_patch26
+	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 patch26_4,mem_patch26
+	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 patch26_5,mem_patch26
+	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 patch26_6,mem_patch26
+	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 patch26_7,mem_patch26
+	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 patch27_0,mem_patch27
+	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 patch27_1,mem_patch27
+	fetch 1,mem_le_packet_llid
+	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 patch27_2,mem_patch27
+	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 patch27_3,mem_patch27
+	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 patch27_4,mem_patch27
+	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 patch27_5,mem_patch27
+	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 patch27_6,mem_patch27
+	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 patch27_7,mem_patch27
+	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
+	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 patch28_0,mem_patch28
+	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 patch28_1,mem_patch28
+	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 patch28_2,mem_patch28
+	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 patch28_3,mem_patch28
+	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: usb_pc_ai_voice/program/ble_protocol_stack/le_advertising.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le_advertising.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le_advertising.prog	(working copy)
@@ -0,0 +1,396 @@
+
+/*
+ble core spec advertising
+*/
+
+le_advertising_dispatch:
+	jam FUN_RX_LL_1M_PHY,mem_le_rx_phy
+	jam FUN_TX_LL_1M_PHY,mem_le_tx_phy
+	call le_enable
+	call le_scan
+	call le_adv
+	branch le_disable
+
+le_scan:
+	bpatchx patch28_4,mem_patch28
+	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 patch28_5,mem_patch28
+	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 patch28_6,mem_patch28
+	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 patch28_7,mem_patch28
+	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 patch29_0,mem_patch29
+	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 patch29_1,mem_patch29
+	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 patch29_2,mem_patch29
+	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 patch29_3,mem_patch29
+	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 patch29_4,mem_patch29
+	fetch 1,mem_le_adv_channel_map_temp
+	fetcht 1,mem_le_adv_channel_map
+	isub temp,null
+	nbranch le_adv_loop,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 patch29_5,mem_patch29
+	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 patch29_6,mem_patch29
+	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 patch29_7,mem_patch29
+	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 patch2a_0,mem_patch2a
+	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 patch2a_1,mem_patch2a
+	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 patch2a_2,mem_patch2a
+	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 patch2a_3,mem_patch2a
+	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 patch2a_4,mem_patch2a
+	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_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
+
+
+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
+
+
+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_37:
+	jam 37,mem_le_ch_mapped
+	fetch 1,mem_le_adv_channel_map_temp
+	set1 BIT_ADV_CHANNEL_MAP_37,pdata
+	store 1,mem_le_adv_channel_map_temp
+	rtn
+
+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
+	store 1,mem_le_adv_channel_map_temp
+	rtn
+
+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
+	store 1,mem_le_adv_channel_map_temp
+	rtn
+
+
Index: usb_pc_ai_voice/program/ble_protocol_stack/le_l2cap_att.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le_l2cap_att.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le_l2cap_att.prog	(working copy)
@@ -0,0 +1,1052 @@
+
+
+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_att_auto_reco_process
+	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 le_att_handle_blank,positive
+	force 1,null
+	rtn
+le_att_handle_blank:
+	force 0,pdata
+	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 patch2a_5,mem_patch2a
+	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 patch2a_6,mem_patch2a
+	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 patch2a_7,mem_patch2a
+	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 patch2b_0,mem_patch2b
+	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 patch2b_1,mem_patch2b
+	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 patch2b_2,mem_patch2b
+	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 patch2b_3,mem_patch2b
+	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 patch2b_4,mem_patch2b
+	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 patch2b_5,mem_patch2b
+	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 patch2b_6,mem_patch2b
+	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 patch2b_7,mem_patch2b
+	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 patch2c_0,mem_patch2c
+	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 patch2c_1,mem_patch2c
+	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 patch2c_2,mem_patch2c
+	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 patch2c_3,mem_patch2c
+	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 patch2c_4,mem_patch2c
+	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: usb_pc_ai_voice/program/ble_protocol_stack/le_l2cap_att_wechat.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le_l2cap_att_wechat.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le_l2cap_att_wechat.prog	(working copy)
@@ -0,0 +1,276 @@
+
+ifdef COMPILE_WECHAT
+
+/*
+	function name:le_l2cap_att_receive_data_check_wechat_air_sync_protocol
+	依据微信蓝牙外设协议1.0.4
+	输入:
+		rega is le rx data address
+		regb is le rx data length
+		mem_le_att_handle is write handle
+	输出:
+		user enable 是微信协议
+		disable不是微信协议
+*/
+le_l2cap_att_receive_data_check_wechat_air_sync_protocol:
+	call enable_user
+	fetch 2,mem_le_wechat_air_sync_ptr
+	rtn blank
+	arg le_l2cap_att_receive_data_deal_wechat_air_sync_protocol,regc
+	branch wechat_air_sync_calc_function
+le_l2cap_att_receive_data_deal_wechat_air_sync_protocol:
+	fetcht 2,mem_le_att_handle
+	fetch 1,mem_wechat_indication_handle
+	pincrease 1
+	isub temp,null
+	branch wechat_air_sync_enable_indicate_chara,zero
+	fetch 1,mem_wechat_write_handle
+	isub temp,null
+	branch wechat_air_sync_receive_wechat_data,zero
+	branch disable_user
+	
+wechat_air_sync_enable_indicate_chara:
+	call wechat_air_sync_reset_nSeq
+wechat_air_sync_send_request_auth:
+	call wechat_air_sync_init_authreq_base_request
+	arg mem_wechat_authreq_base_request,rega
+	arg ECI_REQ_AUTH_MESSAGE_LENGTH,loopcnt
+	arg ECI_REQ_AUTH,temp
+	branch wechat_air_sync_send_message
+
+wechat_air_sync_receive_wechat_data:
+	fetch 1,mem_wechat_receive_push_data
+	beq 1,wechat_air_sync_receive_wechat_data_contiune_packet
+	ifetch 2,rega
+	arg WECHAT_RX_HEAD,temp
+	isub temp,null
+	branch wechat_air_sync_receive_wechat_data_head_packet,zero
+wechat_air_sync_receive_wechat_data_contiune_packet:
+	fetch 2,mem_wechat_rx_len
+	iadd regb,pdata
+	store 2,mem_wechat_rx_len	
+	fetch 2,mem_wechat_rx_address
+	copy pdata,contw
+	copy rega,contr
+	copy regb,loopcnt
+	call memcpy_fast
+	copy contw,pdata
+	store 2,mem_wechat_rx_address
+	branch wechat_air_sync_receive_wechat_packet_complete
+
+
+wechat_air_sync_receive_wechat_data_head_packet:
+	fetch 2,mem_wechat_rx_buffer_ptr
+	copy pdata,contw
+	copy rega,contr
+	copy regb,loopcnt
+	call memcpy_fast
+	copy contw,pdata
+	store 2,mem_wechat_rx_address
+	storer regb,2,mem_wechat_rx_len
+	fetchr regc,2,mem_wechat_rx_buffer_ptr
+	add regc,WECHAT_PROTOCOL_MESSAGE_N_CMD_ID,contr
+	ifetch 2,contr
+	arg ECI_PUSH_RECEIVE_DATA,temp
+	isub temp,null
+	call wechat_air_sync_receive_wechat_push_data,zero
+	branch wechat_air_sync_receive_wechat_packet_complete
+
+wechat_air_sync_receive_wechat_push_data:
+	jam 1,mem_wechat_receive_push_data
+	rtn
+
+wechat_air_sync_receive_wechat_packet_complete:
+	fetch 2,mem_wechat_rx_len
+	fetchr regc,2,mem_wechat_rx_buffer_ptr
+	add regc,WECHAT_PROTOCOL_MESSAGE_N_LENGTH,contr
+	ifetcht 2,contr
+	byteswap temp,temp
+	isub temp,null
+	nrtn positive
+	jam 0,mem_wechat_receive_push_data
+	fetchr regc,2,mem_wechat_rx_buffer_ptr
+	add regc,WECHAT_PROTOCOL_MESSAGE_N_CMD_ID,contr
+	ifetch 2,contr
+	arg ECI_RESPONSE_AUTH,temp
+	isub temp,null
+	branch wechat_air_sync_receive_wechat_data_auth_respone,zero
+	arg ECI_PUSH_RECEIVE_DATA,temp
+	isub temp,null
+	branch wechat_air_sync_receive_wechat_data_push_receive_data,zero
+	rtn
+
+wechat_air_sync_receive_wechat_data_auth_respone:
+wechat_air_sync_wechat_send_request_init:
+	call wechat_air_sync_init_authreq_base_request
+	arg mem_wechat_initreq_base_request,rega
+	arg ECI_REQ_INIT_MESSAGE_LENGTH,loopcnt
+	arg ECI_REQ_INIT,temp
+	branch wechat_air_sync_send_message
+
+
+//接收数据的回调，可以使用wechat_air_sync_check_push_data_struct解析函数
+wechat_air_sync_receive_wechat_data_push_receive_data:
+
+	fetch 2,mem_wechat_rx_push_data_cb
+	branch callback_func
+
+/*
+数据解析默认函数，不能保证全部数据格式都能解析
+输出:disable user is no data
+	loopcnt is data length
+	contr is data ptr
+*/
+wechat_air_sync_check_push_data_struct:
+	call disable_user
+	fetchr regc,2,mem_wechat_rx_buffer_ptr
+	add regc,WECHAT_PROTOCOL_MESSAGE_PAYLOAD,contr
+	ifetch 2,contr
+	rtnne TAG_RecvDataPush_BasePush
+	ifetch 1,contr
+	rtnne TAG_RecvDataPush_Data
+	ifetch 1,contr
+	rtn blank
+	copy pdata,loopcnt
+	copy contr,regc
+	branch enable_user
+
+
+wechat_air_sync_send_message:
+	call enable_user2
+wechat_air_sync_send_message_without_payload:
+	fetch 2,mem_wechat_tx_buffer_ptr
+	store 2,mem_wechat_tx_address
+	copy pdata,contw
+	setarg WECHAT_HEAD_MAGIC_NUMBER
+	istore 1,contw			//bMagicNumber
+	setarg WECAHT_HEAD_VERSION
+	istore 1,contw			//bVer
+	add loopcnt,8,regd	//nLength
+	byteswap regd,pdata
+	istore 2,contw			//nLength
+	istoret 2,contw			//nCmdId
+	fetcht 2,mem_wechat_tx_nSeq
+	istoret 2,contw			//Tx nSeq
+	copy contw,regc
+	copy rega,contr
+	call memcpy_fast,user2
+	storer regd,2,mem_wechat_tx_len
+	branch wechat_air_sync_update_nSeq
+	
+wechat_air_sync_update_nSeq:
+	byteswap temp,pdata
+	pincrease 1
+	byteswap pdata,pdata
+	nbranch wechat_air_sync_store_nSeq,blank
+wechat_air_sync_reset_nSeq:
+	setarg 0x0100
+wechat_air_sync_store_nSeq:
+	store 2,mem_wechat_tx_nSeq
+	rtn
+
+
+wechat_air_sync_init_authreq_base_request:
+	setarg 0x000a
+	store 2,mem_wechat_authreq_base_request
+	setarg 0x048084
+	lshift8 pdata,pdata
+	or pdata,0x18,pdata
+	store 4,mem_wechat_authreq_protocol_version
+	setarg 0x0120
+	store 2,mem_wechat_authreq_auth_protocol
+	setarg 0x0228
+	store 2,mem_wechat_authreq_eam_mac_no_encrypt
+	setarg 0x063a
+	store 2,mem_wechat_authreq_mac_address
+	fetch 6,mem_le_lap
+	call inverse_data_6Byte
+	store 6,mem_wechat_authreq_device_address
+	rtn
+
+wechat_air_sync_ble_transmit_wechat_message:
+	fetch 1,mem_le_l2cap_att_states
+	rtnbit1 BLE_L2CAP_RECV_CONFIRMATION_PACKET
+	call le_fifo_check_nearly_full
+	nrtn blank				//no fifo
+	fetch 2,mem_le_wechat_air_sync_ptr
+	rtn blank
+	arg wechat_air_sync_ble_send_wechat_message,regc
+	branch wechat_air_sync_calc_function
+
+wechat_air_sync_ble_send_wechat_message:
+	call module_get_le_remote_mtu
+	fetch 2,mem_wechat_tx_len
+	rtn blank
+	add temp,-3,pdata		//sub handle and opcode
+	fetcht 2,mem_wechat_tx_len
+	call not_greater_than
+	copy pdata,rega
+	copy temp,pdata
+	isub rega,pdata
+	store 2,mem_wechat_tx_len
+	fetcht 1,mem_wechat_indication_handle
+	call le_att_malloc_tx_indication
+	fetch 2,mem_wechat_tx_address
+	copy pdata,contr
+	copy rega,loopcnt
+	call memcpy_fast
+	copy contr,pdata
+	store 2,mem_wechat_tx_address
+	rtn
+
+
+wechat_air_sync_calc_function:
+	call wechat_air_sync_load_in_local_buffer
+	copy regc,pdata
+	call callback_func
+	branch wechat_air_sync_store_in_global_buffer
+
+
+wechat_air_sync_load_in_local_buffer:
+	fetch 2,mem_le_wechat_air_sync_ptr
+	rtn blank
+	copy pdata,contr
+	arg WECHAT_AIR_SYNC_STRUCT_SIZE,loopcnt
+	arg mem_wechat_indication_handle,contw
+	branch memcpy_fast
+
+wechat_air_sync_store_in_global_buffer:
+	fetch 2,mem_le_wechat_air_sync_ptr
+	rtn blank
+	copy pdata,contw
+	arg WECHAT_AIR_SYNC_STRUCT_SIZE,loopcnt
+	arg mem_wechat_indication_handle,contr
+	branch memcpy_fast
+
+
+//input:rega is data ptr
+//regb is data length
+wechat_air_sync_send_wechat_packet:
+	call enable_user
+	fetch 2,mem_le_wechat_air_sync_ptr
+	rtn blank
+	arg wechat_air_sync_send_wechat_packet_cb,regc
+	branch wechat_air_sync_calc_function
+
+wechat_air_sync_send_wechat_packet_cb:
+	fetch 2,mem_wechat_tx_len
+	nrtn blank
+	call disable_user
+	call disable_user2
+	add regb,6,loopcnt
+	arg ECI_REQ_SEND_DATA,temp
+	call wechat_air_sync_send_message_without_payload
+	copy regc,contw
+	setarg 0x12000a
+	istore 3,contw
+	istorer regb,1,contw
+	copy rega,contr
+	copy regb,loopcnt
+	call memcpy_fast
+	setarg 0x0018
+	istore 2,contw
+	rtn
+
+endif
+
Index: usb_pc_ai_voice/program/ble_protocol_stack/le_l2cap_signalling.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le_l2cap_signalling.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le_l2cap_signalling.prog	(working copy)
@@ -0,0 +1,54 @@
+
+
+le_parse_signaling:
+	ifetch 1,contr
+	ifetcht 1,contr //id
+	ifetcht 2,contr //length
+	beq L2CAP_CONNECTION_PARAMETER_UPDATE_RESPONSE,le_l2cap_parse_conn_parameter_update_rsp
+	rtn
+le_l2cap_parse_conn_parameter_update_rsp:
+	ifetch 2,contr	//result
+	store 2,mem_le_l2cap_signaling_conn_param_update_rsp_result
+	jam BT_EVT_LE_PARSE_CONN_PAPA_UPDATE_RSP,mem_fifo_temp
+	branch ui_ipc_send_event
+
+
+//mem_le_interval_min:the ptr that connection parameter,
+//include 	ConnIntervalMin,ConnIntervalMax,
+//		ConnSlaveLatency,ConnSupervisionTimeout
+le_l2cap_tx_update_req:
+	arg 0x0c,rega
+	arg L2CAP_CONNECTION_PARAMETER_UPDATE_REQUEST,regc
+	call le_fifo_malloc_tx_l2cap_signaling
+	setarg 0x08
+	istore 2,contw
+	fetch 8,mem_le_interval_min
+	istore 8,contw
+	rtn
+
+
+//rega:len regc:signaling opcode
+le_fifo_malloc_tx_l2cap_signaling:
+	call le_l2cap_update_signaling_identifier
+	arg LE_L2CAP_CID_SIGNAL,regb
+	call le_fifo_malloc_tx_l2cap
+	copy regc,pdata
+	istore 1,contw
+	fetch 1,mem_le_signaling_identifier
+	istore 1,contw
+	rtn
+
+
+le_l2cap_update_signaling_identifier:
+	fetch 1,mem_le_signaling_identifier
+	//beq 0xff,le_l2cap_signaling_identifier_set_1
+	pincrease 1
+	store 1,mem_le_signaling_identifier
+	rtnne 0
+	
+le_l2cap_reset_signaling_identifier:
+	jam 1,mem_le_signaling_identifier
+	rtn
+
+
+
Index: usb_pc_ai_voice/program/ble_protocol_stack/le_l2cap_smp.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le_l2cap_smp.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le_l2cap_smp.prog	(working copy)
@@ -0,0 +1,612 @@
+
+le_pairing_mode_init:
+	fetch  1,mem_le_pairing_mode
+	beq LE_PAIRING_MODE_NONE, le_set_no_pairing
+	beq LE_PAIRING_MODE_LAGACY_JUSTWORK,le_set_pairing_mode_lagacy_just_work
+	beq LE_PAIRING_MODE_LAGACY_PASSKEY,le_set_pairing_mode_lagacy_passkey
+ifdef SECURE_CONNECTION				
+	beq LE_PAIRING_MODE_SECURE_CONNECT_JUSTWORK,le_set_pairing_mode_secure_justwork
+	beq LE_PAIRING_MODE_SECURE_CONNECT_NUMERIC,le_set_pairing_mode_secure_numeric
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY,le_set_pairing_mode_secure_passkey
+endif
+	rtn
+	
+ifdef SECURE_CONNECTION				
+le_set_pairing_mode_secure_justwork:
+	jam FLAG_LE_BONDING_MITM_SECURE,mem_le_pres_auth
+	branch le_set_noinputnooutput
+le_set_pairing_mode_secure_numeric:
+	jam FLAG_LE_BONDING_MITM_SECURE,mem_le_pres_auth
+	jam FLAG_IOCAP_DISPLAYYESNO,mem_le_pres_iocap
+	rtn
+le_set_pairing_mode_secure_passkey:	
+	jam FLAG_LE_BONDING_MITM_SECURE,mem_le_pres_auth
+	branch le_set_displayonly
+endif
+
+le_set_no_pairing:
+	jam FLAG_LE_NO_BONDING_NO_MITM,mem_le_pres_auth
+le_set_noinputnooutput:	
+	jam FLAG_IOCAP_NOINPUTNOOUTPUT,mem_le_pres_iocap
+	rtn
+le_set_pairing_mode_lagacy_just_work:
+	jam FLAG_LE_BONDING_MITM,mem_le_pres_auth
+	branch le_set_noinputnooutput
+le_set_pairing_mode_lagacy_passkey:
+	jam FLAG_LE_BONDING_MITM,mem_le_pres_auth
+le_set_displayonly:	
+	jam FLAG_IOCAP_DISPLAYONLY,mem_le_pres_iocap
+	rtn
+
+ifdef SECURE_CONNECTION			
+le_secure_connection_enable:
+	fetch 1,mem_secure_connections_enable
+	set1 SECURE_CONNECTIONS_LE_BIT,pdata
+	store 1,mem_secure_connections_enable
+	rtn
+	
+le_secure_connection_disable:
+	fetch 1,mem_secure_connections_enable
+	set0 SECURE_CONNECTIONS_LE_BIT,pdata
+	store 1,mem_secure_connections_enable
+	rtn
+endif
+
+le_parse_smp:
+	ifetch 1,contr
+	beq SMP_PAIRING_REQUEST,le_parse_smp_pairing_request
+//	beq SMP_PAIRING_RESPONSE,le_parse_smp_pairing_response
+	beq SMP_PAIRING_CONFIRM,le_parse_smp_pairing_confirm
+	beq SMP_PAIRING_RANDOM,le_parse_smp_pairing_random
+	beq SMP_PAIRING_FAILED,le_parse_smp_pairing_failed
+//	beq SMP_ENCRYPTION_INFORMATION,le_parse_smp_encryption_information
+	beq SMP_MASTER_IDENTIFICATION,le_parse_smp_master_identification
+	beq SMP_IDENTITY_INFORMATION,le_parse_smp_identity_information
+	beq SMP_IDENTITY_ADDRESS_INFORMATION,le_parse_smp_identity_address_information
+	beq SMP_SIGNING_INFORMATION,le_parse_smp_signing_information
+	beq SMP_SECURITY_REQUEST,le_parse_smp_security_request
+ifdef SECURE_CONNECTION			
+	beq SMP_PAIRING_PUBLIC_KEY,le_parse_smp_public_key
+	beq SMP_PAIRING_DHKEY_CHECK,le_parse_smp_dhkey_check
+endif 	
+	rtn
+
+
+
+le_send_smp_security_request:
+	force 2,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_SECURITY_REQUEST
+	istore 1,contw
+	fetch 1,mem_le_pres_auth
+	istore 1,contw
+	rtn
+		
+le_parse_smp_pairing_request:
+	store 1,mem_le_preq
+	ifetch 6,contr
+	istore 6,contw
+	fetch 1,mem_le_pairing_mode
+	beq  LE_PAIRING_MODE_NONE,le_smp_pairing_fail_reason_not_support_pairing
+	call le_send_smp_pairing_response
+ifdef 	SECURE_CONNECTION
+	fetch 1,mem_sc_only_mode
+	branch le_parse_smp_pairing_request2, blank
+	fetch 1,mem_le_preq_auth
+	bbit0  LE_AUTH_SECURE_CONNECTION_PAIRING_BIT,app_ble_disconnect
+	fetch 1,mem_le_pairing_mode
+	bbit0 LE_PAIRING_MODE_SECURE_CONNECT_BIT,app_ble_disconnect
+endif	
+le_parse_smp_pairing_request2:	
+	jam FLAG_LE_PAIRING_RCV_PAIRING_REQ,mem_le_pairing_state
+	fetch 1,mem_le_preq_iocap
+	beq  FLAG_IOCAP_DISPlAYONLY,le_set_tk_0
+	beq  FLAG_IOCAP_DISPLAYYESNO,le_set_tk_0
+	beq  FLAG_IOCAP_NOINPUTNOOUTPUT,le_set_tk_0
+	fetch 1,mem_le_pairing_mode	
+	beq LE_PAIRING_MODE_LAGACY_PASSKEY,le_parse_smp_pairing_req_passkey
+	rtneq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY
+le_set_tk_0:
+	arg 0,pdata
+	store 4,mem_le_tk
+	rtn
+
+le_parse_smp_pairing_req_passkey:
+	fetch 1,mem_le_configuration
+	bbit1 BIT_BLE_PASSKEY_FIXED_KEY,le_parse_smp_pairing_req_fixed_passkey
+le_genernate_tk:
+	arg mem_le_tk,rega
+	copy rega,contw
+	arg 3,loopcnt
+	call generate_random_loop
+	fetch 2,mem_le_tk + 2
+	and_into 0x7,pdata
+	store 2,mem_le_tk + 2
+le_parse_smp_pairing_req_fixed_passkey:
+	jam BT_EVT_LE_TK_GENERATE,mem_fifo_temp
+	branch ui_ipc_send_event
+
+
+
+le_send_smp_pairing_response:
+	force 7,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	fetch 7,mem_le_pres
+	istore 7,contw
+	rtn
+		
+
+le_parse_smp_pairing_confirm:
+	jam FLAG_LE_PAIRING_RECEIVE_PAIRING_CONFIRM,mem_le_pairing_state
+	arg mem_le_rconfirm,contw
+	call memcpy16
+	fetch 1,mem_le_pairing_mode
+	beq LE_PAIRING_MODE_LAGACY_PASSKEY_RES_INPUT,le_parse_smp_pairing_confirm_passkey_res_input
+ifdef SECURE_CONNECTION				
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY,le_parse_smp_pairing_confirm_secure_passkey
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY_RES_INPUT,le_parse_smp_pairing_confirm_sc_passkey_res_input
+endif
+	branch le_send_smp_pairing_confirm
+
+	
+le_parse_smp_pairing_confirm_passkey_res_input:
+	jam BT_EVT_LE_GET_PASSKEY,mem_fifo_temp
+	branch ui_ipc_send_event
+	
+ifdef SECURE_CONNECTION				
+le_parse_smp_pairing_confirm_secure_passkey:
+	jam LE_SP_FLAG_COMMIT_256,mem_le_secure_connect_flag
+	jam LE_SC_STAT_PASSKEY_WAIT_CONFIRM,mem_le_secure_connect_state	
+	rtn
+
+le_parse_smp_pairing_confirm_sc_passkey_res_input:
+	fetch 4,mem_le_tk
+	branch le_parse_smp_pairing_confirm_passkey_res_input,blank
+	branch le_parse_smp_pairing_confirm_secure_passkey
+endif
+
+le_send_smp_pairing_confirm:
+	jam FLAG_LE_PAIRING_SEND_PAIRING_CONFIRM,mem_le_pairing_state
+ifdef SECURE_CONNECTION				
+	fetch 1,mem_le_pairing_mode
+	bbit1 LE_PAIRING_MODE_SECURE_CONNECT_BIT,le_send_smp_pairing_confirm_sc
+endif 
+	call generate_confirm
+	force 17,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_PAIRING_CONFIRM
+	istore 1,contw
+	branch  store_aes_result
+
+ifdef SECURE_CONNECTION					
+le_send_smp_pairing_confirm_sc:
+	arg mem_le_srand,contw	
+	call generate_random
+	call function_f4_cb
+	force 17,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_PAIRING_CONFIRM
+	istore 1,contw
+	branch  load_inverse_result
+endif
+	
+le_parse_smp_pairing_random:	
+	copy contr,rega
+ifdef SECURE_CONNECTION				
+	fetch 1,mem_le_pairing_mode
+	bbit1 LE_PAIRING_MODE_SECURE_CONNECT_BIT,le_parse_smp_pairing_random_sc
+endif
+	copy rega,contr
+	call authenticate_rconfirm
+	branch le_parse_smp_pairing_random_success,zero
+le_send_pairing_confirm_value_failed:
+	jam PAIRING_FAILED_CONFIRM_VALUE_FAILED,mem_le_ll_pairing_fail_reason
+le_send_pairing_failed:
+	force 2,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_PAIRING_FAILED
+	istore 1,contw
+	fetch 1,mem_le_ll_pairing_fail_reason
+	istore 1,contw	
+le_parse_smp_pairing_failed:
+	bpatchx patch2c_5,mem_patch2c
+	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 patch2c_6,mem_patch2c
+	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 patch2c_7,mem_patch2c
+	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 patch2d_0,mem_patch2d
+	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 patch2d_1,mem_patch2d
+	force LE_L2CAP_CID_SMP,regb
+	branch le_fifo_malloc_tx_l2cap
+
+
Index: usb_pc_ai_voice/program/ble_protocol_stack/le_ll.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ble_protocol_stack/le_ll.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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 patch2d_2,mem_patch2d
+	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: usb_pc_ai_voice/program/bt.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/bt.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/bt.prog	(working copy)
@@ -0,0 +1,1764 @@
+//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_PEN
+define COMPILE_REMOTE_CAR
+//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 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
+	call kscan_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
+	jam 8,0x8983
+	jam 9,0x8985
+	jam 0x9,0x8981
+	jam 0x3,0x8981
+	jam 0x6,0x8980	
+	nop 60
+	arg 0,rega
+	arg 0,regb
+	arg 16,loopcnt
+	arg 0x800,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
+	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
+//	rtn
+	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 0xfd,0x8a23
+set_sync_on_next:
+	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 0x84,0x8920	
+	rtnmark1 mark_ble_2M
+	jam 1,0x8901
+	jam 0x80,0x8920
+	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 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 0x5e,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
+	store 2,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 0x56,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
+	branch set_tx_power_8a63_2f
+
+
+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
+	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
+	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
+	fetch 1,mem_xtal_c_sel
+	store 1,core_xtal_cap
+//	jam 0x3e,core_xtal_cap
+	jam SYSTEM_CLK_12M,mem_system_clk
+	call sadc_calibration
+	branch dpll_ring_ibias_calc
+	
+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
+
+rfpll_aac_ghpc:
+	bpatch patch03_3,mem_patch03
+	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 0xc8,0x8a00
+	nop 60
+	jam 0xa0,0x8a01
+	jam 0xcf,0x8a00
+	jam 0xfa,0x8a01
+	nop 20
+	jam 0x8f,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
+	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
+	fetch 1,core_lpm_isogate
+	set0 gpio_latch,pdata			// enable gpio normal function after load gpio configuration
+	store 1,core_lpm_isogate		
+	nbranch boot_load,wake		// wakeup from hibernate
+	call clean_smem
+	storer alarm,4,mem_saved_gpio_in
+	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
+
+lpm_xtal_default:
+	until null,lpo_edge
+	jam 0x76,core_xtal_ib
+	until null,lpo_edge
+	jam 0x37,core_xtal_cap
+	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
+	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
+	branch lpm_write_gpio_wakeup
+	
+lpm_write_gpio_wakeup:
+	arg 12,loopcnt
+	arg mem_gpio_wakeup_cfg,contr
+	arg core_gpio_wakeup_cfg,rega
+lpm_write_gpio_loop:
+	ifetch 1,contr
+	ncall lpm_write_gpio,blank
+	increase 1,rega
+	loop lpm_write_gpio_loop
+	rtn
+lpm_write_gpio:
+	istore 1,rega
+	until null,lpo_edge
+	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
+	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
+
+	/* temp is synced clke */
+lpm_adjust_clk:
+	bpatch patch04_7,mem_patch04
+	deposit clke
+	call clk_diff_rt
+	fetcht 4,mem_sleep_counter_all
+	sub temp,0xff,null
+	rtn positive				// interval too small
+	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: usb_pc_ai_voice/program/ccit-false.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ccit-false.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ccit-false.prog	(working copy)
@@ -0,0 +1,32 @@
+
+
+
+//regc: read buffer
+//loopcnt: (length)
+//mem_adv_CRC_False_initValue: 鍒濆煎拰鏈缁堢粨鏋
+//mem_CRC16_polynomial:澶氶」寮
+p_CRC16_CCITT_False:
+	fetch 2, mem_adv_CRC_False_initValue //pdata crc
+	
+p_CRC16_CCITT_False_loop:
+	ifetcht 1, regc
+	increase 1, regc
+	lshift8 temp, temp
+	ixor temp,pdata
+	
+p_CRC16_for_byte:
+	copy loopcnt,regb		
+	arg 8,loopcnt
+p_CRC16_for_byte_loop:
+	isolate1 15,pdata
+	lshift pdata,pdata
+	nbranch p_CRC16_for_byte_continue,true
+	fetcht 2, mem_CRC16_polynomial
+	ixor temp,pdata
+p_CRC16_for_byte_continue:
+	loop p_CRC16_for_byte_loop
+	copy regb,loopcnt
+	
+	loop p_CRC16_CCITT_False_loop
+	store 2,mem_adv_CRC_False_initValue
+	rtn
Index: usb_pc_ai_voice/program/debug.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/debug.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/debug.prog	(working copy)
@@ -0,0 +1,66 @@
+
+// Rf debug
+
+/*****************************************************************************************************************************************************************************************
+    txon     txoff       rxon		      sync             crc pass    shutdown radio          match
+     _________          ______________    _________________     ___        ___                     
+    |         |        |              |  |                 |   |   |      |   |                   
+    |	      |        |              |  |                 |   |   |      |   |                   
+____|tx data  |________|   rx window  |__| rx data         |___|   |______|   |_______       __________
+
+*****************************************************************************************************************************************************************************************/
+
+rf_debug_rx_gpio_low:
+	fetch 1,mem_rf_debug_rx_gpio
+rf_debug_gpio_low:
+	arg gpcfg_output_low,temp
+	branch gpio_config_function
+
+rf_debug_rx_on_line:
+rf_debug_rx_gpio_high:
+	fetch 1,mem_rf_debug_rx_gpio
+rf_debug_gpio_high:
+	arg gpcfg_output_high,temp
+	branch gpio_config_function
+
+rf_debug_rx_gpio_h_l_h:
+	call rf_debug_rx_gpio_high
+rf_debug_rx_gpio_l_h:
+	call rf_debug_rx_gpio_low
+	branch rf_debug_rx_gpio_high
+
+rf_debug_rx_gpio_l_h_l:
+rf_debug_shutdown_radio_line:
+	call rf_debug_rx_gpio_l_h
+rf_debug_rx_crc_line:
+	branch rf_debug_rx_gpio_low
+
+rf_debug_rx_sync_line:
+	branch rf_debug_rx_gpio_l_h
+
+rf_debug_rx_crc_fail_line:
+	call rf_debug_rx_gpio_l_h
+	branch rf_debug_rx_gpio_l_h_l
+
+rf_debug_rx_match_line:
+rf_debug_rx_crc_error_line:
+rf_debug_rx_sync_timeout_line:
+	branch rf_debug_rx_gpio_low
+
+
+rf_debug_tx_off_line:
+rf_debug_tx_gpio_low:
+	fetch 1,mem_rf_debug_tx_gpio
+	branch rf_debug_gpio_low
+
+rf_debug_tx_on_line:
+rf_debug_tx_gpio_high:
+	fetch 1,mem_rf_debug_tx_gpio
+	branch rf_debug_gpio_high
+
+rf_debug_tx_gpio_l_h_l:
+	call rf_debug_tx_gpio_low
+	call rf_debug_tx_gpio_high
+	branch rf_debug_tx_gpio_low
+
+	
Index: usb_pc_ai_voice/program/g24_protocol_stack/24g.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g.prog	(working copy)
@@ -0,0 +1,568 @@
+
+
+g24_dispatch:
+	bpatchx patch2d_3,mem_patch2d
+	bmark1 mark_24g_rxmode,g24_receive_dispatch
+	branch g24_transmit_dispatch
+
+
+/****************************g24 base transceiver start********************************/
+
+g24_prep:
+	bpatchx patch2d_4,mem_patch2d
+	disable enable_crc
+	disable enable_white
+	setarg 0x555555
+	iforce crc24_init
+	fetch 1,mem_24g_ch
+	branch le_prep_next
+
+g24_receive_packet:
+	bpatchx patch2d_5,mem_patch2d
+	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 patch2d_6,mem_patch2d
+	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
+g24_receive_skip_end:	
+	bpatchx patch2d_7,mem_patch2d
+	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 patch2e_0,mem_patch2e
+	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 patch2e_1,mem_patch2e
+	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 patch2e_2,mem_patch2e
+	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 patch2e_3,mem_patch2e
+	fetch 1,mem_24g_tx_phy
+	bbit1 BIT_LE_CODED_PHY,g24_lr_transmit_prep
+// total length
+	fetch 1,mem_24g_datalen
+	increase 3,pdata	//hec/type/control
+	store 1,mem_24g_txlen
+//hec
+	fetch 1,mem_24g_syncword_crc8
+	store 1,mem_24g_txpayload
+// data type
+	fetch 1,mem_24g_data_type
+	istore 1,contw
+//prepare 5bit payload length, 2bit PID, 1bit NO_ACK
+	fetch 1,mem_24g_datalen
+g24_transmit_prep_pdu:
+	lshift3 pdata,pdata
+	fetcht 1,mem_24g_pid
+	and temp,0x03,temp
+	lshift temp,temp
+	ior temp,pdata
+	fetcht 1,mem_24g_no_ack
+	iadd temp,pdata
+	istore 1,contw
+//prepare payload data
+	fetch 1,mem_24g_datalen
+	iforce loopcnt
+	arg mem_24g_txbuf,contr
+	call memcpy
+g24_transmit_prep_pdu_end:
+	bpatchx patch2e_4,mem_patch2e
+//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 patch2e_5,mem_patch2e
+//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 patch2e_6,mem_patch2e
+	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 patch2e_7,mem_patch2e
+	call g24_ch_calc
+	increase 1,temp
+	and_into 3,temp //map size =4
+	rtn
+	
+g24_ch_calc:
+	bpatchx patch2f_0,mem_patch2f
+	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 patch2f_1,mem_patch2f
+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 patch2f_2,mem_patch2f
+	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 patch2f_3,mem_patch2f
+	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 patch2f_4,mem_patch2f
+	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 patch2f_5,mem_patch2f
+	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: usb_pc_ai_voice/program/g24_protocol_stack/24g_pair.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g_pair.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g_pair.prog	(working copy)
@@ -0,0 +1,424 @@
+
+
+g24_pair_param_init:
+	bpatchx patch2f_6,mem_patch2f
+	jam 0x4e,mem_24g_pair_ch
+	setarg 0x101520
+	store 3,mem_24g_pair_addr
+	setarg 0x05
+	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 patch2f_7,mem_patch2f
+	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 patch30_0,mem_patch30
+	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 1,mem_24g_ackpayload_enable
+	jam 0x08,mem_24g_datalen
+	arg mem_24g_bind_payload,contr
+	arg mem_24g_txbuf,contw
+	branch memcpy8
+
+
+g24_bind_data_process:
+	bpatchx patch30_1,mem_patch30
+	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
+g24_bind_data_parse_next:
+	bpatchx patch30_2,mem_patch30
+	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_work_mode
+	rtnne DONGLE_BIND
+	fetch 1,mem_24g_pair_mode
+	nrtn blank
+	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: usb_pc_ai_voice/program/g24_protocol_stack/24g_receiver.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g_receiver.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g_receiver.prog	(working copy)
@@ -0,0 +1,573 @@
+
+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 patch30_3,mem_patch30
+	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 patch30_4,mem_patch30
+	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 patch30_5,mem_patch30
+	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
+g24_data_device1_next:
+	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_device_option
+	sub pdata,DVC_OP_CAR,null
+	call car_stop_blink,zero
+	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 patch30_6,mem_patch30
+	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 patch30_7,mem_patch30
+	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 patch31_0,mem_patch31
+	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 patch31_1,mem_patch31
+	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 patch31_2,mem_patch31
+	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 patch31_3,mem_patch31
+	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 patch31_4,mem_patch31
+	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
+g24_nodata_timer_over:
+	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 patch31_5,mem_patch31
+	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 patch31_6,mem_patch31
+	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: usb_pc_ai_voice/program/g24_protocol_stack/24g_reconn.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g_reconn.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g_reconn.prog	(working copy)
@@ -0,0 +1,176 @@
+
+/****************************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 patch31_7,mem_patch31
+	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 patch32_0,mem_patch32
+	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 4,mem_24g_pair_addr
+	fetcht 4,mem_24g_addr
+	isub temp,null
+	branch g24_pair_start,zero
+	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 patch32_1,mem_patch32
+	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 patch32_2,mem_patch32
+	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: usb_pc_ai_voice/program/g24_protocol_stack/24g_rssi.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g_rssi.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g_rssi.prog	(working copy)
@@ -0,0 +1,112 @@
+
+/****************************g24 rssi general start********************************/
+
+rssi_store:
+	bpatchx patch32_3,mem_patch32
+	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 patch32_4,mem_patch32
+	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: usb_pc_ai_voice/program/g24_protocol_stack/24g_transmitter.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g_transmitter.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g_transmitter.prog	(working copy)
@@ -0,0 +1,398 @@
+
+
+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:
+	rtnmark0 mark_24g
+	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 patch32_5,mem_patch32
+	call g24_txdata_prep
+	nbranch g24_nodata_transmit,user
+g24_transmit_start:
+	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 patch32_6,mem_patch32
+	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 patch32_7,mem_patch32
+	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:
+	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 patch33_0,mem_patch33
+	setarg 0
+	store 1,mem_24g_ensure
+	store 2,mem_24g_txfail_cnt
+	rtn
+
+g24_transmit_receive_ack:
+	bpatchx patch33_1,mem_patch33
+	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 patch33_2,mem_patch33
+	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 patch33_3,mem_patch33
+	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 patch33_4,mem_patch33
+	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 patch33_5,mem_patch33
+	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:
+	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:
+	jam TYPE_MS,mem_24g_data_type
+	jam 1,mem_24g_abort_pac
+	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 patch33_6,mem_patch33
+	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: usb_pc_ai_voice/program/g24_protocol_stack/24g_txpower_ctrl.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g_txpower_ctrl.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/g24_protocol_stack/24g_txpower_ctrl.prog	(working copy)
@@ -0,0 +1,97 @@
+
+/****************************g24 transmitter tx power start********************************/
+
+power_ctrl_start:
+	bpatchx patch33_7,mem_patch33
+	fetch 1,mem_power_ctrl_disable
+	nrtn blank
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BLE_ADV
+//	rtnbit1 UI_STATE_BT_RECONNECT
+//	rtnbit1 UI_STATE_BT_DISCOVERY
+	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 0,power_ctrl_decrs_level0
+power_ctrl_decrs_level1:
+power_ctrl_incrs_level1:	//0dBm
+	jam TX_POWER_0DB,mem_tx_power
+	rtn
+
+power_ctrl_txpower_incrs_force:
+	jam 0,mem_power_ctrl_pac_succ_cnt
+power_ctrl_txpower_incrs:
+	fetch 1,mem_power_ctrl_level
+	beq 2,power_ctrl_incrs_level2
+	increase 1,pdata
+	store 1,mem_power_ctrl_level
+	beq 1,power_ctrl_incrs_level1
+power_ctrl_incrs_level2:	//+6dBm
+	jam TX_POWER_6DB,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: usb_pc_ai_voice/program/hci_main.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/hci_main.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/hci_main.prog	(working copy)
@@ -0,0 +1,302 @@
+/*********************************/
+/**********   HCI  *****************/
+/*********************************/
+
+hci_init:
+	clear_stack		//清空堆栈
+	call wdt_set_disable
+	call hci_init_clksel_xtal
+	call hci_init_uart_default_config
+	call hci_init_uart_config
+	call hci_init_pwm_default_config
+	call hci_init_pwm
+
+	jam 1,mem_hci_command_complete_num_hci_command_packet
+	jam HCI_H4_TYPE_EVENT,mem_hci_event_head_type
+
+hci_process_loop:
+	call hci_process_check_uart_rx
+	branch hci_process_loop
+	
+hci_init_clksel_xtal:
+	jam clksel_xtal,core_clksel
+	rtn
+
+hci_init_uart_default_config:
+	call hci_init_uart_default_config_tx
+	call hci_init_uart_default_config_rx
+	call hci_init_uart_default_config_rts
+	branch hci_init_uart_default_config_cts
+
+hci_init_uart_default_config_tx:
+	fetch 1,mem_hci_uart_tx_gpio
+	nrtn blank
+	jam HCI_UART_TX_GPIO_NUM,mem_hci_uart_tx_gpio
+	rtn	
+
+hci_init_uart_default_config_rx:
+	fetch 1,mem_hci_uart_rx_gpio
+	nrtn blank
+	jam HCI_UART_RX_GPIO_NUM,mem_hci_uart_rx_gpio
+	rtn	
+hci_init_uart_default_config_rts:
+	fetch 1,mem_hci_uart_rts_gpio
+	nrtn blank
+	jam HCI_UART_RTS_GPIO_NUM,mem_hci_uart_rts_gpio
+	rtn	
+hci_init_uart_default_config_cts:
+	fetch 1,mem_hci_uart_cts_gpio
+	nrtn blank
+	jam HCI_UART_CTS_GPIO_NUM,mem_hci_uart_cts_gpio
+	rtn	
+
+
+hci_init_uart_config:
+	setarg mem_h5rx_buf
+	store 2,mem_pdatatemp
+	setarg mem_h5rx_buf_end
+	istore 2,contw
+	setarg mem_h5tx_buf
+	istore 2,contw
+	setarg mem_h5tx_buf_end
+	istore 2,contw	
+	fetch 8,mem_pdatatemp
+	call uarta_init_dma_mem
+	call uart_clock_select_main_freq_crystal
+	arg 115200,temp
+	call uarta_calc_baud_rate_config
+	fetch 1,mem_hci_uart_tx_gpio
+	arg gpcfg_uart_txd,temp
+	call gpio_config_function_int
+	fetch 1,mem_hci_uart_rx_gpio
+	arg gpcfg_uart_rxd|gpcfg_pullup,temp
+	call gpio_config_function_int
+	fetch 1,mem_hci_uart_rts_gpio
+	arg gpcfg_uart_rts,temp
+	call gpio_config_function_int
+	fetch 1,mem_hci_uart_cts_gpio
+	arg gpcfg_uart_cts,temp
+	call gpio_config_function_int
+
+	arg FUN_UART_CONTROL_ENABLE|FUN_UART_CONTROL_SETTING_RATE_BAUD,temp
+	storet 1,core_uart_ctrl
+	branch clean_xmem
+
+hci_init_pwm_default_config:
+	fetch 1,mem_hci_pwm_12mhz_gpio
+	nrtn blank
+	jam HCI_PMW_12MHZ_GPIO_NUM,mem_hci_pwm_12mhz_gpio
+	rtn	
+
+hci_init_pwm:
+	fetch 1,mem_hci_pwm_12mhz_gpio
+	arg gpcfg_pwm_out0,temp
+	call gpio_config_function_int
+	arg 0x40,rega
+	call pwm_init
+	arg 0,rega
+	arg 0,regb
+	setarg 0
+	call pwm_duty_cycle_set
+	arg 0,queue
+	branch pwm_set_select
+
+
+hci_process_check_uart_rx:
+	fetch 2,core_uart_rxitems
+	add pdata,-4,rega
+	nrtn positive
+	call uarta_prepare_rx
+	ifetch 1,contru
+	beq HCI_H4_TYPE_CMD,hci_parse_packet_cmd
+//	beq HCI_H4_TYPE_ACL,hci_parse_packet_acl
+	call delay_10ms
+	branch uarta_clear_current_rx
+
+//hci_parse_packet_acl:
+//	rtn
+hci_parse_packet_cmd:
+	ifetch 2,contru	// Opcode
+	store 2,mem_hci_opcode
+	arg 0x3ff,temp
+	iand temp,temp	//low 10bit
+	storet 2,mem_hci_opcode_ocf
+	rshift2 pdata,pdata
+	rshift8 pdata,pdata	//high 6bit
+	store 1,mem_hci_opcode_ogf
+	ifetch 1,contru	// parameter total length
+	pincrease -1		//大于等于
+	isub rega,null
+	rtn positive
+	call hci_parse_complete_packet
+	branch hci_drop_current_packet
+
+hci_parse_complete_packet:
+	fetch 1,mem_hci_opcode_ogf
+//	beq HCI_OGF_LINK_CONTROL,hci_parse_packet_cmd_ogf_link_control
+//	beq HCI_OGF_LINK_POLICY,hci_parse_packet_cmd_ogf_link_policy
+//	beq HCI_OGF_CONTROLLER_AND_BASEBAND,hci_parse_packet_cmd_ogf_controller_and_baseband
+//	beq HCI_OGF_INFOMATIONAL_PARAM,hci_parse_packet_cmd_ogf_infomational_parameters
+//	beq HCI_OGF_STATUS_PARAM,hci_parse_packet_cmd_ogf_status_parameters
+//	beq HCI_OGF_TEST,hci_parse_packet_cmd_ogf_testing
+//	beq HCI_OGF_LE_CONTROLLER,hci_parse_packet_cmd_ogf_le_controller
+	beq HCI_OGF_VENDOR_SPECIFIC_DEBUG,hci_parse_packet_cmd_ogf_vendorspecific_debug
+	branch hci_send_event_command_complete_error_command_nuknown
+
+//hci_parse_packet_cmd_ogf_link_control:
+//hci_parse_packet_cmd_ogf_link_policy:
+//hci_parse_packet_cmd_ogf_controller_and_baseband:
+//hci_parse_packet_cmd_ogf_infomational_parameters:
+//hci_parse_packet_cmd_ogf_status_parameters:
+//hci_parse_packet_cmd_ogf_testing:
+//hci_parse_packet_cmd_ogf_le_controller:
+
+hci_parse_packet_cmd_ogf_vendorspecific_debug:
+	bpatch patch16_4,mem_patch16
+	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: usb_pc_ai_voice/program/l2cap.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/l2cap.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/l2cap.prog	(working copy)
@@ -0,0 +1,373 @@
+/************************************/
+/*initialize L2CAP related variables*/
+/************************************/
+l2cap_init:
+	branch l2cap_init_wake,wake
+	setarg mem_l2cap_xmem_end
+	arg mem_l2cap_xmem_start,contw
+	isub contw,loopcnt
+	call clear_mem
+l2cap_init_wake:	
+//	branch l2cap_lpm_load_txbuf
+	rtn
+	
+
+/*
+l2cap_check_map:
+//	call l2cap_malloc_is_fifo_full
+//	nrtn blank
+	bpatch patch16_5,mem_patch16
+	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 patch16_6,mem_patch16
+	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 patch16_7,mem_patch16
+	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 patch17_0,mem_patch17
+	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 patch17_1,mem_patch17
+	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 patch17_2,mem_patch17
+	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 patch17_3,mem_patch17
+	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 patch17_4,mem_patch17
+	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 patch17_5,mem_patch17
+	fetch 3,mem_tx_fifo1
+	rtn
+
+
+/*********************************************************/
+//bool fifo_is_empty(void)
+//blank == 1: empty
+//blank == 0: not empty
+/*********************************************************/
+l2cap_malloc_is_fifo_empty:
+	bpatch patch17_6,mem_patch17
+	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 patch17_7,mem_patch17
+	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 patch18_0,mem_patch18
+	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: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_access_layer.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_access_layer.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_access_layer.prog	(working copy)
@@ -0,0 +1,188 @@
+
+/*
+	mesh鍗忚涓璦ccess layer
+	涓昏鏄礋璐esh涓璦ccess layer鏁版嵁鐨勮В鏋
+*/
+/*
+	access layer瑙ｆ瀽鎸囦护闆
+*/
+
+//input:alarm is upper transport access ptr
+ali_mesh_access_layer_resolve_message:
+	fetch 1,mem_ccm_data_len
+	store 1,mem_mesh_receive_model_message_payload_len
+	copy alarm,contr
+	call memcpy24
+ifdef mesh_debug_log
+	call logging_tx_info_receive_access_message
+endif
+	fetch 2,mem_mesh_cb_receive_access_message
+	branch callback_func
+
+ali_mesh_access_layer_check_access_message_opcode:
+	jam MESH_RECEIVE_NEW_MESSAGE_TIMER,mem_mesh_upper_receive_new_message_timer
+	call ali_mesh_app_recv_new_mesh_pkt
+
+	
+	fetch 1,mem_mesh_receive_model_message_payload_opcode
+	beq MESH_MESSAGE_OPCODE_CONFIG_APPKEY_ADD,ali_mesh_access_layer_message_opcode_config_AppKey_Add
+	beq MESH_CONFIGURATION_AND_HEALTH_MESSAGE_OPCODE_HEADER,ali_mesh_access_layer_config_or_health_message_opcode
+	beq MESH_MODULE_MESSAGE_OPCODE_HEADER,ali_mesh_model_layer_check_model_message_opcode
+	beq VENDOR_MESSAGE_ATTR_SET,ali_mesh_ali_vendor_message_attribute_set
+	beq VENDOR_MESSAGE_ATTR_GET,ali_mesh_ali_vendor_message_opcode_attr_get
+	beq VENDOR_MESSAGE_ATTR_SET_UNACKNOWLEDGED,ali_mesh_ali_vendor_message_attribute_set
+	beq VENDOR_MESSAGE_ATTR_CONFIRMATION,ali_mesh_ali_vendor_message_opcode_attr_confrimation
+	rtn
+
+/*
+	鎺ユ敹鍒癱onfig AppKey Add鎸囦护
+*/
+
+ali_mesh_access_layer_message_opcode_config_AppKey_Add:
+	arg mem_mesh_receive_application_key,contr
+	arg mem_mesh_application_key,contw
+	call memcpy16
+	jam PAIRED_STATUS,mem_mesh_provisioned_flag
+	call ali_mesh_encrypt_base_function_k3
+	call ali_mesh_encrypt_base_function_k4
+	call ali_mesh_access_layer_finish_pairing_init_subscription_list
+	call ali_mesh_accesss_layer_check_message_type
+	call ali_mesh_access_layer_send_config_AppKey_status
+	jam PAIRED_STATUS,mem_mesh_provisioned_flag
+	fetch 2,mem_mesh_cb_receive_config_appkey_add
+	branch callback_func
+
+ali_mesh_access_layer_recv_cfg_appkey_add_cb:
+	setarg 0
+	store 2,mem_mesh_fast_pairing_timer	//clear prov timer
+//	jam APPKEY_ADD_TIMEOUT, mem_mesh_recv_cfg_appkey_add_timer
+	random pdata
+	and pdata,0x1f,pdata
+	add pdata,30,pdata
+	store 1,mem_mesh_report_full_attribute_timer
+	add pdata,5,pdata
+	store 1,mem_mesh_report_power_on_timer
+	call mesh_clear_timer_data	
+	branch mesh_receive_config_appkey_add_cb
+
+ali_mesh_accesss_layer_check_message_type:
+	fetch 1,mem_mesh_network_packet_type
+	jam RECEIVED_CONFIG_APPKEY_ADD,mem_mesh_provisioned_flag		//涓棿鐘舵 APP閰嶇綉鏃讹紝闇瑕佸洖澶嶆暟閲忓
+	rtneq MESH_MESSAGE_APP
+	jam PAIRED_STATUS,mem_mesh_provisioned_flag					//tmall閰嶇綉涓嶉渶瑕侀噸浼犲娆
+	rtn
+
+ali_mesh_access_layer_send_config_AppKey_status:
+	setarg MESH_CONFIGURATION_AND_HEALTH_MESSAGE_OPCODE_HEADER
+	store 1,mem_mesh_access_layer_payload
+	setarg MESH_MESSAGE_OPCODE_CONFIG_CONFIG_MODEL_PUBLICATION_SET
+	istore 1,contw
+	setarg STATUS_CODE_SUCCESS
+	istore 1,contw
+	fetch 3,mem_mesh_NETKeyindex_and_APPKeyindex
+	istore 3,contw
+	jam 6,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message
+
+
+ali_mesh_access_layer_finish_pairing_init_subscription_list:
+	fetch 2,mem_mesh_core_feature
+	rtnbit1 MESH_FEATURE_DISABLE_SUBSCRIPTION
+	call mesh_get_element_info_config
+ali_mesh_access_layer_finish_pairing_init_subscription_list_loop:
+	add rega,ELEMENT_DEVICE_SUBSCRIPTION_LABEL,regc
+	setarg -1
+	istore SUBSCRIPTION_MAX_COUNT,regc
+	istore SUBSCRIPTION_MAX_COUNT,contw
+	ifetch 2,rega		//read group address
+	istore 2,regc
+	copy regb,pdata
+	iadd rega,rega
+	loop ali_mesh_access_layer_finish_pairing_init_subscription_list_loop
+	fetch 2,mem_mesh_cb_subscriptuion_list_changed
+	branch callback_func
+
+
+/*
+	generic onoff status
+*/
+ali_mesh_access_layer_send_generic_onoff_status:
+	setarg MESH_MODULE_MESSAGE_OPCODE_HEADER
+	store 1,mem_mesh_access_layer_payload
+	setarg MESH_MODULE_MESSAGE_OPCODE_GENERIC_ONOFF_STATUS_NO_HEAD
+	istore 1,contw
+	fetch 1,mem_mesh_generic_onoff_set_payload_OnOff
+	istore 1,contw
+	jam 3,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message
+
+
+/*
+	light lightness status
+*/
+ali_mesh_access_layer_send_light_lightness_status:
+	setarg MESH_MODULE_MESSAGE_OPCODE_HEADER
+	store 1,mem_mesh_access_layer_payload
+	setarg MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_STATUS_NO_HEAD
+	istore 1,contw
+	fetch 2,mem_mesh_light_lightness_set_payload_lightness
+	istore 2,contw
+	jam 4,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message
+
+
+ali_mesh_access_layer_send_light_ctl_stauts:
+	setarg MESH_MODULE_MESSAGE_OPCODE_HEADER
+	store 1,mem_mesh_access_layer_payload
+	setarg MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_STATUS_NO_HEAD
+	istore 1,contw
+	fetch 4,mem_mesh_CTL_Lightness
+	istore 4,contw
+	jam 6,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message
+
+
+
+ali_mesh_access_layer_send_scene_status:
+	setarg MESH_MODULE_MESSAGE_OPCODE_SCENE_STATUS
+	store 1,mem_mesh_access_layer_payload
+	setarg MESH_SUCCESS
+	istore 1,contw
+	fetch 2,mem_mesh_scene_recall_payload_scene_number
+	istore 2,contw
+	jam 4,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message
+
+
+ifdef mesh_debug_log
+logging_tx_info_receive_access_message:
+	fetchr loopcnt,1,mem_ccm_data_len
+	copy alarm,rega
+	arg MESH_ACCESS_RECEIVE_MESSAGE,regb
+	branch logging_tx_info
+endif
+
+ali_mesh_app_recv_new_mesh_pkt:
+
+	fetch 1, mem_mesh_report_full_attribute_timer
+	rtn blank
+	pincrease 30
+	store 1,mem_mesh_report_full_attribute_timer
+	rtn
+
+ali_mesh_report_power_on_timer:
+	arg mem_mesh_report_power_on_timer,regc
+	arg ali_mesh_ali_vendor_message_opcode_device_power_on, regb
+	branch timer_single_step
+
+ali_mesh_report_full_attribute_timer:
+	arg mem_mesh_report_full_attribute_timer,regc
+	arg ali_mesh_app_report_device_state, regb
+	branch timer_single_step
+
+ali_mesh_app_report_device_state:
+	fetch 2,mem_mesh_app_deport_device_state
+	branch callback_func
+
+
+	
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_ali_vendor_message.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_ali_vendor_message.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_ali_vendor_message.prog	(working copy)
@@ -0,0 +1,642 @@
+
+/*
+	mesh鍗忚涓璦li vendor message resolve
+	涓昏鏄樋閲岃嚜瀹氫箟attribute set 鎸囦护璁剧疆
+*/
+
+/*
+	涓昏鏄樋閲屽畾鏃惰缃ā鍧楁寚浠よВ鏋
+	鍏朵粬闈炴爣鐨勬寚浠よ缃
+*/
+
+ali_mesh_ali_vendor_message_attribute_set:
+	call ali_mesh_ali_vendor_message_attrbute_check_company_id_and_tid
+	nrtn user
+	bpatchx patch34_0,mem_patch34
+	fetch 2,mem_mesh_vendor_message_attr_type
+	arg VENDOR_MESSAGE_ATTR_TYPE_TIME,temp
+	isub temp,null	//璁剧疆璁惧鐨勬椂闂
+	branch ali_mesh_ali_vendor_message_opcode_timer_set_curr_time,zero
+
+	arg VENDOR_MSEEAGE_ATTR_TYPE_SET_TIME_REPEAT,temp
+	isub temp,null		//寰幆瀹氭椂鏃堕棿
+	branch ali_mesh_ali_vendor_message_opcode_timer_set_timing_cyclically,zero
+	
+	arg VENDOR_MSEEAGE_ATTR_TYPE_SET_TIME_SINGLE,temp
+	isub temp,null	//鍊掕鏃舵椂闂
+	branch ali_mesh_ali_vendor_message_opcode_timer_set_timing,zero
+
+	arg VENDOR_MESSAGE_ATTR_TYPE_TIMER_DELEATE,temp
+	isub temp,null
+	branch ali_mesh_ali_vendor_message_opcode_delete_timer,zero
+	arg VENDOR_MESSAGE_ATTR_TYPE_TIMER_INQUIRE,temp
+	isub temp,null
+	branch ali_mesh_ali_vendor_message_opcode_timer_inquire,zero
+	arg VENDOR_MSEEAGE_ATTR_TYPE_TIMER_ENABLE,temp
+	isub temp,null
+	branch ali_mesh_ali_vendor_message_opcode_timer_set_state,zero
+
+
+	arg VENDOR_MESSAGE_ATTR_TYPE_MAIN_LIGHT,temp
+	isub temp,null	
+	branch ali_mesh_ali_vendor_message_attribute_set_main_light,zero
+	arg VENDOR_MESSAGE_ATTR_TYPE_BACKGROUND_LIGHT,temp
+	isub temp,null	
+	branch ali_mesh_ali_vendor_message_attribute_set_background_light,zero
+	arg VENDOR_MESSAGE_ATTR_TYPE_COLOR,temp
+	isub temp,null	
+	branch ali_mesh_ali_vendor_message_attribute_set_color,zero
+	fetch 2,mem_mesh_cb_recv_vendor
+	branch callback_func
+
+ali_mesh_ali_vendor_message_opcode_attr_get:
+	rtn
+ali_mesh_ali_vendor_message_opcode_attr_confrimation:
+	ifetch 2,contr
+	arg VENDOR_MESSAGE_OPCODE_COMPANY_ID,temp
+	isub temp,null
+	nrtn zero
+	ifetch 1,contr
+	fetcht 1,mem_mesh_upper_tran_layer_packet_tid
+	isub temp,null
+	nrtn zero
+	branch ali_mesh_stop_send_indication_packet
+
+ali_mesh_ali_vendor_message_attrbute_check_company_id_and_tid:
+	call disable_user
+	fetch 2,mem_mesh_vendor_message_cid
+	arg VENDOR_MESSAGE_OPCODE_COMPANY_ID,temp
+	isub temp,null
+	nrtn zero
+	fetcht 1,mem_mesh_vendor_mesh_receive_tid
+	fetch 1,mem_mesh_vendor_message_tid
+	isub temp,null
+	rtn zero
+	store 1,mem_mesh_vendor_mesh_receive_tid
+	branch enable_user
+
+ali_mesh_ali_vendor_message_attribute_set_main_light:
+	call ali_mesh_ali_vendor_message_ack_attr_status_uint8
+	fetch 2,mem_mesh_cb_main_light_onoff_set
+	branch callback_func
+
+
+ali_mesh_ali_vendor_message_attribute_set_background_light:
+	call ali_mesh_ali_vendor_message_ack_attr_status_uint8
+	fetch 2,mem_mesh_cb_background_onoff_set
+	branch callback_func
+
+ali_mesh_ali_vendor_message_attribute_set_color:
+	call ali_mesh_ali_vendor_message_ack_attr_status_uint48
+	fetch 2,mem_mesh_cb_color_set
+	branch callback_func
+
+
+/*
+	闃块噷瀹氭椂妯″潡浠ｇ爜
+*/
+ali_mesh_ali_vendor_message_opcode_timer_set_curr_time:
+	call ali_mesh_ali_vendor_message_ack_attr_status_uint32
+
+	fetch 4,mem_mesh_vendor_message_current_time
+	store 4,mem_mesh_vendor_timer_current_time
+	branch ali_mesh_time_init_system_time
+
+
+
+/*
+	闃块噷mesh鑷畾涔塻tatus,琚姩鍥炲SET鎴栬匞ET鐘舵
+*/
+ali_mesh_ali_vendor_message_status_add_head:
+	setarg VENDOR_MESSAGE_ATTR_STATUS
+	store 1,mem_mesh_access_layer_payload
+	setarg VENDOR_MESSAGE_OPCODE_COMPANY_ID
+	istore 2,contw
+	fetch 1,mem_mesh_vendor_mesh_receive_tid
+	istore 1,contw
+	istoret 2,contw
+	rtn
+
+/*
+	闃块噷mesh鑷畾涔塱ndication锛屼富鍔ㄤ笂鎶ョ姸鎬佺粰澶╃尗绮剧伒
+	DST:0x00f0
+*/
+//寮鍏充笂鐢
+ali_mesh_ali_vendor_message_opcode_device_power_on:
+	arg 0,queue
+	arg VENDOR_MESSAGE_EVENT_DEVICE_POWER_ON,temp
+	arg VENDOR_ATTR_TYPE_EVENT_TRIGGER,rega
+	branch ali_mesh_ali_vendor_message_opcode_para_uint8
+
+
+//涓婃姤寮鍏崇姸鎬
+//input:temp is generic onoff status
+//0 GENERIC_ONOFF_CMD_OFF
+//1 GENERIC_ONOFF_CMD_ON
+//input:queue is element number
+//e.g 鐏痲ueue0
+//椋庢墖鐏腑鐏0锛岄鎵1
+//椋庢墖:0
+ali_mesh_ali_vendor_message_opcode_generic_OnOff:
+	arg VENDOR_ATTR_GENERIC_ONOFF_SERVER,rega
+	branch ali_mesh_ali_vendor_message_opcode_para_uint8
+
+
+
+ali_mesh_ali_vendor_message_ack_attr_status_uint64:
+	arg 8,loopcnt
+	branch ali_mesh_ali_vendor_message_ack_attr_status
+
+ali_mesh_ali_vendor_message_ack_attr_status_uint56:
+	arg 8,loopcnt
+	branch ali_mesh_ali_vendor_message_ack_attr_status
+
+ali_mesh_ali_vendor_message_ack_attr_status_uint48:
+	arg 6,loopcnt
+	branch ali_mesh_ali_vendor_message_ack_attr_status
+
+ali_mesh_ali_vendor_message_ack_attr_status_uint32:
+	arg 4,loopcnt
+	branch ali_mesh_ali_vendor_message_ack_attr_status
+
+ali_mesh_ali_vendor_message_ack_attr_status_uint16:
+	arg 2,loopcnt
+	branch ali_mesh_ali_vendor_message_ack_attr_status
+
+ali_mesh_ali_vendor_message_ack_attr_status_uint8:
+	arg 1,loopcnt
+	branch ali_mesh_ali_vendor_message_ack_attr_status
+
+//input:loopcnt is attr length
+ali_mesh_ali_vendor_message_ack_attr_status:
+	add loopcnt,6,pdata
+	store 1,mem_mesh_access_layer_payload_len
+	call ali_mesh_ali_vendor_message_status_add_head
+	arg mem_mesh_vendor_attr_parameter,contr
+	call memcpy
+	branch ali_mesh_upper_transport_layer_send_access_message
+	
+
+
+//input:queue is element number
+//rega is vendor model attr
+//temp is vendor model attr parameter 
+ali_mesh_ali_vendor_message_opcode_para_uint8:
+	call ali_mesh_ali_vendor_message_indication_info_add_head
+	istorer rega,2,contw
+	istoret 1,contw
+	jam 7,mem_mesh_access_layer_payload_len
+	branch ali_mesh_ali_vendor_message_send_message
+
+
+//input:queue is element number
+//rega is vendor model attr
+//temp is vendor model attr parameter 
+ali_mesh_ali_vendor_message_opcode_para_uint16:
+	call ali_mesh_ali_vendor_message_indication_info_add_head
+	istorer rega,2,contw
+	istoret 2,contw
+	jam 8,mem_mesh_access_layer_payload_len
+	branch ali_mesh_ali_vendor_message_send_message
+
+
+//input:queue is element number
+ali_mesh_ali_vendor_message_send_message:
+	call ali_mesh_more_element_calc_queue_address
+	branch ali_mesh_upper_transport_layer_send_access_message_without_cleat_tx_buffer
+
+
+ali_mesh_ali_vendor_message_indication_info_add_head:
+	fetch 1,mem_mesh_transport_AID
+	store 1,mem_mesh_message_Transport_Head
+	setarg VENDOR_MESSAGE_TMALL_DST
+	store 2,mem_mesh_send_message_DST
+	fetch 1,mem_mesh_vendor_mesh_send_tid
+	pincrease 1
+	store 1,mem_mesh_vendor_mesh_send_tid
+	beq VENDOR_MESSAGE_SEND_TID_MAX,ali_mesh_ali_vendor_message_indication_info_reset_tid
+	setarg VENDOR_MESSAGE_ATTR_INDICATION
+	store 1,mem_mesh_access_layer_payload
+	setarg VENDOR_MESSAGE_OPCODE_COMPANY_ID
+	istore 2,contw
+	fetch 1,mem_mesh_vendor_mesh_send_tid
+	istore 1,contw
+	rtn
+
+ali_mesh_ali_vendor_message_indication_info_reset_tid:
+	jam VENDOR_MESSAGE_SEND_TID_MIN,mem_mesh_vendor_mesh_send_tid
+	rtn
+
+
+ali_mesh_ali_vendor_message_opcode_delete_timer:
+	copy contr,rega
+	fetch 1,mem_mesh_receive_model_message_payload_len
+	arg 6,temp
+	isub temp,pdata
+	store 1,mem_mesh_timer_index_buffer_len
+	copy pdata,loopcnt
+	copy rega,contr
+	arg mem_mesh_timer_index_buffer,contw
+	call memcpy
+	arg 0,regb
+ali_mesh_ali_vendor_message_opcode_delete_timer_loop:
+	arg mem_mesh_timer_index_buffer,pdata
+	iadd regb,temp
+	ifetch 1,temp
+	beq 0xff,ali_mesh_ali_vendor_aim_timer_buffer_clear_all
+	and pdata,0x7f,pdata
+	call ali_mesh_ali_vendor_aim_timer_buffer_clear
+	increase 1,regb
+	fetch 1,mem_mesh_timer_index_buffer_len
+	isub regb,null
+	branch ali_mesh_ali_vendor_message_opcode_delete_timer_loop,positive
+	call peripherals_write_mesh_timer_infmatn
+ali_mesh_access_layer_send_ali_vendor_message_delete_timer:
+	arg VENDOR_MESSAGE_ATTR_TYPE_TIMER_DELEATE, temp
+	call ali_mesh_ali_vendor_message_status_add_head
+	arg 0,temp
+	istoret 1,contw
+	copy contw,temp
+	call ali_mesh_get_all_timer_index_timer
+	pincrease 7
+	store 1,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message
+
+ali_mesh_ali_vendor_aim_timer_buffer_clear:
+	rtn blank
+	pincrease -1
+	mul32 pdata,18,pdata
+	arg mem_mesh_vendor_timer_timing_buffer,rega
+	iadd rega,rega
+	setarg 0
+	istore 1,rega
+	rtn
+
+ali_mesh_ali_vendor_aim_timer_buffer_clear_all:
+	arg 18,loopcnt
+	mul32 loopcnt,MESH_X_TIMERS,loopcnt
+	arg mem_mesh_vendor_timer_timing_buffer,contw
+	call clear_mem
+	call peripherals_write_mesh_timer_infmatn
+	branch ali_mesh_access_layer_send_ali_vendor_message_delete_timer
+
+ali_mesh_ali_vendor_message_opcode_timer_inquire:
+	ifetch 1,contr
+	beq 0xff,ali_mesh_ali_vendor_message_opcode_timer_inquire_all_timer
+	store 1,mem_mesh_vendor_timer_timing_temp
+	ifetch 1,contr
+	pincrease -1
+	mul32 pdata,18,pdata
+	arg mem_mesh_vendor_timer_timing_buffer,contr
+	iadd contr,contr
+	arg mem_mesh_vendor_timer_timing_palyload,contw
+	arg 18,loopcnt
+	call memcpy
+	arg VENDOR_MESSAGE_ATTR_TYPE_TIMER_INQUIRE,temp
+	call ali_mesh_ali_vendor_message_status_add_head
+	fetch 1,mem_mesh_vendor_timer_timing_index
+	branch ali_mesh_ali_vendor_message_opcode_timer_inquire_time_error,blank
+	arg 0,temp
+	istoret 1,contw
+ali_mesh_ali_vendor_message_opcode_timer_inquire_time:
+	fetch 1,mem_mesh_vendor_timer_timing_temp
+	istore 1,contw
+	fetch 1,mem_mesh_vendor_timer_timing_index
+	istore 1,contw
+	fetch 8,mem_mesh_vendor_timer_timing_time
+	istore 8,contw
+	jam 17,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message
+	
+
+ali_mesh_ali_vendor_message_opcode_timer_inquire_all_timer:
+	arg VENDOR_MESSAGE_ATTR_TYPE_TIMER_INQUIRE,temp
+	call ali_mesh_ali_vendor_message_status_add_head
+	arg 0xff,temp
+	istoret 2,contw
+//	arg,0xff,temp
+//	istoret 1,contw
+	copy contw,temp
+	call ali_mesh_get_all_timer_index_timer
+	pincrease 8
+	store 1,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message
+
+//	fetch 1,mem_mesh_verdor_timer_timing_flag_v2+1
+	
+//ali_mesh_ali_vendor_message_opcode_timer_inquire_timing_cyclically_v2:
+ali_mesh_ali_vendor_message_opcode_timer_inquire_time_error:
+	arg 0x80,temp
+	istore 1,contw
+	branch ali_mesh_ali_vendor_message_opcode_timer_inquire_time
+
+ali_mesh_ali_vendor_message_opcode_timer_set_state:
+	ifetch 1,contr
+	store 1,mem_mesh_vendor_timer_timing_temp
+	and pdata,0x7f,pdata
+	pincrease -1
+	mul32 pdata,18,pdata
+	arg mem_mesh_vendor_timer_timing_buffer,contw
+	iadd contw,contw
+	fetch 1,mem_mesh_vendor_timer_timing_temp
+	istore 1,contw
+	call peripherals_write_mesh_timer_infmatn
+	arg VENDOR_MSEEAGE_ATTR_TYPE_TIMER_ENABLE,temp
+	call ali_mesh_ali_vendor_message_status_add_head
+	setarg 0
+	istore 1,contw
+	copy contw,temp
+	call ali_mesh_get_all_timer_index_timer
+	pincrease 7
+	store 1,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message
+	
+	
+
+
+ali_mesh_time_function:
+	copy clkn_bt,temp
+	fetch 4,mem_system_time
+	isub temp,null
+	call ali_mesh_timer_timeout,positive
+	call ali_mesh_clkn_bt_add_1s
+	isub temp,null	
+	rtn positive
+	call ali_mesh_time_init_system_time_without_clk
+	fetch 4,mem_mesh_vendor_timer_current_time
+	pincrease 1
+	store 4,mem_mesh_vendor_timer_current_time
+	branch ali_mesh_ali_vendor_check_time
+
+
+ali_mesh_time_init_system_time:
+	copy clkn_bt,pdata
+ali_mesh_time_init_system_time_without_clk:
+	store 4,mem_system_time
+	fetch 1,mem_system_time+3
+	and_into 0x0f,pdata
+	store 1,mem_system_time+3
+	rtn
+
+ali_mesh_timer_timeout:
+	rtn zero
+	copy pdata,regb
+	setarg 0x100000
+	lshift8 pdata,pdata
+	iadd temp,temp
+	copy regb,pdata
+	rtn
+
+ali_mesh_clkn_bt_add_1s:
+	arg 20,loopcnt
+ali_mesh_time_loop:	
+	pincrease 160
+	loop ali_mesh_time_loop	
+	rtn
+
+ali_mesh_ali_vendor_check_time:
+	setarg MESH_X_TIMERS
+	store 1, mem_mesh_vendor_timer_check_loop
+	pincrease -1
+	mul32 pdata,18,pdata
+	arg mem_mesh_vendor_timer_timing_buffer,alarm
+	iadd alarm, alarm
+ali_mesh_ali_vendor_check_time_loop:
+	ifetch 1,alarm
+	ncall ali_mesh_ali_vendor_had_timing,blank 
+	increase -18,alarm
+
+	fetch 1, mem_mesh_vendor_timer_check_loop
+	pincrease -1
+	rtn blank
+	store 1, mem_mesh_vendor_timer_check_loop
+	branch ali_mesh_ali_vendor_check_time_loop
+
+ali_mesh_ali_vendor_had_timing:
+	arg 7,queue
+	qisolate0 pdata
+	rtn true
+	and pdata,0x7f,pdata
+	arg MESH_X_TIMERS, temp
+	isub temp, null
+	rtn positive
+	copy alarm,contr
+	arg mem_mesh_vendor_timer_timing_palyload,contw
+	arg 18,loopcnt
+	call memcpy
+	fetch 1,mem_mesh_vendor_timer_timing_palyload+17
+	beq 0x59,ali_mesh_ali_vendor_had_timing_cyclically
+ali_mesh_ali_vendor_had_timing_single_time:
+	fetcht 4,mem_mesh_vendor_timer_current_time
+	fetch 4, mem_mesh_vendor_timer_timing_time
+	isub temp,null
+	fetch 1, mem_mesh_vendor_timer_timing_attr_para
+	branch ali_mesh_ali_vendor_time_timeout,zero
+	nbranch ali_mesh_ali_vendor_time_out_of_date, positive
+	rtn	
+
+ali_mesh_ali_vendor_time_out_of_date:
+	setarg 0
+	istore 1,alarm
+	rtn
+
+ali_mesh_ali_vendor_had_timing_cyclically:
+
+	fetch 4, mem_mesh_vendor_timer_current_time
+	arg SECONDS_OF_MIN, temp
+	idiv temp
+	call wait_div_end
+	remainder pdata
+	nrtn blank
+	
+	fetch 4, mem_mesh_vendor_timer_current_time
+	arg SECONDS_OF_FOUR_DAYS, temp
+	isub temp, pdata
+
+	arg SECONDS_OF_WEEK, temp
+	idiv temp
+	call wait_div_end
+	remainder pdata
+	arg SECONDS_OF_DAY, temp
+	idiv temp
+	call wait_div_end
+	remainder rega
+	quotient queue
+	fetch 1,mem_mesh_vendor_timer_timing_weekdays_cyclic
+	branch ali_mesh_ali_vendor_had_timing_cyclically_continue,blank
+	qisolate1 pdata
+	nrtn true
+ali_mesh_ali_vendor_had_timing_cyclically_continue:
+//	call ice_break
+	deposit rega
+	arg SECONDS_OF_MIN, temp
+	idiv temp
+	call wait_div_end
+	quotient temp
+	setarg EIGHT_HOURS_TIME_ZONE_OFFSET
+	iadd temp, temp
+	fetch 2,mem_mesh_vendor_timer_timing_time_cyclic
+	arg 0xfff,rega
+	iand rega,pdata
+	isub temp, null
+	nrtn zero
+	fetch 1, mem_mesh_vendor_timer_timing_attr_para_cyclic
+	branch ali_mesh_ali_vendor_time_timeout
+
+ali_mesh_ali_vendor_time_timeout:
+	store 1,mem_mesh_generic_onoff_set_payload_OnOff
+	jam 1, mem_mesh_vendor_timer_check_loop
+	
+	copy alarm,pdata
+	store 2,mem_mesh_alarm_temp	
+
+	fetcht 1,mem_mesh_generic_onoff_set_payload_OnOff
+	fetchr queue,1,mem_mesh_receive_element_number
+	call ali_mesh_ali_vendor_message_opcode_generic_OnOff
+	
+	fetch 2,mem_mesh_alarm_temp
+	copy pdata,alarm
+	add alarm, 17, contr
+	ifetch 1, contr
+	beq TIMER_CYCLICAL_FALG,ali_mesh_ali_vendor_time_timeout_cyclic
+ali_mesh_ali_vendor_time_timeout_continue:
+	setarg 0
+	istore 1,alarm
+	fetchr queue,1,mem_mesh_receive_element_number
+	call ali_mesh_ali_vendor_message_opcode_timing_finish
+	branch peripherals_write_mesh_timer_infmatn
+	
+
+
+ali_mesh_ali_vendor_time_timeout_cyclic:
+	fetch 1,mem_mesh_vendor_timer_timing_weekdays_cyclic
+	branch ali_mesh_ali_vendor_time_timeout_continue,blank
+	arg VENDOR_ATTR_TYPE_EVENT_TRIGGER,temp
+	call ali_mesh_ali_vendor_message_status_add_head
+	setarg 0x11
+	istore 1,contw
+	ifetch 1,alarm
+	or pdata,0x80,pdata
+	istore 1,contw
+	jam 8,mem_mesh_access_layer_payload
+	branch ali_mesh_ali_vendor_message_send_message
+
+ali_mesh_ali_vendor_message_opcode_timing_finish:
+	arg VENDOR_ATTR_TYPE_EVENT_INDEX_REPORT,temp
+	call ali_mesh_ali_vendor_message_status_add_head
+	copy contw,temp
+	call ali_mesh_get_all_timer_index_timer
+	
+	pincrease 6
+	store 1,mem_mesh_access_layer_payload_len
+	jam VENDOR_MESSAGE_ATTR_STATUS,mem_mesh_access_layer_payload
+	branch ali_mesh_ali_vendor_message_send_message
+	
+
+ali_mesh_ali_vendor_message_opcode_timer_set_timing:
+	arg mem_mesh_vendor_timer_timing_index,contw
+	arg 16,loopcnt
+	call memcpy
+	fetch 1,mem_mesh_vendor_timer_timing_index
+	and pdata,0x7f,pdata
+	store 1,mem_mesh_vendor_timer_timing_temp
+	sub pdata, MESH_X_TIMERS, null
+	nrtn positive
+/*
+	瀹氭椂涓虹簿搴﹀埌鍒嗛挓鍒版椂闂达紝
+	鏁呰鏁版嵁鍒扮鏁伴儴鍒嗭紙<60绉掞級
+	琛ㄧず璇ュ畾鏃舵墽琛岀殑鎿嶄綔鐮佹暟閲忋
+	鍑忔帀闄や互60鐨勪綑鏁,鏄负浜嗗噺鎺夋搷浣滅爜銆
+	*/
+	fetch 4,mem_mesh_vendor_timer_timing_time
+	arg 60,temp
+	idiv temp
+	call wait_div_end
+	remainder temp
+	isub temp,pdata
+	store 4,mem_mesh_vendor_timer_timing_time
+	setarg 0
+	store 2,mem_mesh_vendor_timer_timing_flag
+	arg mem_mesh_vendor_timer_timing_index,rega
+	call ali_mesh_ali_vendor_store_mesh_timer_infmatn
+	arg VENDOR_MSEEAGE_ATTR_TYPE_SET_TIME_SINGLE,temp
+	branch ali_mesh_access_layer_send_ali_vendor_message_current_timing
+	
+
+	
+
+ali_mesh_ali_vendor_message_opcode_timer_set_timing_cyclically:
+	
+	arg mem_mesh_vendor_timer_timing_index_cyclic,contw
+	arg 17,loopcnt
+	call memcpy
+	
+	
+	fetch 1,mem_mesh_vendor_timer_timing_index_cyclic
+	and pdata,0x7f,pdata
+	store 1,mem_mesh_vendor_timer_timing_temp
+	sub pdata, MESH_X_TIMERS, null
+	nrtn positive
+
+	jam 0x59,mem_mesh_vendor_timer_timing_cyclic_flag
+	arg mem_mesh_vendor_timer_timing_index_cyclic, rega
+	call ali_mesh_ali_vendor_store_mesh_timer_infmatn
+	arg VENDOR_MSEEAGE_ATTR_TYPE_SET_TIME_REPEAT,temp
+
+	
+ali_mesh_access_layer_send_ali_vendor_message_current_timing:
+//	call ali_mesh_get_all_timer_index_timer
+	call ali_mesh_ali_vendor_message_status_add_head
+	setarg 0
+	store 1,mem_mesh_access_layer_payload+6
+	copy contw,temp
+	call ali_mesh_get_all_timer_index_timer
+	pincrease 7
+	store 1,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message
+	
+	
+ali_mesh_ali_vendor_store_mesh_timer_infmatn:
+	call ali_mesh_vendor_timer_buffer_offset_cal
+	copy rega,contr
+	arg mem_mesh_vendor_timer_timing_buffer,contw
+	iadd contw,contw
+	arg 18,loopcnt
+	call memcpy
+	branch peripherals_write_mesh_timer_infmatn
+
+ali_mesh_vendor_timer_buffer_offset_cal:
+	fetch 1,mem_mesh_vendor_timer_timing_temp
+	pincrease -1
+	mul32 pdata,18,pdata
+	rtn
+
+ali_mesh_get_all_timer_index_timer:
+	arg mem_mesh_vendor_timer_timing_buffer,rega
+	arg 0,regb
+	copy temp,contw
+	arg MESH_X_TIMERS,loopcnt
+	increase -1,loopcnt
+ali_mesh_get_all_timer_index_timer_loop:
+	ifetch 1,rega
+	beq 0xff,ali_mesh_get_all_timer_index_timer_loop_end
+	branch ali_mesh_get_all_timer_index_timer_loop_end,blank
+	increase 1,regb
+	istore 1,contw
+ali_mesh_get_all_timer_index_timer_loop_end:
+	setarg 18
+	iadd rega,rega
+	loop ali_mesh_get_all_timer_index_timer_loop
+	copy regb,pdata
+	rtn
+
+peripherals_write_mesh_timer_infmatn:
+	fetch 2,mem_mesh_cb_vendor_timing_changed
+	branch callback_func
+//	setarg FLASH_BLOCK_MESH_TIMER_INFOR
+//	arg mem_mesh_verdor_timer_timing_buffer, rega  //mem ptr
+//	arg 30,temp
+//	arg MESH_X_TIMERS,temp
+//	mul32 temp,18,temp	
+//	branch spi_write_flash_data
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_bearer_layer.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_bearer_layer.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_bearer_layer.prog	(working copy)
@@ -0,0 +1,81 @@
+
+/*
+	mesh鍗忚涓璪earer layer
+	涓昏鏄礋璐esh涓疄闄呭彂閫佹暟鎹寘鍐呭
+*/
+
+ali_mesh_bearer_layer_send_packet_by_network_layer:
+	bpatchx patch34_1,mem_patch34
+	setarg mem_mesh_queue_each_size
+	store 2,mem_mesh_element_device_queue_buffer_ptr
+	setarg mem_mesh_element_device
+	store 2,mem_mesh_rega_temp
+	jam ADV_PAIRING_MESH_MESSAGE_DURATION,mem_mesh_queue_ele_duration
+	fetch 1,mem_mesh_gatt_package_send_msg_id
+	store 1,mem_mesh_queue_ele_gatt_msg_id
+
+	fetch 1,mem_mesh_lower_transport_layer_payload_len
+	pincrease 11
+	add pdata,-2,loopcnt
+	//闀垮害+11鐨勫師鍥
+	//uint8_t AD length
+	//uint8_t AD type:GAP_ADTYPE_MESH_MESSAGE
+	//uint8_t IVI & NID
+	//uint8_t CTL & TTL
+	//uint24_t SEQ
+	//uint16_t SRC
+	//uint16_t DST
+	store 1,mem_mesh_queue_ele_len
+	pincrease -1
+	//-1鐨勫師鍥
+	//uint8_t AD length
+	istore 1,contw
+	setarg GAP_ADTYPE_MESH_MESSAGE
+	istore 1,contw
+	arg mem_mesh_send_upper_layer_IVI_and_NID,contr
+	call memcpy_fast
+	fetchr rega,2,mem_mesh_rega_temp
+	call ali_mesh_advertising_bearer_layer_init_queue
+	call queue_push
+ali_mesh_bearer_layer_gatt_send_packet_by_network_layer:
+	fetch 2,mem_ui_state_map
+	isolate1 UI_STATE_BLE_CONNECTED,pdata
+	nrtn true
+ali_mesh_send_ble_data_control_package:
+	call ali_mesh_network_layer_init_gatt_queue_param
+	arg mem_mesh_queue_ele_temp,rega
+	branch queue_push
+
+ali_mesh_advertising_bearer_layer_init_queue:
+	add rega,ELEMENT_DEVICE_QUEUE_BUFFER_PTR,contr
+	ifetch 2,contr
+	store 2,mem_queue_ptr
+	arg mem_mesh_queue_ele_temp,rega
+	rtn
+	
+
+ali_mesh_advertising_bearer_layer_init_queue_param:
+	setarg mem_mesh_queue_each_size
+	store 2,mem_queue_ptr
+	rtn
+
+ali_mesh_advertising_bearer_layer_load_packet_from_advertising_queue:
+ 
+ali_mesh_advertising_bearer_layer_load_packet_from_advertising_queue_deal:
+	fetch 1,mem_mesh_upper_tran_layer_packet_advertising
+	rtnne PACKET_IN_BEARER
+	jam PACKET_IN_ADVERTING,mem_mesh_upper_tran_layer_packet_advertising
+	branch ali_mesh_control_ble_advertising_on_advertising
+
+ali_mesh_advertising_bearer_layer_send_packet_by_app_bearer_calc_param:
+	arg mem_mesh_queue_ele_payload+2,rega
+	arg MAX_APP_MSSAGE_PAYLOAD_LENGTH,temp
+	setarg 0x21		//
+	nrtn true
+	arg mem_mesh_queue_ele_payload+20,rega		//MAX_APP_MSSAGE_PAYLOAD_LENGTH+2
+	fetcht 1,mem_mesh_queue_ele_len
+	increase -18,temp		//MAX_APP_MSSAGE_PAYLOAD_LENGTH
+	setarg 0x22
+	rtn
+
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_ble_core_advertising.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_ble_core_advertising.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_ble_core_advertising.prog	(working copy)
@@ -0,0 +1,182 @@
+
+
+
+//0x01 GAP_ADTYPE_FLAGS
+//input:no default write mem_mesh_adv_data
+ali_mesh_advertising_add_adtype_flags:
+	arg mem_mesh_adv_data,contw
+	setarg 0x02
+	istore 1,contw
+	setarg GAP_ADTYPE_FLAGS
+	istore 1,contw
+	setarg 0x02
+	istore 1,contw
+	rtn
+
+//0x01 GAP_ADTYPE_FLAGS
+//input:no default write mem_mesh_adv_data
+ali_mesh_advertising_add_adtype_16bit_complete:
+	arg MESH_PROVISIONING_UUID,temp
+	setarg 0x03
+	istore 1,contw
+	setarg GAP_ADTYPE_16BIT_COMPLETE
+	istore 1,contw
+	istoret 2,contw
+	rtn
+
+
+mesh_ble_rx_packet_only:
+	call le_enable
+	call le_init_adv
+	call le_receive_adv
+	nrtn match
+//	call ali_mesh_advertising_packet_analysis
+	fetch 1,mem_le_adv_rcv
+	pincrease 1
+	store 1,mem_le_adv_rcv
+	fetch 2,mem_mesh_cb_receive_advertising
+	call callback_func
+	branch le_disable
+
+mesh_ble_rx_packet:
+	call mesh_ble_rx_packet_check_and_init
+	rtn user
+mesh_ble_rx_packet_check_timer:
+	call mesh_ble_rx_packet_only
+	call connection_dispatch
+	fetcht 2,mem_le_scan_interval
+	arg 10,queue
+	call sniff_check_window
+	rtn user
+	arg mesh_ble_rx_timer,queue
+	call timer_check
+	nbranch mesh_ble_rx_packet_check_timer,blank
+	rtn
+
+mesh_ble_rx_packet_check_and_init:
+	fetcht 2,mem_le_scan_interval
+	arg 4,queue
+	call sniff_check_window
+	rtn user
+	call mesh_le_calc_next_scan_channel
+	fetch 2,mem_le_scan_interval
+	arg mesh_ble_rx_timer,queue
+	branch timer_init
+
+
+mesh_le_calc_next_scan_channel:
+	fetch 1,mem_mesh_adv_scan_channel
+	pincrease 1
+	store 1,mem_mesh_adv_scan_channel
+	store 1,mem_le_ch_mapped
+	rtnne 40
+	jam 37,mem_mesh_adv_scan_channel
+	jam 37,mem_le_ch_mapped
+	rtn
+
+/*
+	mesh 瑙ｆ瀽鏍囧噯骞挎挱鏁版嵁
+	鍙垎鏋怉DV_IND/ADV_NONCONN_IND涓ょ骞挎挱鍖
+*/
+mesh_check_ble_rx_packet:
+	fetch 1,mem_le_rxbuf
+	and pdata,0x0f,pdata
+	beq ADV_IND,ali_mesh_match_advertising_packet
+	beq ADV_NONCONN_IND,ali_mesh_match_advertising_packet
+	rtn
+
+ali_mesh_match_advertising_packet:
+	ifetcht 1,contr	//length
+	sub temp,ADV_PACKET_MIN_LENGTH,null
+	rtn positive		//杩囨护鐭寘锛屽寘闀垮害澶煭瀵艰嚧瑙ｆ瀽閿欒
+	sub temp,ADV_PACKET_MAX_LENGTH,null
+	nrtn positive		//杩囨护闀垮寘锛屽寘闀垮害澶暱瀵艰嚧鍐呭瓨瑕嗙洊
+	add temp,-6,rega	//rega:鍑忓幓address length
+	add contr,6,regb	//regb:鎸囬拡鍋忕Щ鍒皉egb
+
+ali_mesh_find_adv_ind_packet:
+	ifetcht 1,regb //length
+	sub temp,AD_TYPE_MIN_LENGTH,null
+	rtn positive	
+	sub temp,AD_TYPE_MAX_LENGTH,null
+	nrtn positive	
+	copy temp,pdata
+	rtn blank
+	bpatchx patch34_2,mem_patch34
+	ifetch 1,contr
+	beq GAP_ADTYPE_MANUFACTURER_SPECIFIC,ali_mesh_receive_adtype_manufacturer_specific_tmall_control
+	beq GAP_ADTYPE_MESH_MESSAGE,ali_mesh_receive_adtype_mesh_message
+//	beq GAP_ADTYPE_128BIT_COMPLETE,ali_mesh_receive_adtype_128bit_uuid_complete
+//鎸夌収骞挎挱鏍煎紡鏌ヨ鎵鏈夋壂鎻忓埌鐨勫箍鎾暟鎹
+	add temp,1,pdata
+	isub rega,null
+	rtn positive
+	iadd regb,regb
+	sub temp,-1,pdata
+	iadd rega,rega
+	copy rega,pdata
+	rtn blank
+	branch ali_mesh_find_adv_ind_packet
+
+ali_mesh_receive_adtype_manufacturer_specific_tmall_control:
+	jam MESH_MESSAGE_TMALL,mem_mesh_fast_pair_packet_type
+	branch ali_mesh_receive_adtype_manufacturer_specific
+
+
+/*
+input:
+mem_le_lap:钃濈墮鍦板潃
+mem_mesh_adv_data:payload 鏁版嵁
+mem_mesh_adv_data_len:鏁版嵁闀垮害
+*/
+mesh_le_send_adv:
+	fetch 1,mem_le_adv_transmit
+	pincrease 1
+	store 1,mem_le_adv_transmit
+//	call ice_break
+	bpatchx patch34_3,mem_patch34
+	call le_enable
+	arg 39,loopcnt
+	arg mem_le_txheader,contr
+	arg mem_le_txheader_mesh_temp,contw
+	call memcpy_fast
+	jam 37,mem_le_ch_mapped
+	arg 1800,stop_watch
+	enable swfine
+	disable match
+
+mesh_le_send_adv_loop:
+	call le_init_adv
+	call mesh_le_send_adv_nonconn_ind
+	random pdata 
+	arg 0x1ff,temp
+	iand temp,pdata
+	add pdata,100,pdata
+	call delay
+	fetch 1,mem_le_ch_mapped
+	pincrease 1
+	store 1,mem_le_ch_mapped
+	bne 40,mesh_le_send_adv_loop
+	
+	arg 39,loopcnt
+	arg mem_le_txheader,contw
+	arg mem_le_txheader_mesh_temp,contr
+	call memcpy_fast
+	branch le_disable
+
+mesh_le_send_adv_nonconn_ind:
+	arg ADV_NONCONN_IND,temp
+	storet 1,mem_le_txheader
+	fetcht 1,mem_mesh_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_mesh_adv_data,contr
+	call memcpy_fast
+
+	branch le_transmit_norx
+
+
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_chip_peripherals.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_chip_peripherals.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_chip_peripherals.prog	(working copy)
@@ -0,0 +1,382 @@
+
+//input:mem_mesh_mic_cache_ptr is cache buffer ptr
+//data ptr is store mem_ccm_data_ptr
+//data length is store mem_ccm_data_len
+//cache space size is TRANSPORT_MIC_CACHE_SPACE_SIZE
+//cache space num is TRANSPORT_MIC_CACHE_SPACE_NUM
+//output:user is enable ,mean new packet
+ali_mesh_base_adt_cache:
+	bpatchx patch34_4,mem_patch34
+	fetcht 2,mem_ccm_data_ptr
+	fetch 1,mem_ccm_data_len
+	copy temp,contr
+	arg mem_k4_SALT,rega
+	arg mem_k4_T,alarm
+	call ali_mesh_encrypt_base_function_AES_CMAC
+	call disable_user
+	copy regc,pdata
+	iadd alarm,contr
+	fetcht 4,mem_k4_T
+	fetch 2,mem_mesh_mic_cache_ptr
+	copy pdata,rega
+//	arg mem_mesh_access_message_mic_cache,rega
+	arg TRANSPORT_MIC_CACHE_SPACE_NUM,loopcnt
+ali_mesh_base_adt_cache_loop:
+	ifetch 4,rega
+	branch ali_mesh_base_adt_cache_empty_space,blank
+	isub temp,null
+	rtn zero
+	increase TRANSPORT_MIC_CACHE_SPACE_SIZE,rega
+	loop ali_mesh_base_adt_cache_loop
+	fetch 2,mem_mesh_mic_cache_ptr
+	copy pdata,contw
+	add pdata,TRANSPORT_MIC_CACHE_SPACE_SIZE,contr
+//	arg mem_mesh_access_message_mic_cache,contw
+//	arg mem_mesh_access_message_mic_cache+TRANSPORT_MIC_CACHE_SPACE_SIZE,contr
+	arg TRANSPORT_MIC_CACHE_TOTAL_SIZE,loopcnt
+	call memcpy_fast
+	istoret 4,contw
+	branch enable_user
+ali_mesh_base_adt_cache_empty_space:
+	istoret 4,rega
+	branch enable_user
+
+ali_mesh_chip_peripherals_load_data:
+	fetch 1,mem_mesh_chip_select
+	beq MESH_CHIP_FROM_EEPROM,ali_mesh_chip_peripherals_load_data_from_eep
+ali_mesh_chip_peripherals_load_data_from_flash:
+	call ali_mesh_chip_peripherals_load_three_tuple_from_flash
+	call ali_mesh_chip_peripherals_load_network_key_from_flash
+	call ali_mesh_chip_peripherals_load_application_key_from_flash
+	call ali_mesh_chip_peripherals_load_device_key_from_flash
+	call ali_mesh_chip_peripherals_load_reset_count_from_flash
+	call ali_mesh_chip_peripherals_load_seq_from_flash
+	branch ali_mesh_chip_peripherals_load_subscription_from_flash
+
+ali_mesh_chip_peripherals_load_three_tuple_from_flash:
+	arg MESH_EEP_THREE_TUPLE_LENGTH,temp
+	arg mem_mesh_three_tuple_ProductID,rega
+	setarg 0x1ffa0
+	branch spid_read_flash
+ali_mesh_chip_peripherals_load_network_key_from_flash:
+	arg MESH_EEP_NETWORK_KEY_LENGTH,temp
+	arg mem_mesh_Network_Key,rega
+	setarg MESH_FLASH_NETWORK_KEY_ADDR
+	call spid_read_flash
+	fetch 1,mem_mesh_last_IV_Index_byte
+	store 1,mem_mesh_IV_Index+3
+	rtn
+ali_mesh_chip_peripherals_load_application_key_from_flash:
+	arg MESH_EEP_APPLICATION_KEY_LENGTH,temp
+	arg mem_mesh_application_key,rega
+	setarg MESH_FLASH_APPLICATION_KEY_ADDR
+	branch spid_read_flash
+ali_mesh_chip_peripherals_load_device_key_from_flash:
+	arg MESH_EEP_DEVICE_KEY_LENGTH,temp
+	arg mem_mesh_Device_Key,rega
+	setarg MESH_FLASH_DEVICE_KEY_ADDR
+	branch spid_read_flash
+ali_mesh_chip_peripherals_load_reset_count_from_flash:
+	rtn
+ali_mesh_chip_peripherals_load_seq_from_flash:
+	arg MESH_EEP_SEQ_LENGTH,temp
+	arg mem_mesh_send_message_SEQ,rega
+	setarg MESH_FLASH_MESSAGE_SEQ_ADDR
+	branch spid_read_flash
+ali_mesh_chip_peripherals_load_subscription_from_flash:
+	fetch 2,mem_mesh_core_feature
+	rtnbit1 MESH_FEATURE_DISABLE_SUBSCRIPTION
+	arg MESH_EEP_SUBSCRIPTION_TOTAL_LENGTH,temp
+	arg mem_mesh_subscription_eep_temp,rega
+	setarg MESH_FLASH_SUBSCRIPTION_ADDR
+	call spid_read_flash
+	call mesh_get_element_info_config
+	arg mem_mesh_subscription_eep_temp,contr
+	add rega,ELEMENT_DEVICE_SUBSCRIPTION_LABEL,rega
+	branch ali_mesh_chip_peripherals_load_subscription_loop
+
+
+ali_mesh_chip_peripherals_load_data_from_eep:
+	call ali_mesh_chip_peripherals_load_three_tuple_from_eep
+	call ali_mesh_chip_peripherals_load_network_key_from_eep
+	call ali_mesh_chip_peripherals_load_application_key_from_eep
+	call ali_mesh_chip_peripherals_load_device_key_from_eep
+	call ali_mesh_chip_peripherals_load_reset_count_from_eep
+	call ali_mesh_chip_peripherals_load_seq_from_eep
+	branch ali_mesh_chip_peripherals_load_subscription_from_eep
+
+ali_mesh_chip_peripherals_load_three_tuple_from_eep:
+	arg MESH_EEP_THREE_TUPLE_LENGTH,temp
+	arg mem_mesh_three_tuple_ProductID,rega
+	arg MESH_EEP_THREE_TUPLE_OFFSET,regb
+	branch iicd_read_eep_data
+
+ali_mesh_chip_peripherals_load_network_key_from_eep:
+	arg MESH_EEP_NETWORK_KEY_LENGTH,temp
+	arg mem_mesh_Network_Key,rega
+	arg MESH_EEP_NETWORK_KEY_OFFSET,regb
+	call iicd_read_eep_data
+	fetch 1,mem_mesh_last_IV_Index_byte
+	store 1,mem_mesh_IV_Index+3
+	rtn
+
+ali_mesh_chip_peripherals_load_application_key_from_eep:
+	arg MESH_EEP_APPLICATION_KEY_LENGTH,temp
+	arg mem_mesh_application_key,rega
+	arg MESH_EEP_APPLICATION_KEY_OFFSET,regb
+	branch iicd_read_eep_data
+
+ali_mesh_chip_peripherals_load_device_key_from_eep:
+	arg MESH_EEP_DEVICE_KEY_LENGTH,temp
+	arg mem_mesh_Device_Key,rega
+	arg MESH_EEP_DEVICE_KEY_OFFSET,regb
+	branch iicd_read_eep_data
+
+ali_mesh_chip_peripherals_load_reset_count_from_eep:
+	rtn
+
+ali_mesh_chip_peripherals_load_seq_from_eep:
+	arg MESH_EEP_SEQ_LENGTH,temp
+	arg mem_mesh_send_message_SEQ,rega
+	arg MESH_EEP_SEQ_OFFSET,regb
+	branch iicd_read_eep_data
+
+ali_mesh_chip_peripherals_load_subscription_from_eep:
+	fetch 2,mem_mesh_core_feature
+	rtnbit1 MESH_FEATURE_DISABLE_SUBSCRIPTION
+	arg MESH_EEP_SUBSCRIPTION_TOTAL_LENGTH,temp
+	arg mem_mesh_subscription_eep_temp,rega
+	arg MESH_EEP_SUBSCRIPTION_OFFSET,regb
+	call iicd_read_eep_data
+	call mesh_get_element_info_config
+	arg mem_mesh_subscription_eep_temp,contr
+	add rega,ELEMENT_DEVICE_SUBSCRIPTION_LABEL,rega
+ali_mesh_chip_peripherals_load_subscription_loop:
+	copy rega,contw
+	call memcpy16
+	copy regb,pdata
+	iadd rega,rega
+	loop ali_mesh_chip_peripherals_load_subscription_loop
+	rtn
+
+mesh_receive_config_appkey_add_cb:
+	fetch 1,mem_mesh_chip_select
+	beq MESH_CHIP_FROM_EEPROM,mesh_receive_config_appkey_add_eeprom_cb
+	beq MESH_CHIP_FROM_FLASH,mesh_receive_config_appkey_add_flash_cb
+mesh_receive_config_appkey_add_flash_cb:
+	call ali_mesh_chip_peripherals_save_network_key_from_flash
+	call ali_mesh_chip_peripherals_save_application_key_from_flash
+	branch ali_mesh_chip_peripherals_save_device_key_from_flash
+ali_mesh_chip_peripherals_save_network_key_from_flash:
+	arg MESH_EEP_NETWORK_KEY_LENGTH,temp
+	arg mem_mesh_Network_Key,rega
+	setarg MESH_FLASH_NETWORK_KEY_ADDR
+	branch spid_write_flash_data
+ali_mesh_chip_peripherals_save_application_key_from_flash:
+	arg MESH_EEP_APPLICATION_KEY_LENGTH,temp
+	arg mem_mesh_application_key,rega
+	setarg MESH_FLASH_APPLICATION_KEY_ADDR
+	branch spid_write_flash_data
+ali_mesh_chip_peripherals_save_device_key_from_flash:
+	arg MESH_EEP_DEVICE_KEY_LENGTH,temp
+	arg mem_mesh_Device_Key,rega
+	setarg MESH_FLASH_DEVICE_KEY_ADDR
+	branch spid_write_flash_data
+	
+mesh_receive_config_appkey_add_eeprom_cb:
+	call ali_mesh_chip_peripherals_save_network_key_from_eep
+	call ali_mesh_chip_peripherals_save_application_key_from_eep
+	branch ali_mesh_chip_peripherals_save_device_key_from_eep
+
+ali_mesh_chip_peripherals_save_network_key_from_eep:
+	arg MESH_EEP_NETWORK_KEY_LENGTH,temp
+	arg mem_mesh_Network_Key,rega
+	arg MESH_EEP_NETWORK_KEY_OFFSET,regb
+	branch iicd_write_protect_eep_data
+
+ali_mesh_chip_peripherals_save_application_key_from_eep:
+	arg MESH_EEP_APPLICATION_KEY_LENGTH,temp
+	arg mem_mesh_application_key,rega
+	arg MESH_EEP_APPLICATION_KEY_OFFSET,regb
+	branch iicd_write_protect_eep_data
+
+ali_mesh_chip_peripherals_save_device_key_from_eep:
+	arg MESH_EEP_DEVICE_KEY_LENGTH,temp
+	arg mem_mesh_Device_Key,rega
+	arg MESH_EEP_DEVICE_KEY_OFFSET,regb
+	branch iicd_write_protect_eep_data
+
+mesh_store_new_seq_data:
+	fetch 3,mem_mesh_send_message_SEQ
+	fetcht 3,mem_mesh_send_message_SEQ_temp
+	isub temp,null
+	nrtn positive
+	add pdata,128,pdata
+	store 3,mem_mesh_send_message_SEQ_temp
+	fetch 1,mem_mesh_chip_select
+	beq 1,ali_mesh_chip_peripherals_save_seq_from_eep
+ali_mesh_chip_peripherals_save_seq_from_flash:
+	arg MESH_EEP_SEQ_LENGTH,temp
+	arg mem_mesh_send_message_SEQ_temp,rega
+	setarg MESH_FLASH_MESSAGE_SEQ_ADDR
+	branch spid_write_flash_data
+ali_mesh_chip_peripherals_save_seq_from_eep:
+	arg MESH_EEP_SEQ_LENGTH,temp
+	arg mem_mesh_send_message_SEQ_temp,rega
+	arg MESH_EEP_SEQ_OFFSET,regb
+	branch iicd_write_protect_eep_data
+
+mesh_store_new_subscriptuion_list_data:
+	call ali_mesh_chip_peripherals_save_subscriptuion_list_from_eep
+	fetch 1,mem_mesh_chip_select
+	beq 2,mesh_store_new_subscriptuion_list_data_from_flash
+	arg MESH_EEP_SUBSCRIPTION_TOTAL_LENGTH,temp
+	arg mem_mesh_subscription_eep_temp,rega
+	arg MESH_EEP_SUBSCRIPTION_OFFSET,regb
+	branch iicd_write_protect_eep_data
+mesh_store_new_subscriptuion_list_data_from_flash:
+	arg MESH_EEP_SUBSCRIPTION_TOTAL_LENGTH,temp
+	arg mem_mesh_subscription_eep_temp,rega
+	setarg MESH_FLASH_SUBSCRIPTION_ADDR
+	branch spid_write_flash_data
+
+ali_mesh_chip_peripherals_save_subscriptuion_list_from_eep:
+	call mesh_get_element_info_config
+	arg mem_mesh_subscription_eep_temp,contw
+	add rega,ELEMENT_DEVICE_SUBSCRIPTION_LABEL,rega
+ali_mesh_chip_peripherals_save_subscriptuion_list_from_eep_loop:
+	copy rega,contr
+	call memcpy16
+	copy regb,pdata
+	iadd rega,rega
+	loop ali_mesh_chip_peripherals_save_subscriptuion_list_from_eep_loop
+	rtn
+
+mesh_clear_pairing_key:
+	fetch 1,mem_mesh_chip_select
+	beq 1,ali_mesh_chip_clear_pairing_key_from_eeprom
+ali_mesh_chip_clear_pairing_key_from_flash:
+	setarg 0x1e000
+	store 3,mem_spi_write_addr
+	branch spid_flash_erase_sector+2
+ali_mesh_chip_clear_pairing_key_from_eeprom:
+	rtn
+
+mesh_vendor_timming_chage_cb:
+	fetch 1,mem_mesh_chip_select
+	rtnne 2
+	setarg 0x1d000
+	arg mem_mesh_vendor_timer_timing_buffer, rega  //mem ptr
+	arg MESH_X_TIMERS,temp
+	mul32 temp,18,temp	
+	branch spid_write_flash_data
+
+ali_mesh_vendor_timer_message_read:
+	fetch 1,mem_mesh_chip_select
+	rtnne 2
+	arg mem_mesh_vendor_timer_timing_buffer, rega  //mem ptr
+	arg MESH_X_TIMERS,temp
+	mul32 temp,18,temp	
+	setarg 0x1d000
+	branch spid_read_flash
+
+ifdef mesh_debug_log
+//input:rega is tx data ptr
+//loopcnt is tx data length
+//regb is logging type
+logging_tx_debug:
+	arg LOGGING_DEBUG,temp
+	branch logging_tx_common
+
+//input:rega is tx data ptr
+//loopcnt is tx data length
+//regb is logging type
+logging_tx_info:
+	arg LOGGING_INFO,temp
+	branch logging_tx_common
+
+
+//input:rega is tx data ptr
+//loopcnt is tx data length
+//regb is logging type
+logging_tx_warning:
+	arg LOGGING_WARNING,temp
+	branch logging_tx_common
+
+
+//input:rega is tx data ptr
+//loopcnt is tx data length
+//regb is logging type
+logging_tx_error:
+	arg LOGGING_ERROR,temp
+	branch logging_tx_common
+
+
+//input:rega is tx data ptr
+//loopcnt is tx data length
+//regb is logging type
+logging_tx_critical:
+	arg LOGGING_CRITICAL,temp
+	branch logging_tx_common
+
+
+//input:rega is tx data ptr
+//loopcnt is tx data length
+//regb is logging type
+//temp is logging level
+logging_tx_common:
+	call push_stack
+	fetch 1,mem_mesh_core_feature
+	bbit1 MESH_FEATURE_DISABLE_LOG,pop_stack
+	call uarta_prepare_tx_register_push
+	setarg LUA_LOG_PACKET_HEADER
+	istore 1,contwu
+	setarg LUA_LOG_PAKCET_TYPE
+	istore 1,contwu
+	add loopcnt,4,pdata
+	istore 1,contwu
+	istorer temp,2,contwu
+	istorer regb,2,contwu
+	copy rega,contr
+	call uart_copy_tx_bytes_fast
+	setarg LUA_LOG_PACKET_TRAIL
+	istore 1,contwu
+	call uarta_send_register_pop
+	branch pop_stack
+
+
+/*
+	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
+*/
+mesh_uart_init:
+	fetch 1,mem_mesh_core_feature
+	rtnbit1 MESH_FEATURE_DISABLE_LOG
+	jam gpcfg_uart_txd,core_gpio_conf+11
+	jam gpcfg_uart_rxd|gpcfg_pullup,core_gpio_conf+12
+	call mesh_uart_init_buffer
+	arg 921600,temp
+	call uarta_calc_baud_rate_config
+	call uart_clock_select_main_freq_crystal
+	arg FUN_UART_CONTROL_ENABLE|FUN_UART_CONTROL_SETTING_RATE_BAUD,temp
+	storet 1,core_uart_ctrl
+	rtn
+
+mesh_uart_init_buffer:
+	setarg 0x4e00
+	store 2,mem_pdatatemp
+	setarg 0x4eff
+	istore 2,contw
+	setarg 0x4f00
+	istore 2,contw
+	setarg 0x4fff
+	istore 2,contw
+	fetch 8,mem_pdatatemp
+	branch uarta_init_dma_mem
+endif
+
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_control_ble_advertising.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_control_ble_advertising.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_control_ble_advertising.prog	(working copy)
@@ -0,0 +1,222 @@
+
+//mesh鎺у埗ble advertising骞挎挱閫昏緫鐨勪富娴佺▼
+ali_mesh_control_ble_adv_process:
+	call ali_mesh_ble_adv
+	branch ali_mesh_control_ble_adv_tmall_packet
+
+
+//mesh 鎺у埗ble advertising 骞挎挱timer娴佺▼
+ali_mesh_control_ble_adv_timer_process:
+	call ali_mesh_advertising_unprovisioned_timer_interval_timer
+	branch ali_mesh_advertising_unprovisioned_timer
+
+//mesh鎵撳紑ble advertising
+ali_mesh_control_ble_advertising_on_advertising:
+	jam DEVICE_BEACON_ON,mem_mesh_advertising_unprovisioned_device_beacon_switch
+	rtn
+
+//mesh鍏抽棴ble advertising
+ali_mesh_control_ble_advertising_off_advertising:
+	jam DEVICE_BEACON_OFF,mem_mesh_advertising_unprovisioned_device_beacon_switch
+	rtn
+
+
+/*
+	mesh鎺у埗鍙戦乽nprovisioned device beacon advertising
+	閰嶇綉闃舵鍖呭凡缁忛厤缃戝悗tmall鍥炲鍖
+*/
+ali_mesh_control_ble_adv_tmall_packet:
+	arg ali_mesh_control_ble_adv_tmall_packet_send_package,regb
+	arg MESH_ADV_TMALL_MESSAGE_INTERVAL,rega
+	arg mesh_ble_adv_tmall,queue
+	branch ali_mesh_chip_timer_check_with_random_timer
+
+
+
+
+//鎺у埗涓嶅悓鐘舵佸彂鍖呮儏鍐
+ali_mesh_control_ble_adv_tmall_packet_send_package:
+	fetch 1,mem_mesh_provisioned_flag
+	beq UNPROVISIONED_BEACON_STATUS,ali_mesh_control_ble_advertising_send_device_beacon_packet
+	beq SILENCE_BEACON_STATUS,ali_mesh_control_ble_advertising_send_device_silence_beacon_packet
+	beq PAIRING_STATUS,ali_mesh_control_ble_advertising_send_pairing_packet
+	beq PAIRED_STATUS,ali_mesh_control_ble_advertising_send_paired_packet
+	branch ali_mesh_control_ble_advertising_send_paired_packet
+
+ali_mesh_control_ble_advertising_send_device_silence_beacon_packet:
+	jam 0,mem_le_adv_enable
+	branch ali_mesh_control_ble_advertising_off_advertising
+
+ali_mesh_control_ble_advertising_send_paired_packet:
+	call ali_mesh_advertising_bearer_layer_init_queue_param
+	arg mem_mesh_queue_ele_temp,rega
+	call queue_get_new_ele
+	nrtn user
+	fetch 1,mem_mesh_upper_tran_layer_packet_type
+	bbit1 BIT_UUPER_TRAN_PROXY_MESSAGE,ali_mesh_control_ble_advertising_send_paired_packet_end_duration_proxy
+	fetch 1,mem_mesh_queue_ele_duration
+	pincrease -1
+	istore 1,regb
+	and pdata,0x7f,pdata	
+	call ali_mesh_control_ble_advertising_send_paired_packet_end_duration,blank	//鍛ㄦ湡鍒颁涪寮
+	fetch 1,mem_mesh_upper_tran_layer_packet_type
+	rtnbit0 BIT_UPPER_TRAN_TMALL_MESSAGE		
+	arg mem_mesh_adv_data_len,contw
+	arg mem_mesh_queue_ele_len,contr
+	call memcpy32
+	branch mesh_le_send_adv
+
+ali_mesh_control_ble_advertising_send_paired_packet_end_duration_proxy:
+	arg mem_mesh_queue_ele_duration,rega
+	call queue_pop
+	call queue_empty
+	nrtn blank
+
+	call ali_mesh_send_paired_packet_init_advertising
+	branch ali_mesh_control_ble_advertising_off_advertising
+	
+
+ali_mesh_control_ble_advertising_send_paired_packet_end_duration:
+	arg mem_mesh_queue_ele_duration,rega
+	call queue_pop
+	call queue_empty
+	nrtn blank
+	
+	jam ADV_PAIRING_MESH_MESSAGE_INTERVAL,mem_mesh_advertising_unprovisioned_device_beacon_interval
+	branch ali_mesh_control_ble_advertising_off_advertising
+
+ali_mesh_send_paired_packet_init_advertising:
+	jam NULL_PACKET_ADVERTISING,mem_mesh_upper_tran_layer_packet_advertising
+	rtn
+
+
+ali_mesh_control_ble_advertising_send_device_beacon_packet:
+	call ali_mesh_config_device_uuid_by_three_tuple
+	call ali_mesh_send_Unprovisioned_Beacons_tmall
+	call ali_mesh_control_ble_advertising_device_beacon_check_duration
+	nrtn zero			//in advertising beacon duration
+	fetch 1,mem_mesh_provisioned_flag
+	beq SILENCE_BEACON_STATUS,ali_mesh_end_advertising_silence_device_beacon_packet
+	beq UNPROVISIONED_BEACON_STATUS,ali_mesh_end_advertising_unprovisioned_device_beacon_packet
+	rtn
+
+
+//骞挎挱涓娆＄敓瀛樺懆鏈熷噺1
+//output:zero is end of duration
+ali_mesh_control_ble_advertising_device_beacon_check_duration:
+	fetch 1,mem_mesh_advertising_unprovisioned_device_beacon_duration
+	add pdata,-1,pdata
+	store 1,mem_mesh_advertising_unprovisioned_device_beacon_duration
+	rtn
+
+//闈欓粯骞挎挱鐢熷瓨鍛ㄦ湡瀹屾垚鍏抽棴骞挎挱
+ali_mesh_end_advertising_silence_device_beacon_packet:
+	jam ADV_SILENCE_DEVICE_BEACON_INTERVAL,mem_mesh_advertising_unprovisioned_device_beacon_interval
+	branch ali_mesh_control_ble_advertising_off_advertising
+	
+//鏈厤缃戝箍鎾敓瀛樺懆鏈熷畬鎴愬叧闂箍鎾
+ali_mesh_end_advertising_unprovisioned_device_beacon_packet:
+	jam ADV_UNPROVISIONED_DEVICE_BEACON_DURATION,mem_mesh_advertising_unprovisioned_device_beacon_interval
+	branch ali_mesh_control_ble_advertising_off_advertising
+
+
+ali_mesh_control_ble_advertising_send_pairing_packet:
+	branch mesh_le_send_adv
+
+/*
+	娉ㄥ唽瀹氭椂鍣ㄥ姛鑳
+*/
+ali_mesh_chip_timer_check_with_random_timer:
+	fetch 1,mem_mesh_advertising_unprovisioned_device_beacon_switch
+	rtnne DEVICE_BEACON_ON
+ali_mesh_chip_timer_check_with_random_timer_continue:
+	random pdata
+	and pdata,0x07,pdata
+	iadd rega,rega
+//input:queue is timer id
+//rega is timer count
+//regb is cb ptr
+ali_mesh_chip_timer_check:
+	call timer_check
+	nrtn blank
+	copy rega,pdata
+	call timer_init
+	copy regb,pdata
+	branch callback_func
+
+
+//闈欓粯骞挎挱瀹氭椂鍣10min鍚庤繘鍏ラ潤榛樺箍鎾姸鎬
+ali_mesh_advertising_unprovisioned_timer:
+	arg mem_mesh_advertising_unprovisioned_device_beacon_timer,regc
+	arg ali_mesh_advertising_unprovisioned_timeout, regb
+	branch timer_single_step_2B
+
+//瀹氭椂鍣ㄨ秴鏃跺鏋滃綋鍓嶅浜庢湭閰嶇綉骞挎挱鐘舵侊紝杩涘叆闈欓粯骞挎挱
+ali_mesh_advertising_unprovisioned_timeout:
+	fetch 1,mem_mesh_provisioned_flag
+	rtnne UNPROVISIONED_BEACON_STATUS
+	fetch 1,mem_mesh_UUID_FeatureFlag
+	set1 BIT_SILENCE_ADV_FLAG,pdata
+	store 1,mem_mesh_UUID_FeatureFlag
+	jam SILENCE_BEACON_STATUS,mem_mesh_provisioned_flag
+	branch ali_mesh_send_silence_device_beacon_init_advertising
+
+
+//鎺у埗骞挎挱鍙戦侀棿闅欑殑timer
+//涓嶅悓鐘舵佸箍鎾棿闅斾笉涓鏍
+ali_mesh_advertising_unprovisioned_timer_interval_timer:
+	arg mem_mesh_advertising_unprovisioned_device_beacon_interval,regc
+	arg ali_mesh_advertising_unprovisioned_timer_interval_timeout,regb
+	branch timer_single_step
+
+//鎺у埗骞挎挱鍙戦佽秴鏃
+//澶勪簬鏈厤缃戝箍鎾垨鑰呴潤榛樺箍鎾姸鎬侊紝杩涘叆涓嬩竴娆″箍鎾
+//澶勪簬閰嶇綉鐘舵侊紝娓呴櫎閰嶇綉鐘舵
+ali_mesh_advertising_unprovisioned_timer_interval_timeout:
+	fetch 1,mem_mesh_provisioned_flag
+//	beq SILENCE_BEACON_STATUS,ali_mesh_send_silence_device_beacon_init_advertising
+	beq UNPROVISIONED_BEACON_STATUS,ali_mesh_send_unprovisioned_device_beacon_init_advertising
+	beq PAIRED_STATUS,ali_mesh_send_paired_packet_init_advertising
+	rtn
+
+ali_mesh_stop_send_indication_packet:
+	call ali_mesh_advertising_bearer_layer_queue_init
+	call ali_mesh_upper_transport_layer_queue_pop
+	jam 0,mem_mesh_advertising_unprovisioned_device_beacon_interval
+	call ali_mesh_control_ble_advertising_off_advertising
+	branch ali_mesh_send_paired_packet_init_advertising
+
+
+ali_mesh_send_unprovisioned_device_beacon_init_advertising:
+	jam ADV_UNPROVISIONED_DEVICE_BEACON_DURATION,mem_mesh_advertising_unprovisioned_device_beacon_duration
+	branch ali_mesh_control_ble_advertising_on_advertising
+
+
+ali_mesh_send_silence_device_beacon_init_advertising:
+	jam ADV_SILENCE_DEVICE_BEACON_DURATION,mem_mesh_advertising_unprovisioned_device_beacon_duration
+	branch ali_mesh_control_ble_advertising_on_advertising
+
+ali_mesh_network_layer_control_relay_packet:
+	arg ali_mesh_network_layer_control_send_relay_packet,regb
+	arg MESH_ADV_RELAY_MESSAGE_INTERVAL,rega
+	arg mesh_ble_relay_timer,queue
+	branch ali_mesh_chip_timer_check_with_random_timer_continue
+
+ali_mesh_network_layer_control_send_relay_packet:
+	fetch 1,mem_mesh_upper_tran_layer_packet_advertising
+	nrtn blank
+	call ali_mesh_network_layer_init_queue_param
+	arg mem_mesh_queue_ele_temp,rega
+	call queue_get_new_ele
+	nrtn user
+	fetch 1,mem_mesh_queue_ele_duration
+	pincrease -1
+	istore 1,regb
+	call queue_pop,blank	
+	arg mem_mesh_adv_data_len,contw
+	arg mem_mesh_queue_ele_len,contr
+	call memcpy32
+	branch mesh_le_send_adv
+
+
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_encrypt_function.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_encrypt_function.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_encrypt_function.prog	(working copy)
@@ -0,0 +1,650 @@
+/*
+	mesh鍔犲瘑绠楁硶灞傦紝鍖呭惈閰嶇綉闃舵鐨勭畻娉曞拰閰嶇綉鍚庣殑绠楁硶
+*/
+
+
+/*
+	provision random杈撳叆锛岃绠楀嚭provision confirmation绛夊弬鏁
+*/
+
+ali_mesh_encrypt_calc_random_data:
+	call ali_mesh_encrypt_calc_random_data_calc_ConfirmationKey
+	call ali_mesh_encrypt_calc_random_data_calc_AuthValueProv
+	call ali_mesh_encrypt_calc_random_data_calc_AuthValueDevice
+	call ali_mesh_encrypt_calc_random_data_calc_ConfirmationCloud
+	call ali_mesh_encrypt_calc_random_data_calc_ConfirmationDevice
+	branch ali_mesh_encrypt_calc_random_data_calc_DeviceKey
+
+
+//calc confirmation key
+//ConfirmationKey=SHA256(Random A||RandomB||"ConfirmationKey")[0:15]
+ali_mesh_encrypt_calc_random_data_calc_ConfirmationKey:
+	call ali_mesh_encrypt_load_randomAB_to_sha256
+	arg mem_mesh_sha256_ConfirmationKey_ascii,contr
+	arg 0xf,loopcnt
+	call ali_mesh_encrypt_base_function_sha256_load_data_without_hex2ascii
+	call ali_mesh_encrypt_base_function_sha256_calc
+	arg memresult,contr
+	arg mem_mesh_Confirmationkey,contw
+	branch memcpy16
+
+
+//calc Auth value prov
+//AuthValueProv = SHA256(PID,MAC,Secret,random B||random A)[0:15]
+ali_mesh_encrypt_calc_random_data_calc_AuthValueProv:
+	call ali_mesh_encrypt_load_three_tuple_to_sha256
+	call ali_mesh_encrypt_load_randomBA_to_sha256
+ifdef V1_2
+	call ali_mesh_encrypt_load_randomBA_to_sha256
+endif
+	call ali_mesh_encrypt_base_function_sha256_calc
+	arg memresult,contr
+	arg mem_mesh_AuthValueProv,contw
+	branch memcpy16
+
+//calc Auth Value Device
+//AuthValueDevice= SHA256(PID,MAC,Secret,random B||random A)[0:15]
+ali_mesh_encrypt_calc_random_data_calc_AuthValueDevice:
+	call ali_mesh_encrypt_load_three_tuple_to_sha256
+	call ali_mesh_encrypt_load_randomAB_to_sha256
+ifdef V1_2
+	call ali_mesh_encrypt_load_randomAB_to_sha256
+endif
+	call ali_mesh_encrypt_base_function_sha256_calc
+	arg memresult,contr
+	arg mem_mesh_AuthValueDevice,contw
+	branch memcpy16
+
+// calc Confirmation Cloud
+//Confirmation Cloud=AES-CMAC(Random B || Random A || AuthValueProv)
+//k=ConfirmationKey
+ali_mesh_encrypt_calc_random_data_calc_ConfirmationCloud:
+	fetch 8,mem_mesh_provisioning_random_A
+	store 8,mem_mesh_ConfirmationCloud_RandomA
+	fetch 8,mem_mesh_provisioning_random_B
+	store 8,mem_mesh_ConfirmationCloud_RandomB
+	
+	arg mem_mesh_calc_ConfirmationCloud_data,contr
+	arg mem_mesh_Confirmationkey,rega
+	arg mem_mesh_ConfirmationCloud,alarm
+	branch ali_mesh_encrypt_base_function_AES_CMAC_32Byte
+
+
+// calc confirmation Device
+//Confirmation Device=AES-CMAC(Random A || Random B || AuthValueDevice)
+//k=ConfirmationKey
+ali_mesh_encrypt_calc_random_data_calc_ConfirmationDevice:
+	arg mem_mesh_calc_ConfirmationDevice_data,contr
+	arg mem_mesh_Confirmationkey,rega
+	arg mem_mesh_ConfirmationDevice,alarm
+	branch ali_mesh_encrypt_base_function_AES_CMAC_32Byte
+
+
+//calc Device Key
+//DeviceKey = SHA256(ConfirmationCloud||"DeviceKey")[0:15]
+ali_mesh_encrypt_calc_random_data_calc_DeviceKey:
+//	call ice_break
+	arg mem_mesh_ConfirmationCloud,contr
+	arg 0x10,loopcnt
+	call ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii
+	arg mem_mesh_sha256_DeviceKey_ascii,contr
+	arg 9,loopcnt
+	call ali_mesh_encrypt_base_function_sha256_load_data_without_hex2ascii
+	call ali_mesh_encrypt_base_function_sha256_calc
+	arg memresult,contr
+	arg mem_mesh_Device_Key,contw
+	branch memcpy16
+
+
+ali_mesh_encrypt_load_randomBA_to_sha256:
+	call ali_mesh_encrypt_load_randomB_to_sha256
+ali_mesh_encrypt_load_randomA_to_sha256:
+	arg mem_mesh_provisioning_random_A,contr
+	branch ali_mesh_encrypt_base_function_sha256_load_data_64bit
+
+ali_mesh_encrypt_load_randomAB_to_sha256:
+	call ali_mesh_encrypt_load_randomA_to_sha256
+ali_mesh_encrypt_load_randomB_to_sha256:
+	arg mem_mesh_provisioning_random_B,contr
+	branch ali_mesh_encrypt_base_function_sha256_load_data_64bit
+
+
+ali_mesh_encrypt_load_three_tuple_to_sha256:
+	arg mem_mesh_three_tuple_ProductID,contr
+	arg 4,loopcnt
+	call ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii_add_comma
+	arg mem_mesh_three_tuple_MAC,contr
+	arg 6,loopcnt
+	call ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii_add_comma
+	arg mem_mesh_three_tuple_secret,contr
+	arg 0x10,loopcnt
+ifdef V1_2
+	call ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii_add_comma
+else
+	call ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii
+endif
+	call ali_mesh_encrypt_base_function_sha256_check_first_load_data
+	branch ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii_add_comma+2
+
+
+//calc provisioning data
+//Encrupted provisioning data = prov_data XOR SessionKey
+ali_mesh_encrypt_calc_provisioning_data:
+	call ali_mesh_encrypt_calc_provisioning_data_calc_SessionKey
+//	branch ali_mesh_encrypt_calc_provisioning_data_xor_prov_data
+ali_mesh_encrypt_calc_provisioning_data_xor_prov_data:
+	arg mem_mesh_Encrypt_Provisioning_Data,rega
+	arg memresult,regb
+	arg 0xb,loopcnt
+ali_mesh_encrypt_calc_provisioning_data_xor_prov_data_loop:
+	ifetch 2,rega
+	ifetcht 2,regb
+	ixor temp,pdata
+	istore 2,rega
+	increase 2,rega
+	increase 2,regb
+	loop ali_mesh_encrypt_calc_provisioning_data_xor_prov_data_loop
+	rtn
+
+
+//calc SessionKey
+//SessionKey = SHA256(ConfirmationCloud||"SessionKey")[0:15]
+//output:sessionKey in memresult
+ali_mesh_encrypt_calc_provisioning_data_calc_SessionKey:
+	arg mem_mesh_ConfirmationCloud,contr
+	arg 0x10,loopcnt
+	call ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii
+	arg mem_mesh_sha256_SessionKey_ascii,contr
+	arg 0xa,loopcnt
+	call ali_mesh_encrypt_base_function_sha256_load_data_without_hex2ascii
+	branch ali_mesh_encrypt_base_function_sha256_calc
+
+
+
+ali_mesh_encrypt_calc_network_key_by_k2:
+	arg mem_mesh_Network_Key,contr
+	arg mem_k2_N,contw
+	call memcpy16
+
+/************k2 function*************/
+//input:mem_k2_N N data
+ali_mesh_encrypt_base_function_k2:
+/*******************generate T*************************/
+	arg mem_k2_N,contr
+	arg mem_k2_SALT,rega
+	arg mem_k2_T,alarm
+	call ali_mesh_encrypt_base_function_AES_CMAC_16Byte
+/*******************generate T1************************/
+	arg mem_k2_T1,alarm
+	arg 0x01,regb
+	setarg 0
+	call ali_mesh_encrypt_base_function_k2_AES_CMAC_T
+	fetch 1,mem_k2_T1+15
+	and pdata,0x7f,pdata
+	store 1,mem_k2_NID
+/*******************generate T2************************/
+	arg mem_k2_T2,alarm
+	arg 0x02,regb
+	setarg 0x10
+	arg mem_k2_T1,rega
+	call ali_mesh_encrypt_base_function_k2_AES_CMAC_T
+/*******************generate T3************************/
+	arg mem_k2_T3,alarm
+	arg 0x03,regb
+	setarg 0x10
+	arg mem_k2_T2,rega
+	branch ali_mesh_encrypt_base_function_k2_AES_CMAC_T
+
+ali_mesh_encrypt_base_function_k4:
+/*******************generate T*************************/
+	arg mem_mesh_application_key,contr
+	arg mem_k4_SALT,rega
+	arg mem_k4_T,alarm
+	call ali_mesh_encrypt_base_function_AES_CMAC_16Byte
+	arg mem_k4_id6_01,contr
+	arg mem_k4_T,rega
+	arg mem_k4_k4N,alarm
+	setarg 4
+	call ali_mesh_encrypt_base_function_AES_CMAC
+	fetch 1,mem_k4_k4N+15
+	and pdata,0x3f,pdata
+	set1 TRANSPORT_HEAD_BIT_AKF,pdata
+	store 1,mem_mesh_transport_AID
+	rtn
+
+ali_mesh_encrypt_base_function_k3:
+/*******************generate T*************************/
+	arg mem_mesh_Network_Key,contr
+	arg mem_k3_SALT,rega
+	arg mem_k3_T,alarm
+	call ali_mesh_encrypt_base_function_AES_CMAC_16Byte
+	arg mem_k3_id64_01,contr
+	arg mem_k3_T,rega
+	arg mem_k3_k4N,alarm
+	setarg 5
+	call ali_mesh_encrypt_base_function_AES_CMAC
+
+//	call ali_mesh_proxy_init_adv
+	
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BLE_CONNECTED
+	jam 1,mem_le_adv_enable
+	rtn
+
+
+//********* network PDU header obfuscation *********//
+ali_mesh_encrypt_obfuscation_deceypt_send_message:
+	arg mem_mesh_send_upper_layer_CTL_and_TTL,rega
+	fetch 7,mem_mesh_send_upper_layer_DST	
+	branch ali_mesh_encrypt_obfuscation_deceypt
+ali_mesh_encrypt_obfuscation_deceypt_recevie_message:
+	arg mem_mesh_message_TTL,rega
+	fetch 7,mem_mesh_message_DST
+ali_mesh_encrypt_obfuscation_deceypt:
+	store 7,mem_mesh_Privacy_Plaintext_Privacy_Random
+	setarg 0
+	store 5,mem_mesh_Privacy_Plaintext_Zero_String
+	call ali_mesh_encrypt_generate_PECB
+	fetch 6,mem_mesh_PECB
+	ifetcht 6,rega
+	ixor temp,pdata
+	istore 6,rega
+	rtn
+
+ali_mesh_encrypt_generate_PECB:
+ali_mesh_encrypt_generate_privacy_random:
+	fetch 4,mem_mesh_IV_Index
+	store 4,mem_mesh_Privacy_Plaintext_IV_Index
+// generate PECB with AES-128/ function e
+ali_mesh_encrypt_base_function_generate_PECB:
+	arg mem_k2_PrivacyKey,contr
+	call load_key
+	arg mem_mesh_Privacy_Plaintext,contr
+	call load_data128
+	call do_aes_ocb
+	arg mem_mesh_PECB,contw
+	branch store_aes_result
+
+
+/************sha256 function*************/
+//input  : (big endian)
+// data addr : contr
+// point : call clear_sha256_chunk
+ali_mesh_encrypt_base_function_sha256_load_data_64bit:
+	arg 8,loopcnt
+//input  : (big endian)
+// data addr : contr
+// data len : loopcnt
+// point : call clear_sha256_chunk
+ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii:
+	call ali_mesh_encrypt_base_function_sha256_check_first_load_data
+	call ali_mesh_encrypt_base_function_hex2ascii
+	branch ali_mesh_encrypt_base_function_sha256_store_dataptr
+ali_mesh_encrypt_base_function_sha256_load_data_without_hex2ascii:
+	call ali_mesh_encrypt_base_function_sha256_check_first_load_data
+	call memcpy
+	branch ali_mesh_encrypt_base_function_sha256_store_dataptr
+ali_mesh_encrypt_base_function_sha256_load_data_with_hex2ascii_add_comma:
+	call ali_mesh_encrypt_base_function_sha256_check_first_load_data
+	call ali_mesh_encrypt_base_function_hex2ascii
+	setarg COMMA
+	istore 1,contw
+ali_mesh_encrypt_base_function_sha256_store_dataptr:
+	copy contw,pdata
+	store 2,mem_mesh_sha256_data_end_addr
+	rtn
+ali_mesh_encrypt_base_function_sha256_check_first_load_data:
+	copy contr,temp
+	copy loopcnt,rega
+	fetch 2,mem_mesh_sha256_data_end_addr
+	copy pdata,contw
+	fetch 1,mem_mesh_sha256_load_first_data_flag
+	call ali_mesh_encrypt_base_function_sha256_first_load_data,blank
+	copy temp,contr
+	copy rega,loopcnt
+	rtn
+ali_mesh_encrypt_base_function_sha256_first_load_data:
+	jam 1,mem_mesh_sha256_load_first_data_flag
+	call ali_mesh_encrypt_base_function_sha256_clear_data_chunk				
+	arg mem_mesh_sha256_chunk_start,contw
+	rtn
+
+ali_mesh_encrypt_base_function_sha256_clear_data_chunk:
+	arg 0x100,loopcnt
+	arg mem_mesh_sha256_chunk_start,contw
+	branch memset0
+
+ // output :
+ // sha256 result : memresult(big endian)
+ali_mesh_encrypt_base_function_sha256_calc:
+ 	call ali_mesh_encrypt_base_function_sha256_load_data_end
+ ifdef mesh_debug_log
+ 	arg MESH_ENCRYPT_SHA256_FUNCTION_INPUT,regb
+	arg mem_mesh_sha256_chunk_start,rega
+	fetchr loopcnt,8,mem_mesh_sha256_data_len_byte
+	call logging_tx_debug
+endif
+	call ali_mesh_encrypt_base_function_sha256_input_data_init_inverse
+
+	setarg mem_mesh_sha256_chunk_start
+	store 2,mem_mesh_sha256_chunk_ptr
+	call sha_init
+//	call ice_break
+ali_mesh_encrypt_base_function_sha256_calc_loop:
+	fetch 2,mem_mesh_sha256_chunk_ptr
+	copy pdata,contr
+	arg mem_dat,contw
+	call memcpy64
+	call sha
+	fetch 2,mem_mesh_sha256_chunk_ptr
+	pincrease 64
+	store 2,mem_mesh_sha256_chunk_ptr
+	fetch 1,mem_mesh_sha256_chunk_count
+	pincrease -1
+	store 1,mem_mesh_sha256_chunk_count
+	nbranch ali_mesh_encrypt_base_function_sha256_calc_loop,blank
+	call sha_result
+	arg memresult,rega
+	arg 0x20,loopcnt
+	call inverse_data
+ ifdef mesh_debug_log
+ 	arg MESH_ENCRYPT_SHA256_FUNCTION_RESULT,regb
+	arg memresult,rega
+	arg 0x20,loopcnt
+	call logging_tx_debug
+endif
+	rtn
+
+
+ali_mesh_encrypt_base_function_sha256_load_data_end:
+	jam 0,mem_mesh_sha256_load_first_data_flag
+	fetch 2,mem_mesh_sha256_data_end_addr
+	copy pdata,contw
+	arg 0x80,temp	//绗竴涓猙it琛1锛屽悗闈㈣ˉ0
+	istoret 1,contw
+	arg mem_mesh_sha256_chunk_start,temp
+	isub temp,pdata
+	store 8,mem_mesh_sha256_data_len_byte
+	//璁＄畻bit鏁
+	lshift3 pdata,temp
+	storet 8,mem_mesh_sha256_data_len_bit
+	rshift4 pdata,regc
+	rshift2 regc,regc
+	and pdata,0x3f,pdata
+	sub pdata,55,null
+//55-(len mod 63)<0,鍐呭瓨濉厖448浠ュ悗鐨勶紝闇瑕佸～鍏呭埌绗簩鍧
+	ncall ali_mesh_encrypt_base_function_sha256_add_chunk,positive
+	add regc,1,pdata
+	store 1,mem_mesh_sha256_chunk_count
+	mul32 pdata,64,rega		//璁＄畻鍧楃殑鏁伴噺鍦板潃
+	lshift4 pdata,regc			//璁＄畻4byte鍖呯殑鏁伴噺
+	increase -1,regc			//鏈濂戒竴涓寘闀垮害涓嶄氦鎹
+	setarg mem_mesh_sha256_chunk_start + DECREASED_FOUR
+	iadd rega,rega
+	fetch 4,mem_mesh_sha256_data_len_bit
+	istore 4,rega
+	rtn
+
+
+//澧炲姞鍧楁暟閲
+ali_mesh_encrypt_base_function_sha256_add_chunk:
+	increase 1,regc
+	rtn
+	
+ali_mesh_encrypt_base_function_sha256_input_data_init_inverse:
+	arg mem_mesh_sha256_chunk_start,rega
+
+//姣4涓瓧鑺傦紝闇瑕侀珮浣庝綅浜ゆ崲涓涓
+//input :
+// data addr : rega
+ali_mesh_encrypt_base_function_sha256_data_inverse_4Byte:
+	arg 4,loopcnt
+	call inverse_data
+	increase 2,rega	
+	add regc,-1,regc
+	nbranch ali_mesh_encrypt_base_function_sha256_data_inverse_4Byte,zero
+	rtn
+
+
+// input : 
+// data ptr : contr
+// data save ptr : contw 
+// data len : loopcnt
+ali_mesh_encrypt_base_function_hex2ascii:
+	ifetch 1,contr
+	rshift4 pdata,temp
+	call ali_mesh_encrypt_base_function_dialog2uchar
+	istoret 1,contw
+	and pdata,0x0f,temp
+	call ali_mesh_encrypt_base_function_dialog2uchar
+	istoret 1,contw
+	loop ali_mesh_encrypt_base_function_hex2ascii
+	rtn
+ali_mesh_encrypt_base_function_dialog2uchar:
+	sub temp,9,null
+	branch ali_mesh_encrypt_base_function_dialog2uchar_num,positive
+	add temp,87,temp
+	rtn
+ali_mesh_encrypt_base_function_dialog2uchar_num:	
+	add temp,48,temp
+	rtn
+
+
+ali_mesh_encrypt_base_function_AES_CMAC_32Byte:
+	setarg 0x20 
+	branch ali_mesh_encrypt_base_function_AES_CMAC
+
+ali_mesh_encrypt_base_function_AES_CMAC_16Byte:
+	setarg 0x10
+	branch ali_mesh_encrypt_base_function_AES_CMAC
+
+
+//pdata:data length
+//regb:last data
+ali_mesh_encrypt_base_function_k2_AES_CMAC_T:
+	fetcht 1,mem_k2_P_len
+	increase 1,temp
+	iadd temp,temp
+	storet 1,mem_AES_CMAC_data_length
+	copy rega,contr
+	copy pdata,loopcnt
+	call memcpy_fast
+	fetcht 1,mem_k2_P_len
+	copy temp,loopcnt
+	call memcpy
+	copy regb,pdata
+	istore 1,contw
+	arg mem_k2_T,rega
+	branch ali_mesh_encrypt_base_function_AES_CMAC + 3
+
+
+//input:
+//pdata:data length
+//contr:data prt
+//rega:key ptr
+//output:
+//alarm:output prt
+ali_mesh_encrypt_base_function_AES_CMAC:
+	store 1,mem_AES_CMAC_data_length
+	copy pdata,loopcnt
+	call memcpy_fast
+	copy rega,contr
+	arg mem_AES_CMAC_k,contw
+	call memcpy16
+ifdef mesh_debug_log
+ 	arg MESH_ENCRYPT_AES_CMAC_FUNCTION_INPUT_M,regb
+	arg mem_dat,rega
+	fetchr loopcnt,1,mem_AES_CMAC_data_length
+	call logging_tx_debug
+ 	arg MESH_ENCRYPT_AES_CMAC_FUNCTION_INPUT_K,regb
+	arg mem_AES_CMAC_k,rega
+	arg 16,loopcnt
+	call logging_tx_debug
+endif
+	call function_AES_CMAC
+	copy alarm,contw
+	call store_aes_result
+ifdef mesh_debug_log
+ 	arg MESH_ENCRYPT_AES_CMAC_FUNCTION_RESULT,regb
+	copy alarm,rega
+	arg 16,loopcnt
+	call logging_tx_debug
+endif
+	rtn
+
+
+//////**AES-CCM**////////
+ali_B0_block_generate:
+ 	fetcht 1,mem_ccm_type
+ 	branch  ali_block_generate
+ali_A_block_generate:
+	force 0x01,temp
+ali_block_generate:
+	force regidx_data,regext_index
+	fetch 2,mem_nonce_ptr
+	copy pdata,contr
+	ifetch 3,contr
+	lshift8 pdata,pdata
+	ior temp, regext
+	increase 1,regext_index
+	ifetch 4,contr
+	copy pdata,regext
+	increase 1,regext_index
+	ifetch 4,contr
+	copy pdata,regext
+	increase 1,regext_index
+	byteswap rega,regext
+	lshift16 regext,regext
+	ifetch 2,contr
+	ior regext,regext
+	rtn
+ali_generate_mic:
+	fetch 1,mem_ccm_data_len
+	copy pdata,rega
+	call ali_B0_block_generate
+	call do_aes_ocb
+	force regidx_result,regext_index
+	deposit regext
+	copy rega,loopcnt
+	fetcht 2,mem_ccm_data_ptr
+	copy temp,contr
+	call padding_data
+	branch generate_mic_loop
+/*
+function name:ali_CCM_encrypt
+input:pdata is the encrypt data length
+temp is encrypt data ptr
+*/
+ali_CCM_encrypt_64Bit:
+	jam MIC_SIZE_64BIT,mem_ccm_type
+	branch ali_CCM_encrypt_function
+ali_CCM_encrypt:
+	jam MIC_SIZE_32BIT,mem_ccm_type
+	branch ali_CCM_encrypt_function
+ali_CCM_encrypt_function:
+	store 1,mem_ccm_data_len
+	storet 2,mem_ccm_data_ptr
+	bpatchx patch34_5,mem_patch34
+	call ali_generate_mic
+	force regidx_xor,regext_index
+	iforce regext
+	force regidx_result+1,regext_index
+	copy regext,pdata
+	force regidx_xor+1,regext_index
+	iforce regext
+	force 0,rega
+	copy temp,regc
+	call ali_A_block_generate
+	call do_aes_ctr
+	call ali_fetcht_ccm_mic
+	storet 8,mem_ccm_mic
+	fetch 1,mem_ccm_data_len
+	copy pdata,regb
+	call ali_aes_crypt_data
+	fetcht 1,mem_ccm_data_len
+	fetch 2,mem_ccm_data_ptr
+	iadd temp,rega
+	fetcht 8,mem_ccm_mic
+	istoret 4,rega
+	fetch 1,mem_ccm_type
+	sub pdata,MIC_SIZE_32BIT,pdata
+	rtn blank
+	istoret 8,rega
+	rtn
+/*
+function name:ali_CCM_decrypt_function
+input:pdata is the encrypt data length
+temp is encrypt data ptr
+*/
+ali_CCM_decrypt_64Bit:
+	jam MIC_SIZE_64BIT,mem_ccm_type
+	branch ali_CCM_decrypt_function
+ali_CCM_decrypt:
+	jam MIC_SIZE_32BIT,mem_ccm_type
+	branch ali_CCM_decrypt_function
+
+/*
+1 瑙ｅ瘑锛
+2 绠桵IC
+3 鎶婄畻鍑烘潵鐨凪IC鍜屾敹鍒扮殑MIC瀵规瘮
+4 MIC鍚堟硶锛宺tn zero = 1;
+*/	
+ali_CCM_decrypt_function:
+	store 1,mem_ccm_data_len
+	storet 2,mem_ccm_data_ptr
+	copy temp,regc
+	copy pdata,regb
+	iadd regc,contr
+	bpatchx patch34_6,mem_patch34
+	ifetch 8,contr
+	force regidx_xor,regext_index
+	iforce regext
+	force regidx_xor+1,regext_index
+	rshift32 pdata,pdata
+	iforce regext
+	force 0,rega
+	call ali_A_block_generate
+	call do_aes_ctr
+	call ali_fetcht_ccm_mic
+	storet 8,mem_ccm_mic
+	call ali_aes_crypt_data
+	call ali_generate_mic
+	call ali_fetcht_ccm_mic
+	fetch 1,mem_ccm_type
+	beq MIC_SIZE_64BIT,ali_CCM_decrypt_function_check_mic64
+	storet 4,mem_ccm_mic+4
+	fetch 4,mem_ccm_mic
+	fetcht 4,mem_ccm_mic+4
+	isub temp,pdata
+	rtn
+
+ali_CCM_decrypt_function_check_mic64:
+	fetch 8,mem_ccm_mic
+	isub temp,pdata
+	rtn
+
+ali_fetcht_ccm_mic:
+	force regidx_result,regext_index
+	deposit regext
+	force regidx_result+1,regext_index
+	copy regext,temp
+	lshift16 temp,temp
+	lshift16 temp,temp
+	ior temp,temp
+   	rtn
+ali_aes_crypt_data: 
+	increase 1,rega
+	call ali_A_block_generate
+	copy regc,contr
+	call aes_load_xor
+	call do_aes_ctr
+	call store_enc_data
+	increase 16,regc
+	increase -16,regb
+	branch ali_aes_crypt_data,positive
+	rtn
+//////**AES-CCM**////////
+
+
+
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_fast_pairing.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_fast_pairing.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_fast_pairing.prog	(working copy)
@@ -0,0 +1,275 @@
+
+
+/*
+	闃块噷鏋侀熼厤缃戝崗璁厤缃戦樁娈靛寘鐨勮В鏋愪笌缁勫寘
+*/
+
+
+/*
+	function name mesh_send_Unprovisioned_Beacons
+	input:three tuple data 
+	mem_mesh_three_tuple_ProductID
+	mem_mesh_three_tuple_MAC
+	mem_mesh_three_tuple_secret
+*/
+mesh_send_Unprovisioned_Beacons:
+	bpatchx patch34_7,mem_patch34
+	jam UNPROVISIONED_BEACON_STATUS,mem_mesh_provisioned_flag
+	jam 0x00,mem_mesh_Provisioning_State_Flag
+	jam 1,mem_mesh_advertising_unprovisioned_device_beacon_switch
+	setarg ADV_UNPROVISIONED_DEVICE_BEACON_TIMEOUT
+	store 2, mem_mesh_advertising_unprovisioned_device_beacon_timer
+	rtn
+
+//鍒濆鍖朥UID 涓夊厓缁勫弬鏁板拰feature Flag
+ali_mesh_config_device_uuid_by_three_tuple:
+	setarg COMPANY_IDENTIFIERS_ALIBABA
+	store 2,mem_mesh_Device_UUID
+	fetch 1,mem_mesh_Device_PID
+	istore 1,contw
+	fetch 4,mem_mesh_three_tuple_ProductID
+	call inverse_data_4Byte
+	istore 4,contw
+	fetch 6,mem_le_lap
+	istore 6,contw
+	fetch 3,mem_mesh_UUID_FeatureFlag
+	istore 3,contw
+	rtn
+
+ali_mesh_send_Unprovisioned_Beacons_tmall:
+	call ali_mesh_init_adv_data_tmall_Unprovisioned_beacons_package
+	branch mesh_le_send_adv
+
+ali_mesh_init_adv_data_tmall_Unprovisioned_beacons_package:
+//mem Beacon Tmall Length
+	jam 0x15,mem_mesh_adv_data_len
+	setarg 0x14
+	store 1,mem_mesh_adv_data
+	setarg GAP_ADTYPE_MESH_BEACON
+	istore 1,contw
+	setarg UNPROVISIONED_DEVICE_BEACON
+	istore 1,contw
+ali_mesh_advertising_send_Unprovisioned_Beacons_store_device_uuid:
+	arg mem_mesh_Device_UUID,contr
+	call memcpy16
+	fetch 2,mem_mesh_OOB_information
+	istore 2,contw
+	rtn
+
+/*
+
+input:
+	temp is len
+	contr is read ptr
+*/
+
+ali_mesh_receive_adtype_manufacturer_specific:
+	call ali_mesh_receive_provisioning_package_check_header
+	nrtn user
+	ifetch 1,contr	//provisioning type
+	beq PROVISIONING_RANDOM,ali_mesh_advertising_receive_Privisioning_Random
+	beq PROVISIONING_DATA,ali_mesh_decrypt_tmall_Privisioning_Data_package
+	bpatchx patch35_0,mem_patch35
+	rtn
+
+
+//receive provisioning random
+ali_mesh_advertising_receive_Privisioning_Random:
+	call ali_mesh_advertising_receive_Privisioning_Random_check_states
+	nrtn user
+ali_mesh_advertising_calc_encrypt_random_data:
+	call ali_mesh_encrypt_calc_random_data
+//	call mesh_reset_adv_timer
+	call ali_mesh_advertising_send_Provisioning_Confirmation
+	call ali_mesh_send_pairing_data
+ifdef mesh_debug_log
+	branch loggint_tx_info_send_confirmation_packet
+endif
+	rtn
+//send provisioning confirmation
+ali_mesh_advertising_send_Provisioning_Confirmation:
+	arg PROVISIONING_PACKET_CONFIRMATION_MAC+PROVISIONING_PACKET_CONFIRMATION_DEVICE,temp
+	call ali_mesh_advertising_send_packet_common
+	setarg PROVISIONING_CONFIRMATION
+	istore 1,contw
+	fetch 2,mem_mesh_three_tuple_MAC+4
+	istore 2,contw
+	arg mem_mesh_ConfirmationDevice,contr
+	branch memcpy16
+
+//output:disable user mean is cannot true package
+ali_mesh_advertising_receive_Privisioning_Random_check_states:
+	call disable_user
+	ifetcht 2,contr
+	arg mem_mesh_provisioning_random_A,contw
+	call memcpy16
+	fetch 2,mem_mesh_three_tuple_MAC+4
+	isub temp,null
+	nrtn zero	
+
+	
+	fetch 1,mem_mesh_Provisioning_State_Flag
+	rtnbit1 RECEIVE_PROVISIONING_RANDOM
+	set1 RECEIVE_PROVISIONING_RANDOM,pdata			// FLAG bit1:Provisioning Confirmation
+	store 1,mem_mesh_Provisioning_State_Flag
+
+	jam PAIRING_STATUS,mem_mesh_provisioned_flag		//
+ifdef mesh_debug_log
+	call loggint_tx_info_receive_random_packet
+endif
+	branch enable_user
+
+ali_mesh_decrypt_tmall_Privisioning_Data_package:
+	call ali_mesh_advertising_receive_Privisioning_Data
+	fetcht 2,mem_mesh_provisioning_data_Mac_addr
+	fetch 2,mem_mesh_three_tuple_MAC+4
+	isub temp,null
+	nrtn zero
+	call ali_mesh_encrypt_base_function_k3
+	call ali_mesh_send_pairing_data
+	fetch 1,mem_mesh_fast_pair_packet_type
+	rtnne MESH_MESSAGE_PROXY
+	jam WAIT_RECEIVE_APPKEY,mem_mesh_provisioned_flag
+	rtn
+
+//receive provisioning data
+ali_mesh_advertising_receive_Privisioning_Data:
+	bpatchx patch35_1,mem_patch35
+	copy contr,rega
+	fetch 1,mem_mesh_provisioned_flag
+	rtneq PAIRED_STATUS	
+	fetch 1,mem_mesh_Provisioning_State_Flag
+	rtnbit0 RECEIVE_PROVISIONING_RANDOM
+	rtnbit1 RECEIVE_PROVISIONING_DATA
+	copy rega,contr
+	arg 0x16,loopcnt
+	arg mem_mesh_Encrypt_Provisioning_Data,contw
+	call memcpy
+
+	call ali_mesh_encrypt_calc_provisioning_data
+	
+	fetcht 2,mem_mesh_provisioning_data_Mac_addr
+	fetch 2,mem_mesh_three_tuple_MAC+4
+	isub temp,null
+	nrtn zero
+ali_mesh_resolve_Privisioning_Data_package:
+ifdef mesh_debug_log
+	call loggint_tx_info_receive_data_packet
+endif
+	fetch 1,mem_mesh_Provisioning_State_Flag
+	set1 RECEIVE_PROVISIONING_DATA,pdata
+	store 1,mem_mesh_Provisioning_State_Flag
+
+	call ali_mesh_encrypt_calc_network_key_by_k2
+
+	fetch 1,mem_mesh_last_IV_Index_byte
+	store 1,mem_mesh_IV_Index+3
+	call ali_mesh_advertising_send_Provisioning_Complete
+ifdef mesh_debug_log
+	branch loggint_tx_info_send_complete_packet
+endif
+	rtn
+
+
+//send provisioning complete
+ali_mesh_advertising_send_Provisioning_Complete:
+	arg PROVISIONING_PACKET_COMPLETE_MAC,temp
+	call ali_mesh_advertising_send_packet_common
+	setarg PROVISIONING_COMPLETE
+	istore 1, contw
+	fetch 6,mem_mesh_three_tuple_MAC
+	istore 6,contw
+	rtn
+
+
+ali_mesh_advertising_send_packet_common:
+	bpatchx patch35_2,mem_patch35
+	setarg FAST_PAIRING_TIMEOUT_PROVISIONING		//about 11s
+	store 2,mem_mesh_fast_pairing_timer
+	fetch 1,mem_mesh_fast_pair_packet_type
+	sub pdata,MESH_MESSAGE_TMALL,null
+	call ali_mesh_control_ble_advertising_on_advertising,zero
+	ncall ali_mesh_control_ble_advertising_off_advertising,zero
+	add temp,PROVISIONING_PACKET_LENGTH_AD_TYPE_COMPANY_ID_VID_PROVISIONING_TYPE+PROVISIONING_PACKET_LENGTH_FLAGS,pdata
+	store 1,mem_mesh_adv_data_len
+	call ali_mesh_advertising_add_adtype_flags
+	add temp,PROVISIONING_PACKET_AD_TYPE_COMPANY_ID_VID_PROVISIONING_TYPE,pdata
+	istore 1,contw
+	setarg GAP_ADTYPE_MANUFACTURER_SPECIFIC
+	istore 1,contw
+	setarg COMPANY_IDENTIFIERS_ALIBABA
+	byteswap pdata,pdata
+	istore 2,contw
+	fetch 1,mem_mesh_receive_VID
+	istore 1,contw
+	rtn
+
+
+
+ifdef mesh_debug_log
+logging_tx_debug_receive_provisioning_packet:
+	add contr,-3,rega
+	arg MESH_RECEIVE_PROVISIONING_PACKET,regb
+	branch logging_tx_debug
+
+
+loggint_tx_info_receive_random_packet:
+	arg 1,loopcnt
+	arg MESH_RECEIVE_PROVISIONING_RANDOM_PACKET,regb
+	arg mem_mesh_Provisioning_State_Flag,rega
+	branch logging_tx_info
+
+loggint_tx_info_send_confirmation_packet:
+	fetchr loopcnt,1,mem_mesh_adv_data_len
+	arg MESH_SEND_PROVISIONING_CONFIRMATION_PACKET,regb
+	arg mem_mesh_adv_data,rega
+	branch logging_tx_info
+
+loggint_tx_info_receive_data_packet:
+	arg 1,loopcnt
+	arg MESH_RECEIVE_PROVISIONING_DATA_PACKET,regb
+	arg mem_mesh_Provisioning_State_Flag,rega
+	branch logging_tx_info
+
+
+loggint_tx_info_send_complete_packet:
+	fetchr loopcnt,1,mem_mesh_adv_data_len
+	arg MESH_SEND_PROVISIONING_COMPLETE_PACKET,regb
+	arg mem_mesh_adv_data,rega
+	branch logging_tx_info
+endif
+
+
+
+
+
+
+
+ali_mesh_receive_provisioning_package_check_header:
+	call disable_user
+	ifetcht 2,contr
+	setarg COMPANY_IDENTIFIERS_ALIBABA
+	byteswap pdata,pdata
+	isub temp,null
+	nrtn zero	
+	ifetch 1,contr
+	store 1,mem_mesh_receive_VID
+	branch enable_user
+ifdef mesh_debug_log
+	call logging_tx_debug_receive_provisioning_packet
+endif
+//	rtn
+
+ali_mesh_fast_pairing_timer:
+	arg mem_mesh_fast_pairing_timer,regc
+	arg ali_mesh_fast_pairing_timeout, regb
+	branch timer_single_step_2B
+
+ali_mesh_fast_pairing_timeout:
+ali_mesh_fast_pairing_failed:
+	branch ali_mesh_advertising_init_send_unprovisioned_device_beacon
+//	branch ali_mesh_app_prov_fail
+
+
+
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_health_message.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_health_message.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_health_message.prog	(working copy)
@@ -0,0 +1,219 @@
+
+/*
+	mesh閲岄潰configuration鍜宧ealth鎸囦护鐨勮В鏋
+*/
+
+ali_mesh_access_layer_config_or_health_message_opcode:
+	fetch 1,mem_mesh_configuration_health_message_opcode
+	beq MESH_MESSAGE_OPCODE_CONFIG_COMPOSITION_DATA_GET_NO_HEAD,ali_mesh_access_layer_config_composition_data
+	beq MESH_MESSAGE_OPCODE_CONFIG_NODE_RESET_NO_HEAD,ali_mesh_access_layer_config_or_health_message_opcode_node_reset
+	beq MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_ADD_NO_HEAD,ali_mesh_message_config_modle_subscription_add
+	beq MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_DELETE_NO_HEAD,ali_mesh_message_config_modle_subscription_delete
+//ifdef TM_OVERWRTE
+	beq MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_ADD_OW_NO_HEAD, ali_mesh_message_config_modle_subscription_add_overwrite
+//endif
+	rtn
+
+ali_mesh_message_config_modle_subscription_add_overwrite:
+	call ali_mesh_message_config_modle_subscription_check_element
+	call ali_mesh_message_config_modle_subscription_add_value_address_ow
+	call ali_mesh_message_config_modle_subscription_save	
+	setarg MESH_CONFIGURATION_AND_HEALTH_MESSAGE_OPCODE_HEADER
+	store 1,mem_mesh_access_layer_payload
+	setarg MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_ADD_OW_STATUS
+	istore 1,contw
+	
+	setarg MESH_SUCCESS
+	istore 1,contw
+	fetch 2,mem_mesh_subscription_element_address_ow
+	istore 2,contw
+
+	fetch 1, mem_mesh_receive_model_message_payload_len
+	arg 4, temp
+	isub temp, loopcnt
+	arg mem_mesh_subscription_list_num_ow, contr
+	call memcpy
+	fetch 1, mem_mesh_receive_model_message_payload_len
+	pincrease 1
+	store 1,mem_mesh_access_layer_payload_len
+
+	
+	arg 0, queue
+	branch ali_mesh_ali_vendor_message_send_message
+
+ali_mesh_message_config_modle_subscription_add_value_address_ow:
+	fetch 1, mem_mesh_subscription_list_num_ow
+	rtn blank
+	sub pdata, SUBSCRIPTION_MAX_COUNT, null
+	ncall ali_mesh_message_config_modle_subscription_set_addr_max, positive
+	iforce loopcnt
+	arg mem_mesh_subscription_value_address_start_ow, contr
+	add rega, 2, contw   //skip mem_mesh_init_first_element_group_address
+	branch  ali_mesh_byte_swap    
+
+ali_mesh_byte_swap:
+	ifetch 2, contr
+	byteswap pdata, pdata
+	istore 2, contw
+	loop ali_mesh_byte_swap
+	rtn
+
+ali_mesh_message_config_modle_subscription_set_addr_max:
+//	jam SUBSCRIPTION_MAX_COUNT, mem_mesh_subscription_list_num_ow
+	setarg SUBSCRIPTION_MAX_COUNT
+	rtn
+
+ali_mesh_access_layer_config_composition_data:
+	jam RECEIVE_CONFIG_COMPOSITION_DATA_GET, mem_mesh_provisioned_flag
+	setarg MESH_MESSAGE_OPCODE_CONFIG_COMPOSITION_DATA_STATUS
+	store 1,mem_mesh_access_layer_payload
+	setarg 0x00
+	istore 1,contw
+	setarg COMPANY_IDENTIFIERS_ALIBABA
+	istore 2,contw		//CID
+	setarg 0x0000
+	istore 2,contw		//PID
+	setarg 0x0001
+	istore 2,contw		//VID
+	setarg 0x0005
+	istore 2,contw		//Replay Protect list
+	setarg 0x0003
+	istore 2,contw		//feature Relay and Proxy
+	setarg 0x0000
+	istore 2,contw		//Loc
+	setarg 0x02
+	istore 1,contw		//Number of sig models
+	setarg 0x02	
+	istore 1,contw		//Number of vendor models
+	setarg 0x0000
+	istore 2,contw		
+	setarg 0x1000
+	istore 2,contw		//Generic OnOff Server
+	setarg 0x000001a8
+	istore 4,contw
+	setarg 0x000101a8
+	istore 4,contw		//
+	jam 28,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message
+
+
+ali_mesh_access_layer_config_or_health_message_opcode_node_reset:
+	jam HEALTH_NODE_RESET_TIMEOUT,mem_mesh_health_node_reset_timer
+//	call ali_mesh_access_layer_send_config_node_reset_status
+//	fetch 2,mem_mesh_cb_receive_node_reset
+//	branch callback_func
+ali_mesh_access_layer_send_config_node_reset_status:
+	setarg MESH_CONFIGURATION_AND_HEALTH_MESSAGE_OPCODE_HEADER
+	store 1,mem_mesh_access_layer_payload
+	setarg MESH_MESSAGE_OPCODE_CONFIG_NODE_RESET_STATUS_NO_HEAD
+	istore 1,contw
+	jam 2,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message
+
+ali_mesh_access_layer_health_node_reset_timer:
+	arg mem_mesh_health_node_reset_timer,regc
+	arg ali_mesh_access_layer_health_node_reset_timeout, regb
+	branch timer_single_step
+
+
+ali_mesh_access_layer_health_node_reset_timeout:
+	call mesh_clear_provisioning_data_only
+//	branch ali_mesh_app_delete_paired
+ali_mesh_app_delete_paired:
+	branch soft_reset_chip
+
+
+ali_mesh_message_config_modle_subscription_add:
+	call ali_mesh_message_config_modle_subscription_status
+	fetch 2,mem_mesh_core_feature
+	rtnbit1 MESH_FEATURE_DISABLE_SUBSCRIPTION
+	call ali_mesh_message_config_modle_subscription_check_element
+	call ali_mesh_message_config_modle_subscription_add_value_address
+ali_mesh_message_config_modle_subscription_save:
+	fetch 2,mem_mesh_cb_subscriptuion_list_changed
+	branch callback_func
+
+	
+ali_mesh_message_config_modle_subscription_delete:
+	call ali_mesh_message_config_modle_subscription_status
+	fetch 2,mem_mesh_core_feature
+	rtnbit1 MESH_FEATURE_DISABLE_SUBSCRIPTION
+	call ali_mesh_message_config_modle_subscription_check_element
+	fetcht 2,mem_mesh_subscription_value_address
+	rshift8 temp,pdata
+	rshift4 pdata,pdata
+	beq 0x0c,ali_mesh_message_config_modle_subscription_delete_group_addr
+	byteswap temp, temp
+ali_mesh_message_config_modle_subscription_delete_next:
+	call ali_mesh_message_config_modle_subscription_check_value_address
+	nrtn user
+	setarg 0
+	istore 2,rega
+	fetch 2,mem_mesh_cb_subscriptuion_list_changed
+	branch callback_func
+
+ali_mesh_message_config_modle_subscription_delete_group_addr:
+	setarg -1
+	istore SUBSCRIPTION_MAX_COUNT,rega
+	istore SUBSCRIPTION_MAX_COUNT,contw
+	fetch 2,mem_mesh_cb_subscriptuion_list_changed
+	branch callback_func
+
+ali_mesh_message_config_modle_subscription_check_value_address:
+	arg SUBSCRIPTION_MAX_COUNT,loopcnt
+ali_mesh_message_config_modle_subscription_check_value_address_loop:
+	ifetch 2,rega
+	arg 0xffff,regb
+	isub regb,null
+	branch enable_user,zero
+	isub temp,null
+	branch enable_user,zero
+ali_mesh_message_config_modle_subscription_check_value_address_loop_empty:
+	increase 2,rega
+	loop ali_mesh_message_config_modle_subscription_check_value_address_loop
+	branch disable_user
+
+
+ali_mesh_message_config_modle_subscription_status:
+	setarg MESH_CONFIGURATION_AND_HEALTH_MESSAGE_OPCODE_HEADER
+	store 1,mem_mesh_access_layer_payload
+	setarg MESH_MESSAGE_OPCODE_CONFIG_MODEL_SUBSCRIPTION_STATUS_NO_HEAD
+	istore 1,contw
+	setarg MESH_SUCCESS
+	istore 1,contw
+	fetch 6,mem_mesh_subscription_element_address
+	istore 6,contw
+	jam 9,mem_mesh_access_layer_payload_len
+	branch ali_mesh_upper_transport_layer_send_access_message_without_cleat_tx_buffer
+
+ali_mesh_message_config_modle_subscription_check_element:
+	call mesh_get_element_info_config
+	add rega,ELEMENT_DEVICE_SUBSCRIPTION_LABEL,rega
+	fetch 2,mem_mesh_subscription_element_address
+	fetcht 2,mem_mesh_Unicast_Address
+	byteswap temp,temp
+	isub temp,pdata
+	imul32 regb,pdata
+	iadd rega,rega
+	rtn
+
+ali_mesh_message_config_modle_subscription_add_value_address:
+	fetcht 2,mem_mesh_subscription_value_address
+	arg SUBSCRIPTION_MAX_COUNT,loopcnt
+ali_mesh_message_config_modle_subscription_add_value_address_loop:
+	ifetch 2,rega
+	branch ali_mesh_message_config_modle_subscription_add_value_address_in,blank
+	arg 0xffff,regb
+	isub regb,null
+	branch ali_mesh_message_config_modle_subscription_add_value_address_in,zero
+	increase 2,rega
+	loop ali_mesh_message_config_modle_subscription_add_value_address_loop
+	rtn
+
+ali_mesh_message_config_modle_subscription_add_value_address_in:
+	byteswap temp,temp	//access layer鐨勬暟鎹负灏忕妯″紡锛屽垏鎹负澶х瀛樺偍锛屾柟渚縩etwork layer浣跨敤
+	istoret 2,rega
+	rtn
+
+
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_init_function.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_init_function.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_init_function.prog	(working copy)
@@ -0,0 +1,177 @@
+
+/*
+	mesh init 鍑芥暟鎿嶄綔
+*/
+ali_mesh_init:
+
+	call enable_authrom
+	call init_memp
+	setarg mesh_check_ble_rx_packet
+	store 2,mem_mesh_cb_receive_advertising
+
+	setarg mesh_idle_process
+	store 2,mem_cb_idle_process
+
+	setarg ali_mesh_network_layer_relay_access_message
+	store 2,mem_mesh_cb_network_relay
+
+	setarg ali_mesh_access_layer_recv_cfg_appkey_add_cb
+	store 2,mem_mesh_cb_receive_config_appkey_add
+
+	setarg mesh_store_new_subscriptuion_list_data
+	store 2,mem_mesh_cb_subscriptuion_list_changed
+
+	setarg mesh_store_new_seq_data
+	store 2,mem_mesh_cb_seq_changed
+
+	setarg mesh_cb_event_timer
+	store 2,mem_cb_event_timer
+
+	setarg ali_mesh_access_layer_check_access_message_opcode
+	store 2,mem_mesh_cb_receive_access_message
+
+	setarg mesh_le_receive_data
+	store 2,mem_cb_att_write
+
+	setarg ali_mesh_proxy_process_bb_event
+	store 2,mem_cb_bb_event_process
+
+	setarg mesh_clear_pairing_key
+	store 2,mem_mesh_clear_provisioning_data
+
+	setarg mesh_vendor_timming_chage_cb
+	store 2,mem_mesh_cb_vendor_timing_changed
+	call ali_mesh_vendor_timer_message_read
+
+	jam 36,mem_mesh_adv_scan_channel
+	call ali_mesh_ali_vendor_message_indication_info_reset_tid
+	
+
+	bpatchx patch35_3,mem_patch35
+
+	setarg 0x0428
+	store 2,mem_mesh_upper_tran_layer_queue_each_size
+	call ali_mesh_upper_transport_layer_queue_init
+
+	setarg 0x0422
+	store 2,mem_mesh_queue_each_size
+	call ali_mesh_advertising_bearer_layer_queue_init
+
+	setarg 0x0a22
+	store 2,mem_mesh_network_relay_gatt_queue_each_size
+	call ali_mesh_network_layer_gatt_queue_init
+	call ali_mesh_network_layer_queue_init
+
+ifdef mesh_debug_log
+	call mesh_uart_init
+endif
+//	call mesh_iic_init
+
+	call ali_mesh_network_layer_queue_init
+	
+	call ali_mesh_chip_peripherals_load_data
+	call mesh_inverse_three_tuple_MAC
+//	jam 0xff,mem_mesh_Network_Key
+ifdef mesh_debug_log
+	arg 1,loopcnt
+	arg mem_mesh_Network_Key,rega
+	arg MESH_CODE_INIT,regb
+	call logging_tx_info
+endif
+	fetch 1,mem_mesh_Network_Key
+	beq 0xff,mesh_send_Unprovisioned_Beacons
+	call ali_mesh_upper_transport_layer_clear_tx_buffer
+	call ali_mesh_encrypt_base_function_k3
+	call ali_mesh_encrypt_base_function_k4
+	call ali_mesh_encrypt_calc_network_key_by_k2
+
+	random pdata
+	and pdata,0x1f,pdata
+	add pdata,50,pdata
+	store 2,mem_mesh_report_full_attribute_timer
+	add pdata,5,pdata
+	store 1,mem_mesh_report_power_on_timer
+	rtn
+
+
+
+mesh_inverse_three_tuple_MAC:
+	fetch 6,mem_mesh_three_tuple_MAC
+	call inverse_data_6Byte
+	store 6,mem_le_lap
+	rtn
+
+mesh_get_element_info_config:
+	fetchr loopcnt,1,mem_mesh_element_number
+	fetchr rega,2,mem_mesh_element_device_ptr
+	fetchr regb,2,mem_mesh_element_device_length
+	rtn
+
+
+mesh_idle_process:
+	bpatchx patch35_4,mem_patch35
+	call ali_mesh_time_function
+	call ali_mesh_control_ble_adv_process
+	call ali_mesh_upper_transport_layer_control_packet
+	call ali_mesh_advertising_bearer_layer_load_packet_from_advertising_queue
+	call ali_mesh_network_layer_control_relay_packet
+	call ali_mesh_network_layer_check_gatt_relay_packet
+	branch mesh_ble_rx_packet
+
+
+mesh_cb_event_timer:
+	call ali_mesh_control_ble_adv_timer_process
+	call ali_mesh_access_layer_health_node_reset_timer
+	call ali_mesh_fast_pairing_timer
+
+
+	call ali_mesh_report_full_attribute_timer
+	call ali_mesh_report_power_on_timer
+	branch ali_mesh_upper_transport_layer_receive_new_msg_timer
+	
+
+mesh_clear_provisioning_data_only:
+	call mesh_clear_timer_data
+	fetch 2,mem_mesh_clear_provisioning_data
+	branch callback_func
+
+
+
+mesh_clear_timer_data:
+	fetch 1,mem_mesh_chip_select
+	rtnne 2
+	setarg 0x1d000
+	store 3,mem_spi_write_addr
+	branch spid_flash_erase_sector+2
+	
+
+
+ali_mesh_upper_transport_layer_queue_init:
+	call ali_mesh_upper_transport_layer_init_queue_param
+	branch queue_init
+
+ali_mesh_advertising_bearer_layer_queue_init:
+	call ali_mesh_advertising_bearer_layer_init_queue_param
+	branch queue_init
+
+ali_mesh_network_layer_gatt_queue_init:
+	call ali_mesh_network_layer_init_gatt_queue_param
+	branch queue_init
+
+ali_mesh_network_layer_init_gatt_queue_param:
+	setarg mem_mesh_network_relay_gatt_queue_each_size
+	store 2,mem_queue_ptr
+	rtn
+
+ali_mesh_advertising_init_send_unprovisioned_device_beacon:
+	jam 1,mem_le_adv_enable
+	setarg ADV_UNPROVISIONED_DEVICE_BEACON_TIMEOUT
+	store 2,mem_mesh_advertising_unprovisioned_device_beacon_timer
+	fetch 1,mem_mesh_UUID_FeatureFlag
+	set0 BIT_SILENCE_ADV_FLAG,pdata
+	store 1,mem_mesh_UUID_FeatureFlag
+	jam UNPROVISIONED_BEACON_STATUS,mem_mesh_provisioned_flag
+	jam 0x00,mem_mesh_Provisioning_State_Flag
+	jam 0x00,mem_k2_NID
+	branch ali_mesh_send_unprovisioned_device_beacon_init_advertising
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_lower_transport_layer.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_lower_transport_layer.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_lower_transport_layer.prog	(working copy)
@@ -0,0 +1,151 @@
+/*
+	mesh涓帴鏀跺埌lower transport鍖呭垽鏂
+	鏄疷nsegmented鍖咃紝鐩存帴涓婁紶鍒皍pper transport layer
+	鏄疭egmented鍖咃紝閲嶇粍鍚庝笂浼犲埌upper transport layer
+*/
+
+
+ali_mesh_lower_transport_layer_receive_lower_transport_PDU:
+	bpatchx patch35_5,mem_patch35
+	fetch 1,mem_mesh_message_Transport_Head
+	bbit1 TRANSPORT_HEAD_BIT_SEG,ali_mesh_lower_transport_layer_receive_lower_transport_PDU_segmented_message
+	jam 0,mem_mesh_ASZMIC
+	branch ali_mesh_upper_transport_layer_receive_unsegmented_access_message
+
+//segmented message reassembly
+ali_mesh_lower_transport_layer_receive_lower_transport_PDU_segmented_message:
+	call ali_mesh_lower_transport_layer_receive_SegAccMess_resolve_SZMIC_SeqZero_SegON
+	rtn user
+	call ali_mesh_lower_transport_layer_receive_segmented_access_message_check_blockAck
+	rtn user
+	call ali_mesh_lower_transport_layer_receive_segmented_access_message_store_segment
+	branch ali_mesh_lower_transport_layer_receive_segmented_access_message_decrypt_segment
+
+//鎻愬彇SZMIC/SeqZero/SegO/SegN
+//鍒嗗埆瀛樺偍鍒癝ZMIC銆丼egO銆丼egN銆丼eqZero
+ali_mesh_lower_transport_layer_receive_SegAccMess_resolve_SZMIC_SeqZero_SegON:
+	call disable_user
+	arg 3,loopcnt
+	arg mem_mesh_message_segment_access_SZMIC_SeqZero_SegO_SegN,rega
+	call inverse_data
+	fetchr rega, 3,mem_mesh_message_segment_access_SZMIC_SeqZero_SegO_SegN
+	and rega,0x1f,temp
+	storet 1,mem_mesh_segmented_access_message_SegN
+	fetch 1, mem_mesh_segmented_access_message_SegN_upper_limit
+	isub temp, null
+	nbranch enable_user, positive
+	
+	rshift4 rega,pdata
+	rshift pdata,pdata
+	and pdata,0x1f,temp
+	storet 1,mem_mesh_segmented_access_message_SegO
+	rshift4 pdata,pdata
+	rshift pdata,pdata
+	arg 0x1fff,rega
+	iand rega,temp
+	copy pdata,regb
+	fetch 2,mem_mesh_segmented_access_message_SeqZero
+	isub temp,null
+	ncall ali_mesh_lower_transport_layer_receive_segmented_access_message_recover_SeqZero,zero
+	storet 2,mem_mesh_segmented_access_message_SeqZero
+	rshift8 regb,pdata
+	rshift4 pdata,pdata
+	rshift pdata,pdata
+	store 1,mem_mesh_segmented_access_message_SZMIC
+	store 1,mem_mesh_ASZMIC
+	rtn
+
+ali_mesh_lower_transport_layer_receive_segmented_access_message_recover_SeqZero:
+	setarg 0
+	store 4,mem_mesh_segmented_access_message_BlockAck
+	jam 0,mem_mesh_segmented_access_message_current_length
+	rtn
+
+
+//妫鏌lockAck鏍囧織,杩斿洖鍊糾em_mesh_segmented_access_message_receive_finish
+//1琛ㄧず鏀跺埌鎴愬姛
+ali_mesh_lower_transport_layer_receive_segmented_access_message_check_blockAck:
+	call disable_user
+	fetch 1,mem_mesh_segmented_access_message_SegO
+	copy pdata,queue
+	fetch 4,mem_mesh_segmented_access_message_BlockAck
+	qisolate1 pdata
+	branch enable_user,true
+	qset1 pdata
+	store 4,mem_mesh_segmented_access_message_BlockAck
+	fetcht 1,mem_mesh_segmented_access_message_SegN
+	add temp,1,loopcnt
+ali_mesh_lower_transport_layer_receive_segmented_access_message_check_blockAck_loop:
+	add loopcnt,-1,queue
+	qisolate1 pdata
+	nrtn true
+	loop ali_mesh_lower_transport_layer_receive_segmented_access_message_check_blockAck_loop
+	jam 1,mem_mesh_segmented_access_message_receive_finish
+	rtn
+
+
+//瀛樺偍segment m鍐呭锛屾斁鍒癿em_mesh_segmented_access_message_SegO
+ali_mesh_lower_transport_layer_receive_segmented_access_message_store_segment:
+	fetch 1,mem_mesh_message_Transport_NetMIC_length
+	pincrease -6	//DST(2) Head(1) SZMIC_SeqZero_SegO_SegN(3)
+	copy pdata,loopcnt 
+	fetcht 1,mem_mesh_segmented_access_message_current_length
+	iadd temp,temp
+	storet 1,mem_mesh_segmented_access_message_current_length
+	fetch 2, mem_mesh_segmented_access_message_Segment_ptr
+	iforce contw
+	fetch 1,mem_mesh_segmented_access_message_SegO
+	mul32 pdata,12,pdata
+	iadd contw,contw
+	arg mem_mesh_message_Transport_segmented_access_messagePDU_Segment,contr
+	branch memcpy
+
+//鍒ゆ柇鏄惁鏀跺畬鍖咃紝鏀跺畬鍖咃紝clear涓棿鏍囧織
+ali_mesh_lower_transport_layer_receive_segmented_access_message_decrypt_segment:
+	fetch 1,mem_mesh_segmented_access_message_receive_finish
+	rtneq 0
+	setarg 0
+	store 5,mem_mesh_segmented_access_message_BlockAck
+	fetcht 2,mem_mesh_message_SEQ+1
+	byteswap temp,temp
+	setarg 0xe000
+	iand temp,temp
+	fetch 2,mem_mesh_segmented_access_message_SeqZero
+	ior temp,pdata
+	byteswap pdata,pdata
+	store 2,mem_mesh_message_SEQ+1	//璁＄畻Application Nonce闇瑕佷娇鐢ㄥ埌鍒濆鐨凷EQ
+	branch ali_mesh_upper_transport_layer_receive_segmented_access_message
+
+
+/*
+	mesh涓彂閫乴ower transport layer鍒ゆ柇
+	鏄疷nsegmented message锛岀洿鎺ヤ笅鍙戝埌network transport layer
+	鏄疭egmented message锛屾媶鍒嗗悗涓婁紶鍒皀etwork transport layer
+*/
+//Unsegmented access message鍐欏叆SEG銆丄KF銆丄ID
+ali_mesh_lower_transport_layer_send_unsegmented_access_message:
+	fetch 1,mem_mesh_upper_transport_layer_payload_len
+	add pdata,1,temp
+	copy pdata,loopcnt
+	storet 1,mem_mesh_lower_transport_layer_payload_len
+	fetch 1,mem_mesh_message_Transport_Head
+	set0 TRANSPORT_HEAD_BIT_SEG,pdata
+	store 1,mem_mesh_unsegmented_access_lower_transport_layer_head
+	arg mem_mesh_access_layer_payload,contr
+	call memcpy_fast
+	branch ali_mesh_network_layer_send_access_message
+
+//segmented access message鍐欏叆SEG銆丄KF銆丄ID
+//input:rega is current segment payload length
+//contr is current segment payload ptr
+ali_mesh_lower_transport_layer_send_segmented_access_message:
+	add rega,4,temp
+	copy rega,loopcnt
+	storet 1,mem_mesh_lower_transport_layer_payload_len
+	arg mem_mesh_segmented_access_lower_transport_layer_parameters,contw
+	call memcpy_fast
+	fetch 1,mem_mesh_message_Transport_Head
+	set1 TRANSPORT_HEAD_BIT_SEG,pdata
+	store 1,mem_mesh_segmented_access_lower_transport_layer_head
+	branch ali_mesh_network_layer_send_access_message
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_model_layer.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_model_layer.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_model_layer.prog	(working copy)
@@ -0,0 +1,136 @@
+
+
+/*
+	mesh model灞傛寚浠よВ鏋愭诲嚱鏁
+*/
+
+ali_mesh_model_layer_check_model_message_opcode:
+	fetch 1,mem_mesh_module_message_opcode
+ali_mesh_model_layer_check_generic_OnOff_message_opcde:
+	beq MESH_MODULE_MESSAGE_OPCODE_GENERIC_ONOFF_GET_NO_HEAD,ali_mesh_model_layer_message_opcode_generic_onoff_get
+	beq MESH_MODULE_MESSAGE_OPCODE_GENERIC_ONOFF_SET_NO_HEAD,ali_mesh_model_layer_message_opcde_generic_onoff_set
+	beq MESH_MODULE_MESSAGE_OPCODE_SCENE_RECALL_NO_HEAD,ali_mesh_model_layer_message_opcde_scene_recall
+	beq MESH_MODULE_MESSAGE_OPCODE_LIGHT_LIGHTNESS_SET_NO_HEAD,ali_mesh_model_layer_message_opcde_light_lightness_set
+	beq MESH_MODULE_MESSAGE_OPCODE_LIGHT_CTL_SET_NO_HEAD,ali_mesh_model_layer_message_opcde_light_ctl_set
+	rtn
+
+
+ali_mesh_model_layer_message_opcode_generic_onoff_get:
+	arg ali_mesh_model_layer_message_opcode_generic_onoff_get_cb,regc
+	branch ali_mesh_more_element_check_element_address
+ali_mesh_model_layer_message_opcode_generic_onoff_get_cb:
+	//input queue is element number
+	//output pdata is element generic OnOff status
+	fetch 2,mem_mesh_cb_generic_onoff_get
+	call callback_func
+	store 1,mem_mesh_generic_onoff_set_payload_OnOff
+	branch ali_mesh_access_layer_send_generic_onoff_status
+
+
+ali_mesh_model_layer_message_opcde_generic_onoff_set:
+	arg ali_mesh_model_layer_message_opcde_generic_onoff_set_cb,regc
+	branch ali_mesh_more_element_check_element_address
+ali_mesh_model_layer_message_opcde_generic_onoff_set_cb:
+	call ali_mesh_access_layer_send_generic_onoff_status
+	fetch 2,mem_mesh_cb_generic_onoff_set
+	branch callback_func
+
+
+//妯″紡璁剧疆
+ali_mesh_model_layer_message_opcde_scene_recall:
+	call ali_mesh_access_layer_send_scene_status
+	fetch 2,mem_mesh_cb_scene_recall
+	branch callback_func
+
+
+ali_mesh_model_layer_message_opcde_light_lightness_set:
+	fetch 2,mem_mesh_light_lightness_set_payload_lightness
+	call ali_mesh_model_layer_message_calc_lightness
+	store 1,mem_mesh_light_lightness_calc_lightness
+	call ali_mesh_access_layer_send_light_lightness_status
+	fetch 2,mem_mesh_cb_light_lightness_set
+	branch callback_func
+
+
+ali_mesh_model_layer_message_opcde_light_ctl_set:
+	fetch 2,mem_mesh_last_CTL_Temperature
+	fetcht 2,mem_mesh_CTL_Temperature
+	isub temp,null
+	rtn zero
+
+	fetch 2,mem_mesh_CTL_Temperature
+	call ali_mesh_model_layer_message_calc_temperature
+	store 1,mem_mesh_CTL_calc_temperature
+
+	fetch 2,mem_mesh_CTL_Temperature
+	store 2,mem_mesh_last_CTL_Temperature
+	fetch 2,mem_mesh_cb_light_lightness_get
+	call callback_func
+	storet 2,mem_mesh_CTL_Lightness
+	call ali_mesh_access_layer_send_light_ctl_stauts
+	fetch 2,mem_mesh_cb_light_ctl_set
+	branch callback_func
+
+
+//input: pdata is lightness set by ali
+//output: pdata is lightness 0-100
+ali_mesh_model_layer_message_calc_lightness:
+	rtn blank
+	mul32 pdata,ALI_MESH_LIGHTNESS_LEVEL,pdata
+	arg ALI_MESH_LIGHTNESS_MAX,temp
+	idiv temp
+	call wait_div_end
+	remainder temp
+	rshift8 temp,temp
+	quotient pdata
+	sub temp,0xff,null
+	nrtn zero
+	pincrease 1
+	rtn
+
+
+//input: temp is lightness 0-100
+//output: temp is lightness set by ali
+ali_mesh_model_layer_message_calc_actual_lightness:
+	arg ALI_MESH_LIGHTNESS_MAX,pdata
+	imul32 temp,pdata
+	div pdata,ALI_MESH_LIGHTNESS_LEVEL
+	call wait_div_end
+	quotient temp
+	rtn
+
+//input: pdata is temperature set by ali
+//output: pdata is temperature 0-100
+ali_mesh_model_layer_message_calc_temperature:
+	arg ALI_MESH_TEMPERATURE_MIN,temp
+	isub temp,rega
+	call ali_mesh_model_layer_message_calc_temperature_k
+	copy rega,pdata
+	idiv temp
+	call wait_div_end
+	quotient pdata
+	rtn
+
+
+//input: temp is temperature 0-100
+//output: temp is temperature set by ali
+ali_mesh_model_layer_message_calc_actual_temperature:
+	copy temp,rega
+	call ali_mesh_model_layer_message_calc_temperature_k
+	copy rega,pdata
+	imul32 temp,pdata
+	arg ALI_MESH_TEMPERATURE_MIN,temp
+	iadd temp,temp
+	rtn
+
+ali_mesh_model_layer_message_calc_temperature_k:
+	setarg ALI_MESH_TEMPERATURE_MAX
+	arg ALI_MESH_TEMPERATURE_MIN,temp
+	isub temp,pdata
+	div pdata,ALI_MESH_TEMPERATURE_LEVEL
+	call wait_div_end
+	quotient temp
+	rtn
+
+
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_more_element_check.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_more_element_check.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_more_element_check.prog	(working copy)
@@ -0,0 +1,138 @@
+
+/*
+	澶氬厓绱犺缃紝妫鏌ユ槸鍚﹀彂閫佺粰瀛愬厓绱犵殑淇℃伅
+	杈撳叆:
+		temp is 鍖呯殑DST鍦板潃
+*/
+ali_mesh_more_element_check_unicast_address:
+	arg 0,queue
+	fetchr loopcnt,1,mem_mesh_element_number
+	call disable_user
+	fetch 2,mem_mesh_Unicast_Address
+ali_mesh_more_element_check_unicast_address_loop:
+	isub temp,null
+	branch ali_mesh_more_element_found_unicast_address_element,zero
+	byteswap pdata,pdata
+	pincrease 1
+	byteswap pdata,pdata
+	increase 1,queue
+	loop ali_mesh_more_element_check_unicast_address_loop
+	rtn
+
+ali_mesh_more_element_found_unicast_address_element:
+	jam 0,mem_mesh_receive_group_address
+	storer queue,1,mem_mesh_receive_element_number
+	call ali_mesh_more_element_calc_queue_address
+	branch enable_user
+
+
+/*
+	澶氬厓绱犺缃紝妫鏌ユ槸鍚﹀彂閫佺粰瀛愬厓绱犵粍鎾殑淇℃伅
+	杈撳叆:
+		temp is 鍖呯殑DST鍦板潃
+*/
+ali_mesh_more_element_check_group_address:
+	arg 0,queue
+	arg 0,regc
+	call mesh_get_element_info_config
+	call disable_user
+ali_mesh_more_element_check_group_address_loop:
+	fetch 2,mem_mesh_core_feature
+	bbit0 MESH_FEATURE_DISABLE_SUBSCRIPTION,ali_mesh_more_element_check_subscription_address
+	ifetch 2,rega
+	isub temp,null
+	call ali_mesh_more_element_found_group_address_element,zero
+ali_mesh_more_element_check_address_common:
+	copy regb,pdata
+	iadd rega,rega
+	increase 1,queue
+	loop ali_mesh_more_element_check_group_address_loop
+	copy regc,pdata
+	rtn blank
+	store 1,mem_mesh_receive_group_address
+	branch enable_user
+
+ali_mesh_more_element_found_group_address_element:
+	qset1 regc
+	rtn
+
+ali_mesh_more_element_check_subscription_address:
+	add rega,ELEMENT_DEVICE_SUBSCRIPTION_LABEL,contr
+	arg SUBSCRIPTION_MAX_COUNT,alarm
+ali_mesh_more_element_check_subscription_address_loop:
+	ifetch 2,contr
+	isub temp,null
+	branch ali_mesh_more_element_found_subscription_address_element,zero
+	increase -1,alarm
+	branch ali_mesh_more_element_check_address_common,zero
+	branch ali_mesh_more_element_check_subscription_address_loop
+
+ali_mesh_more_element_found_subscription_address_element:
+	call ali_mesh_more_element_found_group_address_element
+	branch ali_mesh_more_element_check_address_common
+
+/*
+	澶氬厓绱犺缃紝妫鏌ュ摢浜涘厓绱犻渶瑕佹墽琛岀殑鎿嶄綔
+	杈撳叆:
+		regc:瀵瑰簲鐨勫洖璋
+*/
+ali_mesh_more_element_check_element_address:
+	arg 0,queue
+	fetch 1,mem_mesh_receive_group_address
+	branch ali_mesh_more_element_check_element_address_no_group_address,blank
+	copy pdata,regb
+	fetchr loopcnt,1,mem_mesh_element_number
+ali_mesh_more_element_check_element_address_loop:
+	storer queue,1,mem_mesh_receive_element_number
+
+	qisolate1 regb
+	call ali_mesh_more_element_check_element_address_no_group_address,true
+	fetchr queue,1,mem_mesh_receive_element_number
+	increase 1,queue
+	loop ali_mesh_more_element_check_element_address_loop
+	rtn
+
+ali_mesh_more_element_check_element_address_no_group_address:
+	call ali_mesh_more_element_push_stack
+	call ali_mesh_more_element_calc_queue_address
+	copy regc,pdata
+	call callback_func
+	branch ali_mesh_more_element_pop_stack
+
+ali_mesh_more_element_push_stack:
+	storer loopcnt,2,mem_mesh_loopcnt_tmep
+	storer rega,2,mem_mesh_rega_temp
+	storer regb,2,mem_mesh_regb_temp
+	storer regc,2,mem_mesh_regc_temp
+	rtn
+
+ali_mesh_more_element_pop_stack:
+	fetchr loopcnt,2,mem_mesh_loopcnt_tmep
+	fetchr rega,2,mem_mesh_rega_temp
+	fetchr regb,2,mem_mesh_regb_temp
+	fetchr regc,2,mem_mesh_regc_temp
+	rtn
+
+
+/*
+	澶氬厓绱犺缃紝璁＄畻鍙戦佹暟鎹椂鐨凷RC鍜岃幏鍙杣pper tsport layer 鐨刡uffer鎸囬拡
+	杈撳叆:
+		queue褰撳墠鏁版嵁缂栧彿
+*/
+ali_mesh_more_element_calc_queue_address:
+	bpatchx patch35_6,mem_patch35
+	fetch 2,mem_mesh_Unicast_Address
+	byteswap pdata,pdata
+	iadd queue,pdata
+	byteswap pdata,pdata
+	store 2,mem_mesh_send_message_SRC
+	call mesh_get_element_info_config
+	copy queue,pdata
+	imul32 regb,pdata
+	iadd rega,rega
+	add rega,ELEMENT_DEVICE_UPPER_QUEUE_PTR,contr
+	ifetch 2,contr
+	store,2,mem_queue_ptr
+	rtn
+
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_network_layer.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_network_layer.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_network_layer.prog	(working copy)
@@ -0,0 +1,406 @@
+
+/*
+	mesh鍗忚涓璶etwork layer
+	涓昏鏄礋璐esh涓璑etwork PDU鍐呭鍚堟硶鎬у拰瑙ｅ瘑
+*/
+
+ali_mesh_receive_adtype_mesh_message:
+	jam MESH_MESSAGE_TMALL,mem_mesh_network_packet_type
+/*
+	mesh涓帴鏀跺埌network鍖呭鐞嗗嚱鏁
+*/
+//contr is read ptr
+//input:temp is len
+ali_mesh_network_layer_recevice_network_pdu:
+	sub temp,MESH_NETWORK_PACKET_MIN_LENGTH,null
+	rtn positive	
+	sub temp,MESH_NETWORK_PACKET_MAX_LENGTH,null
+	nrtn positive	
+	bpatchx patch35_7,mem_patch35
+	call ali_mesh_network_store_in_mem
+	call ali_mesh_network_layer_check_dup
+	nrtn user
+	call ali_mesh_network_layer_check_NID_IVI
+	nrtn user
+	call ali_mesh_encrypt_obfuscation_deceypt_recevie_message
+	call ali_mesh_network_layer_check_msg
+	nrtn user
+	call ali_mesh_network_layer_store_proxy_unicast_address
+
+	branch ali_mesh_network_layer_recevice_network_pdu_decrypt_NetMIC32
+
+ali_mesh_network_layer_check_dup:
+	call enable_user
+	fetch 1,mem_mesh_message_Transport_NetMIC_length
+	arg mem_mesh_message_NID+3,contr
+	iadd contr,contr
+	ifetch 4,contr
+	ifetcht 4,contr
+	ixor temp,temp
+	arg 16,loopcnt
+	arg mem_mesh_network_dup_cache,contr
+ali_mesh_network_layer_check_dup_loop:
+	ifetch 4,contr
+	isub temp,null
+	branch disable_user,zero
+	loop ali_mesh_network_layer_check_dup_loop
+	fetch 1,mem_mesh_network_dup_cache_next
+	pincrease 4
+	arg mem_mesh_network_dup_cache,contw
+	iadd contw,contw
+	istoret 4,contw
+	and pdata,0x3f,pdata
+	store 1,mem_mesh_network_dup_cache_next
+	rtn
+
+ali_mesh_network_layer_check_msg:
+	call enable_user
+	fetcht 5,mem_mesh_message_SEQ
+	arg 16,loopcnt
+	arg mem_mesh_network_msg_cache,contr
+ali_mesh_network_layer_check_msg_loop:
+	ifetch 5,contr
+	isub temp,null
+	branch disable_user,zero
+	loop ali_mesh_network_layer_check_msg_loop
+	fetch 1,mem_mesh_network_msg_cache_next
+	pincrease 1
+	and pdata,0x0f,pdata
+	store 1,mem_mesh_network_msg_cache_next
+	mul32 pdata,5,pdata
+	arg mem_mesh_network_msg_cache,contw
+	iadd contw,contw
+	istoret 5,contw
+	rtn
+
+ali_mesh_network_layer_store_proxy_unicast_address:
+	fetch 1,mem_mesh_network_packet_type
+	rtneq MESH_MESSAGE_TMALL
+	fetch 2,mem_mesh_message_SRC
+	store 2,mem_mesh_network_proxy_unicast_address
+	rtn
+
+	
+//ali_mesh_network_layer_recevice_network_pdu_check_NID:
+//	call ali_mesh_network_layer_check_NID_IVI
+//	nrtn user
+//ali_mesh_network_layer_recevice_network_pdu_deceypt_obfuscation:
+//	call ali_mesh_encrypt_obfuscation_deceypt_recevie_message
+//	//fetch 1,mem_mesh_message_TTL
+//	//rtnbit1 BIT_CTL
+//	fetch 1,mem_mesh_message_TTL
+//	nrtn blank
+ali_mesh_network_layer_recevice_network_pdu_decrypt_NetMIC32:
+	call ali_mesh_network_load_network_nonce_and_EncryptionKey
+	fetch 1,mem_mesh_message_Transport_NetMIC_length
+	arg mem_mesh_message_DST,temp
+	call ali_CCM_decrypt
+	nrtn zero	//NetMIC error
+
+
+ali_mesh_network_layer_recevice_network_pdu_check_DST:
+	bpatchx patch36_0,mem_patch36
+	fetch 1, mem_mesh_network_packet_type
+	sub pdata, MESH_MESSAGE_PROXY, null
+	call ali_mesh_white_filter_check, zero
+	fetcht 2,mem_mesh_message_DST
+	call ali_mesh_more_element_check_unicast_address		//妫鏌ユ墍鏈夊瓙鍏冪礌鐨勫崟鎾湴鍧
+	call ali_mesh_more_found_unicast_address_element,user
+	branch ali_mesh_network_layer_recevice_network_pdu_check_SRC_and_SEQ,user
+	arg 29,loopcnt
+	arg mem_mesh_message_NID_temp,contw
+	arg mem_mesh_message_NID,contr
+	call memcpy
+	call ali_mesh_network_layer_recevice_network_pdu_check_DST_group_address
+	arg 29,loopcnt
+	arg mem_mesh_message_NID_temp,contr
+	arg mem_mesh_message_NID,contw
+	call memcpy
+	fetch 2,mem_mesh_cb_network_relay
+	branch callback_func
+
+ali_mesh_more_found_unicast_address_element:
+	jam 1,mem_mesh_receive_message_count
+	fetch 2,mem_mesh_send_message_SRC
+	store 2,mem_mesh_receive_message_first_unicast_address
+	rtn
+
+ali_mesh_network_layer_recevice_network_pdu_check_DST_group_address:
+	call ali_mesh_more_element_check_group_address		//妫鏌ユ墍鏈夊瓙鍏冪礌鐨勭粍鎾湴鍧
+	branch ali_mesh_network_layer_recevice_network_pdu_check_SRC_and_SEQ,user
+	jam 0xff,mem_mesh_receive_group_address
+	setarg GROUP_ADDRESS_0XCFFF_little_endian
+	isub temp,null		//DST==0xCFFF Tmall瑙勫畾鐨勭伅model鐨勭粍鎾湴鍧2
+	branch ali_mesh_network_layer_recevice_network_pdu_check_SRC_and_SEQ,zero
+	setarg GROUP_ADDRESS_0XFFFF_little_endian
+	isub temp,null	//DST==0xCFFF Tmall瑙勫畾鐨82 01鎸囦护鐨勭粍鎾湴鍧锛屽湪绾挎娴
+	branch ali_mesh_network_layer_recevice_network_pdu_check_SRC_and_SEQ,zero
+	rtn
+
+
+ali_mesh_network_layer_check_NID_IVI:
+	call disable_user
+	fetcht 1,mem_mesh_message_NID
+	rshift4 temp,pdata
+	rshift3 pdata,pdata
+	fetchr rega,1,mem_mesh_IV_Index+3
+	and rega,0x01,rega
+	isub rega,null
+	nrtn zero
+	and temp,0x7f,temp
+	fetch 1,mem_k2_NID
+	isub temp,null
+	nrtn zero		//鍒ゆ柇NID鏄惁鐩哥瓑;鐩哥瓑璇存槑鏄悓涓涓綉缁滅殑鍖
+	branch enable_user
+
+
+//妫鏌RC鍜孲EQ瀛樺偍cache锛屾槸鍚︽湁褰撳墠SRC璁惧淇℃伅
+ali_mesh_network_layer_recevice_network_pdu_check_SRC_and_SEQ:
+	arg mem_mesh_TMALL_cache_start,rega
+	arg CACHE_SPACE_NUM,loopcnt
+ali_mesh_network_layer_raverse_SRC_SEQ_cache:
+	fetcht 2,mem_mesh_message_SRC
+	ifetch 2,rega
+//cache瀛樺湪绌虹殑绌洪棿,灏哠RC銆丼EQ瀛樺偍鍒拌繖涓┖闂
+	branch ali_mesh_network_layer_find_empty_space,blank
+	
+	isub temp,null
+//cache宸茬粡瀛樻湁璇RC鐨勪俊鎭紝瀵煎嚭SEQ淇℃伅
+	branch ali_mesh_network_layer_find_SRC_space,zero
+	increase CACHE_SPACE_SIZE,rega
+	loop ali_mesh_network_layer_raverse_SRC_SEQ_cache
+	arg mem_mesh_TMALL_cache_start,rega
+
+ali_mesh_network_layer_find_empty_space:
+	istoret 2,rega
+ali_mesh_network_layer_find_SRC_space:
+	storet 2,mem_mesh_send_message_DST
+//鎺ユ敹鏃剁殑SRC鏄彂閫佹椂鍊欑殑DST	
+	add rega,2,regc
+	ifetch 3,regc
+	store 3,mem_mesh_last_message_SEQ
+	branch ali_mesh_network_layer_recevice_network_pdu_check_SEQ_legal
+
+
+//妫鏌EQ鐨勫悎娉曟э紝杩囨护閲嶅鍖
+ali_mesh_network_layer_recevice_network_pdu_check_SEQ_legal:
+//check SEQ
+	call ali_mesh_inverse_SEQ			//楂樹綆浣嶄氦鎹
+
+	fetch 3,mem_mesh_last_message_SEQ
+	fetcht 3,mem_mesh_message_SEQ
+	isub temp,null
+	rtn positive	//lastMessageSEQ-currMessageSEQ>=0,杩斿洖
+	istoret 3,regc	
+	call ali_mesh_inverse_SEQ		//application nonce鍜孌evice nonce閮介渶瑕佺敤鍒癝EQ
+ifdef mesh_debug_log
+	call logging_tx_debug_network_receive_packet
+endif
+	branch ali_mesh_lower_transport_layer_receive_lower_transport_PDU
+
+ali_mesh_inverse_SEQ:
+	arg mem_mesh_message_SEQ,rega
+	arg 3,loopcnt
+	branch inverse_data
+
+
+
+ali_mesh_network_load_network_nonce_and_EncryptionKey:
+	call ali_mesh_network_layer_load_network_nonce
+ali_mesh_upper_transport_layer_load_EncryptionKey:
+	arg mem_k2_EncryptionKey,contr
+	branch load_key
+ali_mesh_network_layer_load_network_nonce:
+	arg mem_mesh_Network_Nonce,contw
+	setarg NETWORK_NONCE
+	istore 1,contw
+	fetch 6,mem_mesh_message_TTL
+	istore 8,contw
+	branch mesh_generate_nonce
+
+
+ali_mesh_network_store_in_mem:
+	add temp,-12,pdata
+	//闀垮害-12鐨勫師鍥
+	//uint8_t AD type:GAP_ADTYPE_MESH_MESSAGE
+	//uint8_t IVI & NID
+	//uint8_t CTL & TTL
+	//uint24_t SEQ
+	//uint16_t SRC
+	//uint32_t MIC
+	//AD_len鍑忓幓涓婇潰鍐呭锛屾槸瀹為檯DST & Transport PDU鐨勯暱搴
+	//闂:娌℃湁鑰冭檻MIC闀垮害鏄64bit 鐨勬儏鍐碉紝鐩墠涓嶆敮鎸侊紝鍚庢湡鏀寔闇瑕佷慨鏀
+	store 1,mem_mesh_message_Transport_NetMIC_length	//len of DST + Transport Pdu, without NetMIC
+	arg 29,loopcnt
+	arg mem_mesh_message_NID,contw
+	call clear_mem
+	add temp,-1,loopcnt
+	arg mem_mesh_message_NID,contw
+	branch memcpy_fast	//mem_le_rxbuf缁熶竴copy鍒癿em_mesh_message_NID
+
+ali_mesh_network_layer_relay_access_message: 
+	call ali_mesh_network_layer_init_queue_param
+	call ali_mesh_network_layer_check_relay_states
+	nrtn user
+	call ali_mesh_network_layer_encrypt_relay_package
+	jam ADV_RELAY_MESH_MESSAGE_DURATION,mem_mesh_queue_ele_duration
+	fetch 1,mem_mesh_message_Transport_NetMIC_length
+	add pdata,13,temp
+	storet 1,mem_mesh_queue_ele_len
+	increase -1,temp
+	istoret 1,contw
+	setarg GAP_ADTYPE_MESH_MESSAGE
+	istore 1,contw
+	add temp,-1,loopcnt
+	fetch 7,mem_mesh_message_NID
+	arg mem_mesh_message_NID,contr
+	call memcpy
+	arg mem_mesh_queue_ele_temp,rega
+	call queue_push
+	call ali_mesh_network_layer_white_list_fliter
+	nrtn user
+	branch ali_mesh_bearer_layer_gatt_send_packet_by_network_layer
+
+/*
+output:
+user = 1, it means white list is matched.The GATT bearer is used to relay. 
+*/
+ali_mesh_network_layer_white_list_fliter:
+	fetcht 2, mem_mesh_message_DST_temp
+ali_mesh_network_layer_white_list_fliter_check:
+	call disable_user
+	fetch 1, mem_mesh_white_list_num
+	rtn blank
+	iforce loopcnt
+	arg mem_mesh_white_list, contr
+ali_mesh_network_layer_white_list_fliter_check_loop:
+	ifetch 2, contr
+	isub temp, null
+	branch enable_user, zero
+	loop ali_mesh_network_layer_white_list_fliter_check_loop
+	rtn	
+
+//output:enable user is mean can relay packet
+ali_mesh_network_layer_check_relay_states:
+	call disable_user
+	fetch 1,mem_mesh_network_packet_type
+	rtneq MESH_MESSAGE_APP	//涓峳elay APP鐨勬帶鍒跺寘
+	fetch 2,mem_mesh_core_feature
+	rtnbit1 MESH_FEATURE_DISABLE_RELAY
+	fetch 1,mem_mesh_provisioned_flag
+	rtnne PAIRED_STATUS	
+	fetcht 2,mem_mesh_message_SRC
+	call ali_mesh_more_element_check_unicast_address
+	branch disable_user,user
+	call ali_mesh_network_layer_check_network_mic_cache
+	nrtn user
+	fetch 1,mem_mesh_message_TTL
+	branch disable_user, blank
+	pincrease -1
+	branch disable_user, blank
+	store 1,mem_mesh_message_TTL   //+17
+	setarg mem_mesh_network_relay_queue
+	store 2,mem_queue_ptr
+	branch enable_user
+
+ali_mesh_network_layer_encrypt_relay_package:
+ 	call ali_mesh_network_load_network_nonce_and_EncryptionKey
+	fetch 1,mem_mesh_message_Transport_NetMIC_length
+	arg mem_mesh_message_DST,temp
+	call ali_CCM_encrypt
+	branch ali_mesh_encrypt_obfuscation_deceypt_recevie_message
+
+
+//user is enable ,mean new packet
+ali_mesh_network_layer_check_network_mic_cache:
+	setarg mem_mesh_transport_message_mic_cache
+	store 2,mem_mesh_mic_cache_ptr
+	branch ali_mesh_base_adt_cache
+
+ifdef mesh_debug_log
+ali_mesh_network_layer_logging_tx_relay_info:
+	arg 2,loopcnt
+	arg mem_mesh_message_DST,rega
+	arg MESH_NETWORK_RELAY_PACKET,regb
+	call logging_tx_info
+	fetchr loopcnt,1,mem_ccm_data_len
+	fetchr rega,2,mem_ccm_data_ptr
+	arg MESH_NETWORK_RELAY_PACKET,regb
+	branch logging_tx_debug
+endif
+
+/*
+	mesh涓彂閫佸埌network layer澶勭悊鍑芥暟
+	涓嶅尯鍒哢nsegmented access message鍜孲egmented access message
+	缁熶竴澶勭悊鍑芥暟鎺ュ彛
+*/
+
+ali_mesh_network_layer_send_access_message:
+	bpatchx patch36_1,mem_patch36
+	call ali_mesh_network_layer_send_access_message_encrypt_NetMIC
+	call ali_mesh_network_layer_send_access_message_encrypt_obfuscation
+	branch ali_mesh_bearer_layer_send_packet_by_network_layer
+
+
+//DST鍦ㄦ帴鏀跺寘鏃讹紝宸茬粡鍐欏叆mem_mesh_unsegmented_lower_transport_layer_DST
+//璁＄畻Netwrork MIC鐨勫
+ali_mesh_network_layer_send_access_message_encrypt_NetMIC:
+	fetch 1,mem_mesh_lower_transport_layer_payload_len
+	add pdata,2,rega	//DST size
+	pincrease 4
+	store 1,mem_mesh_lower_transport_layer_payload_len
+	arg mem_mesh_send_upper_layer_DST,temp
+	branch ali_mesh_network_layer_encrypt_by_network_nonce
+
+//********* generate network nonce *********//
+//input:temp is encrypt ptr
+//rega is encrypt length
+ali_mesh_network_layer_encrypt_by_network_nonce:
+	call ali_mesh_network_load_network_nonce_and_EncryptionKey
+	copy rega,pdata
+	branch ali_CCM_encrypt
+
+
+ali_mesh_network_layer_send_access_message_encrypt_obfuscation:
+	branch ali_mesh_encrypt_obfuscation_deceypt_send_message
+
+
+ali_mesh_network_layer_check_gatt_relay_packet:
+	call ali_mesh_network_layer_init_gatt_queue_param
+	call queue_empty
+	rtn blank
+	call le_fifo_check_nearly_full
+	nrtn blank
+	arg mem_mesh_queue_ele_temp,rega
+	call queue_pop
+	nrtn user
+	branch ali_mesh_send_ble_data
+
+
+
+mesh_generate_nonce:
+	fetch 4,mem_mesh_IV_Index
+	istore 4,contw
+	add contw,-13,pdata
+	store 2,mem_nonce_ptr
+	rtn
+
+
+ifdef mesh_debug_log
+logging_tx_debug_network_receive_packet:
+	fetch 1,mem_mesh_message_Transport_NetMIC_length
+	add pdata,11,loopcnt
+	arg mem_mesh_message_NID,rega
+	arg MESH_NETWORK_RECEIVE_PACKET,regb
+	branch logging_tx_debug
+endif
+
+ali_mesh_network_layer_init_queue_param:
+	setarg mem_mesh_network_relay_queue_each_size
+	store 2,mem_queue_ptr
+	rtn
+
+ali_mesh_network_layer_queue_init:
+	call ali_mesh_network_layer_init_queue_param
+	branch queue_init
+
Index: /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_proxy.prog	(added)
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_proxy.prog	(revision 0)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_proxy.prog	(revision 0)
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_proxy_layer.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_proxy_layer.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_proxy_layer.prog	(working copy)
@@ -0,0 +1,282 @@
+
+ali_mesh_ble_adv:
+	call le_set_config_more_data
+	fetch 1,mem_mesh_provisioned_flag
+	beq UNPROVISIONED_BEACON_STATUS,ali_mesh_ble_adv_mesh_beacon
+	beq PAIRED_STATUS,ali_mesh_ble_adv_network_id
+	beq WAIT_RECEIVE_APPKEY,ali_mesh_ble_adv_network_id
+	rtn
+
+ali_mesh_ble_adv_network_id:
+	//mesh network id proxy
+	/*
+	14
+	02 01 02
+	03 03 28 18
+	0c 16 28 18
+	00 
+	network id
+	*/
+	setsect 0,0x10214
+	setsect 1,0xc080
+	setsect 2,0x28030
+	setsect 3,0x3060
+	store 9,mem_le_adv_data_len
+	setarg 0x182816
+	istore 4,contw
+	fetch 8,mem_mesh_network_id
+	istore 8,contw
+	rtn
+
+ali_mesh_ble_adv_mesh_beacon:
+	call ali_mesh_config_device_uuid_by_three_tuple
+	//mesh beaon proxy
+	/*
+	1d
+	02 01 02
+	03 03 27 18
+	15 16 27 18
+	device uuid
+	oob info
+	*/	
+	setsect 0,0x1021d
+	setsect 1,0xc080
+	setsect 2,0x27030
+	setsect 3,0x5460
+	store 9,mem_le_adv_data_len
+	setarg 0x182716
+	istore 3,contw
+	arg mem_mesh_Device_UUID,contr
+	call memcpy16
+	fetch 2,mem_mesh_OOB_information
+	istore 2,contw
+	rtn
+
+
+//rega is le rx data address
+//regb is le rx data length
+//mem_le_att_handle is write handle
+mesh_le_receive_data:
+/*	call uartb_prepare_tx
+	setarg 0x5555
+	istore 2,contwu
+	fetch 2,mem_le_att_handle
+	istore 2,contwu
+	copy regb,pdata
+	istore 2,contwu
+	copy rega,contr
+	copy regb,loopcnt
+	call uart_copy_tx_bytes
+	call uartb_send
+*/
+	bpatchx patch36_2,mem_patch36
+	fetch 2,mem_le_att_handle
+	beq MESH_PROXY_DATA_IN_HANDLE,ali_mesh_receive_ble_data_proxy_data_in
+	beq MESH_PROVISIONING_DATA_IN_HANDLE,ali_mesh_receive_ble_data_provisioning_data_in
+	rtn
+
+ali_mesh_receive_ble_data_proxy_data_in:
+	copy regb,temp
+	ifetch 1,rega
+	beq MESH_PROXY_MESSAGE_TYPE_NETWORK_PDU,ali_mesh_network_layer_recevice_network_pdu_proxy_control
+	beq MESH_PROXY_MESSAGE_TYPE_PROXY_CONFIGURATION, ali_mesh_network_layer_recevice_proxy_configuration_messages
+	rtn
+ali_mesh_network_layer_recevice_proxy_configuration_messages:
+	//uint8_t SAR & Type
+	//uint8_t IVI & NID
+	//uint8_t CTL & TTL
+	//uint24_t SEQ
+	//uint16_t SRC
+	//uint64_t MIC
+//	call ice_break
+	call ali_mesh_network_store_in_mem
+	fetch 1, mem_mesh_message_Transport_NetMIC_length     //Only 4 bytes of MIC were subtracted in ali_mesh_network_store_in_mem 
+	pincrease -4
+	store 1, mem_mesh_message_Transport_NetMIC_length
+	call ali_mesh_network_layer_check_NID_IVI
+	nrtn user
+	call ali_mesh_encrypt_obfuscation_deceypt_recevie_message
+	fetch 1, mem_mesh_message_TTL
+	bbit1 BIT_CTL,ali_mesh_recevice_proxy_configuration_messages_decrypt
+	rtn
+
+/*
+If the CTL field is set to 1, the NetMIC is a 64-bit value and the Lower Transport PDU contains a Control 
+Message.
+*/
+ali_mesh_recevice_proxy_configuration_messages_decrypt:
+	call ali_mesh_network_load_proxy_nonce_and_EncryptionKey
+	fetch 1,mem_mesh_message_Transport_NetMIC_length
+	arg mem_mesh_message_DST,temp
+	call ali_CCM_decrypt_64Bit
+	nrtn zero	//NetMIC error
+
+
+	call ali_mesh_white_filter_check
+	fetch 1, mem_mesh_message_Proxy_TransportPDU_opcode
+	beq PROXY_OPCODE_SET_FILTER_TYPE, ali_mesh_proxy_configuration_message_set_filter_type
+	beq PROXY_OPCODE_ADD_ADDR_TO_FILTER, ali_mesh_proxy_configuration_message_add_addr_to_filter
+	rtn
+
+ali_mesh_proxy_configuration_message_add_addr_to_filter:
+	fetchr loopcnt, 1, mem_mesh_message_Transport_NetMIC_length  //len of DST + Transport Pdu, without NetMIC
+	increase -3, loopcnt      //2bytes(DST)  + 1byte(Proxy Transport Pdu Opcode)
+	
+	rshift loopcnt, pdata
+	fetcht 2, mem_mesh_white_list_num
+	iadd temp, pdata
+	sub pdata, 8, null
+	nrtn positive          //If the Proxy Server runs out of space in the proxy filter list, the Proxy Server shall not add these addresses.
+	store 2, mem_mesh_white_list_num
+	arg mem_mesh_white_list, contw
+	lshift temp, pdata
+	iadd contw, contw
+	arg mem_mesh_message_Proxy_TransportPDU_Parameters, contr
+	call memcpy
+	fetch 1, mem_mesh_addressed_filter_type
+	branch ali_mesh_proxy_configuration_message_filter_status
+	
+/*
+Proxy TransportPDU field format:
+Opcode   parameters
+               FilterType     ListSize
+1byte           1byte           2bytes
+*/
+ali_mesh_proxy_configuration_message_set_filter_type:
+	ifetch 1, contr
+	store 1, mem_mesh_addressed_filter_type
+ali_mesh_proxy_configuration_message_filter_status:	
+	store 1, mem_mesh_filter_status_message_FilterType
+	fetch 2, mem_mesh_white_list_num
+	byteswap pdata, pdata
+	store 2, mem_mesh_filter_status_message_ListSize
+
+	jam PROXY_OPCODE_FILTER_STATUS, mem_mesh_filter_status_message_opcode
+	
+	fetch 9, mem_mesh_message_NID
+	store 9, mem_mesh_send_upper_layer_IVI_and_NID
+	fetch 2,mem_mesh_send_message_SRC
+	store 2,mem_mesh_send_upper_layer_SRC
+
+	call ali_mesh_upper_transport_layer_send_access_message_calc_SEQ
+	call ali_mesh_upper_transport_layer_send_access_message_add_SEQ
+
+	call ali_mesh_network_load_proxy_nonce_and_EncryptionKey
+	setarg 6    //encrypt len: DST + TransportPDU
+	arg mem_mesh_send_upper_layer_DST,temp
+	call ali_CCM_encrypt_64Bit
+	call ali_mesh_network_layer_send_access_message_encrypt_obfuscation
+
+	//len =1 + 7 + 2 + 4 + 8 
+	arg 22, rega
+	arg MESH_PROXY_DATA_OUT_HANDLE,temp
+	call le_att_malloc_tx_notify
+	setarg MESH_PROXY_MESSAGE_TYPE_PROXY_CONFIGURATION
+	istore 1,contw
+	arg mem_mesh_send_upper_layer_IVI_and_NID,contr
+	branch memcpy32
+
+ali_mesh_receive_ble_data_provisioning_data_in:
+	jam MESH_MESSAGE_PROXY,mem_mesh_fast_pair_packet_type
+	copy regb,temp
+	copy rega,contr
+	branch ali_mesh_receive_adtype_manufacturer_specific
+
+
+ali_mesh_network_load_proxy_nonce_and_EncryptionKey:
+	arg mem_mesh_Proxy_Nonce,contw
+	setarg PROXY_NONCE
+	istore 2,contw    //Nonce Type & pad(Note:pad = 0)
+	fetch 5,mem_mesh_message_SEQ
+	istore 7,contw   //SEQ & SRC & Pad(Note:pad = 0)
+	call  mesh_generate_nonce
+
+	branch ali_mesh_upper_transport_layer_load_EncryptionKey	
+	
+ali_mesh_network_layer_recevice_network_pdu_proxy_control:
+	jam MESH_MESSAGE_PROXY,mem_mesh_network_packet_type
+	branch ali_mesh_network_layer_recevice_network_pdu
+
+
+ali_mesh_proxy_process_bb_event:
+	copy regc,pdata
+	beq BT_EVT_LE_DISCONNECTED,mesh_ble_start_adv
+	beq BT_EVT_LE_CONNECTED,app_ble_conn_event
+	rtn
+
+app_ble_conn_event:
+	branch ali_mesh_proxy_white_list_clear
+
+
+	
+mesh_ble_start_adv:
+	setarg 0
+	store 2,mem_mesh_network_proxy_unicast_address	//clear proxy unicast address
+	branch app_ble_start_adv
+
+ali_mesh_proxy_white_list_clear:
+	setarg 0
+	store 2, mem_mesh_white_list_num
+	arg mem_mesh_white_list, contw
+	arg 16, loopcnt
+	branch memset0
+//	force 0,pdata
+//mesh_mem_set0:
+//	istore 8,contw
+//	loop mesh_mem_set0
+//	rtn	
+
+ali_mesh_send_ble_data:
+//	call ice_break
+	call le_fifo_check_nearly_full
+	nrtn blank
+//	call ice_break
+	fetch 1,mem_mesh_queue_ele_len
+	add pdata,-1,rega
+	arg MESH_PROXY_DATA_OUT_HANDLE,temp
+	call le_att_malloc_tx_notify
+	setarg MESH_PROXY_MESSAGE_TYPE_NETWORK_PDU
+	istore 1,contw
+	arg mem_mesh_queue_ele_payload+2,contr
+	branch memcpy32
+
+ali_mesh_send_pairing_data:
+ifdef LOG
+	call uarta_prepare_tx_register_push
+	setarg -2
+	istore 8,contwu
+	fetch 1,mem_le_adv_data_len
+	add pdata,-5,loopcnt
+	arg mem_le_adv_data+5,contr
+	call uart_copy_tx_bytes	
+	call uarta_send_register_pop
+endif
+	fetch 1,mem_mesh_fast_pair_packet_type
+	rtneq MESH_MESSAGE_TMALL
+	fetch 2,mem_ui_state_map
+	rtnbit0 UI_STATE_BLE_CONNECTED
+	call le_fifo_check_nearly_full
+	nrtn blank
+	fetch 1,mem_mesh_adv_data_len
+	add pdata,-5,rega
+	arg MESH_PROVISIONING_DATA_OUT_HANDLE,temp
+	call le_att_malloc_tx_notify
+	arg mem_mesh_adv_data+5,contr
+	branch memcpy32
+
+/*
+check and store the first addr of white list.
+If the proxy filter is a white list filter, upon receiving a valid Mesh message from the Proxy Client, the 
+Proxy Server shall add the unicast address contained in the SRC field of the message to the white list.
+*/
+ali_mesh_white_filter_check:
+	fetch 2, mem_mesh_white_list
+	nrtn blank
+	fetch 2, mem_mesh_message_SRC
+	store 2, mem_mesh_white_list
+ali_mesh_white_list_num_increase:
+	fetch 2, mem_mesh_white_list_num
+	pincrease 1
+	store 2, mem_mesh_white_list_num
+	rtn
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_sha.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_sha.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_sha.prog	(working copy)
@@ -0,0 +1,139 @@
+
+sha_endian_swap2:	
+	ifetch 4,contr
+	force 4,rega
+	increase 3,contw
+sha_endian_loop:	
+	istore 1,contw
+	rshift8 pdata,pdata
+	increase -2,contw
+	increase -1,rega
+	nbranch sha_endian_loop,zero
+	increase 5,contw
+	loop sha_endian_swap2
+	rtn	
+
+
+sha_getw:
+	lshift2 queue,pdata
+	iadd timeup,contr
+	ifetch 4,contr
+	rtn
+	
+sha_r:
+	force 16,alarm
+	arg mem_dat,timeup
+sha_r_loop:	
+	add alarm,-7,queue
+	call sha_getw
+	iforce temp						/* W[t - 7] */
+	add alarm,-16,queue
+	call sha_getw
+	iadd temp,temp					/* W[t-7] + W[t-16] */
+	add alarm,-2,queue
+	call sha_getw
+	shasx pdata,1,pdata
+	iadd temp,temp					/* S1(W[t -  2]) + W[t-7] + W[t-16] */
+	add alarm,-15,queue
+	call sha_getw
+	shasx pdata,0,pdata
+	iadd temp,temp					/* S0(W[t - 15]) + S1(W[t -  2]) + W[t-7] + W[t-16] */
+	lshift2 alarm,pdata
+	iadd timeup,contw
+	istoret 4,contw
+	increase 1,alarm
+	compare 64,alarm,0xff
+	nbranch sha_r_loop,true
+	rtn
+
+
+sha_init:
+	arg memh0,contr
+	force 7,regext_index
+sha_init_0:	
+	ifetch 4,contr
+	iforce regext
+	increase -1,regext_index
+	branch sha_init_0,positive
+	rtn
+
+sha:
+	bpatchx patch36_3,mem_patch36
+	call sha_r		/* preprocessing data into R() */
+	arg memahbak,contw
+	force 0,regext_index
+sha_0:	
+	deposit regext
+	istore 4,contw
+	increase 1,regext_index
+	compare 8,regext_index,0xff
+	nbranch sha_0,true
+//	call ice_break
+//	call enable_authrom
+	arg BLE_MESH_SHA256_ADDR,timeup
+//	call ice_break
+//	arg mem_authrom_dat,timeup
+	arg mem_dat,alarm
+	force 64,loopcnt
+sha_loop:	
+	ifetcht 4,alarm
+	ifetch 4,timeup
+	increase 4,timeup
+	increase 4,alarm
+	iadd temp,pdata			/* x+K */
+	force 7,regext_index
+	iadd regext,temp			/* x+K+h */
+	force 4,regext_index
+	shasx regext,3,pdata
+	iadd temp,temp			/* temp = s3(e)+x+K+h */
+	force 5,regext_index
+	deposit regext
+	force 6,regext_index
+	ixor regext,pdata
+	force 4,regext_index
+	iand regext,pdata			/* (e & (f ^ g)) */
+	force 6,regext_index
+	ixor regext,pdata			/* F1(e, f, g) = g ^ (e & (f ^ g)) */
+	iadd temp,temp			/* temp1 = h + S3(e) + F1(e,f,g) + K + x */
+	force 7,regext_index
+	copy temp,regext			/* save to H */
+	force 3,regext_index
+	deposit regext
+	iadd temp,regext			/* save to D */
+	force 0,regext_index
+	deposit regext
+	force 1,regext_index
+	iand regext,temp			/* a & b */
+	ior regext,pdata			/* a | b */			
+	force 2,regext_index
+	iand regext,pdata			/* (c & (a | b)) */
+	ior temp,temp				/* F0:(a & b) | (c & (a | b)) */
+	force 0,regext_index
+	shasx regext,2,pdata
+	iadd temp,pdata			/* temp2 = S2(a) + F0(a,b,c) */
+	force 7,regext_index
+	iadd regext,regext			/* h = temp1 + temp2 */
+	regexrot					/* rotate move h,a-g => a-h */
+	loop sha_loop
+	arg memahbak,contr
+	force 0,regext_index
+sha_1:	
+	ifetch 4,contr
+	iadd regext,regext
+	increase 1,regext_index
+	compare 8,regext_index,0xff
+	nbranch sha_1,true
+	rtn
+//	branch disable_authrom
+
+	
+sha_result:
+	arg   memresult,contw
+	force 7,regext_index
+sha_regext_save:
+	deposit regext
+	istore  4,contw 
+	increase -1,regext_index
+	branch   sha_regext_save,positive
+	rtn	
+
Index: usb_pc_ai_voice/program/mesh_protocol_stack/mesh_upper_transport_layer.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_upper_transport_layer.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/mesh_protocol_stack/mesh_upper_transport_layer.prog	(working copy)
@@ -0,0 +1,449 @@
+
+
+
+ali_mesh_upper_transport_layer_receive_unsegmented_access_message:
+	bbit0 TRANSPORT_HEAD_BIT_AKF,ali_mesh_uuper_transport_layer_decrypt_unsegment_access_by_device_key
+
+ali_mesh_uuper_transport_layer_decrypt_unsegment_access_by_application_key:
+	call ali_mesh_upper_transport_layer_load_application_nonce_and_application_key
+	branch ali_mesh_upper_transport_layer_decrypt_unsegmented_message
+
+ali_mesh_uuper_transport_layer_decrypt_unsegment_access_by_device_key:
+	call ali_mesh_upper_transport_layer_load_device_nonce_and_device_key
+	branch ali_mesh_upper_transport_layer_decrypt_unsegmented_message
+
+
+ali_mesh_upper_transport_layer_decrypt_unsegmented_message:
+//	call ice_break
+	fetch 1,mem_mesh_message_Transport_NetMIC_length
+	pincrease -7	
+	//DST 16bit
+	//Head8bit (SEG 1bit /AKF 1bit/AID 6bit)
+	//Transport MIC 32bit
+	arg mem_mesh_message_Transport_unsegmented_access_messagePDU,alarm
+	call disable_user
+	branch ali_mesh_upper_transport_layer_decrypt_message
+
+
+
+ali_mesh_upper_transport_layer_receive_segmented_access_message:
+	fetch 1,mem_mesh_message_Transport_Head
+	bbit0 TRANSPORT_HEAD_BIT_AKF,ali_mesh_uuper_transport_layer_decrypt_segment_access_by_device_key
+ali_mesh_uuper_transport_layer_decrypt_segment_access_by_application_key:
+	call ali_mesh_upper_transport_layer_load_application_nonce_and_application_key
+	branch ali_mesh_upper_transport_layer_decrypt_segmented_message
+ali_mesh_uuper_transport_layer_decrypt_segment_access_by_device_key:
+	call ali_mesh_upper_transport_layer_load_device_nonce_and_device_key
+	branch ali_mesh_upper_transport_layer_decrypt_segmented_message
+
+
+ali_mesh_upper_transport_layer_decrypt_segmented_message:
+	fetch 1,mem_mesh_ASZMIC
+	ncall enable_user,blank
+	call disable_user,blank
+	fetch 1,mem_mesh_segmented_access_message_current_length
+	pincrease -4	//Transport MIC
+	jam 0,mem_mesh_segmented_access_message_current_length
+	arg mem_mesh_segmented_access_message_Segment,alarm
+
+//input:alarm:decrypt message ptr
+//pdata:decrypt message length
+ali_mesh_upper_transport_layer_decrypt_message:
+	copy alarm,temp
+	call ali_mesh_upper_transport_layer_decrypt_message_decrypt_transMIC
+	nrtn zero
+ifdef mesh_debug_log
+	arg 1,loopcnt
+	arg mem_ccm_data_len,rega
+	arg MESH_UPPER_RECEIVE_PACKET,regb
+	call logging_tx_info
+endif
+	call ali_mesh_upper_transport_layer_check_transport_mic_cache
+	nrtn user
+	fetch 2,mem_ccm_data_ptr
+	copy pdata,alarm
+	branch ali_mesh_access_layer_resolve_message
+
+ali_mesh_upper_transport_layer_decrypt_message_decrypt_transMIC:
+	nbranch ali_CCM_decrypt,user
+	pincrease -4
+	branch ali_CCM_decrypt_64Bit
+
+//user is enable ,mean new packet
+ali_mesh_upper_transport_layer_check_transport_mic_cache:
+	setarg mem_mesh_access_message_mic_cache
+	store 2,mem_mesh_mic_cache_ptr
+	branch ali_mesh_base_adt_cache
+
+
+//********* generate application nonce *********//
+ali_mesh_upper_transport_layer_load_application_nonce_and_application_key:
+	call ali_mesh_upper_transport_layer_load_application_nonce
+ali_mesh_upper_transport_layer_load_application_key:
+	arg mem_mesh_application_key,contr
+	branch load_key
+ali_mesh_upper_transport_layer_load_application_nonce:
+	arg mem_mesh_Application_Nonce,contw
+	setarg APPLICATION_NONCE
+	istore 1,contw
+	fetch 1,mem_mesh_ASZMIC
+	arg 0,temp
+	nsetflag blank,7,temp
+	istoret 1,contw
+	fetch 7,mem_mesh_message_SEQ
+	istore 7,contw
+	branch mesh_generate_nonce
+
+
+//********* generate device nonce *********//
+ali_mesh_upper_transport_layer_load_device_nonce_and_device_key:
+	call ali_mesh_upper_transport_layer_load_device_nonce
+ali_mesh_upper_transport_layer_load_device_key:
+	arg mem_mesh_Device_Key,contr
+	branch load_key
+ali_mesh_upper_transport_layer_load_device_nonce:
+	arg mem_mesh_Device_Nonce,contw
+	setarg DEVICE_NONCE
+	branch ali_mesh_upper_transport_layer_load_application_nonce + 2
+
+
+
+ali_mesh_upper_transport_layer_send_access_message:
+ali_mesh_upper_transport_layer_send_access_message_without_cleat_tx_buffer:
+	bpatchx patch36_4,mem_patch36
+//	call ali_mesh_upper_transport_layer_clear_tx_buffer
+ifdef mesh_debug_log
+	call ali_mesh_loggint_tx_info_upper_send_packet
+endif
+	call ali_mesh_upper_transport_layer_send_access_message_add_NID_SRC_TTL_SEQ_DST
+
+	//queue control
+	call ali_mesh_upper_transport_layer_store_packet_header
+	rtn user
+	call ali_mesh_upper_transport_layer_store_unsegment_msg_original_access_pdu
+
+	call ali_mesh_upper_transport_layer_init_queue_param
+
+	arg mem_mesh_upper_tran_layer_queue_temp,rega
+	branch queue_push
+
+
+//output:user is enable mean send Attr Indication packet,but no in paired status
+ali_mesh_upper_transport_layer_store_packet_header:
+	call disable_user
+	arg UPPER_RETRY_COUNT_STATUS,temp
+
+	fetch 1,mem_mesh_network_packet_type
+	sub pdata,MESH_MESSAGE_PROXY,null
+	setflag zero,BIT_UPPER_FLAG_PROXY_CONTROL,temp
+	storet 1,mem_mesh_upper_tran_layer_temp_packet_flag
+	fetch 9,mem_mesh_send_upper_layer_IVI_and_NID
+	store 9,mem_mesh_upper_tran_layer_temp_packet_header_IVI_NID
+	fetch 1,mem_mesh_access_layer_payload_vendor_command
+	rtnne VENDOR_MESSAGE_ATTR_INDICATION
+	fetch 1,mem_mesh_provisioned_flag
+	bne PAIRED_STATUS,enable_user
+	fetch 1,mem_mesh_access_layer_payload_vendor_tid
+	store 1,mem_mesh_upper_tran_layer_temp_packet_TID
+	fetch 1,mem_mesh_upper_tran_layer_temp_packet_flag
+	pincrease UPPER_RETRY_COUNT_INDICATION
+	set1 BIT_UPPER_FLAG_VENDOR_INDICATION,pdata
+	store 1,mem_mesh_upper_tran_layer_temp_packet_flag
+	rtn
+
+
+ali_mesh_upper_transport_layer_store_unsegment_msg_original_access_pdu:
+	fetch 1,mem_mesh_access_layer_payload_len
+	copy pdata,loopcnt
+	store 1,mem_mesh_upper_tran_layer_temp_packet_length
+	fetch 1,mem_mesh_message_Transport_Head
+	store 1,mem_mesh_upper_tran_layer_temp_pakcet_AKF_AID
+	arg mem_mesh_upper_tran_layer_temp_pakcet_upper_tran_access_pdu,contw
+	arg mem_mesh_access_layer_payload,contr
+	branch memcpy
+
+
+
+ali_mesh_upper_transport_layer_control_packet:
+//	arg ali_mesh_upper_transport_layer_control_packet_deal,regc
+//	branch ali_mesh_check_all_element_info
+
+
+ali_mesh_upper_transport_layer_control_packet_deal:
+	fetch 1,mem_mesh_upper_tran_layer_packet_advertising
+	nrtn blank
+	call ali_mesh_upper_transport_layer_init_queue_param
+	arg mem_mesh_upper_tran_layer_queue_temp,rega
+	call queue_get_new_ele
+	nrtn user	
+
+	fetcht 1,mem_mesh_upper_tran_layer_temp_packet_flag
+	and temp,DATA_UPPER_FLAG_MAX_RETRY_COUNT,pdata
+	branch ali_mesh_upper_transport_layer_queue_pop,blank
+
+	jam PACKET_IN_BEARER,mem_mesh_upper_tran_layer_packet_advertising	
+
+	call ali_mesh_upper_transport_layer_control_packet_load_header	
+
+	fetcht 1,mem_mesh_upper_tran_layer_temp_packet_flag
+	call ali_mesh_upper_transport_layer_control_packet_load_app_control	
+	store 1,mem_mesh_upper_tran_layer_packet_tid
+
+	fetch 1,mem_mesh_upper_tran_layer_packet_type
+	isolate1 BIT_UPPER_FLAG_PROXY_CONTROL,temp
+	setflag true,BIT_UUPER_TRAN_PROXY_MESSAGE,pdata
+	store 1,mem_mesh_upper_tran_layer_packet_type
+//	add rega,ELEMENT_DEVICE_TRAN_PACKAGE_TYPE,contr
+//	ifetch 1,contr
+//	isolate1 BIT_UPPER_FLAG_PROXY_CONTROL,temp
+//	setflag true,BIT_UUPER_TRAN_PROXY_MESSAGE,pdata
+//	add rega,ELEMENT_DEVICE_TRAN_PACKAGE_TYPE,contw
+//	istore 1,contw
+
+	set1 BIT_UPPER_FLAG_RETRANSMIT,temp						
+
+	increase -1,temp		
+	istoret 1,regb			
+	
+	fetcht 1,mem_mesh_upper_tran_layer_temp_packet_flag
+	isolate1 BIT_UPPER_FLAG_RETRANSMIT,temp
+	nbranch ali_mesh_upper_transport_layer_control_packet_encrypt_access,true
+	fetcht 1,mem_mesh_upper_tran_layer_temp_packet_length
+	storet 1,mem_mesh_upper_transport_layer_payload_len
+	copy temp,loopcnt
+	arg mem_mesh_access_layer_payload,contw
+	arg mem_mesh_upper_tran_layer_temp_pakcet_upper_tran_access_pdu,contr
+	call memcpy
+//	call ice_break
+	sub temp,UNSEGMENTED_ACCESS_MESSAGE_MAX_UPPER_TRANSPORT_ACCESS_PDU_LEN,null
+	nbranch ali_mesh_upper_transport_layer_control_packet_segment_msg,positive
+ali_mesh_upper_transport_layer_control_packet_unsegment_msg:
+	branch ali_mesh_lower_transport_layer_send_unsegmented_access_message
+
+
+ali_mesh_upper_transport_layer_control_packet_segment_msg:
+	fetch 4,mem_mesh_upper_tran_layer_temp_segmented_pakcet_SeqZero
+	store 4,mem_mesh_segmented_lower_transport_layer_SegZero
+	branch ali_mesh_upper_transport_layer_split_segmented_msg_to_lower_tran_layer
+
+
+ali_mesh_upper_transport_layer_control_packet_load_header:
+	fetch 1,mem_mesh_upper_tran_layer_temp_pakcet_AKF_AID
+	store 1,mem_mesh_message_Transport_Head
+
+	fetch 9,mem_mesh_upper_tran_layer_temp_packet_header_IVI_NID
+	store 9,mem_mesh_send_upper_layer_IVI_and_NID
+	store 9,mem_mesh_message_NID
+	rtn
+
+
+ali_mesh_upper_transport_layer_control_packet_load_app_control:
+	jam UPPER_TRAN_TMALL_MESSAGE,mem_mesh_upper_tran_layer_packet_type
+	fetch 1,mem_mesh_upper_tran_layer_temp_packet_TID
+	isolate1 BIT_UPPER_FLAG_VENDOR_INDICATION,temp
+	rtn true		//indication packet send app & tmall
+	setarg 0
+	rtn
+
+ali_mesh_store_tran_package_type:
+	add rega,ELEMENT_DEVICE_TRAN_PACKAGE_TYPE,contw
+	istore 1,contw
+	rtn
+
+
+ali_mesh_upper_transport_layer_queue_pop:
+	jam 0,mem_mesh_upper_tran_layer_packet_tid
+	call ali_mesh_upper_transport_layer_init_queue_param
+	arg mem_mesh_upper_tran_layer_queue_temp,rega
+	branch queue_pop
+
+ali_mesh_upper_transport_layer_control_packet_encrypt_access:
+	call ali_mesh_upper_transport_layer_send_access_message_calc_SEQ
+	call ali_mesh_upper_transport_layer_send_access_message_add_SEQ
+	fetch 9,mem_mesh_send_upper_layer_IVI_and_NID
+	store 9,mem_mesh_upper_tran_layer_temp_packet_header_IVI_NID
+	call ali_mesh_upper_transport_layer_control_packet_encrypt_access_load_payload
+	setarg 0
+	store 1,mem_mesh_ASZMIC
+	call ali_mesh_upper_transport_layer_calc_transport_mic
+
+	fetcht 1,mem_mesh_upper_transport_layer_payload_len
+	storet 1,mem_mesh_upper_tran_layer_temp_packet_length
+	copy temp,loopcnt
+	arg mem_mesh_access_layer_payload,contr
+	arg mem_mesh_upper_tran_layer_temp_pakcet_upper_tran_access_pdu,contw
+	call memcpy
+	
+	sub temp,UNSEGMENTED_ACCESS_MESSAGE_MAX_UPPER_TRANSPORT_ACCESS_PDU_LEN,null
+	nbranch ali_mesh_upper_transport_layer_control_packet_encrypt_access_segment_msg,positive
+ali_mesh_upper_transport_layer_control_packet_encrypt_access_unsegment_msg:
+	arg mem_mesh_upper_tran_layer_temp_packet_transmit_delay,rega
+	call queue_store_new_ele
+	branch ali_mesh_lower_transport_layer_send_unsegmented_access_message
+
+ali_mesh_upper_transport_layer_control_packet_encrypt_access_segment_msg:
+	call ali_mesh_upper_transport_layer_send_segmented_access_message_get_SeqZero_SegON
+	fetch 4,mem_mesh_segmented_lower_transport_layer_SegZero
+	store 4,mem_mesh_upper_tran_layer_temp_segmented_pakcet_SeqZero
+	arg mem_mesh_upper_tran_layer_temp_packet_transmit_delay,rega
+	call queue_store_new_ele
+	branch ali_mesh_upper_transport_layer_split_segmented_msg_to_lower_tran_layer
+
+ali_mesh_upper_transport_layer_control_packet_encrypt_access_load_payload:
+	fetch 1,mem_mesh_upper_tran_layer_temp_packet_length
+	copy pdata,loopcnt
+	store 1,mem_mesh_access_layer_payload_len
+	fetch 1,mem_mesh_upper_tran_layer_temp_pakcet_AKF_AID
+	store 1,mem_mesh_message_Transport_Head
+	arg mem_mesh_upper_tran_layer_temp_pakcet_upper_tran_access_pdu,contr
+	arg mem_mesh_access_layer_payload,contw
+	branch memcpy
+
+ali_mesh_upper_transport_layer_split_segmented_msg_to_lower_tran_layer:
+	call ali_mesh_upper_transport_layer_send_segmented_access_message_calc_header
+	setarg mem_mesh_access_payload
+	store 2,mem_mesh_upper_transport_layer_payload_ptr
+ali_mesh_upper_transport_layer_send_segmented_access_message_loop:
+	call ali_mesh_upper_transport_layer_control_packet_load_header
+	call ali_mesh_upper_transport_layer_send_access_message_calc_SEQ
+	call ali_mesh_upper_transport_layer_send_access_message_add_SEQ
+
+	fetcht 1,mem_mesh_access_layer_payload_len
+	setarg SEGMENTED_ACCESS_MESSAGE_UNINT_PDU_LEN
+	call not_greater_than
+	copy pdata,rega
+	copy temp,pdata
+	isub rega,pdata
+	store 1,mem_mesh_access_layer_payload_len
+	fetch 2,mem_mesh_upper_transport_layer_payload_ptr
+	copy pdata,contr
+	iadd rega,temp
+	storet 2,mem_mesh_upper_transport_layer_payload_ptr
+	call ali_mesh_lower_transport_layer_send_segmented_access_message
+	fetch 1,mem_mesh_access_layer_payload_len
+	rtn blank
+	fetch 1,mem_mesh_segmented_lower_transport_layer_SegO
+	pincrease 1
+	store 1,mem_mesh_segmented_lower_transport_layer_SegO
+	call ali_mesh_upper_transport_layer_send_segmented_access_message_calc_header
+	branch ali_mesh_upper_transport_layer_send_segmented_access_message_loop
+
+
+
+//upper层计算transport mic值
+ali_mesh_upper_transport_layer_calc_transport_mic:
+	fetch 1,mem_mesh_message_Transport_Head
+	bbit0 TRANSPORT_HEAD_BIT_AKF,ali_mesh_upper_transport_layer_calc_transport_mic_by_DeviceKey
+ali_mesh_upper_transport_layer_calc_transport_mic_by_AppKey:
+	call ali_mesh_upper_transport_layer_load_application_nonce_and_application_key
+	branch ali_mesh_upper_transport_layer_calc_transport_mic_encrypt_AESCCM
+ali_mesh_upper_transport_layer_calc_transport_mic_by_DeviceKey:
+	call ali_mesh_upper_transport_layer_load_device_nonce_and_device_key
+ali_mesh_upper_transport_layer_calc_transport_mic_encrypt_AESCCM:
+	fetch 1,mem_mesh_access_layer_payload_len
+	add pdata,4,temp
+	storet 1,mem_mesh_upper_transport_layer_payload_len
+	arg mem_mesh_access_layer_payload,temp
+	branch ali_CCM_encrypt
+
+
+
+//累加SEQ的值
+ali_mesh_upper_transport_layer_send_access_message_calc_SEQ:
+	fetch 3,mem_mesh_send_message_SEQ
+	pincrease 1
+	store 3,mem_mesh_send_message_SEQ
+	fetch 1,mem_mesh_gatt_package_send_msg_id
+	pincrease 1
+	store 1,mem_mesh_gatt_package_send_msg_id
+	fetch 2,mem_mesh_cb_seq_changed
+	branch callback_func
+
+
+
+ali_mesh_upper_transport_layer_send_access_message_add_NID_SRC_TTL_SEQ_DST:
+	fetch 1,mem_mesh_IV_Index+3
+	lshift4 pdata,pdata
+	lshift3 pdata,pdata
+	fetcht 1,mem_k2_NID
+	ior temp,pdata
+	store 1,mem_mesh_send_upper_layer_IVI_and_NID
+	fetch 1,mem_mesh_send_message_TTL
+	store 1,mem_mesh_send_upper_layer_CTL_and_TTL
+	fetch 2,mem_mesh_send_message_SRC
+	store 2,mem_mesh_send_upper_layer_SRC
+	fetch 2,mem_mesh_send_message_DST
+	store 2,mem_mesh_send_upper_layer_DST
+
+ali_mesh_upper_transport_layer_send_access_message_add_SEQ:
+	fetch 3,mem_mesh_send_message_SEQ
+	store 3,mem_mesh_send_upper_layer_SEQ
+	arg mem_mesh_send_upper_layer_SEQ,rega
+	arg 3,loopcnt
+	call inverse_data
+	fetch 8,mem_mesh_send_upper_layer_CTL_and_TTL
+	store 8,mem_mesh_message_TTL
+	rtn
+
+ali_mesh_upper_transport_layer_send_segmented_access_message_get_SeqZero_SegON:
+	fetch 1,mem_mesh_upper_transport_layer_payload_len
+	div pdata,SEGMENTED_ACCESS_MESSAGE_UNINT_PDU_LEN
+	call wait_div_end
+	quotient temp
+	remainder pdata
+	call ali_mesh_upper_transport_layer_send_segmented_access_message_sub_SegN_one,blank
+	storet 1,mem_mesh_segmented_lower_transport_layer_SegN
+	jam 0,mem_mesh_segmented_lower_transport_layer_SegO
+	fetch 3,mem_mesh_send_message_SEQ
+	arg 0x1fff,temp
+	iand temp,pdata
+	store 2,mem_mesh_segmented_lower_transport_layer_SegZero
+	rtn
+
+ali_mesh_upper_transport_layer_send_segmented_access_message_calc_header:
+	fetch 2,mem_mesh_segmented_lower_transport_layer_SegZero
+	lshift4 pdata,pdata
+	lshift pdata,pdata
+	fetcht 1,mem_mesh_segmented_lower_transport_layer_SegO
+	ior temp,pdata
+	lshift4 pdata,pdata
+	lshift pdata,pdata
+	fetcht 1,mem_mesh_segmented_lower_transport_layer_SegN
+	ior temp,pdata
+	store 3,mem_mesh_segmented_access_lower_transport_layer_SZMIC_SeqZero_SegO_SegN
+	arg 3,loopcnt
+	arg mem_mesh_segmented_access_lower_transport_layer_SZMIC_SeqZero_SegO_SegN,rega
+	branch inverse_data
+
+ali_mesh_upper_transport_layer_receive_new_msg_timer:
+	arg mem_mesh_upper_receive_new_message_timer,regc
+	arg ali_mesh_upper_transport_layer_receive_new_msg_timeout, regb
+	branch timer_single_step
+
+ali_mesh_upper_transport_layer_receive_new_msg_timeout:
+	arg 40,loopcnt
+	arg mem_mesh_access_message_mic_cache,contw
+	branch clear_mem
+
+
+ali_mesh_upper_transport_layer_send_segmented_access_message_sub_SegN_one:
+	increase -1,temp
+	rtn
+
+ali_mesh_upper_transport_layer_clear_tx_buffer:
+	branch ali_mesh_stop_send_indication_packet
+
+ifdef mesh_debug_log
+ali_mesh_loggint_tx_info_upper_send_packet:
+	arg mem_mesh_access_layer_payload,rega
+	fetchr loopcnt,1,mem_mesh_access_layer_payload_len
+	arg MESH_UPPER_SEND_PACKET,regb
+	branch logging_tx_info
+endif
+
+ali_mesh_upper_transport_layer_init_queue_param:
+	setarg mem_mesh_upper_tran_layer_queue_each_size
+	store 2,mem_queue_ptr
+	rtn
+
+
Index: usb_pc_ai_voice/program/patch.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/patch.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/patch.prog	(working copy)
@@ -0,0 +1,1404 @@
+
+//define UART_LOG
+define FREQ_16M
+
+	bbit1 8,pf_patch_ext
+	beq patch00_0,p_soft_reset
+	beq patch00_2,p_main_loop
+	beq patch02_1,p_set_sync_on
+	beq patch02_4,p_set_lemode
+	beq patch02_5,p_rf_rx_enable
+	beq patch03_0,p_txon
+	beq patch03_1,p_set_tx_power
+	beq patch03_2,p_initialize_radio_cont
+	beq patch03_4,p_aac_ghpc
+	beq patch06_7,p_dongle_default_init
+	beq patch07_0,p_dongle_read_kb_bind_status
+	beq patch07_1,p_dongle_write_kb_bind_status
+	beq patch07_5,p_dongle_usb_dispatch
+	beq patch07_6,p_dongle_work_mode_auto
+	beq patch16_1,p_app_init
+	beq patch18_5,p_otp_read_data
+	beq patch1b_2,p_sadc_calibration
+	beq patch1b_4,p_enable_adc
+	beq patch1f_5,p_usb_isr
+	beq patch1f_6,p_usb_init
+	beq patch1f_7,p_usb_rx
+	branch assert
+
+pf_patch_ext:
+	beq patch20_0,p_usb_class_type
+	beq patch20_2,p_usb0_request_get_descriptor
+	beq patch20_6,p_usb_tx
+	beq patch2d_6,p_g24_receive_update_rxbuff
+	beq patch2d_7,p_g24_receive_skip_end
+	beq patch2e_2,p_g24_transmit_packet
+	beq patch2e_3,p_g24_transmit_prep
+	beq patch2e_5,p_g24_read_len_pid_crc
+	beq patch2f_6,p_g24_pair_param_init
+	beq patch30_1,p_g24_bind_data_process
+	beq patch30_2,p_g24_bind_data_parse_next
+	beq patch30_4,p_g24_receive_packet_parse_end
+	beq patch30_5,p_g24_rx_interrupt_clear
+	beq patch31_0,p_g24_mode_switch_bind_search
+	beq patch31_2,p_g24_bind_mode_auto
+	beq patch31_3,p_g24_search_mode_auto
+	rtneq patch3f_7
+	branch assert
+
+p_soft_reset:
+	clear_stack
+	until null,lpo_edge
+	fetch 1,mem_lpm_hv_sel
+	call lpm_write_sel_hv
+	nop 30000
+	branch soft_reset+2
+
+p_main_loop:
+ifdef SECURE_CONNECTION
+	call sp_calc_sequence_256
+	call sp_calc_sequence_256_check
+endif
+	call le_advertising_dispatch
+	call idle_dispatch
+	call app_process_idle
+	call connection_dispatch
+	call g24_dispatch
+	call lpm_dispatch
+	branch p_main_loop
+
+p_set_sync_on:
+	jam 0x60,0x8a0f
+	jam 0xaa,0x8a10
+	jam 0x7a,0x8a12
+	jam 0x00,0x8a25
+	jam 0x00,0x8a26
+	nop 60
+	jam 0x20,0x8a20
+	jam 0xf5,0x8a23
+	branch set_sync_on_next
+
+p_aac_ghpc:
+	jam 0x30,0x8a20
+	jam 0xdd,0x8a23
+	call calc_freq
+	setarg 0
+	store 2,mem_pdatatemp
+	arg 15000,temp
+p_wait_cal_done:
+	fetch 2,mem_pdatatemp
+	increase 1,pdata
+	store 2,mem_pdatatemp
+	isub temp,null
+	branch soft_reset_chip,positive
+	fetch 1,0x8a7c
+	bbit0 0,p_wait_cal_done
+	branch wait_cal_done+2
+
+p_set_ck2rfpll:
+	until null,lpo_edge
+	jam 0x58,0x813c
+	branch lpm_write_wait
+
+p_initialize_radio_cont:
+	jam 0x40,core_rx_cfg0
+	jam 0x0d,0x8946
+	jam 0x10,0x896f
+
+	jam 0xcd,0x8a13
+	
+	jam 0x10,0x8a06
+	jam 0x4a,0x8a84
+	jam 0x40,0x8a85
+	jam 0xfe,0x8a16
+	call p_set_otp_config
+//	branch initialize_radio_cont+1
+	fetch 1,mem_wdt_always_work
+	call wdt_set_disable,blank
+
+	ncall p_set_ck2rfpll,wake
+
+	until null,lpo_edge
+	jam 0x5f,0x813b
+ifdef FREQ_16M
+	fetch 1,mem_fcomp_div
+	beq XTAL_16M,p_initialize_radio_16m
+endif
+	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
+p_initialize_radio2:
+	jam 0x60,0x8a86
+	jam 0x3b,0x8a8b
+	call p_dpll_on
+	jam 0,core_config
+	jam CLKSEL_DPLL,core_clksel
+	setarg 0x557474
+	store 3,0x8968
+	jam 0x6e,0x8960
+	call p_rx_dcoc
+	call p_rfpll_aac_ghpc
+	call p_set_xtal_cap
+	jam SYSTEM_CLK_12M,mem_system_clk
+	call sadc_calibration
+	branch p_dpll_ring_ibias_calc
+
+p_set_xtal_cap:
+	rtn wake
+	until null,lpo_edge
+	fetch 1,mem_xtal_c_sel
+	store 1,core_xtal_cap
+	branch lpm_write_wait
+
+p_dpll_on:
+ifdef FREQ_16M
+	fetch 1,mem_fcomp_div
+	beq XTAL_24M,p_dpll_on_24m
+	fetch 1,mem_ring_ibias_trim
+	or_into 0x06,pdata
+	store 1,0x8a02
+	jam 0xe0,0x8a05
+endif
+p_dpll_on_24m:
+	jam 0xd8,0x8a00
+	nop 60
+	jam 0xa0,0x8a01
+	jam 0xdf,0x8a00
+	jam 0xfa,0x8a01
+	nop 20
+	jam 0x9f,0x8a00
+	rtn
+ifdef FREQ_16M
+p_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 p_initialize_radio2
+endif
+
+p_set_tx_power:
+	fetch 1,mem_tx_power
+	beq TX_POWER_6DB,set_tx_power_7db
+	beq TX_POWER_F30DB,p_set_tx_power_f30db
+	beq TX_POWER_F35DB,p_set_tx_power_f35db
+	beq TX_POWER_F40DB,p_set_tx_power_f40db
+	branch set_tx_power+2
+
+
+p_set_tx_power_f30db:
+	jam 0x17,0x8a14
+	setarg 0x250300
+	store 3,0x8a60
+	branch set_tx_power_8a63_28
+
+p_set_tx_power_f35db:
+	jam 0x17,0x8a14
+	setarg 0x250100
+	store 3,0x8a60
+	branch set_tx_power_8a63_28
+
+p_set_tx_power_f40db:
+	jam 0x17,0x8a14
+	setarg 0x250000
+	store 3,0x8a60
+	branch set_tx_power_8a63_28
+
+p_otp_read_data:
+	call enable_otp_read			//read enable
+	call otp_read_data+1
+	branch otp_disable_chgpump	//disable otp
+
+p_dongle_write_kb_bind_status:
+	arg 1,loopcnt
+	arg mem_dg_kb_bind_flag,rega
+	arg DONGLE_KB_BIND_OTP_OFFECT,regb
+	branch otp_write
+
+p_dongle_read_kb_bind_status:
+	arg DONGLE_KB_BIND_OTP_OFFECT,regb
+	branch dongle_read_kb_bind_status+2
+
+p_set_otp_config:
+	branch p_set_otp_config_wake, wake
+	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
+
+p_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
+
+p_set_otp_config_wake:
+	fetch 2,mem_otp_charge_pump_x
+	rtn blank
+	store 2,mem_otp_charge_pump
+	branch p_set_otp_config2
+
+p_rf_rx_enable:
+	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
+	branch rf_rx_enable+14
+
+p_txon:
+	setarg 0x0aaa7e
+	store 3,0x8a0f
+	nop 60
+	jam 0x00,0x8a25
+	jam 0x0d,0x8a26
+	jam 0xf6,0x8a16
+	branch txon+7
+
+
+p_usb_rx_data:
+	fetch 1,core_usb_txbusy
+	rtnbit1 USB_STATUS_RXFULL
+	branch usb_rx_data
+
+p_usb_rx:
+	fetch 1,mem_usb_status
+	rtnbit0 USB_STATUS_RXREADY
+	call usb_rx_len
+	compare 13,temp,0xff
+	branch usb_rx_ep13,true
+
+	fetch 1,mem_setreport_count
+	beq 1,p_setreport_next_page_data
+
+	arg mem_usb_setup,contw
+	call usb_rx_read
+p_usb_rx_next:
+	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
+	branch p_usb_class_type
+
+p_setreport_next_page_data:
+	arg mem_usb0_set_report_data,contw
+	call usb_rx_read
+
+	jam 0,mem_setreport_count
+	fetch 1,mem_usb_read_len
+	beq 0x01,p_usb_out_one_byte	// HUAWEI pad led status
+
+	jam 1,mem_usb0_get_set_report
+	jam 0x03,core_usb_clear_nak
+	rtn
+
+p_usb_out_one_byte:
+	fetch 1,mem_usb_setup
+	rtnbit1 7	// OUT_DEVICE
+	fetch 1,mem_usb0_set_report_data
+	branch usb_out_one_byte+2
+
+p_usb_class_type:
+	set0 mark_isstr,mark
+	fetch 1,mem_usb_setup_bmRequestType
+	and_into 0x80,pdata
+	beq IN_DEVICE,p_usb_in_device
+	beq OUT_DEVICE,p_usb_out_device
+	branch assert
+
+//=================================yichip usb-if  fixed=======================================//
+//fixed usb-if get endpoint stats->out no respond
+p_usb_in_device:
+	fetch 1,mem_usb_setup_bmRequestType
+	rshift4 pdata,pdata
+	rshift pdata,pdata
+	and_into 0x03,pdata
+	beq STANDARD_REQ,p_usb_in_standard_req
+	branch usb_in_device+5
+
+p_usb_in_standard_req:
+	fetch 1,mem_usb_setup_bRequest
+	beq GET_STATUS,p_usb0_request_get_status
+	branch usb_in_standard_req+1
+
+p_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_ENDPOINT,p_usb0_get_status_in_endpoint
+	branch usb0_request_get_status+13
+
+p_usb0_get_status_in_endpoint:
+	fetch 1,mem_usb0_state
+	bne DEV_CONFIGURED,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex
+	beq OUT_EP2,usb0_get_status_in_ep_in_ep2
+	beq OUT_EP3,usb0_get_status_in_ep_in_ep3
+	branch usb0_get_status_in_endpoint+3
+
+//fixed usb-if set/clear feature get endpoint stats->out no respond
+p_usb_out_standard_req:
+	fetch 1,mem_usb_setup_bRequest
+	beq CLEAR_FEATURE,p_usb0_request_clear_feature
+	beq SET_FEATURE,p_usb0_request_set_feature
+	branch usb_out_standard_req+3
+
+p_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_ENDPOINT,p_usb0_request_clear_feature_out_endpoint
+	branch usb0_request_clear_feature+11
+
+p_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 OUT_EP2,usb0_force_stall_ep2_in_off
+	beq OUT_EP3,usb0_force_stall_ep3_in_off
+	branch usb0_request_clear_feature_out_endpoint+3
+
+p_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_ENDPOINT,p_usb0_request_set_feature_out_endpoint
+	branch usb0_request_set_feature+5
+
+p_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 OUT_EP2,usb0_force_stall_ep2_in_on
+	beq OUT_EP3,usb0_force_stall_ep3_in_on
+	branch usb0_request_set_feature_out_endpoint+5
+	
+p_usb_out_device:
+	fetch 1,mem_usb_setup_bmRequestType
+	rshift4 pdata,pdata
+	rshift pdata,pdata
+	and_into 0x03,pdata
+	beq STANDARD_REQ,p_usb_out_standard_req
+	beq CLASS_REQ,p_usb_out_class_req
+	beq MANUFACTURER_REQ,usb_out_manufacturer_req
+	branch assert
+
+p_usb_out_class_req:
+	fetch 1,mem_usb_setup_bRequest
+	beq SET_IDLE,usb_set_idle
+	beq SET_REPORT,p_usb_set_report
+	beq SET_PROTOCOL,usb_set_protocol_req
+	branch usb0_force_stall
+
+p_usb_set_report:
+	nop 15000		//delay 1ms
+	arg mem_usb0_set_report_data,contw
+	call p_usb_rx_data
+	jam 1,mem_usb0_get_set_report
+	call usb_set_report_resume_judge
+
+	fetch 1,mem_setreport_count
+	pincrease 1
+	store 1,mem_setreport_count
+
+	fetch 2,mem_usb_setup_bValue
+	store 2,mem_usb_setup_bValue_temp
+	jam 0x2,core_usb_clear_nak
+	branch usb_set_report_next
+
+p_usb_tx:
+	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 p_usb_tx_data_ep1
+	branch p_usb_tx_data_ep2
+
+p_usb_tx_data_ep1:
+	fetch 1,core_usb_txbusy
+	and_into 0x0f,pdata
+	nrtn blank
+	branch usb_tx_data_ep1+2
+p_usb_tx_data_ep2:
+	fetch 1,core_usb_txbusy
+	and_into 0x0f,pdata
+	nrtn blank
+	branch usb_tx_data_ep2+2
+
+p_rx_dcoc:
+	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 p_rx_dcoc_avg
+	isolate1 13,rega
+	call qset_start
+	isolate1 13,regb
+	call qset_p
+	arg 5,queue
+p_rx_dcoc_loop2:
+	call qset1_p
+	call qset_p
+	call p_rx_dcoc_avg
+	arg 0x8ac2,contw
+	rshift4 rega,pdata
+	call qsetxor
+	rshift4 regb,pdata
+	call qsetxor
+	increase -1,queue
+	branch p_rx_dcoc_loop2,positive
+	branch rx_dcoc_loop2+10
+
+p_rx_dcoc_avg:
+	nop 60
+	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
+	branch rx_dcoc_loop
+
+p_rfpll_aac_ghpc:
+	rtn wake
+	branch rfpll_aac_ghpc+1
+
+p_dpll_ring_ibias_calc:
+	rtn
+
+p_sadc_calibration:
+	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
+	nop 3000
+	call p_sadc_read
+	jam 0xc1,core_gpadc_cfg0
+	fetchr regb,1,mem_spi_write_addr
+	arg 8,loopcnt	//rg_gpadc_sar_dat_sel c0-c7
+	call sadc_cal_read+1
+	fetch 1,mem_spi_write_addr
+	store 1,mem_adc_cal_c7
+	storer regb,1,mem_spi_write_addr
+	rtn
+
+p_enable_adc:
+	call p_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 0x01,core_gpadc_cfg3
+	call sadc_channel
+	fetch 1,mem_adc_clkdiv
+	store 1,core_sadc_clkdiv
+	nop 3000
+	call p_sadc_read
+	jam 0,core_sadc_clkdiv
+	branch sadc_dma
+
+p_sadc_cal_write:
+	fetch 1,core_sadc_ctrl
+	set1 1,pdata
+	store 1,core_sadc_ctrl
+	fetchr regb,1,mem_spi_write_addr
+	fetch 1,mem_adc_cal_c7
+	store 1,mem_spi_write_addr
+	arg 8,loopcnt	//rg_gpadc_sar_dat_sel c0-c7
+	call sadc_cal_write+4
+	storer regb,1,mem_spi_write_addr
+	rtn
+
+p_sadc_read:
+	jam 0x03,core_sadc_ctrl
+p_sadc_read_wait:
+	fetch 1,core_perf_status
+	bbit0 SARADC_DONE,p_sadc_read_wait
+	fetcht 2,core_sadc_data
+	storet 2,mem_adc_current_value
+	jam 0x00,core_sadc_ctrl
+	rtn
+
+p_set_lemode:
+	jam 0x11,0x8a82
+	jam 0x12,0x8a8d
+	jam 0x0a,0x8a8e
+ifdef FREQ_16M
+	fetch 1,mem_fcomp_div
+	beq XTAL_16M,p_set_lemode_2m_16m
+endif
+	setarg 0x5762
+	store 2,0x8907
+p_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
+ifdef FREQ_16M
+	fetch 1,mem_fcomp_div
+	beq XTAL_16M,p_set_lemode_1m_16m
+endif
+	setarg 0x2bb1
+	store 2,0x8907
+p_set_lemode_1m:
+	rtnmark0 mark_ble_lr
+	jam 0x24,0x8930
+	jam 5,0x8901
+	rtn
+
+ifdef FREQ_16M
+p_set_lemode_1m_16m:
+	setarg 0x4189
+	store 2,0x8907
+	branch p_set_lemode_1m
+
+p_set_lemode_2m_16m:
+	setarg 0x8312
+	store 2,0x8907
+	branch p_set_lemode_2m
+endif
+//==============usb config================//
+p_usb0_request_get_descriptor:
+	fetch 1,mem_usb_setup_bValueH
+	beq DSC_DEVICE,dsc_device_info
+	beq DSC_CONFIG,p_dsc_config_info	
+	beq DSC_STRING,dsc_string_info
+	beq DSC_HID,p_dsc_hid_info
+	beq DSC_HID_REPORT,p_dsc_hid_report_info
+	branch usb0_force_stall
+
+p_dsc_config_info:
+	setarg mem_confdesc_all
+	fetcht 1,mem_confdesc_all
+	branch dsc_info_set_data_len
+
+p_dsc_hid_info:
+	jam 0,mem_usb_get_protocol_flag
+	fetch 1,mem_usb_setup_wIndex
+	beq 0,p_dsc_hid_info_interface0
+	beq 1,p_dsc_hid_info_interface1
+	beq 2,p_dsc_hid_info_interface2
+	branch usb0_force_stall
+
+p_dsc_hid_info_interface0:
+	fetchr regb,1,mem_confdesc_all+19
+	arg mem_confdesc_all+19,rega
+	branch usb0_respond
+
+p_dsc_hid_info_interface1:
+	fetchr regb,1,mem_confdesc_all+44
+	arg mem_confdesc_all+44,rega
+	branch usb0_respond
+
+p_dsc_hid_info_interface2:
+	fetchr regb,1,mem_confdesc_all+69
+	arg mem_confdesc_all+69,rega
+	branch usb0_respond
+	
+//==============usb report================//	
+p_dsc_hid_report_info:
+	fetch 2,mem_usb_setup_wIndex
+	beq 0,p_dsc_hid_report_info0
+	beq 1,p_dsc_hid_report_info1
+	beq 2,p_dsc_hid_report_info2
+	branch usb0_force_stall
+	
+p_dsc_hid_report_info0:
+	fetchr regb,1,mem_hidreportdesc_Interface0_kb
+	setarg mem_hidreportdesc_Interface0_kb
+	branch p_usb0_respond_set
+
+p_dsc_hid_report_info1:
+	fetchr rega,2,mem_hidreportdesc_m
+	branch usb0_respond_length
+
+p_dsc_hid_report_info2:
+	jam 1,mem_usb_device_enumeration_endflag
+	jam USB_GOT_REPORT_REQ,mem_usb_state
+	fetchr regb,1,mem_hidreportdesc_Interface2_pc
+	setarg mem_hidreportdesc_Interface2_pc
+p_usb0_respond_set:
+	increase 1,pdata
+	copy pdata,rega
+	branch usb0_respond
+
+p_usb_init:
+	call enable_authrom
+	call usb_init_param
+p_usb_init_restart:
+	setarg mem_usb_clear_mem0_end
+	arg mem_usb_clear_mem0_start,contw
+	isub contw,loopcnt
+	call clear_mem
+
+	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_new
+	store 2,core_usb_rx_saddr
+	store 2,core_usb_rxptr
+	setarg mem_usb_rxbuf_new_end
+	store 2,core_usb_rx_eaddr
+	branch usb_init_next
+
+p_usb_isr:
+	fetch 1,core_usb_status
+	isolate1 USB_STATUS_RESET,pdata
+	call p_usb_init_restart,true
+	branch usb_isr+4
+
+//=================================================Application Interface===================================================//
+p_g24_search_mode_auto:
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_SEARCH
+	call g24_search_mode_init
+	call g24_auto_addr_ch_search
+	call p_g24_receive_transmit_ack
+	nbranch g24_rx_interrupt_clear,user3
+	call g24_receiver_addr_check
+	call p_g24_receive_packet_parse,zero
+
+	fetch 1,mem_24g_abort_packet
+	call g24_mode_B_S_switch_stop,blank	//works on auto pair only
+	//call g24_auto_bind_config_self
+	branch g24_search_mode_auto+11
+
+p_g24_bind_data_parse_next:
+	fetch 1,mem_24g_rxdata_temp_new+2
+	beq DATATYPE_BIND,p_g24_bind_first_step	//bind step 1
+	beq DATATYPE_CONFIG,p_g24_bind_second_step
+	beq DATATYPE_OK,p_g24_bind_third_step
+	beq DATATYPE_ATTEMP,p_g24_data_attemp
+	rtn
+
+p_g24_bind_first_step:
+	fetch 1,mem_24g_rxdata_temp_new+3
+	branch g24_bind_first_step+1
+
+p_g24_bind_second_step:
+	fetch 1,mem_24g_pair_switch
+	branch p_g24_bind_second_step_skip,blank
+	fetch 4,mem_24g_rxdata_temp_new+4
+	fetcht 4,mem_24g_lap
+	isub temp,null
+	nrtn zero
+p_g24_bind_second_step_skip:	
+	fetch 1,mem_24g_rxdata_temp_new+3
+	branch g24_bind_second_step_skip+1
+
+p_g24_data_attemp:
+	fetch 1,mem_24g_rxdata_temp_new+3
+	beq DATATYPE_DEVICE1,p_g24_data_attemp_device1
+	beq DATATYPE_DEVICE2,p_g24_data_attemp_device2
+	rtn
+p_g24_data_attemp_device1:
+	fetch 1,mem_24g_device1_bind_disable
+	nrtn blank
+	fetch 4,mem_24g_rxdata_temp_new+4
+	store 4,mem_24g_transmitter_addr
+	branch g24_store_device1_addr
+
+p_g24_data_attemp_device2:
+	fetch 1,mem_24g_device2_bind_disable
+	nrtn blank
+	fetch 4,mem_24g_rxdata_temp_new+4
+	store 4,mem_24g_transmitter_addr	
+	branch g24_store_device2_addr
+
+p_g24_bind_third_step:
+	fetch 1,mem_24g_pair_switch
+	branch p_g24_bind_third_step_skip,blank
+	fetch 4,mem_24g_rxdata_temp_new+4
+	fetcht 4,mem_24g_transmitter_addr
+	isub temp,null
+	nrtn zero
+p_g24_bind_third_step_skip:
+	fetch 1,mem_24g_rxdata_temp_new+3
+	beq DATATYPE_DEVICE1,p_g24_bind_third_step_device1
+	beq DATATYPE_DEVICE2,p_g24_bind_third_step_device2
+	rtn
+
+p_g24_bind_third_step_device1:
+	fetch 1,mem_24g_device1_bind_disable
+	nrtn blank
+	fetch 1,mem_24g_device1_bind_step
+	beq 2,p_g24_bind_dvc1_step_success
+	rtn
+p_g24_bind_dvc1_step_success:
+	jam 1,mem_24g_device1_bind_disable
+	call g24_binding_dvc1_living	//works on auto pair only
+	branch g24_bind_dvc1_step_success+1
+
+p_g24_bind_third_step_device2:
+	fetch 1,mem_24g_device2_bind_disable
+	nrtn blank
+	fetch 1,mem_24g_device2_bind_step
+	bne 0,p_g24_bind_dvc2_step_success
+	rtn
+p_g24_bind_dvc2_step_success:
+	jam 1,mem_24g_device2_bind_disable
+	call g24_binding_dvc2_living	//works on auto pair only
+	branch g24_bind_dvc2_step_success+1
+
+p_g24_mode_switch_bind_search:
+	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_device1_bind_step
+	rtnne 0
+	fetch 1,mem_24g_device2_bind_step
+	rtnne 0
+	branch g24_mode_switch_bind_search+9
+
+p_g24_bind_mode_auto:
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_BIND
+	call p_g24_bind_init
+	branch g24_bind_mode_auto+4
+p_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
+	branch g24_bind_init+8
+
+p_dongle_usb_dispatch:
+//	call p_wdt_kick
+	branch dongle_usb_dispatch+1
+
+p_wdt_kick:
+	setarg 16	//about 125ms
+	branch wdt_init_config
+
+p_dongle_default_init:
+ifdef UART_LOG
+	call p_device_hardware_init
+endif
+	call dongle_default_init+1
+
+	fetch 1,mem_24g_pair_tx_power_init
+	store 1,mem_24g_pair_tx_power
+
+	jam ON,mem_24g_disable_fec1
+	call g24_enable_1M
+	fetch 1,mem_dg_sys_config
+	rtnbit0 DG_ENABLE_NEW_REVISION
+	jam ON,mem_24g_disable_fec1
+	branch g24_enable_2M
+
+p_g24_receive_skip_end:
+	fetch 1,mem_dg_sys_config
+	bbit0 DG_ENABLE_NEW_REVISION,g24_receive_skip_end+1
+	enable user3
+	nop 24
+	fetch 1,mem_24g_rxbuf_new+1
+	set1 bit_ack_24g,pdata
+	store 1,mem_24g_rxbuf_new+1	//sending ack once
+	call g24_ackpayload_prep
+	call g24_transmit_prep
+	branch g24_transmit
+
+//==============================================yichip 24g Interface================================================//
+p_g24_pair_param_init:
+	jam 0x4a,mem_24g_pair_ch
+	fetch 4,mem_24g_pair_addr_new
+	store 4,mem_24g_pair_addr
+	rtn
+
+p_app_init:
+	setarg dongle_dispatch
+	store 2,mem_cb_24g_receive_process
+	setarg p_dongle_g24_mouse
+	store 2,mem_cb_24g_data_device1
+	setarg p_dongle_g24_kb
+	store 2,mem_cb_24g_data_device2
+	setarg p_dongle_ackpayload_prep
+	store 2,mem_cb_24g_ackpayload
+	setarg dongle_usb_config
+	store 2,mem_cb_usb_config
+	branch usb_init
+
+p_dongle_ackpayload_prep:	
+	fetch 1,mem_24g_data_type
+	beq DATATYPE_DEVICE1,p_dongle_ackpayload_prep_mouse
+	beq DATATYPE_DEVICE2,p_dongle_ackpayload_prep_keyboard
+p_dongle_ackpayload_prep_mouse:
+	fetch 1,mem_dg_pc_sleep_flag
+	bbit1 0,p_dongle_pc_sleep_ackpayload_prep_mouse
+	branch p_dongle_ackpayload_prep_end
+
+p_dongle_pc_sleep_ackpayload_prep_mouse:
+	fetch 1,mem_dg_pc_sleep_flag
+	set0 0,pdata
+	store 1,mem_dg_pc_sleep_flag
+	branch p_dongle_pc_sleep_ackpayload_prep
+
+p_dongle_ackpayload_prep_keyboard:
+	fetch 1,mem_dg_pc_sleep_flag
+	bbit1 1,p_dongle_pc_sleep_ackpayload_prep_keyboard
+p_dongle_ackpayload_prep_end:
+	fetch 1,mem_24g_ackpayload_enable
+	beq BIND_ACKPAYLOAD,p_dongle_g24_bind_ackpayload_prep
+	beq KB_LED_ACKPAYLOAD,p_dongle_g24_kb_led_ackpayload_prep
+	rtn
+
+p_dongle_pc_sleep_ackpayload_prep_keyboard:
+	fetch 1,mem_dg_pc_sleep_flag
+	set0 1,pdata
+	store 1,mem_dg_pc_sleep_flag
+p_dongle_pc_sleep_ackpayload_prep:
+	jam 0x01,mem_24g_datalen
+	setarg 0xff
+p_dongle_24g_txbuf_new_store:
+	store 1,mem_24g_txbuf_new
+	rtn
+
+p_dongle_g24_bind_ackpayload_prep:
+	jam 1,mem_24g_ackpayload_enable
+	call p_g24_binding_device_check	//works on auto pair only
+	nrtn user3
+p_g24_bind_ackpayload_prep:
+	jam 1,mem_24g_ackpayload_enable
+	jam 0x08,mem_24g_datalen
+	arg mem_24g_bind_payload,contr
+	arg mem_24g_txbuf_new,contw
+	branch memcpy8
+
+p_dongle_g24_kb_led_ackpayload_prep:
+	fetch 1,mem_24g_rxbuf_new+2
+	beq DATATYPE_DEVICE1,p_dongle_g24_bind_ackpayload_prep
+	beq DATATYPE_ATTEMP,p_dongle_g24_bind_ackpayload_prep
+	jam 0,mem_usb_tx_win_enable
+	jam 0x01,mem_24g_datalen
+	fetch 1,mem_24g_led_status
+	branch p_dongle_24g_txbuf_new_store
+
+p_g24_binding_device_check:	//works on auto pair
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_BIND
+	fetch 1,mem_24g_pair_mode
+	nrtn blank
+	fetch 1,mem_24g_rxbuf_new+3
+	branch g24_binding_device_check+5
+
+
+p_g24_transmit_prep:
+	// total length
+	fetch 1,mem_24g_datalen
+	increase 3,pdata	//hec/data_type/data_len
+	store 1,mem_24g_txlen
+//hec
+	fetch 1,mem_24g_syncword_crc8
+	store 1,mem_24g_txpayload_new
+// prepare 5bit data type, 2bit PID, 1bit NO_ACK
+	fetch 1,mem_24g_data_type
+	lshift3 pdata,pdata
+	fetcht 1,mem_24g_pid
+	and temp,0x03,temp
+	lshift temp,temp
+	ior temp,pdata
+	fetcht 1,mem_24g_no_ack
+	iadd temp,pdata
+	istore 1,contw
+	fetch 1,mem_24g_datalen
+	istore 1,contw
+//prepare payload data
+	fetch 1,mem_24g_datalen
+	iforce loopcnt
+	arg mem_24g_txbuf_new,contr
+	call memcpy
+	branch g24_transmit_prep_pdu_end
+
+p_g24_transmit_packet:
+	bmark1 mark_ble_lr,p_g24_transmit_nolr
+	fetch 1,mem_24g_disable_fec1
+	nbranch p_g24_transmit_nolr,blank
+	disable encode_fec0	
+	enable encode_fec1	////lr use encode_fec3
+p_g24_transmit_nolr:
+	enable enable_white
+	enable enable_crc
+	fetch 1,mem_24g_txlen
+	iforce loopcnt
+	arg mem_24g_txpayload_new,contr
+	branch g24tr_loop
+
+p_g24_receive_update_rxbuff:
+	call g24_receive_byte
+	store 1,mem_24g_rxbuf_new
+	bmark1 mark_24g_rxmode,p_g24_receive_skip
+	fetch 1,mem_24g_rxbuf_new
+	rshift3 pdata,pdata				//device id
+	fetcht 1,mem_24g_data_type
+	icompare bits_data,temp
+	nbranch g24_type_error,true
+p_g24_receive_skip:
+	call g24_receive_byte
+	istore 1,contw
+	sub pdata,78,null
+	nbranch g24_len_over_error,positive	//max payload: 68bytes
+	copy pdata,loopcnt
+	branch g24rx_nopayload,zero
+	branch g24rx_loop
+
+p_g24_read_len_pid_crc:
+//read control
+	fetch 1,mem_24g_rxbuf_new+1
+	store 1,mem_24g_rxdata_length
+//get crc
+	increase 1,pdata
+	arg mem_24g_rxbuf_new+1,contr
+	iadd contr,contr
+	ifetch 3,contr
+	store 3,mem_24g_sta_crc
+//read pid
+	fetch 1,mem_24g_rxbuf_new
+	and pdata,0x01,temp
+	storet 1,mem_24g_rxdata_ack_flag
+	rshift pdata,temp
+	and temp,0x03,temp
+	storet 1,mem_24g_sta_pid
+	rshift3 pdata,pdata
+	store 1,mem_24g_rxbuf_new	//fixed rx_temp[device type]error problem
+	rtn
+
+p_g24_bind_data_process:
+	call g24_rx_interrupt_clear
+	call g24_receive_packet
+	nbranch g24_rx_interrupt_clear,user3
+	call p_g24_bind_data_parse
+	call p_g24_transmit_ack
+	call p_g24_bind_device_status_check
+	branch g24_bind_data_process+7
+
+p_g24_bind_data_parse:
+	jam BIND_MODE_CONTINUE,mem_24g_bind_mode_continue	//about 400ms
+	arg mem_24g_rxbuf_new,contr
+	arg mem_24g_rxdata_temp_new,contw
+	call memcpy8
+	branch g24_bind_data_parse_next
+
+p_g24_receive_transmit_ack:
+	call g24_rx_interrupt_clear
+	call g24_receive_packet
+	nrtn user3
+p_g24_transmit_ack:
+//data type
+	fetch 1,mem_24g_rxbuf_new
+	rshift3 pdata,pdata
+	store 1,mem_24g_data_type
+//read len pid crc
+	call p_g24_read_len_pid_crc
+//read ack
+	fetch 1,mem_24g_rxdata_ack_flag
+	isolate1 bit_ack_24g,pdata
+	branch g24tx_no_ack,true
+	branch g24tx_with_ack
+
+p_g24_bind_device_status_check:
+	fetch 1,mem_24g_bind_device_status
+	rtn blank
+p_g24_bind_device_status:
+	fetch 1,mem_24g_rxdata_temp_new+3
+	branch g24_bind_device_status+1
+
+p_dongle_work_mode_auto:
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_WORK
+	call p_g24_work_mode_start
+	call dongle_g24_blank_data_process
+	fetch 1,mem_24g_pair_mode
+	nrtn blank
+	fetch 1,mem_24g_ackpayload_enable
+	rtnne 0
+	fetch 1,mem_24g_nodata_timer_enable
+	rtn blank
+	arg G24_TIMER_NODATA,queue
+	call timer_check
+	nrtn blank
+	call g24_ch_process+3
+	branch g24_nodata_timer_over
+
+p_g24_ch_process:	
+	fetch 1,mem_24g_abort_packet
+	beq 1,rssi_noise_monitor
+	fetch 1,mem_24g_hop_packet
+	beq 1,g24_ch_receive_hop_pac
+	rtn
+
+p_g24_work_mode_start:
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_WORK
+	call g24_work_init
+	call p_g24_ch_process
+p_g24_receive_packet_start:
+	call p_g24_receive_transmit_ack
+	nbranch g24_rx_interrupt_clear,user3
+p_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_new,contr
+	arg mem_24g_rxdata_temp_new,contw
+	call memcpy
+	jam 0,mem_24g_mode_switch
+	fetch 1,mem_24g_pair_mode
+	call p_g24_enable_nodata_timer,blank
+p_g24_receive_packet_parse_end:
+	fetch 1,mem_24g_rxdata_temp_new+2
+	beq DATATYPE_ATTEMP,p_g24_data_receive_attemp	//reconn packet
+	//and pdata,0x03,pdata
+	beq DATATYPE_DEVICE1,p_g24_data_device1	//mouse
+	beq DATATYPE_DEVICE2,p_g24_data_device2	//keyboard
+p_g24_rx_interrupt_clear:
+	arg mem_24g_rxbuf_new,contw
+	arg 70,loopcnt
+	branch clear_mem
+
+p_g24_enable_nodata_timer:
+	fetch 1,mem_24g_bind_device_living
+	branch g24_enable_nodata_timer,blank
+	jam 1,mem_24g_nodata_timer_enable
+	setarg 1600
+	arg G24_TIMER_NODATA,queue
+	branch timer_init
+
+p_g24_data_receive_attemp:
+	call p_g24_bind_device_status		//works on auto pair only
+	branch p_g24_data_attemp
+
+p_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_new
+	isolate1 bit_abort,temp
+	setflag true,0,pdata
+	store 1,mem_24g_abort_packet
+	beq 1,p_g24_data_attemp_device1_abort
+	fetch 1,mem_24g_hop_packet
+	fetcht 1,mem_24g_rxdata_temp_new
+	branch g24_data_device1_next
+
+p_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_new+10
+	branch g24_store_device1_addr
+
+p_g24_data_device2:
+	call g24_binding_dvc2_living	//works on auto pair only
+	fetcht 1,mem_24g_rxdata_temp_new
+	isolate1 bit_abort,temp
+	branch p_g24_data_attemp_device2_abort,true
+	branch g24_data_device2+4
+
+p_g24_data_attemp_device2_abort:
+	fetch 4,mem_24g_rxdata_temp_new+10
+	branch g24_store_device2_addr	
+//================================================mouse data parase==============================================//
+
+p_dongle_g24_mouse:
+	setarg MS_REPORT_ID
+	store 1,mem_usb_mouse_data	//report id
+	fetch 7,mem_24g_rxdata_temp_new+3	//key
+	istore 7,contw
+	fetch 1,mem_24g_rxdata_temp_new+3	//key
+	ncall dongle_g24_ms_enable_blank_data_forcibly,blank//get kb data
+	fetch 1,mem_24g_rxdata_temp_new+3	//key
+	call dongle_g24_ms_disable_blank_data_forcibly,blank
+	branch dongle_usb_tx_ms_data
+
+//===============================================keyboard data parase=============================================//
+p_dongle_g24_kb:
+	fetch 1,mem_24g_rxdata_temp_new+3
+	beq 0,p_dongle_g24_kb_type0	//normal key
+	beq 2,p_dongle_g24_kb_type2	//system key
+	beq 3,p_dongle_g24_kb_type3	//multikey
+	branch g24_rx_interrupt_clear
+
+p_dongle_g24_kb_type0:
+	fetch 1,mem_24g_rxdata_temp_new+5
+	store 1,mem_24g_ackpayload_enable
+	jam 0,mem_24g_rxdata_temp_new+5
+	arg mem_usb_kb_data,contw
+	arg mem_24g_rxdata_temp_new+4,contr
+	branch dongle_g24_kb_type0+5
+
+p_dongle_g24_kb_type2:
+	arg mem_usb_kb_system,contw
+	arg mem_24g_rxdata_temp_new+3,contr
+	branch dongle_g24_kb_type2+2
+
+p_dongle_g24_kb_type3:
+	arg mem_usb_kb_multikey,contw
+	arg mem_24g_rxdata_temp_new+3,contr
+	branch dongle_g24_kb_type3+2
+//=================================================log Interface===================================================//
+ifdef UART_LOG
+p_device_hardware_init:
+	fetch 1,core_uart_ctrl
+	set0 BIT_UART_CONTROL_ENABLE,pdata
+	store 1,core_uart_ctrl
+	fetch 8,mem_device_uart_rx_buffer
+	call uarta_init_dma_mem
+	fetch uart_baud_len,mem_device_uart_baud_rate
+	call uarta_init_baud_rate
+	call uart_clock_select_main_freq_crystal
+	fetch 1,mem_device_uart_tx_gpio
+	arg gpcfg_uart_txd,temp
+	call p_gpio_config_function_int
+	fetch 1,mem_device_uart_rx_gpio
+	arg gpcfg_uart_rxd|gpcfg_pullup,temp
+	call p_gpio_config_function_int
+	arg FUN_UART_CONTROL_ENABLE|FUN_UART_CONTROL_SETTING_RATE_BAUD,temp
+	storet 1,core_uart_ctrl
+	rtn
+
+p_gpio_config_function_int:
+	rtneq 0xff
+	branch gpio_config_function_int
+
+
+
+p_24g_rxpayload_print:
+	arg mem_temp_block0,contw
+	call memset0_16
+	fetch 1,mem_24g_work_mode
+	store 1,mem_temp_block0
+	arg,mem_24g_rxbuf_new,contr
+	ifetch 8,contr
+	istore 8,contw
+	ifetch 7,contr
+	istore 7,contw
+
+	arg 16,loopcnt
+	arg mem_temp_block0,regc
+	call log_bytes
+	branch log_end
+
+p_24g_txpayload_print:
+	arg mem_temp_block0,contw
+	call memset0_16
+	fetch 1,mem_24g_work_mode
+	store 1,mem_temp_block0
+	fetch 1,mem_24g_txlen
+	istore 1,contw
+	arg,mem_24g_txpayload_new,contr
+	ifetch 8,contr
+	istore 8,contw
+	ifetch 6,contr
+	istore 6,contw
+
+	arg 16,loopcnt
+	arg mem_temp_block0,regc
+	call log_bytes
+	branch log_end
+
+//input: 1 byte hex @pdata
+//output: 4 byte  '0','x', ASCII,ASCII, @pdata
+hex2ascii:
+	rshift4 pdata,rega  //high 4bit in rega
+	and_into 0x0f,pdata
+	call hex2ascii_half_byte
+	copy pdata,regb
+	copy rega,pdata
+	call hex2ascii_half_byte
+	lshift8 regb,regb
+	iadd regb,pdata
+//	lshift16 pdata,pdata
+//	arg 0x7830,regb   //0x
+//	iadd regb,pdata
+	rtn
+
+//input: 1 byte hex @pdata
+//output: 4 byte  '0','x', ASCII,ASCII, @pdata
+hex2ascii_half_byte:
+	arg 0xa,temp
+	isub temp,temp
+	nbranch hex2ascii_half_byte_numberic,positive
+	setarg 0x41  // A
+	iadd temp,pdata
+	rtn
+hex2ascii_half_byte_numberic:
+	arg 0x30,temp
+	iadd temp,pdata
+	rtn
+
+//input: loopcnt--length,regc--data ptr
+log_bytes:
+	copy loopcnt,pdata
+	branch log_len0,blank
+log_bytes_loop:
+	ifetch 1,regc
+	increase 1,regc
+	call log_byte
+	call log_space
+	loop log_bytes_loop
+uart_wait:
+	fetch 1,core_uart_status
+	bbit1 uart_status_tx_busy,uart_wait
+//	nop 12000
+	rtn
+
+log_len0:
+	call uarta_prepare_tx
+	setarg 0x656c
+	istore 2,contwu
+	setarg 0x306e
+	istore 2,contwu
+	call uarta_send
+	branch log_end
+
+//input 1byte @pdata
+log_byte:
+	call uarta_prepare_tx
+	call hex2ascii
+//	istore 4,contu	//0x
+	istore 2,contwu
+	branch uarta_send
+
+log_space:
+	call uarta_prepare_tx
+	setarg 0x20
+	istore 1,contwu
+	branch uarta_send
+
+log_end:
+	call uarta_prepare_tx
+	setarg 0x0a0d
+	istore 2,contwu
+	branch uarta_send
+
+log_colon:
+	call uarta_prepare_tx
+	setarg 0x3a
+	istore 1,contwu
+	branch uarta_send
+
+endif
Index: usb_pc_ai_voice/program/peripherals.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/peripherals.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/peripherals.prog	(working copy)
@@ -0,0 +1,3115 @@
+
+
+
+/* ===================== two wire SPI gpio ======================= */
+
+//pdata:gpio number
+twspi_reset:
+	bpatch patch18_1,mem_patch18
+	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
+	store 1,mem_lpm_ldo_sel
+	branch lpm_write_io_vsel
+
+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
+	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
+
+	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 load_otp_hv_vsel	
+	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	
+	call iicd_load_gpio_init
+	call clear_eeprom_size_2k
+	fetch 1,mem_ucode_flag
+	bbit1 OTP_UFLAG_SKIP_EEP,loadcode_spi
+	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 23,mem_eeprom_scl_gpio  //8
+	jam 22,mem_eeprom_sda_gpio //7
+	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:
+	and_into 0xe0,pdata
+	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 patch18_2,mem_patch18
+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 patch18_3,mem_patch18
+	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 patch18_4,mem_patch18
+	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 patch18_5,mem_patch18
+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_MESH,app_lpm_mesh_lock
+	beq DVC_OP_KEYBOARD,app_lpm_kb_lock
+	branch app_lpm_mpu_lock_24g_ble
+
+
+app_lpm_mesh_lock:
+	arg car_init,pdata  //car
+	arg shutter_dy_shutter_1s_timer,temp //shutter dy
+	call app_mpu_s0_lock
+	branch app_lpm_lock_mesh
+
+app_lpm_kb_lock:
+	branch app_lpm_lock_mesh
+
+	
+app_lpm_module_lock:
+app_lpm_hciboot_lock:
+	branch app_lpm_mpu_lock_24g
+
+	
+app_lpm_dongle_lock:
+	arg module_init,pdata //module
+	arg shutter_dy_shutter_1s_timer,temp  //shutter dy
+	call app_mpu_s0_lock
+	branch app_lpm_lock_mesh
+
+app_lpm_mouse_lock:
+	arg car_init,pdata //
+	arg module_set_state,temp  //module
+	call app_mpu_s0_lock
+	branch app_lpm_lock_mesh
+	
+app_lpm_shutter_lock:
+	arg car_init,pdata  //
+	arg remote_car_moto_data_enable_user,temp //car remote
+	call app_mpu_s0_lock
+	branch app_lpm_lock_mesh
+	
+app_lpm_car_lock:
+	arg dongle_init,pdata  //dongle
+	arg shutter_dy_shutter_1s_timer,temp //shutter dy
+	call app_mpu_s0_lock
+app_lpm_lock_mesh:
+	arg ali_mesh_access_layer_resolve_message,pdata  //light
+	arg ali_mesh_upper_transport_layer_init_queue_param,temp //light
+	branch app_mpu_s1_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_adv,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 patch18_6,mem_patch18
+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 patch18_7,mem_patch18
+	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 patch19_0,mem_patch19
+	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 patch19_1,mem_patch19
+	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 patch19_2,mem_patch19
+	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
+	bpatchx patch36_5,mem_patch36
+	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 patch19_3,mem_patch19
+	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 patch19_4,mem_patch19
+	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
+	iadd temp,pdata
+	byteswap pdata,pdata
+	store 2,mem_addr_mi
+	rtn
+
+iicd_read_eep_load_code_size_2k:
+	fetch 1,mem_addr_mi
+	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 patch19_5,mem_patch19
+	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 patch19_6,mem_patch19
+	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 patch19_7,mem_patch19
+	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 patch1a_0,mem_patch1a
+	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 patch1a_1,mem_patch1a
+	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 patch1a_2,mem_patch1a
+	call disable_user
+	fetch 1,mem_nv_data_number
+	rtn blank		// not nv data
+	bpatch patch1a_3,mem_patch1a
+	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 patch1a_4,mem_patch1a
+//	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
+	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 patch1a_5,mem_patch1a
+	set1 GPIO_ACTIVE_BIT,temp
+	call gpio_get_bit
+	nsetflag true,GPIO_ACTIVE_BIT,temp
+
+//temp [4:0]=GPIO number, 0-31, [7]=0, low active
+gpio_set_wake:
+	bpatch patch1a_6,mem_patch1a
+	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
+
+//temp [4:0]=GPIO number, 0-31, [7]=0, low active
+gpio_set_low_pullup:
+	bpatch patch1a_7,mem_patch1a
+	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 patch1b_0,mem_patch1b
+	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 patch1b_1,mem_patch1b
+	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:
+	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:
+	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
+
+/*************************************ADC*************************************/
+
+sadc_calibration:
+	bpatch patch1b_2,mem_patch1b
+	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
+	call sadc_read
+	jam 0xc1,core_gpadc_cfg0	
+sadc_cal_read:
+	arg 7,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 7,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:
+	bpatch patch1b_3,mem_patch1b
+	fetch 8,mem_otp_adc
+	branch adc_init_cal_data_default,blank
+	store 8,mem_3v_adc_io_data
+	rtn
+	
+adc_init_cal_data_default:
+	setarg 0x0bbe
+	store 2,mem_3v_adc_io_data
+	setarg 0x03f0
+	store 2,mem_1v_adc_io_data
+	setarg 0x027e
+	store 2,mem_2v_adc_hvin_data
+	setarg 0x03c4
+	store 2,mem_3v_adc_hvin_data
+	rtn	
+
+enable_adc:
+	bpatch patch1b_4,mem_patch1b
+	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 0x01,core_gpadc_cfg3
+	call sadc_channel
+	fetch 1,mem_adc_clkdiv
+	store 1,core_sadc_clkdiv
+	call sadc_read
+	jam 0,core_sadc_clkdiv
+	branch sadc_dma
+
+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
+
+sadc_read:
+	jam 0x03,core_sadc_ctrl
+sadc_read_wait:
+	fetch 1,core_perf_status
+	bbit0 SARADC_DONE,sadc_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_by_mode:
+	bpatch patch1b_5,mem_patch1b
+	fetch 1,mem_adc_config_flag
+	beq ADC_CONFIG_HVIN,vdd_calculate_hvin
+	beq ADC_CONFIG_GPIO,vdd_calculate_io
+	rtn
+
+vdd_calculate_hvin:
+	setarg 1000
+	store 2,mem_reference_voltage
+	fetcht 2,mem_3v_adc_hvin_data
+	fetch 2,mem_2v_adc_hvin_data
+	arg 2000,regc
+	branch vdd_calculate
+
+vdd_calculate_io:
+	setarg 2000
+	store 2,mem_reference_voltage
+	fetcht 2,mem_3v_adc_io_data
+	fetch 2,mem_1v_adc_io_data
+	arg 1000,regc
+vdd_calculate:
+	isub temp,rega
+	fetch 2,mem_adc_current_value
+	isub temp,pdata
+	nbranch vdd_calculate1,positive
+	fetcht 2,mem_reference_voltage
+	imul32 temp,regb
+	copy regc,pdata
+	imul32 rega,pdata
+	iadd regb,pdata
+vdd_calculate2:
+	idiv rega
+	call wait_div_end
+	quotient pdata
+	rtn
+
+vdd_calculate1:
+	copy temp,pdata
+	fetcht 2,mem_adc_current_value
+	isub temp,pdata
+	fetcht 2,mem_reference_voltage
+	imul32 temp,regb
+	copy regc,pdata
+	imul32 rega,pdata
+	isub regb,pdata
+	nbranch set_pdata_0,positive
+	branch vdd_calculate2
+
+
+/*	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
+	store 1,mem_adc_power_flag
+	rtn
+
+adc_clear_low_power_flag:
+	fetch 1,mem_adc_power_flag
+	set0 0,pdata
+	store 1,mem_adc_power_flag
+	rtn	
+	
+adc_set_no_power_flag:
+	fetcht 1,mem_adc_power_flag
+	set1 1,temp
+	storet 1,mem_adc_power_flag
+	rtn
+
+adc_clear_no_power_flag:
+	fetcht 1,mem_adc_power_flag
+	set0 1,temp
+	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
+	bpatch patch1b_6,mem_patch1b
+	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
+	bpatch patch1b_7,mem_patch1b
+	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:
+	bpatch patch1c_0,mem_patch1c
+	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
+	bpatch patch1c_1,mem_patch1c
+	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:
+	bpatch patch1c_2,mem_patch1c
+	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
+*/
+nec61212_init:
+	arg FUN_NEC_ENABLE|FUN_NEC_CLK_DIVIDE_24,temp
+	
+
+nec_init_config:
+	store 4,core_nec_start_addr
+	store 2,core_nec_rptr
+	storet 1,core_nec_ctrl
+	rtn
+
+//return:pdata is buffer size
+nec_check_rxbuff_size:
+	fetch 2,core_nec_rxitem
+	rtn
+/*	fetcht 2,core_nec_rptr
+	fetch 2,core_nec_wptr
+	isub temp,pdata
+	rtn positive
+	sub pdata,0,rega
+	fetcht 2,core_nec_start_addr
+	fetch 2,core_nec_end_addr
+	pincrease 1
+	isub temp,pdata
+	isub rega,pdata
+	rtn
+*/
+
+nec_prepare_read:
+	fetchr contu,2,core_nec_rptr
+	fetchr contus,2,core_nec_start_addr
+	fetchr contue,2,core_nec_end_addr
+	rtn
+
+nec_read_done:
+	storer contu,2,core_nec_rptr
+	rtn
+
+//regc is callback function
+//output
+//user is disable mean data stop
+//rege is 0 mean repeat
+//rege is no zero mean data
+nec_parse_nec61212:
+	call enable_user
+	arg 0,rege
+	call nec_check_rxbuff_size
+	beq 2,nec_parse_nec61212_check_timeout
+	sub pdata,4,null
+	rtn positive
+	call nec_prepare_read
+	ifetcht 2,contu
+	setarg NEC61212_DATA2REPEAT_TIME
+	call nec_check_pulse_range_legal_default_deviation
+	nbranch nec_parse_nec61212_check_repeat_data,positive
+	copy regd,temp
+	setarg NEC61212_REPEAT2REPEAT_TIME
+	call nec_check_pulse_range_legal_default_deviation
+	nbranch nec_parse_nec61212_check_repeat_data,positive
+	
+	copy regd,temp
+	setarg NEC61212_BOOT_CODE_START_TIME
+	call nec_check_pulse_range_legal_default_deviation
+	branch nec_parse_nec61212_error_data,positive
+	ifetcht 2,contu
+	setarg NEC61212_BOOT_CODE_END_TIME
+	call nec_check_pulse_range_legal_default_deviation
+	branch nec_parse_nec61212_error_data,positive
+	call nec_check_rxbuff_size
+	sub pdata,133,null
+	rtn positive
+	arg 32,loopcnt
+nec_parse_nec61212_data:
+	ifetcht 2,contu
+	setarg NEC61212_DATA_BIT_1_START_TIME
+	call nec_check_pulse_range_legal_default_deviation
+	branch nec_parse_nec61212_error_data,positive
+	ifetcht 2,contu
+	setarg NEC61212_DATA_BIT_1_END_TIME
+	call nec_check_pulse_range_legal_default_deviation
+	nbranch nec_parse_nec61212_add_bit1,positive
+	copy regd,temp
+	setarg NEC61212_DATA_BIT_0_END_TIME
+	call nec_check_pulse_range_legal_default_deviation
+	nbranch nec_parse_nec61212_add_bit0,positive
+
+
+nec_parse_nec61212_error_data:
+	copy regd,temp
+	setarg NEC61212_TIMEOUT_TIME
+	isub temp,null
+	branch nec_parse_nec61212_check_timeout_cb,zero
+	branch nec_read_done
+
+nec_parse_nec61212_add_bit1:
+	set1 32,rege
+nec_parse_nec61212_add_bit0:
+	rshift rege,rege
+	loop nec_parse_nec61212_data
+	branch nec_parse_nec61212_check_stop_bit
+
+nec_parse_nec61212_check_repeat_data:
+	call nec_check_rxbuff_size
+	sub pdata,7,null
+	rtn positive
+	ifetcht 2,contu
+	setarg NEC61212_REPEAT_START_TIME
+	call nec_check_pulse_range_legal_default_deviation
+	branch nec_parse_nec61212_error_data,positive
+	ifetcht 2,contu
+	setarg NEC61212_REPEAT_END_TIME
+	call nec_check_pulse_range_legal_default_deviation
+	branch nec_parse_nec61212_error_data,positive
+nec_parse_nec61212_check_stop_bit:
+	ifetcht 2,contu
+	setarg NEC61212_STOP_TIME
+	call nec_check_pulse_range_legal_default_deviation
+	branch nec_parse_nec61212_error_data,positive
+	call nec_read_done
+	copy regc,pdata
+	branch callback_func
+
+nec_parse_nec61212_check_timeout:
+	call nec_prepare_read
+	ifetcht 2,contu
+	setarg NEC61212_TIMEOUT_TIME
+	isub temp,null
+	nrtn zero
+nec_parse_nec61212_check_timeout_cb:
+	call nec_read_done
+	call disable_user
+	copy regc,pdata
+	branch callback_func
+
+
+
+//????????,????
+//??:temp ?????????? 2us???
+//pdata ????,us???
+nec_check_pulse_range_legal_default_deviation:
+	fetchr regb,1,mem_nec_decode_error_value
+
+//????????,????
+//??:temp ?????????? 2us???
+//pdata ????,us???
+//regb?????,???
+// |temp-pdata| / pdata < regb
+//??:positive is 1 mean error
+//0 mean true
+nec_check_pulse_range_legal:
+	copy temp,regd
+	imul32 regb,regb		//???????
+	lshift temp,temp		//???????us
+	isub temp,rega
+	ncall nec_check_pulse_range_legal_data_negative,positive
+	mul32 rega,100,pdata
+	isub regb,null
+	rtn
+
+nec_check_pulse_range_legal_data_negative:
+	sub rega,0,rega
+	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: usb_pc_ai_voice/program/security.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/security.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/security.prog	(working copy)
@@ -0,0 +1,1203 @@
+
+
+ifdef SECURE_CONNECTION
+	
+function_g2:
+	bpatch patch1c_3,mem_patch1c
+	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:
+	bpatch patch1c_4,mem_patch1c
+	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:
+	bpatch patch1c_5,mem_patch1c
+	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:
+	bpatch patch1c_6,mem_patch1c
+	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:
+	bpatch patch1c_7,mem_patch1c
+	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:
+	bpatch patch1d_0,mem_patch1d
+	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:
+	bpatch patch1d_1,mem_patch1d
+	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
+	bpatch patch1d_2,mem_patch1d
+	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:
+	bpatch patch1d_3,mem_patch1d
+	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:
+	bpatch patch1d_4,mem_patch1d
+	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: usb_pc_ai_voice/program/sim.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/sim.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/sim.prog	(working copy)
@@ -0,0 +1,785 @@
+simstart:
+	force 8,radio_ctrl
+	force 0,radio_ctrl
+    //dpll enable
+	jam 0xcf,core_bbpll_ctrl0
+	jam 0xe9,core_bbpll_ctrl1
+	jam 5,core_clksel
+	jam 0,core_clkoff
+	jam 0,core_clkoff+1
+	jam SYSTEM_CLK_12M,mem_system_clk
+
+//	call sim_nec
+//	branch sim_c1
+//	jam 8,0x8011 //efuse lock
+//	call sim_wdt
+//	call sim_nec
+//	call sim_dac
+//    call sim_ccm
+//	call sim_otp
+//    branch sim_assert
+//	branch sim_lr
+//	call sim_snooze
+//	call sim_adpcm
+//	branch sim_lpm_clk
+//	call sim_pwm
+//	call sim_saradc
+//	branch sim_usb
+	branch sim_lpm_sleep
+//	branch sim_iic
+//	call sim_cal
+//	call sim_uart
+//	call sim_spi
+//	branch sim_le
+	branch sim_assert
+	fetch 1,mem_sim_slave
+	beq 1,assert
+
+sim_assert:
+	branch sim_assert
+
+
+
+sim_adpcm:
+	arg mem_le_test_sync,contr
+	arg 0,contw
+	arg 192,loopcnt
+sim_adpcm_loop:
+	ifetch 4,contr
+	call adpcm_byte
+	istore 1,contw
+	loop sim_adpcm_loop
+	copy contr,rega
+	arg 0,regb
+	arg 192,loopcnt
+	call string_compare
+	nbranch assert,zero
+	arg mem_le_test_sync+768,contr
+	arg 0,contw
+	arg 192,loopcnt
+	pulse init_adpcm
+sim_adpcm_loop2:
+	ifetch 1,contr
+	pcm pdata,temp
+	istoret 2,contw
+	rshift4 pdata,pdata
+	pcm pdata,temp
+	istoret 2,contw
+	loop sim_adpcm_loop2	
+	copy contr,rega
+	arg 0,regb
+	arg 768,loopcnt
+	call string_compare
+	nbranch assert,zero
+	rtn
+	
+// pdata is 4 byte pcm data, return in pdata
+adpcm_byte:
+	adpcm pdata,temp
+	rshift16 pdata,pdata
+	adpcm pdata,pdata
+	lshift4 pdata,pdata
+	ior temp,pdata
+	rtn
+
+	
+
+sim_nec:
+	jam gpcfg_nec_input,core_gpio_conf+6
+	setarg 0x100000
+	arg 0x31,temp
+	call nec_init_config
+	nop 10000
+	jam 0x0,core_nec_ctrl
+	rtn
+
+sim_saradc:
+	jam 0,core_gpadc_cfg1
+	jam 0x77,core_gpadc_ctrl
+	call sim_sadc_cal
+	jam 0xc1,core_gpadc_cfg0
+	jam 1,core_sadc_clkdiv
+	call sim_sadc
+	jam 11,core_sadc_clkdiv
+	call sim_sadc
+	jam 119,core_sadc_clkdiv
+	call sim_sadc
+	jam 11,core_sadc_clkdiv
+	call sim_sadc
+	jam 0,core_sadc_clkdiv
+	call sim_sadc_dma
+	rtn
+
+
+sim_sadc_dma:
+	jam 0x80,core_gpadc_cfg1
+	jam 10,core_sadc_clkdiv
+	jam 0xff,core_sadc_eaddr
+	jam 0xb,core_sadc_ctrl
+	nop 1000
+	jam 0x3,core_sadc_ctrl
+	rtn
+
+sim_sadc_cal:
+	jam 0xc9,core_gpadc_cfg0
+	jam 7,core_sadc_clkdiv
+sim_sadc:
+	jam 0x23,core_sadc_ctrl
+sim_sadc_wait:
+	fetch 1,core_perf_status
+	bbit0 5,sim_sadc_wait
+	fetcht 2,core_sadc_data
+	jam 6,core_sadc_ctrl
+sim_sadc_wait2:
+	fetch 1,core_perf_status
+	bbit1 5,sim_sadc_wait2
+	jam 0,core_sadc_ctrl
+	rtn
+
+
+sim_pwm:
+	jam 0xce,core_clkoff+1
+	jam 0x1,core_pwm_pcnt0
+	jam 0x1,core_pwm_ncnt0
+	jam 0x10,core_gpio_conf+6
+	jam 0x1,core_pwm_autoload
+	jam 0x1,core_pwm_en //pwm0/1 enable
+	rtn
+
+sim_usb:
+	call usb_init
+sim_usb_loop:
+	call usb_isr
+	branch sim_usb_loop
+
+sim_lpm_clk:
+	jam 1,mem_context
+	branch sim_lpm_cont,wake
+	jam 0x2,core_ccnt_bit
+	jam ccnt_start,core_misc_ctrl
+sim_lpm_wait:
+	call lpo_calibration
+	fetch 3,mem_clks_per_lpo
+	branch sim_lpm_wait,blank
+	lshift4 pdata,pdata
+	store 3,mem_clks_per_lpo
+sim_lpm_cont:
+	setarg param_rt_rthalfslot
+	store 2,mem_param_rt_rthalfslot
+	call lpm_recover_clk,wake
+	setarg 10000
+	call sleep,wake
+sim_lpm_sleep:
+	branch sim_lpm_hibernate,wake
+	arg 120,temp
+	storet 4,mem_sleep_counter
+	branch lpm_sleep
+
+sim_lpm_hibernate:
+	until null,lpo_edge
+	jam 0x77,core_gpio_wakeup_cfg+3
+	until null,lpo_edge
+	jam 0x77,core_gpio_wakeup_cfg+4
+	until null,lpo_edge
+	jam 2,core_gpio_wakeup_cfg+5
+	until null,lpo_edge
+	jam 0xaa,core_puwakeup
+	until null,lpo_edge
+	arg 60,temp
+	branch lpm_hibernate+2
+
+
+sim_le:
+	jam lemode_2m,mem_le_mode
+	fetch 1,mem_sim_slave
+	beq 1,sim_le_slave
+	jam 1,mem_le_scan_enable
+sim_le_loop:
+	call le_advertising_dispatch
+	branch sim_le_loop
+
+sim_le_slave:
+	jam 1,mem_le_adv_enable
+	nop 1000
+	branch sim_le_loop
+
+
+sim_otp:
+	fetch 1,mem_sim_slave
+	beq 1,assert
+	setarg 0x1234567
+	store 4,mem_tmp_buffer
+	arg 0x1230,regb
+	arg mem_tmp_buffer,rega
+	arg 4,loopcnt
+	call otp_write
+	arg 0x1230,regb
+	arg mem_tmp_buffer+4,rega
+	arg 4,loopcnt
+	call otp_read_data
+	fetch 4,mem_tmp_buffer
+	ifetcht 4,contr
+	isub temp,null
+	nbranch assert,zero
+	jam 0x73,0x8002
+	until null,lpo_edge
+	until null,lpo_edge
+	jam 0x80,0x8144
+	until null,lpo_edge
+	fetch 1,0x8144
+	arg 0x1230,regb
+	arg mem_tmp_buffer+4,rega
+	arg 4,loopcnt
+	call otp_read_data
+	fetch 4,mem_tmp_buffer
+	ifetcht 4,contr
+	isub temp,null
+	nbranch assert,zero
+	rtn
+	
+
+sim_snooze:
+	setarg 0x40
+	arg 13,loopcnt
+	arg core_gpio_conf,contw
+	lstore contw
+	jam 0x3,0x8150
+	setarg 123
+	iadd lpo_time,alarm
+	snooze
+	rtn
+
+ifdef TEST
+
+sim_ccm:
+    //call sim_aes_key_config_case1
+    //call sim_aes_dec_dma_case1
+    //call sim_aes_enc_dma_case1
+    call sim_aes_key_config_case4
+    call sim_aes_dec_dma_case4
+    call sim_aes_enc_dma_case4
+    rtn
+
+sim_aes_key_config_case1:
+    //key
+    force 4,regext_index
+    arg 0x6789,pdata
+    lshift16 pdata,pdata
+    arg 0x6789,temp
+    ior temp,regext
+    force 5,regext_index
+    arg 0x6789,pdata
+    lshift16 pdata,pdata
+    arg 0x6789,temp
+    ior temp,regext
+    force 6,regext_index
+    arg 0x2345,pdata
+    lshift16 pdata,pdata
+    arg 0x2345,temp
+    ior temp,regext
+    force 7,regext_index
+    arg 0x2345,pdata
+    lshift16 pdata,pdata
+    arg 0x2345,temp
+    ior temp,regext
+    //nonce
+    force 8,regext_index
+    arg 0xbc61,pdata
+    lshift16 pdata,pdata
+    arg 0x4e49,temp
+    ior temp,regext
+    force 9,regext_index
+    arg 0xccdd,pdata
+    lshift16 pdata,pdata
+    arg 0x0000,temp
+    ior temp,regext
+    force 0xa,regext_index
+    arg 0x8899,pdata
+    lshift16 pdata,pdata
+    arg 0xaabb,temp
+    ior temp,regext
+    force 0xb,regext_index
+    arg 0x0000,pdata
+    lshift16 pdata,pdata
+    arg 0x6677,temp
+    ior temp,regext
+    //aad
+    jam 0x00,0x80d5
+    jam 0x19,0x80d6
+    jam 0x02,0x80d7
+    rtn
+
+sim_aes_dec_dma_case1:
+    //mic golden
+    force 0,regext_index
+    arg 0xc5dd,pdata
+    lshift16 pdata,pdata
+    arg 0xa210,temp
+    ior temp,regext
+    
+    //payload
+
+    //dma config
+    jam 0x00,0x80d1
+    jam 0x10,0x80d2
+    jam 0x00,0x80d3
+    jam 0x10,0x80d4
+    jam 0x6,0x800a 
+    jam 0x7,0x800a 
+    nop 1000
+    rtn
+
+sim_aes_enc_dma_case1:
+    //payload
+
+    //dma config
+    jam 0x00,0x80d1
+    jam 0x10,0x80d2
+    jam 0x00,0x80d3
+    jam 0x11,0x80d4
+    jam 0x2,0x800a 
+    jam 0x3,0x800a 
+    nop 1000
+    rtn
+
+sim_aes_key_config_case4:
+    //key
+    force 4,regext_index
+    arg 0x1bd1,pdata
+    lshift16 pdata,pdata
+    arg 0x2ace,temp
+    ior temp,regext
+    force 5,regext_index
+    arg 0xbd56,pdata
+    lshift16 pdata,pdata
+    arg 0x14a1,temp
+    ior temp,regext
+    force 6,regext_index
+    arg 0x1f8b,pdata
+    lshift16 pdata,pdata
+    arg 0x9dbd,temp
+    ior temp,regext
+    force 7,regext_index
+    arg 0xfc22,pdata
+    lshift16 pdata,pdata
+    arg 0x8384,temp
+    ior temp,regext
+    //nonce
+    force 8,regext_index
+    arg 0xb3be,pdata
+    lshift16 pdata,pdata
+    arg 0x9549,temp
+    ior temp,regext
+    force 9,regext_index
+    arg 0x2769,pdata
+    lshift16 pdata,pdata
+    arg 0x00bd,temp
+    ior temp,regext
+    force 0xa,regext_index
+    arg 0xb727,pdata
+    lshift16 pdata,pdata
+    arg 0x5bf9,temp
+    ior temp,regext
+    force 0xb,regext_index
+    arg 0x1100,pdata
+    lshift16 pdata,pdata
+    arg 0x82b8,temp
+    ior temp,regext
+    //aad
+    jam 0x00,0x806c
+    jam 0x19,0x806d
+    jam 0x02,0x806e
+    rtn
+
+sim_aes_dec_dma_case4:
+    //mic golden
+    force 0,regext_index
+    arg 0x7c32,pdata
+    lshift16 pdata,pdata
+    arg 0x2cc6,temp
+    ior temp,regext
+    
+    //payload
+    arg 0x1001,contw
+    arg 0xb839, pdata
+    istore 2,contw
+    arg 0xc85f, pdata
+    istore 2,contw
+    arg 0x3756, pdata
+    istore 2,contw
+    arg 0x9249, pdata
+    istore 2,contw
+    arg 0xf07f, pdata
+    istore 2,contw
+    arg 0xd647, pdata
+    istore 2,contw
+    arg 0x2b40, pdata
+    istore 2,contw
+    arg 0x7ccc, pdata
+    istore 2,contw
+    arg 0xfff9, pdata
+    istore 2,contw
+    arg 0xffff, pdata
+    istore 2,contw
+    jam 0x11,0x80c1
+
+    //dma config
+    jam 0x01,0x8068
+    jam 0x10,0x8069
+    jam 0x02,0x806a
+    jam 0x40,0x806b
+    jam 0x6,0x800a 
+    jam 0x7,0x800a 
+    call wait_ccm_done
+    fetch 1,0x4012
+    bne 0x05,assert
+    rtn
+
+sim_aes_enc_dma_case4:
+    //payload
+    arg 0x4002,contw
+    arg 0x1286, pdata
+    istore 2,contw
+    arg 0xa56d, pdata
+    istore 2,contw
+    arg 0xb3db, pdata
+    istore 2,contw
+    arg 0x6491, pdata
+    istore 2,contw
+    arg 0xa19b, pdata
+    istore 2,contw
+    arg 0xc4ca, pdata
+    istore 2,contw
+    arg 0x9160, pdata
+    istore 2,contw
+    arg 0x3372, pdata
+    istore 2,contw
+    arg 0xff05, pdata
+    istore 2,contw
+    arg 0xffff, pdata
+    istore 2,contw
+    jam 0x11,0x80da //ccm_inptr
+
+    //dma config
+    jam 0x02,0x80d1
+    jam 0x40,0x80d2
+    jam 0x01,0x80d3
+    jam 0x11,0x80d4
+    jam 0x2,0x800a 
+    jam 0x3,0x800a 
+    call wait_ccm_done
+    fetch 1,0x1111
+    bne 0xf9,assert
+    rtn
+
+
+
+
+
+
+
+
+
+sim_dac:
+	jam gpcfg_dac_p,core_gpio_conf+4
+	jam gpcfg_dac_n,core_gpio_conf+5
+	jam 0,core_clkoff
+	setarg 0x012972
+	store 3,core_dac_coef
+	call sim_sine
+	setarg 0x200
+	store 2,core_dac_saddr
+	jam 0x4f,core_dac_len
+	jam 0xe0,core_dac_vol
+	jam 0x5,core_dac_ctrl
+	branch sim_assert
+
+sim_sine:
+	setarg 00
+	store 2,0x200
+	setarg 5690
+	istore 2,contw
+	setarg 11209
+	istore 2,contw
+	setarg 16386
+	istore 2,contw
+	setarg 21065
+	istore 2,contw
+	setarg 25104
+	istore 2,contw
+	setarg 28380
+	istore 2,contw
+	setarg 30794
+	istore 2,contw
+	setarg 32271
+	istore 2,contw
+	setarg 32767
+	istore 2,contw
+	add contw,-2,contr
+	arg 10,loopcnt
+sine_loop1:
+	ifetch 2,contr
+	istore 2,contw
+	increase -4,contr
+	loop sine_loop1
+	arg 0x200,contr
+	arg 20,loopcnt
+sine_loop2:
+	ifetcht 2,contr
+	sub temp,0,temp
+	istoret 2,contw
+	loop sine_loop2
+	rtn
+
+	
+
+sim_lpm:
+	setarg 0
+	arg 8,loopcnt
+sim_lpm_loop:
+	until null,lpo_edge
+	store 1,core_lpm_ldosel
+	pincrease 0x10
+	loop sim_lpm_loop
+	call app_lpm_peripheral_lock_shutter
+	call app_lpm_mpu_lock_ble
+
+
+sim_lr:
+	jam 3,mem_le_ch_mapped
+	setarg 0xfedcba
+	store 3,mem_le_crcinit
+	call le_enable
+	setarg 0x1234567
+	iforce access
+	set1 mark_ble_lr,mark
+//	set1 mark_ble_lr_s8,mark
+	setarg 0x2e0403
+	store 3,mem_le_txheader
+	setarg 0x123456
+	istore 3,contw
+	call le_transmit
+	branch assert
+
+
+
+sim_c1:
+	setarg 0xb4b5b6
+	store 3,mem_le_lap
+	setarg 0xb1b2b3
+	istore 3,contw
+	setarg 0xa4a5a6
+	store 3,mem_le_plap
+	setarg 0xa1a2a3
+	istore 3,contw
+	setarg 0x101
+	store 4,mem_le_preq
+	setarg 0x70710
+	istore 3,contw
+	setarg 0x302
+	store 4,mem_le_pres
+	setarg 0x50008
+	istore 3,contw
+	jam 0,mem_le_conn_peer_addr_type
+	jam 1,mem_le_adv_own_addr_type
+	arg regidx_key,regext_index
+	arg 4,loopcnt
+sim_clear_key_loop:
+	arg 0,regext
+	increase 1,regext_index
+	loop sim_clear_key_loop
+
+	setarg 0x702EE0
+	store 3,mem_le_rconfirm
+	setarg 0x274EC6
+	istore 3,contw
+	setarg 0x0E6388
+	istore 3,contw
+	setarg 0x56AD6F
+	istore 3,contw
+	setarg 0x83D521
+	istore 3,contw
+	setarg 0x57	
+	istore 1,contw
+	arg mem_le_rconfirm,rega
+	call aes_init
+	call function_c1
+	branch loop
+
+loop:
+	branch loop
+
+sim_wdt:
+    jam 8,0x8043
+    jam 0x7e,0x8004
+    nop 1000
+    jam 0xf,0x800b
+    rtn
+
+
+
+
+sim_uart:
+	jam 0x67,mem_h5tx_buf
+	setarg mem_h5tx_buf
+	add pdata,0x80,temp
+	call uarta_init_tx
+	increase 0x80,pdata
+	increase 0x80,temp
+	jam gpcfg_uart_txd,core_gpio_conf + 16
+	jam 0x81,core_uart_ctrl
+	setarg 0x30
+	store 2,core_uart_baud
+	fetch 1,mem_sim_slave
+	beq 1,sim_uart_slave
+	call uarta_prepare_tx
+	call sim_uart_wait+3
+	setarg 0x1357d9a
+	istore 4,contu
+	arg 0xaa69,rega
+	istorer rega,2,contu
+	setarg 0xfedcb3
+	istore 3,contu
+	storer contu,2,core_uart_twptr
+sim_uart_wait:
+	fetch 1,core_uart_status
+	bbit1 uart_status_tx_busy,sim_uart_wait
+	nop 200
+	rtn
+
+sim_uart_slave:
+	nop 247
+	fetch 1,mem_h5tx_buf
+	bne 0x67,assert
+	branch sim_uart_slave
+	fetch 1,core_uart_status
+	bbit1 uart_status_rx_fifo_empty,sim_uart_slave
+	fetch 1,core_uart_rxitems
+	bne 9,sim_uart_slave
+	fetcht 8,mem_h5tx_buf
+	call uarta_prepare_rx
+	ifetch 8,contu
+	isub temp,null
+	nbranch assert,zero
+	rtn
+
+
+
+sim_cal:
+
+	call tx_iq_precomp
+	fetchr regf,2,mem_omega
+	ifetchr regf,2,contr
+	ifetchr regf,2,contr
+	fetchr regf,2,mem_b1
+	ifetchr regf,2,contr
+	fetchr regf,2,mem_b2
+	ifetchr regf,2,contr
+	arg 0x1000,timeup
+	call tx_iq_cal
+	jam 1,core_ice_ctrl
+
+	arg 0x1000,timeup
+	call rx_iq_comp
+	jam 1,core_ice_ctrl
+	
+
+sim_iic:
+	call iic_init_600khz
+    call iicd_init_pin
+iic_write:
+	setarg 6
+	store 2,core_iicd_txlen
+	setarg 0x10a0
+	store 2,0x1000
+    setarg 0x5a00
+	store 2,0x1002
+    setarg 0xa5a5
+	store 2,0x1004
+	setarg 0x1000
+	store 2,core_iicd_txaddr
+	setarg 0
+	store 2,core_iicd_rxlen
+	jam 3,core_iicd_ctrl
+	jam iicd_start,core_misc_ctrl
+	call wait_iicd_done
+	nop 300
+iic_dummy_write:
+	setarg 3
+	store 2,core_iicd_txlen
+	setarg 0x10a0
+	store 2,0x1000
+    setarg 0x00
+	store 1,0x1002
+	setarg 0x1000
+	store 2,core_iicd_txaddr
+	setarg 0
+	store 2,core_iicd_rxlen
+	jam 3,core_iicd_ctrl
+	jam iicd_start,core_misc_ctrl
+	call wait_iicd_done
+	nop 300
+iic_read:
+    setarg 1
+	store 2,core_iicd_txlen
+    setarg 0xa1
+	store 1,0x1000
+	setarg 0x1000
+	store 2,core_iicd_txaddr
+    setarg 0x1100
+	store 2,core_iicd_rxaddr
+	setarg 3
+	store 2,core_iicd_rxlen
+	jam 1,core_iicd_ctrl
+	jam iicd_start,core_misc_ctrl
+	call wait_iicd_done
+    fetch 1, 0x1100
+    bne 0x5a, assert
+    rtn
+
+sim_spi:
+    //jam gpcfg_spid_miso ,core_gpio_conf + 12 
+    //jam gpcfg_spid_ncs ,core_gpio_conf + 13 
+    //jam gpcfg_spid_sck ,core_gpio_conf + 14 
+    //jam gpcfg_spid_mosi ,core_gpio_conf + 15
+    call spi_gpio_init
+
+    setarg 3 
+    store 2 ,core_spid_rxlen 
+    setarg 4 
+    store 2 ,core_spid_txlen 
+    setarg 0x1200 
+    store 2 ,core_spid_txaddr 
+    setarg 0x1300 
+    store 2 ,core_spid_rxaddr
+    setarg 0x0003
+	store 2,0x1200
+    setarg 0x0000
+	store 2,0x1202
+    jam spid_start ,core_misc_ctrl 
+    call wait_spid_done
+    fetch 1, 0x1302
+    bne 0xaa, assert
+    rtn
+
+
+sim_adc:
+    jam 0xc,0x8a0a
+    jam 0x2,0x8a17
+    jam 0x1,0x8a97
+    jam 0x0,0x80dc
+    jam 0x80,0x8053
+    nop 10000
+    jam 0x5,0x80dc
+    jam 0x80,0x8053
+    nop 10000
+    jam 0xa,0x80dc
+    jam 0x80,0x8053
+    nop 10000
+    jam 0xf,0x80dc
+    jam 0x80,0x8053
+    nop 10000
+    jam 0x0,0x8053
+    rtn
+
+ endif
Index: usb_pc_ai_voice/program/simple_pairing.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/simple_pairing.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/simple_pairing.prog	(working copy)
@@ -0,0 +1,1068 @@
+
+
+ifdef SECURE_CONNECTION
+
+
+publickey_init:
+//	fetch 1,mem_ssp_enable
+//	nbranch sp_initialize,blank
+	branch sp_initialize_256
+
+sp_calc_sequence_256_check:
+	bpatch patch1d_5,mem_patch1d
+//	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:
+	bpatch patch1d_6,mem_patch1d
+	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:	
+	bpatch patch1d_7,mem_patch1d
+	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:    
+	bpatch patch1e_0,mem_patch1e
+	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:
+	bpatch patch1e_1,mem_patch1e
+	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:
+	bpatch patch1e_2,mem_patch1e
+	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: usb_pc_ai_voice/program/ui.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ui.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/ui.prog	(working copy)
@@ -0,0 +1,653 @@
+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:
+	bpatch patch1e_3,mem_patch1e
+	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:
+	bpatch patch1e_4,mem_patch1e
+	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:
+	bpatch patch1e_5,mem_patch1e
+	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:
+	bpatch patch1e_6,mem_patch1e
+	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:
+	bpatch patch1e_7,mem_patch1e
+	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:
+	bpatch patch1f_0,mem_patch1f
+	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
+	bpatch patch1f_1,mem_patch1f
+	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
+	bpatch patch1f_2,mem_patch1f
+	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:
+	bpatch patch1f_3,mem_patch1f
+	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:
+	bpatch patch1f_4,mem_patch1f
+	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: usb_pc_ai_voice/program/usb.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/usb.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/usb.prog	(working copy)
@@ -0,0 +1,1101 @@
+ ifdef COMPILE_USB
+
+usb_isr:
+	bpatch patch1f_5,mem_patch1f
+	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:
+	bpatch patch1f_6,mem_patch1f
+	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
+usb_init_next:
+	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:
+	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:
+	bpatch patch1f_7,mem_patch1f
+	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 patch20_0,mem_patch20
+	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 patch20_1,mem_patch20
+	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 patch20_2,mem_patch20
+//	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:
+	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:
+	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:
+	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 patch20_3,mem_patch20
+	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:
+	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
+	call usb0_reply_zerolen
+usb_set_report_next:	
+	fetch 1,mem_device_option
+	rtnne DVC_OP_DONGLE
+	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 patch20_4,mem_patch20
+	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 patch20_5,mem_patch20
+	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 patch20_6,mem_patch20
+	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
+	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
+	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
+	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:
+	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_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: usb_pc_ai_voice/program/utility.prog
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/utility.prog	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/program/utility.prog	(working copy)
@@ -0,0 +1,738 @@
+
+
+	
+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 patch20_7,mem_patch20
+	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
+	copy pdata,contw
+	rtn
+get_contr:
+	fetch 2,mem_contr
+	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 patch21_0,mem_patch21
+	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 patch21_1,mem_patch21
+	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 patch21_2,mem_patch21
+	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 patch21_3,mem_patch21
+	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 patch21_4,mem_patch21
+	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 patch21_5,mem_patch21
+	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
+
+//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:
+	setarg 0
+	store 8,mem_gpio_wakeup_cfg
+	set1 25,pdata	//gpio22(ice) enable wakeup
+	istore 4,contw
+	rtn
+
+
+generate_random:
+	arg 16,loopcnt
+generate_random_loop:
+	random pdata
+	istore 1,contw
+	loop generate_random_loop
+	rtn
+
Index: usb_pc_ai_voice/sched/1305.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/1305.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/1305.dat	(working copy)
@@ -0,0 +1,57 @@
+
+
+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:a5
+
+mem_fcomp_div:18
+mem_xtal_c_sel:3e
+mem_gpio_wakeup_cfg:00 00 00 00 00 00 00 00 00 00 00 00
+
+mem_version:08 0e 05 03 00
+mem_le_tx2m_delay:20
+
+mem_rx_window_sniff:00 0c
+
+mem_gain_fix:ff	#00:soft agc; ff:hw agc
+mem_gain_table:04 00 00
+mem_gain_second_agc_en:08	#hw agc: 0:second agc disable
+
+
+#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_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
+
+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: usb_pc_ai_voice/sched/DM_module.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/DM_module.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/adpcm.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/adpcm.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/ble_car_att_list.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/ble_car_att_list.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/ble_shutter_gatt_list.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/ble_shutter_gatt_list.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/ble_shutter_gatt_list.dat	(working copy)
@@ -0,0 +1,313 @@
+01
+00
+02
+00
+28
+02
+01
+18
+02
+00
+02
+03
+28
+01
+20
+03
+00
+02
+05
+2a
+01
+00
+04
+00
+02
+02
+29
+02
+00
+00
+05
+00
+02
+00
+28
+02
+00
+18
+06
+00
+02
+03
+28
+01
+02
+07
+00
+02
+00
+2a
+13
+43
+68
+69
+70
+73
+65
+61
+2d
+42
+4c
+45
+20
+20
+20
+20
+20
+20
+20
+20
+08
+00
+02
+03
+28
+01
+02
+09
+00
+02
+01
+2a
+02
+c1
+03
+0a
+00
+02
+03
+28
+01
+02
+0b
+00
+02
+04
+2a
+08
+06
+00
+06
+00
+64
+00
+2c
+01
+0c
+00
+02
+00
+28
+02
+0a
+18
+0d
+00
+02
+03
+28
+01
+02
+0e
+00
+02
+50
+2a
+07
+02
+8a
+24
+66
+82
+01
+00
+0f
+00
+02
+00
+28
+02
+12
+18
+10
+00
+02
+03
+28
+01
+06
+11
+00
+02
+4e
+2a
+01
+01
+12
+00
+02
+03
+28
+01
+12
+13
+00
+02
+4d
+2a
+02
+00
+00
+14
+00
+02
+02
+29
+02
+00
+00
+15
+00
+02
+08
+29
+02
+02
+01
+16
+00
+02
+03
+28
+01
+12
+17
+00
+02
+4d
+2a
+02
+00
+00
+18
+00
+02
+02
+29
+02
+00
+00
+19
+00
+02
+08
+29
+02
+03
+01
+1a
+00
+02
+03
+28
+01
+02
+1b
+00
+02
+4b
+2a
+1b
+05
+0c
+09
+01
+a1
+01
+85
+02
+09
+e9
+09
+ea
+09
+e2
+09
+30
+15
+01
+25
+0c
+75
+10
+95
+01
+81
+00
+c0
+1c
+00
+02
+03
+28
+01
+02
+1d
+00
+02
+4a
+2a
+04
+11
+01
+00
+01
+1e
+00
+02
+03
+28
+01
+04
+1f
+00
+02
+4c
+2a
+01
+00
+20
+00
+02
+00
+28
+02
+0f
+18
+21
+00
+02
+03
+28
+01
+12
+22
+00
+02
+19
+2a
+01
+63
+00
+00
\ No newline at end of file
Index: usb_pc_ai_voice/sched/ble_shutter_key_value_list.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/ble_shutter_key_value_list.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/ble_shutter_key_value_list.dat	(working copy)
@@ -0,0 +1,40 @@
+02
+13
+00
+02
+00
+02
+13
+00
+01
+00
+02
+13
+00
+04
+00
+02
+13
+00
+06
+00
+02
+13
+00
+05
+00
+02
+13
+00
+00
+00
+02
+17
+00
+00
+28
+02
+17
+00
+00
+00
Index: usb_pc_ai_voice/sched/car.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/car.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/car.dat	(working copy)
@@ -0,0 +1,235 @@
+mem_device_option:0e
+mem_le_adv_channel_map:07 
+mem_le_adv_enable:00
+
+
+mem_spi_ncs_gpio:ff
+
+mem_le_pres_auth:01
+mem_le_local_mtu:17
+mem_le_adv_interval:60 01 
+mem_local_rx_max_octets:fb 00 48 08 fb 00 48 08  # 1b
+
+
+mem_le_lap:34 75 07 99 07 2b
+mem_le_name_len:
+'YC-CAR-34
+
+mem_le_adv_data_len:1f
+mem_le_adv_data:
+17 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 02 01 05 03 02 ff f0
+
+mem_le_scan_data_len:1f
+mem_le_scan_data:
+1e 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
+
+
+mem_le_interval_min:
+18 00 #min interval
+20 00 #max interval
+10 00 #latency
+2c 01 #timeout
+
+
+#mem_ui_le_uuid_table:21 95  #0x9E62 BLE_CAR_ATT_LIST
+mem_ui_le_uuid_table:mem_ble_att_list
+
+
+mem_ble_att_list:
+#Primary service GAP ------
+01 00 02 00 28 02 00 18
+#Device name
+02 00 02 03 28 01 0a
+03 00 02 00 2a
+'CAR-BLE-OTA
+
+#Appearance
+04 00 02 03 28 01 02
+05 00 02 01 2a 02 40 14
+#Peripheral Preferred Connection Parameters
+06 00 02 03 28 01 02
+07 00 02 04 2a 08 08 00 20 00 10 00 58 02 # interval 6ms, latency 100, timeout 600
+
+#Primary service device information ------
+08 00 02 00 28 02 0a 18
+
+#Manufacturer Name
+09 00 02 03 28 01 02
+0a 00 02 29 2a 06 59 69 43 68 69 70
+
+#Model Number
+0b 00 02 03 28 01 02
+0c 00 02 24 2a 04 4c 52 32 31
+
+#Software Revision
+0d 00 02 03 28 01 02
+0e 00 02 28 2a 04 56 2e 30 31
+
+#Hardware Revision
+0f 00 02 03 28 01 02
+10 00 02 27 2a 04 56 2e 30 31
+
+#PNP id
+11 00 02 03 28 01 02
+12 00 02 50 2a 07 02 35 12 22 aa 51 31
+
+#Client Characteristic
+13 00 02 02 29 02 00 00
+
+#Primary service yichip transmit ------
+14 00 02 00 28 02 f0 ff
+
+15 00 02 03 28 01 12
+16 00 02 f1 ff 08 00 00 00 00 00 00 00 00
+17 00 02 02 29 02 00 00
+
+18 00 02 03 28 01 08
+19 00 02 f2 ff 08 00 00 00 00 00 00 00 00
+00 00    
+
+##############BLE ATT LIST END####################
+
+mem_lpm_mode:00
+mem_lpm_overhead:06
+mem_lpm_mult_timeout:02
+mem_car_hard_soft_switch:00
+
+mem_power_param_ptr:mem_car_soft_power
+mem_car_power_off_timeout:0c 0c
+
+mem_ui_button_gpio:ff
+mem_ui_button_timeout:14
+mem_ui_button_last_state:01
+
+
+mem_ui_led_struct_ptr:mem_car_style1_led_type
+mem_ui_led_struct_num:01
+
+#style:01
+mem_car_style1_blink_count:ff
+mem_car_style1_struct_led_gpio:05
+mem_car_style1_on_time:20 03
+mem_car_style1_off_time:20 03
+
+#style:02
+mem_car_style2_blink_count:ff
+mem_car_style2_struct_led_gpio:ff
+mem_car_style2_on_time:20 03
+mem_car_style2_off_time:20 03
+
+mem_car_led_num:01
+mem_car_led_map:
+05
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+
+mem_car_config_blood_led1_gpio:ff
+mem_car_config_pairing_led_gpio:ff
+mem_car_config_low_voltage_led_gpio:ff
+
+mem_keyscan_ptr:mem_car_keyscan
+mem_car_key_num:00
+
+
+mem_car_queue_each_size:14 06
+
+mem_queue_ptr:mem_car_queue_each_size
+
+mem_car_config_pairing_led_conn_status:00
+mem_car_config_soft_switch_enable:00
+mem_car_config_pairing_led_gpio:ff
+mem_car_config_low_voltage_led_gpio:ff
+mem_car_config_soft_switch_gpio:ff
+mem_car_config_low_voltage_percent:14
+mem_car_config_bat_notify_enable:01
+mem_car_config_device_select:03
+mem_car_config_ir_enable:00
+mem_car_config_motor_layout:03
+mem_car_config_ir_rx_gpio:ff
+mem_car_config_led_num:ff
+mem_car_config_blood_led_gpio:ff 09 0a 0b 0c 0d 0e 0f
+
+
+mem_motor1_speed:04
+mem_motor2_speed:04
+mem_motor3_speed:09
+mem_motor1_pwm_set:ff ff 00 05 e8 03 00 00
+mem_motor2_pwm_set:ff ff 00 04 e8 03 00 00
+mem_motor3_pwm_set:ff ff 00 03 e8 03 00 00
+mem_motor_pwm_pin1_set:ff ff 00 02 e8 03 00 00
+
+
+mem_car_notify_vdd_count:14
+mem_notify_bat_packet:07 11 00 5a 6b 01 00 01 00 00
+
+mem_vdd_calculate_set:e0 01 90 01 9a 01 00 00	#full_vol;	empty_vol;	low_vol;	now_vol
+
+mem_ir_notify_data:08 11 00 5a 6b 06 00 02 00 00 00
+
+mem_adc_config_flag:01
+
+mem_car_info_request:0e 11 00 5a 6b 08 00 08 00 00 00 00 00 00 00 00 00
+
+mem_car_led_control_timer:05
+
+
+#mem_car_led_control:01 01 01 01 01 01 01 01
+
+mem_car_motor_gpio_num:04
+mem_car_motor_gpio_map:
+00		#left	INC
+01		#right	IND
+02 		#front	INA
+09		#back	INB
+
+#eeprom config
+mem_eeprom_base:80 1f
+mem_eeprom_wp_gpio:06
+mem_eeprom_scl_gpio:07
+mem_eeprom_sda_gpio:08
+
+
+
+
+#rf config
+mem_24g_data_type:01        #mouse 1,kb 2
+mem_24g_lap:38 74 2f 74 07 2b#low 4B used for 24g rxaddr
+mem_tx_power:03	#3dBm
+mem_24g_tx_phy:84#0x01:1M/0x02:2M/0x04:S2/0x84:S8
+mem_24g_rx_phy:84#0x01:1M/0x02:2M/0x04:S2/0x84:S8
+mem_24g_no_ack:00#no ack
+mem_24g_rx_window:60 ea#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:01
+mem_24g_pair_mode:00
+mem_24g_pair_ch:4e
+mem_24g_pair_tx_power:85 #-5dBm
+mem_24g_pair_addr:56 34 02 01
+mem_24g_enter_hibernate:00 48 60#200ms
+mem_rssi_buff_index:07
+mem_rssi_noise_buffer_ptr:mem_car_rssi_noise_buffer
+mem_rssi_noise_self_buffer_ptr:mem_car_rssi_noise_car_buffer
+mem_rssi_noise_device1_buffer_ptr:mem_car_rssi_noise_remote_buffer
+
+#24g rx init end
+
+mem_car_24g_bind_enable_delay_count:0a#500ms
+mem_car_24g_no_data_timeout_count:64 00#10s
+mem_car_enter_lpm_timer_count:b8 0b#5min
+
+mem_car_save_addr_flag:00
+mem_car_24g_go_die_flag:00
+
+
Index: usb_pc_ai_voice/sched/dongle.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/dongle.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/dongle.dat	(working copy)
@@ -0,0 +1,147 @@
+
+mem_device_option:04
+mem_ui_button_gpio:ff
+mem_otp_load_check_sum:5a
+#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:10  #24M
+
+#mem_24g_disable_fec1:00
+mem_dg_24g_tx_power_default:03	#6dBm
+
+#usb config
+mem_dg_usb_vid_pid:
+01 #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:
+'2.4G Receiver
+
+#pair tx
+mem_24g_pair_tx_power_init:94 #94: -20dBm  9e: -30dBm  9f: -35dBm a0: -40dBm
+
+#rf config
+mem_24g_lap:35 17 86 74 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:01
+mem_24g_ch_update_map1:06 1a 3a 4d
+mem_24g_ch_update_map2:00 13 23 4c
+mem_24g_ch_update_map3:0f 2c 31 43 
+mem_24g_ch_update_map4:11 15 36 48
+
+#mem_rf_debug_rx_gpio:8c
+#mem_rf_debug_tx_gpio:8c
+#uart config
+#mem_device_uart_tx_gpio:09	#08
+#mem_device_uart_rx_gpio:ff
+#mem_device_uart_baud_rate:d0 00	#115200	
+#mem_device_uart_rx_buffer:00 1c
+#mem_device_uart_rx_buffer_end:ff 1f
+#mem_device_uart_tx_buffer:00 4f
+#mem_device_uart_tx_buffer_end:ff 4f
+
+mem_24g_pair_addr_new:25 20 15 10
+
+################USB CONFIG##################
+#===================USB Configuration Descriptor=====================#
+mem_confdesc_all:
+54 09 02 54 00 03 01 00 a0 32
+09 04 00 00 01 03 01 01 00
+09 21 00 02 00 01 22 3f 00
+07 05 81 03 40 00 02
+09 04 01 00 01 03 01 02 00
+09 21 00 02 00 01 22 a3 00#7d
+07 05 82 03 40 00 02
+09 04 02 00 01 03 01 02 00
+09 21 00 02 00 01 22 63 00
+07 05 02 03 40 00 01
+
+mem_hidreportdesc_Interface0_kb:
+3f 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 25 03 05 07 19 00 29 ff 81 00 c0
+
+mem_hidreportdesc_Interface2_pc:
+63		 # Total  Len
+#---------------report id=A0[Audio IN]-----------------#
+06 A0 FF  # Usage Page (Vendor Defined FFA0)
+09 0E        # Usage (0e)
+A1 01        # Collection (Application)
+85 A0        #   Report ID (A0)
+95 3F        #   Report Count (63)
+75 08        #   Report Size (8)
+26 FF 00  #Logical Maximum (255)
+15 00        #   Logical Minimum (0)
+09 01        #   Usage (01)
+81 02        #   Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+C0              #  End Collection
+#================================================================#
+06 A1 FF  # Usage Page (Vendor Defined FFA1)
+09 0e        # Usage (0e)
+A1 01        # Collection (Application)
+#---------------report id=A1[Protocol IN]--------------#
+85 A1        #   Report ID (A1)
+95 3F        #   Report Count (63)
+75 08        #   Report Size (8)
+26 FF 00  #   Logical Maximum (255)
+15 00        #   Logical Minimum (0)
+09 01        #   Usage (01)
+81 02        #   Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+#---------------report id=A2[Protocol OUT]----------#
+85 A2        #   Report ID (A2)
+95 3F        #   Report Count (63)
+75 08        #   Report Size (8)
+26 FF 00  #  Logical Maximum (255)
+15 00        #   Logical Minimum (0)
+09 01        #   Usage (01)
+b1 02        #   Feature (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+C0             #   End Collection
+#================================================================#
+06 A2 FF  # Usage Page (Vendor Defined FFA2)
+09 0e        # Usage (0e)
+A1 01        # Collection (Application)
+#---------------report id=A2[Auth IN]--------------#
+85 A3        #   Report ID (A3)
+95 3F        #   Report Count (63)
+75 08        #   Report Size (8)
+26 FF 00  #  Logical Maximum (255)
+15 00        #   Logical Minimum (0)
+09 01        #   Usage (01)
+81 02        #   Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+#---------------report id=A4[Auth OUT]------------#
+85 A4        #   Report ID (A4)
+95 3F        #   Report Count (63)
+75 08        #   Report Size (8)
+26 FF 00  #   Logical Maximum (255)
+15 00        #   Logical Minimum (0)
+09 01        #   Usage (01)
+b1 02        #   Feature (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+C0              #   End Collection
+
Index: usb_pc_ai_voice/sched/ff.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/ff.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/flippen.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/flippen.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/flippen.dat	(working copy)
@@ -0,0 +1,31 @@
+
+
+mem_flippen_no_data_timeout:14 00 #2s
+mem_flippen_start_pair_no_data_timeout:36 01 #31s
+mem_key_longpress_timer_init:08 07	#3min
+
+
+mem_key_press_data:
+00 00 00 4B 00 00 00 00 00	#Page Up
+00 00 00 4E 00 00 00 00 00	#Page Down	
+00 02 00 3E 00 00 00 00 00	#Shift+F5
+00 00 00 29 00 00 00 00 00	#Esc
+00 00 00 05 00 00 00 00 00	#B
+00 00 00 2B 00 00 00 00 00	#tab
+00 00 00 28 00 00 00 00 00	#enter
+00 04 00 2B 00 00 00 00 00	#alt tab
+00 04 00 3D 00 00 00 00 00	#alt f4
+03 CD 00 00 00 00 00 00 00	#play/pause
+03 E9 00 00 00 00 00 00 00	#vol up
+03 EA 00 00 00 00 00 00 00	#vol down
+
+
+mem_standard_key_release:
+00 00 00 00 00 00 00 00 00
+mem_system_ctrl_key_release:
+02 00 00 00 00 00 00 00 00
+mem_media_key_release:
+03 00 00 00 00 00 00 00 00
+
+
+
Index: usb_pc_ai_voice/sched/fpga.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/fpga.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/gatt.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/gatt.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/hci_boot.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/hci_boot.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/keyboard.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/keyboard.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/keyboard.dat	(working copy)
@@ -0,0 +1,378 @@
+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
+04
+
+#mouse flag byte2
+#bit0 MOUSE_ENABLE_BLE_RANDOM_ADDRE
+#bit1 MOUSE_ENABLE_2K_EEPROM
+#bit2 MOUSE_ENABLE_INIT_DELAY
+#bit3 MOUSE_ENABLE_WAKEUP_FROM_POWER
+#bit4 MOUSE_ENABLE_16M
+#bit5 MOUSE_ENABLE_USB
+#bit6 MOUSE_ENABLE_24G_SEARCH_DONGLE
+#bit7 MOUSE_ENABLE_LOAD_AND_STORE_DPI
+09
+
+#mouse flag byte3
+#bit0 MOUSE_ENABLE_SPI2
+#bit1 MOUSE_ENABLE_24G
+#bit2 MOUSE_ENABLE_FLASH
+#bit3 MOUSE_ENABLE_EEPROM
+#bit4 MOUSE_ENABLE_OTP
+#bit5 MOUSE_ENABLE_ADC
+#bit6 MOUSE_ENABLE_KEYBOARD
+#bit7 MOUSE_ENABLE_DOUBLE_DPI_KEY
+50
+
+#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
+#bit6 MOUSE_ENABLE_DPI_LOW_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_CUSTOMER_KEY_CONNECT_VIN_OR_MATRIX
+#bit4 MOUSE_ENABLE_DPI_KEY_CONNECT_GND
+#bit5 MOUSE_ENABLE_PB_BUTTON_CONNECT_GND
+#bit6 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING 
+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
+00
+
+#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
+1c
+
+
+mem_device_option:0f
+mem_device_number:01
+mem_power_on_flag:01
+
+#ui
+
+mem_ui_button_gpio:ff
+mem_ui_button_timeout:1e
+mem_ui_led_struct_num:00
+
+
+
+#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_usb_offline_check_gpio:ff
+
+
+
+
+#2.4g
+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_mouse_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_mouse_24g_power_on_fast_conn_timer:02 00	#1s
+mem_mouse_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:00
+mem_lpm_mult:20
+mem_lpm_mult_init:20
+
+#rf_debug
+mem_rf_debug_rx_gpio:97
+mem_rf_debug_tx_gpio:97
+
+
+
+
+
+#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:
+07 00 #min interval
+07 00 #max interval
+20 00 #latency
+2c 01 #timeout
+
+mem_le_adv_ind:03 12 18
+mem_le_adv_direct_ind:ff 00 00
+
+
+
+
+
+#adc
+#adc
+mem_mouse_vdd_full_vol:dc 05		#1.5V
+84 03#mem_mouse_vdd_empty_vol  :0.9V
+e8 03#mem_mouse_vdd_low_vol   :1.0V
+#mem_mouse_vdd_full_vol:e4 0c		#3.3V
+#b8 0b#mem_mouse_vdd_empty_vol  :3.0V
+#80 0c#mem_mouse_vdd_low_vol   :3.2V
+
+mem_adc_channel_gpio:04
+#04
+#02
+#01
+#03
+#00
+#05
+#06
+#07
+
+#led
+
+
+#system
+mem_mouse_24g_pair_timeout_init:58 02  #1min
+mem_mouse_discovery_timeout:58 02  #1min
+mem_mouse_no_data_timeout:70 17   #10mins
+mem_mouse_24g_reconn_timeout_init:64 #10s
+mem_mouse_direct_timeout:64  #10s
+mem_mouse_fast_direct_timeout:64 #10s
+mem_mouse_page_to:00 40		# 16384*0.625ms=10s
+mem_mouse_fast_page_to:00 40		# 16384*0.625ms=10s
+
+mem_same_keyvalue_timer_init:B8 0B		#5min
+mem_keyboard_caps_led_on_timer:58 02	#1min
+
+
+mem_device_flag:00	#00--24g 01--bt/ble
+mem_device1_type:34
+mem_device1_addr:00 00 00 00 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
+
+##												bt button connct gnd          bt button in matrix        two button commbination
+mem_keyboard_pairing_type:00					#                 00                                    00                                 01
+mem_config_select_device_button_gpio:05#              00~16			               ff					ff
+mem_keyboard_commbination_key_bt:7f 06			#		 not care				   not care			     Fn+C
+mem_keyboard_commbination_key_24g:29 14		#		 not care				   not care			     Esc+Q
+mem_keyboard_bt_button_flag:01
+
+
+mem_keyboard_caps_led_gpio:ff
+mem_keyboard_num_led_gpio:ff
+mem_keyboard_power_led_gpio:ff
+
+mem_keyboard_led_r_gpio:ff
+mem_keyboard_led_g_gpio:ff
+mem_keyboard_led_b_gpio:ff
+
+mem_keybord_appearance:c1 03
+
+
+mem_mcu_stb_gpio:15
+mem_mcu_clk_gpio:14
+mem_mcu_rstb_gpio:12
+
+mem_mouse_param_config:
+ff #mem_lbutton_gpio
+ff #mem_mbutton_gpio
+ff #mem_rbutton_gpio
+ff #mem_bk_button_gpio
+ff #mem_fw_button_gpio
+ff #mem_dpi_button_gpio
+ff #mem_whee_a_data_gpio
+ff #mem_whee_b_data_gpio
+ff #mem_mouse_sensor_sclk_gpio
+ff #mem_mouse_sensor_sdio_gpio
+ff #mem_select_sensor_angle_gpio
+ff #mem_sensor_angle_default
+ff #mem_sensor_angle_switch
+ff #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_sensor_motion_gpio
+ff #mem_device_switch_gpio
+ff #mem_mouse_reuse_2ice_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
+mem_key_excol_gpio:c2 c1 85 84 83 82 81 80 c7 c6 c4
+
+#gpio00~16
+mem_key_row_gpio:
+09 		#r0
+0a 		#r1
+0b 		#r2
+0c 		#r3
+0d 		#r4
+0e 		#r5
+03 		#r6
+07		#r7
+
+#gpio00~16   portA:8x,portB:cx
+mem_key_col_gpio:
+0f		#c0
+10		#c1
+11		#c2
+08		#c14
+16		#c15
+c2		#c3
+c1		#c4
+c4		#c5
+c6		#c6
+c7		#c7
+85		#c8
+84		#c9
+83		#c10
+82		#c11
+80		#c12
+81		#c13
+ff		#c16
+ff		#c17
+ff		#c18
+ff		#c19
+
+mem_keyboard_keyvalue_map:
+#r0 ~ r7
+4c 00 00 00 44 00 2c 51 			#c0
+00 00 00 00 00 00 00 4f 				#c1
+00 e1 00 00 00 e5 00 00 			#c2
+42 2a 43 00 28 31 00 00 			#c3
+00 00 00 00 00 00 52 50 			#c4
+00 00 45 00 00 e0 e3 E7 			#c5
+00 e2 00 00 00 00 00 00 			#c6
+2e 30 25 0c 36 0e 3f 00 				#c7
+2d 2f 27 13 00 33 34 38 				#c8
+41 40 26 12 37 0f 00 00 				#c9
+23 1c 24 18 10 0d 0b 11 			#c10
+7f 00 3e 00 E6 00 00 00 			#c11
+22 17 21 15 19 09 0a 05 			#c12
+3a 39 1f 1a 1b 16 00 00 				#c13
+3b 3c 20 08 06 07 3d 00 			#c14
+35 2b 1e 14 1d 04 29 00 			#c15
+
+mem_keyboard_fn_first:	00			#fn first  00:press f1~f12=f1~f12      01:press fn+f1~f12=f1~f12
+mem_keyboard_fn_esc:	fb			#esc
+mem_keyboard_fn_f1:	f7			#f1
+mem_keyboard_fn_f2:	fa			#f2
+mem_keyboard_fn_f3:	a5			#f3
+mem_keyboard_fn_f4:	a6			#f4
+mem_keyboard_fn_f5:	a7			#f5
+mem_keyboard_fn_f6:	a8			#f6
+mem_keyboard_fn_f7:	eb			#f7
+mem_keyboard_fn_f8:	e9			#f8
+mem_keyboard_fn_f9:	ec			#f9
+mem_keyboard_fn_f10:	ed			#f10
+mem_keyboard_fn_f11:	ee			#f11
+mem_keyboard_fn_f12:	a9			#f12
+mem_keyboard_fn_del:	4c			#delete
+
+# 00: disable           01: enable
+mem_keyboard_fn_arrow_enable_flag:01
+mem_keyboard_fn_left_ctrl_enable_flag:01
+mem_keyboard_fn_space_enable_flag:01
+mem_keyboard_fn_system_switch_enable_flag:00
+
+
+mem_keyboard_commbination_fast_conn_bt:2a 10	# bs+M
+
Index: usb_pc_ai_voice/sched/le_prcp.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/le_prcp.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/le_transmit_uuid.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/le_transmit_uuid.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/mesh.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/mesh.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/mesh.dat	(working copy)
@@ -0,0 +1,211 @@
+
+
+mem_le_adv_enable: 01
+
+#mem_mesh_three_tuple_ProductID:
+#灯
+#00 5F 74 FC
+#18 14 6c 11 eb f1
+#33 42 99 b0 e7 0b f6 5e 68 67 bd 9a a7 42 b9 b9
+
+#风扇灯
+#00 5F 7A D1
+#486e703cafa8
+#55c742493aac4fba2d9aae6c5b6cc061
+
+#00 5F 7A D1
+#486e703cafa9
+#c435c7f0e6e2b4c6a9dc4f6f3eaf9fa3
+
+#四键开关
+#00 5F 7C 48
+#486e703efaff
+#f5816553a881fbc734b6562ebdeb6d58
+
+mem_le_scan_interval:0a 00	#6.25ms
+mem_le_scan_window:03 00	#40ms
+
+mem_le_adv_type:00
+#ADV_NONCONN_IND
+
+
+#########mesh fast pairing setting#############
+mem_mesh_Device_PID:51 
+# Bit0,1,2,3:  BLE ADV VERSION   
+#bit4:1 (defult) 
+#bit5:suport OTA 1(defult) 
+#bit 6,7:
+#00	(BLE 4.0)
+#01 (defult BLE 4.2) 
+#10 (BLE 5.0) 
+#11 (BLE above 5.0 )
+
+mem_mesh_UUID_FeatureFlag:02 #bit 1-7:UUID VERSION bit0:ADV STATE
+mem_mesh_UUID_FeatureFlag1:83
+mem_mesh_PDU_RFU: 20
+#Bit0: 支锟街硷拷锟斤拷锟斤拷锟斤拷锟斤拷志位
+#Bit1: 锟斤拷展AuthValue锟斤拷志位
+#Bit2: 支锟斤拷Tiny Mesh app 锟斤拷锟斤拷锟斤拷志位
+#Bit3: RFU
+#Bit7~4: Genie Bt Mesh Stack锟斤拷志锟斤拷未使锟斤拷锟斤拷0
+#Bit7~4:1锟斤拷示锟斤拷锟斤拷TG7111B (YC1059)锟斤拷锟斤拷锟
+
+mem_mesh_OOB_information:00 00
+
+#################
+
+
+mem_device_option:0b
+
+mem_mesh_send_message_TTL:05
+
+
+mem_mesh_sha256_ConfirmationKey_ascii:
+43 6f 6e 66 69 72 6d 61 74 69 6f 6e
+4b 65 79
+
+mem_mesh_sha256_SessionKey_ascii:
+53 65 73 73 69 6f 6e
+4b 65 79
+
+mem_mesh_sha256_DeviceKey_ascii:
+44 65 76 69 63 65
+4b 65 79
+
+
+mem_k2_P_len:
+01 00
+mem_k2_SALT:
+4f 90 48 0c 18 71 bf bf fd 16 97 1f 4d 8d 10 b1
+
+mem_k3_SALT:
+00 36 44 35 03 f1 95 cc 8a 71 6e 13 62 91 c3 02
+mem_k3_id64_01:
+69 64 36 34 01
+
+mem_k4_SALT:
+0e 9a c1 b7 ce fa 66 87 4c 97 ee 54 ac 5f 49 be
+mem_k4_id6_01:
+69 64 36 01
+
+
+mem_mesh_element_number:
+01
+mem_mesh_element_device_ptr:mem_mesh_element_device
+
+mem_mesh_element_device_length:
+1B 00
+
+mem_mesh_element_device:
+#c1 03     #锟斤拷锟斤拷毯锟介播锟斤拷址
+c0 00	#锟斤拷锟介播锟斤拷址
+#c0 01	#锟斤拷锟斤拷锟介播锟斤拷址
+
+
+mem_mesh_network_relay_queue_each_size:
+22 04 
+
+mem_mesh_element_device1:
+c0 01	#锟斤拷锟斤拷锟介播锟斤拷址
+
+mem_mesh_element_device2:
+c0 01	#锟斤拷锟斤拷锟介播锟斤拷址
+#00 00
+
+
+mem_mesh_core_feature:
+00
+#bit0 MESH_FEATURE_LOG
+#bit1 
+
+
+#proxy adv init
+mem_le_adv_interval:f0 00
+mem_le_adv_channel_map:07
+
+mem_le_local_mtu:28
+
+mem_le_scan_data_len:0e
+02 01 06
+'\09Tiny Mesh
+
+
+mem_ui_le_uuid_table:mem_mesh_le_att_list
+mem_mesh_le_att_list:
+#Primary service yichip transmit ------
+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 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
+
+#Mesh Proxy Service Declaration
+0c 00 02 00 28 02 28 18
+#Mesh Proxy Data In Characteristic Declaration
+#Mesh Proxy Data In Characteristic Value
+#Characteristic --write without response
+0d 00 02 03 28 01 04
+0e 00 02 DD 2A 01 00
+#Mesh Proxy Data Out Characteristic Declaration
+#Mesh Proxy Data Out Characteristic Value
+#Mesh Proxy Data Out Client Characteristic Configuration
+#Characteristic --notify
+0f 00 02 03 28 01 10
+10 00 02 DE 2A 01 00
+#Client Characteristic Configuration
+11 00 02 02 29 02 00 00
+
+#Mesh Provisioning Service Declaration
+12 00 02 00 28 02 27 18
+#Mesh Provisioning Data In Characteristic Declaration
+#Mesh Provisioning Data In Characteristic Value
+#Characteristic --write without response
+13 00 02 03 28 01 04
+14 00 02 DB 2A 01 00
+#Mesh Provisioning Data Out Characteristic Declaration
+#Mesh Provisioning Data Out Characteristic Value
+#Mesh Provisioning Data Out Client Characteristic Configuration
+#Characteristic --notify
+15 00 02 03 28 01 10
+16 00 02 DC 2A 01 00
+#Client Characteristic Configuration
+17 00 02 02 29 02 00 00
+
+
+00 00
+
+
+
+
+
+
+
+
+mem_rf_init_data:
+# xtal 16M
+ff
+mem_rf_init_ptr:mem_rf_init_data
+
+mem_mesh_segmented_access_message_SegN_upper_limit:01
+mem_mesh_segmented_access_message_Segment_ptr:mem_mesh_segmented_access_message_Segment
+
+mem_mesh_vendor_mesh_receive_tid: ff
+
+mem_mesh_chip_select: 02
+
Index: usb_pc_ai_voice/sched/mouse.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/mouse.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/mouse.dat	(working copy)
@@ -0,0 +1,438 @@
+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
+04
+
+#mouse flag byte2
+#bit0 MOUSE_ENABLE_BLE_RANDOM_ADDRE
+#bit1 MOUSE_ENABLE_2K_EEPROM
+#bit2 MOUSE_ENABLE_INIT_DELAY
+#bit3 MOUSE_ENABLE_WAKEUP_FROM_POWER
+#bit4 MOUSE_ENABLE_16M
+#bit5 MOUSE_ENABLE_USB
+#bit6 MOUSE_ENABLE_24G_SEARCH_DONGLE
+#bit7 MOUSE_ENABLE_LOAD_AND_STORE_DPI
+49
+
+#mouse flag byte3
+#bit0 MOUSE_ENABLE_SPI2
+#bit1 MOUSE_ENABLE_24G
+#bit2 MOUSE_ENABLE_FLASH
+#bit3 MOUSE_ENABLE_EEPROM
+#bit4 MOUSE_ENABLE_OTP
+#bit5 MOUSE_ENABLE_ADC
+#bit6 MOUSE_ENABLE_KEYBOARD
+#bit7 MOUSE_ENABLE_DOUBLE_DPI_KEY
+0a
+
+#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
+#bit6 MOUSE_ENABLE_DPI_LOW_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_OR_MATRIX
+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_mouse_param_config:
+08 #mem_lbutton_gpio
+09 #mem_mbutton_gpio
+0a #mem_rbutton_gpio
+0a #mem_bk_button_gpio
+08 #mem_fw_button_gpio
+09 #mem_dpi_button_gpio
+ff #mem_whee_a_data_gpio
+ff #mem_whee_b_data_gpio
+0b #mem_mouse_sensor_sclk_gpio
+0c #mem_mouse_sensor_sdio_gpio
+ff #mem_select_sensor_angle_gpio
+00 #mem_sensor_angle_default
+00 #mem_sensor_angle_switch
+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_sensor_motion_gpio
+ff #mem_device_switch_gpio
+05 #mem_mouse_reuse_2ice_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
+
+mem_mouse_customer_function:01  #01--win+d     02--ctrl+alt+a    03--ie home    04--play
+
+#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_mouse_24g_pair_timeout_init:2c 01  #30s	    24g reconn timer&pair timer
+mem_mouse_24g_reconn_timeout_init:64 #10s
+mem_mouse_24g_power_on_fast_conn_timer:05 00	#500ms
+mem_mouse_direct_timeout:32  #05s
+mem_mouse_discovery_timeout:b0 04	#2min
+mem_mouse_fast_direct_timeout:0a #1s
+mem_mouse_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_flag:
+00		#00--24g 01--bt
+34
+ff ff ff ff ff ff
+mem_device2_type:
+34
+ff ff ff ff ff ff
+mem_device3_type:
+33
+ff ff ff ff ff ff
+
+#adc
+mem_mouse_vdd_full_vol:dc 05		#1.5V
+84 03#mem_mouse_vdd_empty_vol  :0.9V
+e8 03#mem_mouse_vdd_low_vol   :1.0V
+#mem_mouse_vdd_full_vol:e4 0c		#3.3V
+#b8 0b#mem_mouse_vdd_empty_vol  :3.0V
+#80 0c#mem_mouse_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_compare_addr:ff ff ff ff ff ff#00 00 00 00 00 00		#otp/flash=0	eeprom=ff
+
+#2.4g
+mem_24g_lap: 12 31 31 41 51 61
+mem_24g_data_type:01	#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_mouse_sleep_deal_type:00	#00:old version	01 new version	
+mem_24g_rx_window:c0 12     #400us  ## e0 2e#1ms #transmitter long range min:520us
+
+mem_mouse_24g_short_sleep_set_4ms:ee 4d 00	#1662us
+mem_mouse_24g_long_sleep_set_4ms:80 bb 00
+mem_mouse_24g_fast_hop_count_4ms:05
+mem_mouse_24g_tsniff_4ms:80 bb 00 00
+
+mem_mouse_24g_short_sleep_set_8ms:e8 fd 00#ac 07 01	#5625us	40 19 01:72000:6ms
+mem_mouse_24g_long_sleep_set_8ms:00 77 01
+mem_mouse_24g_fast_hop_count_8ms:0b
+mem_mouse_24g_tsniff_8ms:00 77 01 00
+
+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_mouse_24g_search_dongle_time_init:64 00	#10s
+mem_store_information_delay_timer_init:05
+
+
+#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:1d 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:
+06 00 #min interval
+09 00 #max interval
+20 00 #latency
+2c 01 #timeout
+
+mem_le_adv_ind:03 12 18
+mem_le_adv_direct_ind:ff 00 00
+
+mem_flash_base:00 50 00
+mem_eeprom_base:80 1f
+mem_eeprom_block_size:80
+
+#otp write info offset
+mem_otp_offset_dpi:5d 1c										#7261 begin		60count----------info begin	
+mem_otp_offset_dpi_end:7a 1c								#7290 end
+
+mem_otp_offset_device_flag:7b 1c							#7291 begin		80count
+mem_otp_offset_device_flag_end:a2 1c						#7330 end
+
+mem_otp_offset_24g_addr:a3 1c								#7331 begin		25 count
+mem_otp_offset_24g_addr_end:06 1d						#7430 end
+
+mem_otp_offset_le_addr1:07 1d								#7431 begin		25 count
+mem_otp_offset_le_addr1_end:9c 1d						#7580 end
+
+mem_otp_offset_le_locall_addr1:9d 1d						#7581 begin		25 count
+mem_otp_offset_le_locall_addr1_end:32 1e				#7730 end
+
+mem_otp_offset_le_addr2:33 1e								#7731 begin		25 count
+mem_otp_offset_le_addr2_end:c8 1e						#7880 end
+
+mem_otp_offset_le_locall_addr2:c9 1e						#7881 begin		25 count
+mem_otp_offset_le_locall_addr2_end:5e 1f				#8030  end
+
+mem_otp_offset_le_addr_increase_count:5f 1f			#8031 begin		100 count
+mem_otp_offset_le_addr_increase_count_end:c2 1f		#8130 end				----------info over	
+
+mem_otp_offset_app_initflag:c4 1f		#8132 end
+
+#ui
+mem_ui_button_gpio:ff
+mem_ui_button_timeout:1e
+mem_ui_led_struct_num:00
+
+#rf
+mem_tx_power:00	#00--0db 01--3db  02--5db  03--f3db  04--f5db
+mem_mouse_24g_pair_tx_power:94 #94: -20dBm
+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
+mem_power_ctrl_disable:00	#01,disable   00,enable
+mem_tx_power_factory_param:5b 01		#f17dbm
+
+#usb
+mem_usb_offline_check_gpio:ff
+
+#sensor
+mem_mouse_dpi_seting:
+03	#mem_320x_dpi_0
+04	#mem_320x_dpi_1
+01	#mem_320x_dpi_2
+02	#mem_320x_dpi_3
+
+20	#mem_3212_dpi_0
+2a	#mem_3212_dpi_1
+3f	#mem_3212_dpi_2
+15	#mem_3212_dpi_3
+
+14	#mem_ka8g2_dpi_0
+1b	#mem_ka8g2_dpi_1
+11	#mem_ka8g2_dpi_2
+0e	#mem_ka8g2_dpi_3
+
+mem_sensor_s201_dpi:
+8a  #mem_sensor_s201_dpi_0	1200
+8b  #mem_sensor_s201_dpi_1	1600
+83  #mem_sensor_s201_dpi_2	2400
+84  #mem_sensor_s201_dpi_3	3200
+88  #mem_sensor_s201_dpi_4	800
+
+mem_sensor_ka8g2_poweron_init:
+09 a5
+0b f3
+09 00
+ff ff
+
+mem_sensor_poweron_init:
+09 5a
+0b f3
+09 00
+ff ff
+
+mem_sensor_3212_init:
+09 5a
+26 34
+19 04
+09 00
+ff ff
+
+mem_sensor_3205_init:
+09 5a
+0d 10
+1d ed
+7d 80
+ff ff
+
+mem_sensor_ka8g2_init:
+09 a5
+46 34
+60 07
+69 04
+7d 20
+7e 00
+09 00
+ff ff
+
+mem_sensor_8650_init:
+09 5a
+ff 27
+ab 40
+b3 56
+9b e6
+a8 12
+a9 c0
+be e6
+a5 af
+a0 21
+a1 02
+b8 10
+b9 0b
+a7 ff
+b5 d0
+b6 00
+ff 00
+09 00
+ff ff
+
+mem_sensor_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
+
+# rf debug
+#bit7:0 means disable rf debug function
+#mem_rf_debug_rx_gpio:86
+#mem_rf_debug_tx_gpio:86
+
Index: usb_pc_ai_voice/sched/mouse_ble_att_list.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/mouse_ble_att_list.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/mouse_ble_att_list.dat	(working copy)
@@ -0,0 +1,626 @@
+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
+bd
+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
+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
+19
+00
+2a
+ff
+03
+15
+00
+26
+ff
+03
+95
+01
+75
+10
+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
+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
Index: usb_pc_ai_voice/sched/otp_set.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/otp_set.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/otp_set.dat	(working copy)
@@ -0,0 +1,11 @@
+0b
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
Index: usb_pc_ai_voice/sched/remote_car.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/remote_car.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/remote_car.dat	(working copy)
@@ -0,0 +1,46 @@
+
+mem_device_option:0d
+mem_ui_button_gpio:ff
+
+mem_remote_style_struct_led_gpio:06
+mem_remote_car_led_num:01
+mem_remote_car_led_map:
+06
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+
+
+mem_remote_car_key_num:04
+mem_remote_car_key_conf0:
+#0
+03
+#1
+04
+#2
+05
+#3
+07
+#4
+02
+#5
+0a
+#6
+17
+
+mem_24g_tx_phy:84#0x01:1M/0x02:2M/0x04:S2/0x84:S8
+mem_24g_rx_phy:84#0x01:1M/0x02:2M/0x04:S2/0x84:S8
+mem_24g_pair_tx_power:85 #-5dBm
+
+
+mem_24g_lap:01 02 03 04 05 06
+mem_24g_pair_addr:56 34 02 01
+mem_eeprom_base:80 1f		//2keeprom:f0 00
+mem_24g_pair_ch:4e
+
+mem_remote_save_addr_flag: 01
+
Index: usb_pc_ai_voice/sched/rtrivr_uuid.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/rtrivr_uuid.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/sha256.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/sha256.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/shutter.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/shutter.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/shutter.dat	(working copy)
@@ -0,0 +1,26 @@
+mem_device_option:09
+mem_ui_button_gpio:ff
+
+mem_le_lap:20 31 27 98 07 2a
+mem_le_name_len:
+'AB Shutter3
+
+mem_shutter_key_conf0_temp:17 0c 95 00 ff
+
+mem_shutter_soft_switch_first_power_on:00
+
+mem_tx_power:06
+
+mem_shutter_dy_conf:00
+mem_shutter_discovery_time_conf:
+b8 0b #discovery_timeout
+70 17 #connect_timeout
+70 17 #sleep_timeout
+70 17 #sleep_timer
+
+mem_shutter_reconn_or_discovery_blink_time_conf:
+96 00 #mem_ble_shutter_reconn_blink_on_time
+96 00 #mem_ble_shutter_reconn_blink_off_time
+20 03 #mem_ble_shutter_discovery_blink_on_time
+20 03 #mem_ble_shutter_discovery_blink_off_time
+
Index: usb_pc_ai_voice/sched/shutter_dy.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/shutter_dy.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/shutter_dy.dat	(working copy)
@@ -0,0 +1,543 @@
+#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:aa 00 78 00 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
+88		#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
+88		#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
+0a   #right
+ff   #like
+07   #down
+ff   #photo
+05   #up
+09   #left
+ff   #move
+
+
+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_move_mid:
+15 15 1a 16 12 12 00
+mem_shutter_iphone_up_mid:
+15 15 1a 37 12 12 00
+mem_shutter_iphone_like_mid:
+15 15 1a 38 12 12 
+mem_shutter_android_move_mid:
+13 36 12 12 00
+
+mem_key0_press_i:  #right
+00
+mem_key0_release_new_i:
+0e 11 11 12 2c 2e 2f 30 32 33 0f 0f 00
+
+mem_key0_long_press_i:
+3c 3a 00
+mem_key1_press_i:#like
+0e 2a 12 2b 00
+mem_key1_release_new_i:
+12 12 00
+
+mem_shutter_link_data_i:
+0e 12 12 0e 12 12 00
+
+mem_key2_press_i:#down
+00
+mem_key2_release_new_i:
+0e 14 14 12 22 23 24 25 26 29 17 17 00
+
+#toggle between vol-inc and vol-dec
+mem_key3_press_i:#photo
+00
+#05
+mem_key3_release_new_i:#volume increment
+#7key
+#07 09 00
+#6key
+0e 07 2a 09 2b 12 00
+mem_key3_release_new_i_t:#volume decrement
+#7key
+#08 09 00
+#6key
+0e 08 2a 09 2b 12 00
+
+mem_key4_press_i:#up
+00
+mem_key4_release_new_i:
+0e 17 17 12 29 26 25 24 23 22 34 14 14 00
+
+mem_key5_press_i:#left
+00
+mem_key5_release_new_i:
+0e 0f 0f 12 32 31 2f 2e 2c 35 11 11 00
+mem_key5_long_press_i: #lock
+39 3a 00
+
+mem_key6_release_new_i:#move
+0e 2a 12 2b 12 00
+mem_key6_release_new:#move
+0e 12 12 12 12 00
+
+mem_dy_key0_press:  #right
+00
+mem_key0_release_new:
+10 0b 0e 1d 1d 1d 12 15 19 00
+mem_key0_long_press: 
+3b 3a 00
+mem_dy_key1_press:#like
+0e 12 12 00
+mem_key1_release_new:
+12 12 00
+
+mem_shutter_link_data:
+0e 12 12 0e 12 12 12 00
+mem_dy_key2_press: #down
+00
+mem_key2_release_new:
+13 18 0e 1e 0c 0c 0c 12 15 19 00
+mem_key2_long_press:#volume decrement
+08 09 00
+mem_key2_long_release:
+00
+#toggle between vol-inc and vol-dec
+mem_dy_key3_press:#photo
+00
+mem_key3_release_new:#volume increment
+#7key
+#07 09 00
+#6key
+#0e 07 09 12 00
+0e 12 00
+mem_key3_release_new_t:#volume decrement
+#7key
+#08 09 00
+#6key
+#0e 08 09 12 00
+0e 12 00
+
+
+mem_dy_key4_press:#up
+00
+mem_key4_release_new:
+15 19 0e 1f 0d 0d 0d 12 15 19 00
+mem_key4_long_press:#volume increment
+07 09 00
+mem_key4_long_release:
+00
+
+
+mem_dy_key5_press:#left
+00
+mem_key5_release_new:
+15 0a 0e 1c 1c 1c 12 12 15 19 00
+mem_key5_long_press: #lock
+39 3a 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:
+03 1f 00 ec 0f 00 00 00 00 00#1
+03 1f 00 14 00 00 00 00 00 00#2
+03 1f 00 00 c0 fe 00 00 00 00#3
+03 1f 00 00 40 01 00 00 00 00#4
+03 1f 00 00 00 00 00 00 00 00#5
+03 1f 00 00 00 00 00 00 00 00#6
+02 1b 00 e9 00 00 00 00 00 00#7 volume increment
+02 1b 00 ea 00 00 00 00 00 00#8 volume decrement
+02 1b 00 00 00 00 00 00 00 00#9 release
+03 1f 00 28 80 11 00 00 00 00#a
+03 1f 00 ae 8f 11 00 00 00 00#b
+03 1f 00 00 e0 fc 00 00 00 00#c
+03 1f 00 00 00 05 00 00 00 00#d
+03 17 00 01 00 00 00 00 00 00#e
+03 1f 00 27 00 00 00 00 00 00#f
+03 1f 00 ff 17 80 00 00 00 00#10
+03 1f 00 d8 0f 00 00 00 00 00#11
+03 17 00 00 00 00 00 00 00 00#12
+03 1f 00 01 f8 7f 00 00 00 00#13
+03 1f 00 00 40 fc 00 00 00 00#14
+03 1f 00 01 18 80 00 00 00 00#15 
+03 1f 00 3c 40 0b 00 00 00 00#16
+03 1f 00 00 c0 03 00 00 00 00#17
+03 1f 00 3c 40 ec 00 00 00 00#18
+03 1f 00 3c 80 0c 00 00 00 00#19
+03 1f 00 00 10 80 00 00 00 00#1a
+03 1f 00 3c 80 07 00 00 00 00#1b
+03 1f 00 96 00 00 00 00 00 00#1c
+03 1f 00 6a 0f 00 00 00 00 00#1d
+03 1f 00 02 d0 ff 00 00 00 00#1e
+03 1f 00 02 30 00 00 00 00 00#1f
+03 1f 00 64 00 00 00 00 00 00#20
+03 1f 00 00 b0 f9 00 00 00 00#21
+
+07 13 00 07 06 70 07 ac 0d 01#22
+07 13 00 07 06 70 07 80 0c 01#23
+07 13 00 07 06 70 07 54 0b 01#24
+07 13 00 07 06 70 07 28 0a 01#25
+07 13 00 07 06 70 07 fc 08 01#26
+07 13 00 07 06 70 07 d0 07 01#27
+07 13 00 07 06 70 07 a4 06 01#28
+07 13 00 00 06 70 07 78 05 00#29
+07 13 00 07 07 70 07 70 07 01#2a
+07 13 00 00 07 70 07 70 07 00#2b
+07 13 00 07 05 10 0c 70 04 01#2c
+07 13 00 07 05 48 0b 70 04 01#2d
+07 13 00 07 05 F0 0A 70 04 01#2e
+07 13 00 07 05 C4 09 70 04 01#2f 
+07 13 00 07 05 6C 07 70 04 01#30
+07 13 00 07 05 40 04 70 04 01#31
+07 13 00 07 05 E8 02 70 04 01#32
+07 13 00 00 05 00 02 70 04 00#33
+07 13 00 00 06 70 07 ac 0e 00#34
+07 13 00 00 05 10 0d 70 04 00#35
+
+#03 17 00 00 fa 00 00 00 00 00 #36
+#03 17 00 00 28 00 00 00 00 00 #37
+#03 17 00 00 d2 00 00 00 00 00 #38
+#03 17 00 00 32 00 00 00 00 00 #39
+#03 17 00 00 00 fa 00 00 00 00 #3a
+#03 17 00 00 00 05 00 00 00 00 #3b
+#03 17 00 00 00 f0 00 00 00 00 #3c
+#03 17 00 00 00 0f 00 00 00 00 #3d
+
+03 1f 00 a0 30 e8 00 00 00 00#36
+03 1f 00 3c 40 07 00 00 00 00#37
+03 1f 00 41 40 0b 00 00 00 00#38
+
+02 1b 00 30 00 00 00 00 00 00#39
+02 1b 00 00 00 00 00 00 00 00#3a
+02 1b 00 23 02 00 00 00 00 00#3b
+02 1b 00 40 00 00 00 00 00 00#3c
+
+mem_shutter_move_data:
+00 00 00  #defualt 
+
+#mem_le_dy_adv_data:
+#02 01 05
+#03 02 12 18
+#03 19 c1 03
+#mem_le_dy_scan_data:
+#0d 09 56 30 2d 53 68 75 74 74 65 72
+
+mem_ble_shutter_dy_interval_min_new:
+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 2
+22 00 02 03 28 01 12
+23 00 02 4d 2a 02 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 08 00 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:6d 00 #6d 00
+mem_shutter_le_map_len_ios:c4 00
+mem_shutter_le_hid_map:
+05 0c  # Usage Page(Consumer)
+09 01  # Usage(Consumer Control)
+a1 01  # Collection(Application)
+85 03  # Report ID(3)
+75 10  # Report Size(16)
+95 01  # Report Count(1)
+15 01  # Logical Minimum(1)
+26 ff 03 # Logical Maxmum(1023)
+19 01    # Usage Minimum(1)
+2a ff 03 # Usage Maximum(1023)
+81 60    #Input (Data, Array, Absolute, No Preferred, Null state)
+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
+
+
+05 0D  # Usage Page(Digitizer)
+09 02  # Usage(Pen)
+A1 01 # Collection(Application)
+85 01 # Report ID(1)
+09 22 #Usage (Finger)
+A1 02 #Collection (Logical (interrelated data))
+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, Variable, Absolute)
+09 32 #Usage (In Range)
+81 02 #Input (Data, Variable, Absolute)
+95 06 # Report Count(6)
+81 03 #Input (Constant, Variable, Absolute)
+75 08 # Report Size(8)
+09 51 #Usage (Contact identifier)
+95 01 # Report Count(1)
+81 02 #Input (Data, Variable, Absolute)
+05 01 #Usage Page (Generic Desktop Controls)
+26 FF 0F # Logical Maximum(4095)
+75 10 # Report Size(16)
+55 0E #Unit Exponent (14)
+65 33 #Unit(51)
+09 30 #Usage (x)
+35 00 #Physical Minimum (0)
+46 B5 04 #Physical Maximum (1205)
+81 02 #Input (Data, Variable, Absolute)
+46 8A 03 #Physical Maximum (906)
+09 31 #Usage (y)
+81 02 #Input (Data, Variable, Absolute)
+C0 
+
+05 0D # Usage Page(Digitizer)
+09 54 # Usage(84)
+95 01 # Report Count(1)
+75 08 # Report Size(8)
+81 02 #Input (Data, Variable, Absolute)
+85 08 # Report ID(8)
+09 55 # Usage (Contact count mamimum)
+25 05 # Logical Maximum(5)
+B1 02 #Input (Data, Variable, Absolute)
+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: usb_pc_ai_voice/sched/sim.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/sim.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/spp.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/spp.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/test.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/test.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/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: usb_pc_ai_voice/sched/usb_confdata.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/usb_confdata.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/usb_confdata.dat	(working copy)
@@ -0,0 +1,60 @@
+3b
+09
+02
+3b
+00
+02
+01
+00
+a0
+32
+09
+04
+00
+00
+01
+03
+01
+01
+00
+09
+21
+00
+02
+00
+01
+22
+1a
+00
+07
+05
+81
+03
+40
+00
+02
+09
+04
+01
+00
+01
+03
+01
+02
+00
+09
+21
+00
+02
+00
+01
+22
+a3
+00
+07
+05
+82
+03
+40
+00
+02
\ No newline at end of file
Index: usb_pc_ai_voice/sched/usb_devicedata.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/usb_devicedata.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/usb_devicedata.dat	(working copy)
@@ -0,0 +1,19 @@
+12
+12
+01
+00
+02
+00
+00
+00
+40
+51
+31
+20
+10
+02
+00
+01
+02
+00
+01
\ No newline at end of file
Index: usb_pc_ai_voice/sched/usb_kbdata.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/usb_kbdata.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/usb_kbdata.dat	(working copy)
@@ -0,0 +1,64 @@
+3f
+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 
+25
+ff
+05
+07
+19
+00
+29
+ff 
+81
+00
+c0
Index: usb_pc_ai_voice/sched/usb_kbdata_vendor_define.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/usb_kbdata_vendor_define.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/usb_kbdata_vendor_define.dat	(working copy)
@@ -0,0 +1,27 @@
+1a
+06
+bc
+ff
+09
+88
+a1
+01
+85
+04
+19
+00
+2a
+ff
+00
+15
+00
+26
+ff
+00
+75
+08
+95
+01
+81
+00
+c0
\ No newline at end of file
Index: usb_pc_ai_voice/sched/usb_msdata.dat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/usb_msdata.dat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/sched/usb_msdata.dat	(working copy)
@@ -0,0 +1,164 @@
+a3
+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
+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
+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
\ No newline at end of file
Index: usb_pc_ai_voice/set_chip_type_flag.bat
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/set_chip_type_flag.bat	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/set_chip_type_flag.bat	(working copy)
@@ -0,0 +1,15 @@
+@echo off  
+setlocal enabledelayedexpansion  
+  
+rem YC1305 榧犳爣鍒嗛厤鐨勫彉閲忚寖鍥20-2f
+rem YC1304 榧犳爣鍒嗛厤鐨勫彉閲忚寖鍥30-3f
+rem YC1305 dongle鍒嗛厤鐨勫彉閲忚寖鍥磃0-f7
+rem YC1304 dongle鍒嗛厤鐨勫彉閲忚寖鍥磂8-ee
+rem 鍙橀噺鍒嗛厤鐨勮鍒欎緥濡傦細榧犳爣鐨勶紝1305sa==0x20 1305sb==0x21渚濇绫绘帹鍒2f缁撴潫
+rem 鍙橀噺鍒嗛厤鐨勮鍒欎緥濡傦細dongle鐨勶紝1305sa==0xf0 1305sb==0xf1渚濇绫绘帹鍒癴7缁撴潫
+
+rem 瀹氫箟DAT鏂囦欢鐨勮鎻掑叆鐨勫瓧鑺傚拰璺緞鍙婂悕绉帮紝濡傛灉鏄痚eprom.dat鏂囦欢,灏辨妸otp.dat鏀规垚eeprom.dat
+set insertString=f0
+echo !insertstring!>>output\otp.dat
+
+echo ok end
\ No newline at end of file
Index: usb_pc_ai_voice/util/crc16.exe
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

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

Property changes on: usb_pc_ai_voice/util/eeprom2fulleeprom.exe
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: usb_pc_ai_voice/util/eeprom2fulleeprom.pl
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/util/eeprom2fulleeprom.pl	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/util/eeprom2fulleeprom.pl	(working copy)
@@ -0,0 +1,18 @@
+
+
+
+$source_file = $ARGV[0];
+$eeprom_size = $ARGV[1];
+
+open(EEP,"$source_file") or die("cannot open files");
+for ($i = 1 ;$i<=$eeprom_size*128-2;$i++)
+{
+
+    while (<EEP>) { 
+        $c = hex();
+        printf "%02x\n", $c;
+        $i++;
+    }
+
+	printf "FF\n";
+}
Index: usb_pc_ai_voice/util/eeprom2otp.pl
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/util/eeprom2otp.pl	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/util/eeprom2otp.pl	(working copy)
@@ -0,0 +1,24 @@
+
+#鏀瑰墠涓変釜瀛楄妭涓0200锛
+#杈撳叆涓涓枃浠讹紝杈撳嚭涓涓枃浠讹紱
+
+if(@ARGV < 2) {
+	printf "less files\n";
+	exit;
+}
+else{
+	open(file, $ARGV[0]) or die "Can't open  file  : $!"; 
+	open(file_out, ">$ARGV[1]")or die "Can't open out file  : $!"; 
+	@lines = <file>;
+	$length = @lines;
+	
+	my $j=2;
+	print file_out "00\n01\n";
+	while($j<$length){
+			print file_out "$lines[$j]";
+			$j++;
+	}
+#	print "----- reverse end -----";
+	close(file);
+	close(file_out);
+}
Index: usb_pc_ai_voice/util/mergepatch.pl
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/util/mergepatch.pl	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/util/mergepatch.pl	(working copy)
@@ -0,0 +1,351 @@
+#!/usr/bin/perl
+$defs = "";
+
+sub alloc {
+	my($end, %mc) = @_;
+	my(%eadr) = ();
+	my($tstr, $str, $i, $j, $addr);
+	my($tstr) = "";
+	
+	foreach $i (sort keys %mc) {
+		if($i =~ /(.+)_(.+)/ && exists($eadr{$1})) {
+			$addr = $eadr{$1};
+		} else {
+			$addr = $end;
+		}
+		for($j = 0;$j <= $#{$mc{$i}};$j++) {
+			if($mc{$i}[$j] =~ /^\s*([0-9]+)\s+([a-zA-Z0-9_]+)\s*(.*)$/) {
+				$str = sprintf "0x%04x %s%s\n", $addr, $2, $3;
+				$var{$2} = $addr;
+				$addr += $1;
+				$tstr .= $str;
+			}
+		}
+		$eadr{$i} = $addr;
+	}
+	if($addr > 0x4000) {
+		$xend = $addr if($addr > $xend);
+	} else {
+		$bend = $addr if($addr > $bend);
+	}
+	return $tstr . "\n";
+}
+
+
+sub malloc {
+	$path="output/bt_format.meta";
+	open file, $path;
+	@f = <file>;
+	close file;
+	open file, ">$path";
+	$path =~ s/\/.*//;
+	open file1, ">output/memmap.format";
+	$xaddr = 0x4000;
+	$addr = 0;
+	if($#ARGV == 1) {
+		$addr = hex($ARGV[0]);
+		$xaddr = hex($ARGV[1]);
+	}
+	for($i = 0, $ocnt = 0;$i < @f;$i++) { 
+		$_ = $f[$i];
+		$start = 1 if(/^\s*memalloc\s*\(\s*$/);		# allocate from 0
+		$start = 2 if(/^\s*xmemalloc\s*\(\s*$/);	# allocate from 4000
+		$start = 3 if(/^\s*omemalloc\s*\(\s*$/);	# allocate after all xmemalloc, mutex from each other(obsolete, for compatibility)
+		if(/^\s*([ax]*)memalloc\s+([a-zA-Z_0-9]+)\s*\(\s*$/) {
+			$start = $1 eq 'a' ? 5 : $1 eq 'x' ? 6 : 7;
+			$basev = $2;
+		}
+		if($start) {
+			if(/^\s*([a-zA-Z0-9_]+)\s+([a-zA-Z0-9_]+)\s*(.*)$/ && exists($def2{$1})) {		# macro for size
+				$_ = sprintf("%s %s %s", $def2{$1}, $2, $3);
+			}
+			if(/^\s*([0-9]+)\s+([a-zA-Z0-9_]+)\s*(.*)$/) {
+				if($start == 1) {
+					$str = sprintf "0x%04x %s%s\n", $addr, $2, $3;
+					$var{$2} = $addr;
+					$addr += $1;
+					$bstr .= $str;
+				} elsif($start == 2) {
+					$str = sprintf "0x%04x %s%s\n", $xaddr, $2, $3;
+					$var{$2} = $xaddr;
+					$xaddr += $1;
+					$xstr .= $str;
+				} else {
+					push @ostr, $_;
+				}
+			}
+			if(/^\s*\)\s*$/) {
+				if(@ostr > 0) {
+					if($start == 3) {
+						push @{$xmalloc{$ocnt}}, @ostr;
+						$ocnt++;
+					} elsif($start == 5) {
+						push @aaddr,$basev;
+						push @amalloc,[@ostr];
+					} elsif($start == 6) {
+						push @{$xmalloc{$basev}}, @ostr;
+					} elsif($start == 7) {
+						push @{$malloc{$basev}}, @ostr;
+					} 
+				}
+				$start = 0;
+				@ostr = ();
+			}
+		} else {
+			$def2{$2} = $1 if(/^\s*([0-9]+)\s+([a-zA-Z0-9_]+)\s*(.*)$/);
+			$sstr .= $_;
+		}
+	}
+	
+#--------------------- o/x/memalloc process -----------------------
+	$bend = $addr, $xend = $xaddr;
+	$bstr .= alloc($addr, %malloc);
+	$xstr .= alloc($xaddr, %xmalloc);
+
+#--------------------- amemalloc process -----------------------
+	for($i = 0;$i <= $#aaddr;$i++) {
+		for($j = 0, $addr = $aaddr[$i] =~ /^0x([0-9a-f]+)/ ? hex($1) : $var{$aaddr[$i]};$addr != 0 && $j <= $#{$amalloc[$i]};$j++) {
+			if($amalloc[$i][$j] =~ /^\s*([0-9]+)\s+([a-zA-Z0-9_]+)\s*(.*)$/) {
+				$str = sprintf "0x%04x %s%s\n", $addr, $2, $3;
+				$addr += $1;
+				if($addr < 0x4000) {
+					$bstr .= $str;
+				} else  {
+					$xstr .= $str;
+				}
+			}
+		}
+	}
+
+	
+	print file $bstr, $xstr, $sstr;
+	print file1 $bstr, $xstr;
+	close file;
+	close file1;
+	printf "\nLast allocated address is %04x\n", $bend;
+	printf "\nLast allocated xmem address is %04x\n", $xend;
+}
+
+
+sub getdefs {
+	my($def) = @_;
+	my(@ifdefs) = split(/\s*\|\s*/, $def);
+	my $v = 0;
+	foreach (@ifdefs) {
+		s/\s//g;
+		$v = 1 if($defs =~ /(^|\s)$_(\s|$)/);
+	}
+	return $v;
+}
+
+sub parseif {
+	my($fname) = @_;
+	open file, $fname;
+	@f = <file>;
+	close file;
+	open file, ">$fname";
+	@valid = (1);
+	for($i = 0;$i < @f;$i++) { 
+		$_ = $f[$i];
+		s/\/\*.*\*\///g;
+		$comment = 1 if(/\/\*/ && !/\/\//);
+		if($comment) {
+			$comment = 0 if(/\*\//);
+			next;
+		}
+		if(/^\s*ifdef\s+(.+)$/) {
+			$v = getdefs($1) ? 1 : 0;
+			push @valid, $v & $valid[$#valid];
+		} elsif(/^\s*ifndef\s+(.+)$/) {
+			$v = getdefs($1) ? 0 : 1;
+			push @valid, $v & $valid[$#valid];
+		} elsif(/^\s*else/) {
+			printf "%s\nelse without if at line %d\n", $f[$i - 3], $i if($#valid == 0);
+			if($#valid == 0) {
+				for($j = -10;$j < 10;$j++) {
+					print $f[$i + $j];
+				}
+				last;
+ 				$i = $i;
+			}
+			$valid[$#valid] = (1 - $valid[$#valid]) & $valid[$#valid - 1];
+		} elsif(/^\s*endif/) {
+			printf "%s\nendif without if at line %d\n", $_, $i if($#valid == 0);
+			if($#valid == 0) {
+				for($j = -10;$j < 10;$j++) {
+					print $f[$i + $j];
+				}
+				last;
+ 				$i = $i;
+			}
+			pop @valid;
+		} elsif($valid[$#valid]) {
+			if(/^include\s+(.+)\s*/) {
+				open file2, "program/$1";
+				@f2 = <file2>;
+				close file2;
+				splice(@f, $i + 1, 0, @f2);
+			} else {
+			if(/^define\s+(\w+)\s*/) {
+				$defs .= $1 . " " 
+			}
+				print file $_;
+			}
+		}
+	}
+	close file;
+}
+
+sub genpatch
+{
+	print "genpatch\n";
+	$patched = 0;
+	open file,"output/bt_program23.meta";
+	while(<file>) {
+		if(/^\s*beq\s+patch([0-9a-f]+)_([0-7]),/) {
+			$a = hex($1), $b = hex($2);
+			$bits[$a] |= 1 << $b;
+			$patched = 1;
+		}
+	}
+	close file;
+	return if(!$patched);
+	open file,"output/sched.rom";
+	@sched = <file>;
+	close file;
+	for($j = 0;$j < 0x40;$j++) { 
+		$s .= sprintf ("%02x   #mem_patch%02x\n", $bits[$j], $j);
+	}
+	$s .= "\n\n";
+	for($i = $skip = 0;$i < @sched;$i++) {
+		$_ = $sched[$i];
+		if($skip > 0 && /:/) {
+			splice(@sched, $skip, $i - $skip, $s);
+			last;
+		}
+		$skip = $i + 1 if(/^mem_patch00:\s*$/);
+	}
+	if($skip == 0) {
+		$s = "mem_patch00:\n" . $s;
+		splice(@sched, 0, 0, $s);
+	}
+	open file,">output/sched.rom";
+	for($i = 0;$i < @sched;$i++) { print file $sched[$i]; }
+	close file;
+}
+
+sub zcode {
+	open file, "output/bt_program23.meta";
+	@f = <file>;
+	close file;
+	for($i = $label = $line[0] = 0, $z = 1;$i < @f;$i++) {
+		$_ = $f[$i];
+		$line[0] = $i - 1 if(/^org\s+0x([23]000|800)/ && $line[0] == 0);
+		if(/^org z\s*$/) {
+			$line[$z/0x10000 + 1] = $i - 1;
+			$z += 0x10000;
+			$f[$i] = sprintf("org 0x%x\n", $z);
+			$label = 1;
+		}
+		if(/^(\w+):\s*$/ && $label == 1) {
+			$lab{$1} = $z;
+			$label = 2;
+		}
+	}
+	return if($z == 1);
+	$line[$z/0x10000 + 1] = $i - 1;
+	for($i = 0;$i < @f;$i++) {
+		$_ = $f[$i];
+		$label = "";
+		if(/^\s*(branch|nbranch|call|ncall|setarg)\s+(\w+)\s*$/ || /^\s*(branch|nbranch|call|ncall|arg)\s+(\w+)\s*,\s*(\w+)\s*$/) {
+			$label = $2;
+		}
+		if(/^\s*(bmark|beq|bne|bbit[01])\s+(\w+)\s*,\s*(\w+)\s*$/) {
+			$label = $3;
+		}
+		$branch = /^\s+branch\s+$label\s*$/ ? 1 : 0;
+		if(exists($lab{$label})) {
+			$nlabel = "jmpz_" . $label;
+			$f[$i] =~ s/$label/eval "$nlabel"/e;
+			if($lab{$label} > 100) {
+				$z = int($lab{$label}/0x1000);
+				$l = $i < $line[1] ? $line[0] : $line[$z/10 - 1];
+				if($branch && $i >= $line[1]) {
+					$f[$i] = sprintf("\tsetarg 0x%x\n\tbranch p_zcode_entrance_2Bytes_common\n\n", $z);
+				} else {
+					$f[$l] .= sprintf("%s:\n\tsetarg 0x%x\n\tbranch p_zcode_entrance_2Bytes_common\n\n", $nlabel, $z);
+				}
+				$lab{$label} = 1;
+			}
+		}
+	}
+	open file, ">output/bt_program23.meta";
+	for($i = 0;$i < @f;$i++) {
+		if($f[$i] =~ /^\s*bbit1 8,pf_patch_ext\s*$/) {
+			printf file ("p_start:\n\tbranch p_patch_array\n\np_zcode:\n");
+			for($j = 0;$j < 63;$j++) {
+				printf file "\tnop %d\n", $j + 1;
+			}
+			printf file "p_patch_array:\n";
+		}
+		print file $f[$i];
+	}
+	close file;
+}
+
+sub authrom {
+	$addr = 0x9000;
+	foreach $s (@ARGV) {
+		open f, "../sched/" . $s . ".dat" or die "cannot open dat file $s";
+		@ff = <f>;
+		close f;
+		foreach (@ff) { $_ =~ s/\s//g;push @auth, $_ . "\n"; }
+	#	printf "0x%x %s_ADDR\n", $addr, uc($s);
+		$addr += $#ff + 1;
+	}
+	open f,">auth.rom";
+	print f @auth;
+	close f;
+	open f,"romcode.rom" or return;
+	@rom = <f>;
+	close f;
+	for($i = 0, $j = $#rom - 0x1ff;$i < 0x200;$i++,$j++) {
+		for($k = 0, $l = "";$k < 4;$k++) {
+			$_ = $auth[$i*4 + $k];
+			s/\s//g;
+			$_ = "00" if(/^$/);
+			$l =  $_ . $l;
+		}
+		$rom[$j] = $l . "\n";
+	}
+	open f,">romcode.rom";
+	print f @rom;
+	close f;
+}
+
+sub otp {
+	open f,'eeprom.dat';
+	@a=<f>;
+	open f,'../sched/otp_set.dat';
+	@b=<f>;
+	open f,'>otp.dat';
+#	printf f "0b\n00\n";
+	print f @b;
+	splice(@a,0,2);
+	print f @a;
+	close f;
+}
+
+if($ARGV[0] eq "otp") {
+	otp();
+	exit;
+} elsif(@ARGV > 0) {
+	authrom();
+	exit;
+}
+
+parseif("output/bt_program23.meta");
+parseif("output/bt_format.meta");
+genpatch() if($defs !~ / SIM /);
+malloc();
+zcode();
Index: usb_pc_ai_voice/util/romcrc.pl
===================================================================
--- /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/util/romcrc.pl	(nonexistent)
+++ /1121s/branch/dongle/1m/usb_pc/xzr_project/usb_pc_ai_voice/util/romcrc.pl	(working copy)
@@ -0,0 +1,54 @@
+#!/bin/perl
+sub crc16_ccitt2
+{
+	my($crc, $c) = @_;
+
+  $crc  = ($crc >> 8) | ($crc << 8);
+  $crc ^= $c;
+  $crc ^= ($crc & 0xff) >> 4;
+  $crc ^= $crc << 12;
+  $crc ^= ($crc & 0xff) << 5;
+  $crc &= 0xffff;
+ return $crc;
+}
+
+sub gencrc
+{
+  my($crc, $c) = @_;
+  my($i);
+	$c =~ s/\s//g;
+  for($i = 0;$i < length($c);$i+=2) {
+  	$crc = crc16_ccitt2($crc, hex(substr($c, $i, 2)));
+  }
+  return $crc;
+}
+
+open f,"$ARGV[0]" or die "open romfile fail";
+@txt = <f>;
+close f;
+$len = $len0 = $#txt;
+$len = hex($ARGV[1]) if(@ARGV > 1);
+for($i = 0, $crc = 0xffff;$i < $len;$i++) {
+	if($i <= $len) {
+		$_ = $txt[$i];
+		s/\s//g;
+		$wid = length($_) if($i == 0);
+		$crc = gencrc($crc, $_);
+		$txt[$i] = $_ . "\n";
+	} else {
+		$txt[$i] = join('', map('0', 1..$wid)) . "\n";
+		$crc = gencrc($crc, $txt[$i]);
+	}
+}
+if($wid > 4) {
+	$txt[$len] = join('', map('0', 1..($wid - 4)));
+	$crc = gencrc($crc, $txt[$i]);
+	$txt[$len] .= sprintf("%04x", $crc);
+} else {
+	$txt[$len] .= sprintf("%02x\n%02x\n", $crc >> 8, $crc & 0xff);
+}
+
+printf "%02x\n%02x\n", $crc >> 8, $crc & 0xff;
+open f,">$ARGV[0]";
+print f @txt;
+close f;
