Index: format/app_mouse.format
===================================================================
--- /1121s/branch/mouse/mouse_public_1M/format/app_mouse.format	(revision 2570)
+++ /1121s/branch/mouse/mouse_public_1M/format/app_mouse.format	(working copy)
@@ -430,6 +430,9 @@
 64 mem_le_tx_buffer3_omemalloc_new
 
 1 mem_mouse_qdec_set_flag
+//commbination_dpi
+1 mem_commbination_dpi_timer
+1 mem_mouse_commbination_key_dpi
 )
 
 (
Index: output/eeprom.dat
===================================================================
--- /1121s/branch/mouse/mouse_public_1M/output/eeprom.dat	(revision 2570)
+++ /1121s/branch/mouse/mouse_public_1M/output/eeprom.dat	(working copy)
@@ -1411,7 +1411,7 @@
 52
 08
 80
-2e
+20
 9f
 c5
 e4
@@ -1435,7 +1435,7 @@
 b8
 6e
 e0
-bb
+b9
 87
 83
 a8
@@ -1443,7 +1443,7 @@
 36
 1d
 cc
-a8
+aa
 7a
 70
 5f
@@ -1451,11 +1451,11 @@
 5d
 18
 2c
-49
+4b
 97
 ff
 73
-55
+5b
 3e
 e2
 81
@@ -1479,7 +1479,7 @@
 50
 e6
 16
-24
+22
 0d
 8b
 3f
@@ -1490,7 +1490,7 @@
 d9
 72
 b5
-40
+42
 0a
 92
 6d
@@ -1498,7 +1498,7 @@
 b4
 f4
 f5
-49
+4f
 c4
 93
 e7
@@ -1531,7 +1531,7 @@
 13
 a4
 06
-b0
+b6
 53
 67
 f1
@@ -1543,7 +1543,7 @@
 f4
 c1
 8b
-33
+35
 c4
 3d
 2b
@@ -1567,7 +1567,7 @@
 c1
 98
 6c
-88
+86
 1b
 6b
 ed
@@ -1575,7 +1575,7 @@
 48
 eb
 c4
-e6
+e8
 fa
 2a
 7e
@@ -2095,7 +2095,7 @@
 f8
 92
 2c
-3e
+3c
 3c
 1b
 d5
@@ -2103,7 +2103,7 @@
 c8
 03
 c6
-e0
+e6
 a3
 30
 44
@@ -4151,7 +4151,7 @@
 27
 c3
 71
-58
+5a
 fc
 d2
 2d
@@ -4183,11 +4183,11 @@
 23
 df
 59
-bb
+b5
 54
 35
 e4
-7b
+79
 2d
 15
 ab
@@ -4319,7 +4319,7 @@
 71
 eb
 25
-5a
+5c
 ee
 75
 03
@@ -5436,8 +5436,8 @@
 67
 b1
 8d
-8c
-03
+54
+0c
 58
 36
 a4
Index: output/memmap.format
===================================================================
--- /1121s/branch/mouse/mouse_public_1M/output/memmap.format	(revision 2570)
+++ /1121s/branch/mouse/mouse_public_1M/output/memmap.format	(working copy)
@@ -1970,90 +1970,92 @@
 0x4a9d mem_le_tx_buffer2_omemalloc_new
 0x4add mem_le_tx_buffer3_omemalloc_new
 0x4b1d mem_mouse_qdec_set_flag
-0x4b1e mem_24g_txpayload_buf
-0x4b2e mem_release_data_from_receiver_enable
-0x4b2f mem_release_data_from_transmiter_enable
-0x4b30 mem_flippen_key0_gpio
-0x4b31 mem_flippen_key1_gpio
-0x4b32 mem_flippen_key2_gpio
-0x4b33 mem_flippen_key3_gpio
-0x4b34 mem_flippen_key4_gpio
-0x4b35 mem_flippen_key5_gpio
-0x4b36 mem_flippen_key6_gpio
-0x4b37 mem_flippen_key7_gpio
-0x4b38 mem_flippen_key0_press_status
-0x4b39 mem_flippen_key1_press_status
-0x4b3a mem_flippen_key2_press_status
-0x4b3b mem_flippen_key3_press_status
-0x4b3c mem_flippen_key4_press_status
-0x4b3d mem_flippen_key5_press_status
-0x4b3e mem_flippen_key6_press_status
-0x4b3f mem_flippen_key7_press_status
-0x4b40 mem_key_press_data
-0x4b40 mem_key_pageup_data
-0x4b49 mem_key_pagedown_data
-0x4b52 mem_key_shift_f5_data
-0x4b5b mem_key_esc_data
-0x4b64 mem_key_b_data
-0x4b6d mem_key_tab
-0x4b76 mem_key_enter
-0x4b7f mem_key_alt_tab
-0x4b88 mem_key_alt_f4
-0x4b91 mem_key_play_pause
-0x4b9a mem_key_vol_up
-0x4ba3 mem_key_vol_down
-0x4bac mem_standard_key_release
-0x4bb5 mem_system_ctrl_key_release
-0x4bbe mem_media_key_release
-0x4bc7 mem_key0_long_press_flag
-0x4bc8 mem_key1_long_press_flag
-0x4bc9 mem_key2_long_press_flag
-0x4bca mem_key3_long_press_flag
-0x4bcb mem_key4_long_press_flag
-0x4bcc mem_key0_long_press_event
-0x4bcd mem_key1_long_press_event
-0x4bce mem_key2_long_press_event
-0x4bcf mem_key3_long_press_event
-0x4bd0 mem_key4_long_press_event
-0x4bd1 mem_key0_short_press_flag
-0x4bd2 mem_key1_short_press_flag
-0x4bd3 mem_key2_short_press_flag
-0x4bd4 mem_key3_short_press_flag
-0x4bd5 mem_key4_short_press_flag
-0x4bd6 mem_key0_press_timer_count
-0x4bd7 mem_key1_press_timer_count
-0x4bd8 mem_key2_press_timer_count
-0x4bd9 mem_key3_press_timer_count
-0x4bda mem_key4_press_timer_count
-0x4bdb mem_combination_key_down_flag
-0x4bdc mem_combination_key_longpress_flag
-0x4bdd mem_key_disable_timer
-0x4bde mem_24g_calculate_package_id_disable
-0x4bdf mem_24g_package_id_abandon_flag
-0x4be0 mem_24g_package_id
-0x4be1 mem_key_state
-0x4be2 mem_key_press_state
-0x4be3 mem_poweron_first_blank_data_enable
-0x4be4 mem_flippen_no_data_timeout
-0x4be6 mem_flippen_start_pair_no_data_timeout
-0x4be8 mem_key_longpress_timer_init
-0x4bea mem_key_longpress_timer
-0x4bec mem_low_voltage_led_blink_flag
-0x4bed mem_low_voltage_led_blink_start_timer
-0x4bee mem_poweron_led_blink_flag
-0x4bef mem_24g_pair_enable_flag
-0x4bf0 mem_24g_ch_work
-0x4bf1 mem_24g_pair_key_down_flag
-0x4bf2 mem_24g_pairing_stop_flag
-0x4bf3 mem_longpress_24g_enter_hibernate_flag
-0x4bf4 mem_g24_connected_state
-0x4bf5 mem_g24_pairing_stop_flag
-0x4bf6 mem_send_package_before_check
-0x4bf7 mem_le_conn_rcv_new
-0x4bf8 mem_le_conn_first_rcv
-0x4bf9 mem_le_check_retransmit_flag
-0x4bfa mem_le_retransmit_cnt
-0x4bfb mem_le_check_retransmit_discon_flag
+0x4b1e mem_commbination_dpi_timer
+0x4b1f mem_mouse_commbination_key_dpi
+0x4b20 mem_24g_txpayload_buf
+0x4b30 mem_release_data_from_receiver_enable
+0x4b31 mem_release_data_from_transmiter_enable
+0x4b32 mem_flippen_key0_gpio
+0x4b33 mem_flippen_key1_gpio
+0x4b34 mem_flippen_key2_gpio
+0x4b35 mem_flippen_key3_gpio
+0x4b36 mem_flippen_key4_gpio
+0x4b37 mem_flippen_key5_gpio
+0x4b38 mem_flippen_key6_gpio
+0x4b39 mem_flippen_key7_gpio
+0x4b3a mem_flippen_key0_press_status
+0x4b3b mem_flippen_key1_press_status
+0x4b3c mem_flippen_key2_press_status
+0x4b3d mem_flippen_key3_press_status
+0x4b3e mem_flippen_key4_press_status
+0x4b3f mem_flippen_key5_press_status
+0x4b40 mem_flippen_key6_press_status
+0x4b41 mem_flippen_key7_press_status
+0x4b42 mem_key_press_data
+0x4b42 mem_key_pageup_data
+0x4b4b mem_key_pagedown_data
+0x4b54 mem_key_shift_f5_data
+0x4b5d mem_key_esc_data
+0x4b66 mem_key_b_data
+0x4b6f mem_key_tab
+0x4b78 mem_key_enter
+0x4b81 mem_key_alt_tab
+0x4b8a mem_key_alt_f4
+0x4b93 mem_key_play_pause
+0x4b9c mem_key_vol_up
+0x4ba5 mem_key_vol_down
+0x4bae mem_standard_key_release
+0x4bb7 mem_system_ctrl_key_release
+0x4bc0 mem_media_key_release
+0x4bc9 mem_key0_long_press_flag
+0x4bca mem_key1_long_press_flag
+0x4bcb mem_key2_long_press_flag
+0x4bcc mem_key3_long_press_flag
+0x4bcd mem_key4_long_press_flag
+0x4bce mem_key0_long_press_event
+0x4bcf mem_key1_long_press_event
+0x4bd0 mem_key2_long_press_event
+0x4bd1 mem_key3_long_press_event
+0x4bd2 mem_key4_long_press_event
+0x4bd3 mem_key0_short_press_flag
+0x4bd4 mem_key1_short_press_flag
+0x4bd5 mem_key2_short_press_flag
+0x4bd6 mem_key3_short_press_flag
+0x4bd7 mem_key4_short_press_flag
+0x4bd8 mem_key0_press_timer_count
+0x4bd9 mem_key1_press_timer_count
+0x4bda mem_key2_press_timer_count
+0x4bdb mem_key3_press_timer_count
+0x4bdc mem_key4_press_timer_count
+0x4bdd mem_combination_key_down_flag
+0x4bde mem_combination_key_longpress_flag
+0x4bdf mem_key_disable_timer
+0x4be0 mem_24g_calculate_package_id_disable
+0x4be1 mem_24g_package_id_abandon_flag
+0x4be2 mem_24g_package_id
+0x4be3 mem_key_state
+0x4be4 mem_key_press_state
+0x4be5 mem_poweron_first_blank_data_enable
+0x4be6 mem_flippen_no_data_timeout
+0x4be8 mem_flippen_start_pair_no_data_timeout
+0x4bea mem_key_longpress_timer_init
+0x4bec mem_key_longpress_timer
+0x4bee mem_low_voltage_led_blink_flag
+0x4bef mem_low_voltage_led_blink_start_timer
+0x4bf0 mem_poweron_led_blink_flag
+0x4bf1 mem_24g_pair_enable_flag
+0x4bf2 mem_24g_ch_work
+0x4bf3 mem_24g_pair_key_down_flag
+0x4bf4 mem_24g_pairing_stop_flag
+0x4bf5 mem_longpress_24g_enter_hibernate_flag
+0x4bf6 mem_g24_connected_state
+0x4bf7 mem_g24_pairing_stop_flag
+0x4bf8 mem_send_package_before_check
+0x4bf9 mem_le_conn_rcv_new
+0x4bfa mem_le_conn_first_rcv
+0x4bfb mem_le_check_retransmit_flag
+0x4bfc mem_le_retransmit_cnt
+0x4bfd mem_le_check_retransmit_discon_flag
 0x462d mem_remote_car_hard_soft_switch
 0x462e mem_remote_car_queue_each_size
 0x462f mem_remote_car_queue_length
Index: output/otp.dat
===================================================================
--- /1121s/branch/mouse/mouse_public_1M/output/otp.dat	(revision 2570)
+++ /1121s/branch/mouse/mouse_public_1M/output/otp.dat	(working copy)
@@ -1420,7 +1420,7 @@
 52
 08
 80
-2e
+20
 9f
 c5
 e4
@@ -1444,7 +1444,7 @@
 b8
 6e
 e0
-bb
+b9
 87
 83
 a8
@@ -1452,7 +1452,7 @@
 36
 1d
 cc
-a8
+aa
 7a
 70
 5f
@@ -1460,11 +1460,11 @@
 5d
 18
 2c
-49
+4b
 97
 ff
 73
-55
+5b
 3e
 e2
 81
@@ -1488,7 +1488,7 @@
 50
 e6
 16
-24
+22
 0d
 8b
 3f
@@ -1499,7 +1499,7 @@
 d9
 72
 b5
-40
+42
 0a
 92
 6d
@@ -1507,7 +1507,7 @@
 b4
 f4
 f5
-49
+4f
 c4
 93
 e7
@@ -1540,7 +1540,7 @@
 13
 a4
 06
-b0
+b6
 53
 67
 f1
@@ -1552,7 +1552,7 @@
 f4
 c1
 8b
-33
+35
 c4
 3d
 2b
@@ -1576,7 +1576,7 @@
 c1
 98
 6c
-88
+86
 1b
 6b
 ed
@@ -1584,7 +1584,7 @@
 48
 eb
 c4
-e6
+e8
 fa
 2a
 7e
@@ -2104,7 +2104,7 @@
 f8
 92
 2c
-3e
+3c
 3c
 1b
 d5
@@ -2112,7 +2112,7 @@
 c8
 03
 c6
-e0
+e6
 a3
 30
 44
@@ -4160,7 +4160,7 @@
 27
 c3
 71
-58
+5a
 fc
 d2
 2d
@@ -4192,11 +4192,11 @@
 23
 df
 59
-bb
+b5
 54
 35
 e4
-7b
+79
 2d
 15
 ab
@@ -4328,7 +4328,7 @@
 71
 eb
 25
-5a
+5c
 ee
 75
 03
@@ -5445,8 +5445,8 @@
 67
 b1
 8d
-8c
-03
+54
+0c
 58
 36
 a4
Index: output/program.lis
===================================================================
--- /1121s/branch/mouse/mouse_public_1M/output/program.lis	(revision 2570)
+++ /1121s/branch/mouse/mouse_public_1M/output/program.lis	(working copy)
@@ -423,7 +423,7 @@
 015a 20200146 branch p_set_lemode_2m 
 
 p_le_check_retransmit_timesout:
-015b 6fe0cbf7 fetch 1 ,mem_le_conn_rcv_new 
+015b 6fe0cbf9 fetch 1 ,mem_le_conn_rcv_new 
 015c da600100 arg 256 ,regc 
 015d 9a60fe00 iadd regc ,pdata 
 015e 20600000 rtn 
@@ -433,25 +433,25 @@
 0160 20202563 branch le_slave_match + 1 
 
 p_le_check_retransmit:
-0161 6fe0cbf8 fetch 1 ,mem_le_conn_first_rcv 
+0161 6fe0cbfa fetch 1 ,mem_le_conn_first_rcv 
 0162 207a0000 rtn blank 
-0163 6fe0cbf9 fetch 1 ,mem_le_check_retransmit_flag 
+0163 6fe0cbfb fetch 1 ,mem_le_check_retransmit_flag 
 0164 247a0000 nrtn blank 
-0165 6848cbf8 fetcht 1 ,mem_le_conn_first_rcv 
-0166 6fe0cbf7 fetch 1 ,mem_le_conn_rcv_new 
+0165 6848cbfa fetcht 1 ,mem_le_conn_first_rcv 
+0166 6fe0cbf9 fetch 1 ,mem_le_conn_rcv_new 
 0167 98467c00 isub temp ,null 
 0168 2441015b ncall p_le_check_retransmit_timesout ,positive 
 0169 98467e00 isub temp ,pdata 
 016a 1fe67c64 sub pdata ,100 ,null 
 016b 20210173 branch p_le_check_retransmit_count ,positive 
-016c 6fe0cbfa fetch 1 ,mem_le_retransmit_cnt 
+016c 6fe0cbfc fetch 1 ,mem_le_retransmit_cnt 
 016d 1fe67c14 sub pdata ,20 ,null 
 016e 24410171 ncall p_app_ble_disconnect ,positive 
-016f 704bf901 jam 1 ,mem_le_check_retransmit_flag 
+016f 704bfb01 jam 1 ,mem_le_check_retransmit_flag 
 0170 20600000 rtn 
 
 p_app_ble_disconnect:
-0171 704bfb01 jam 1 ,mem_le_check_retransmit_discon_flag 
+0171 704bfd01 jam 1 ,mem_le_check_retransmit_discon_flag 
 0172 2020431f branch app_ble_disconnect 
 
 p_le_check_retransmit_count:
@@ -461,10 +461,10 @@
 0176 9842fe00 ixor temp ,pdata 
 0177 2feffe02 isolate1 nesn ,pdata 
 0178 58000000 setarg 0 
-0179 6848cbfa fetcht 1 ,mem_le_retransmit_cnt 
+0179 6848cbfc fetcht 1 ,mem_le_retransmit_cnt 
 017a 7920fe00 setflag true ,0 ,pdata 
 017b 98408400 iadd temp ,temp 
-017c 6048cbfa storet 1 ,mem_le_retransmit_cnt 
+017c 6048cbfc storet 1 ,mem_le_retransmit_cnt 
 017d 20600000 rtn 
 
 p_le_got_first_packet_new:
@@ -472,9 +472,9 @@
 017f 1fe0fe01 increase 1 ,pdata 
 0180 67e08005 store 1 ,mem_le_conn_rcv 
 0181 24368185 nbranch p_le_got_first_packet_new + 7 ,match 
-0182 6fe0cbf7 fetch 1 ,mem_le_conn_rcv_new 
+0182 6fe0cbf9 fetch 1 ,mem_le_conn_rcv_new 
 0183 1fe0fe01 increase 1 ,pdata 
-0184 67e0cbf7 store 1 ,mem_le_conn_rcv_new 
+0184 67e0cbf9 store 1 ,mem_le_conn_rcv_new 
 0185 2020259b branch le_got_first_packet + 4 
 
 p_le_rx_dec:
@@ -638,9 +638,9 @@
 0203 6fe0c843 fetch 1 ,mem_le_connect_status_flag 
 0204 1fe17e03 and pdata ,0x03 ,pdata 
 0205 c1818000 rtnne 0x03 
-0206 6fe0cbf9 fetch 1 ,mem_le_check_retransmit_flag 
+0206 6fe0cbfb fetch 1 ,mem_le_check_retransmit_flag 
 0207 207a0000 rtn blank 
-0208 6fe0cbfb fetch 1 ,mem_le_check_retransmit_discon_flag 
+0208 6fe0cbfd fetch 1 ,mem_le_check_retransmit_discon_flag 
 0209 247a0000 nrtn blank 
 
 p_mouse_le_next:
@@ -1346,7 +1346,7 @@
 
 p_mouse_le_bb_event_connected:
 0407 58000000 setarg 0 
-0408 67e24bf8 store 4 ,mem_le_conn_first_rcv 
+0408 67e24bfa store 4 ,mem_le_conn_first_rcv 
 0409 20205ad0 branch mouse_le_bb_event_connected 
 
 p_mouse_le_ll_start_encryt:
@@ -1360,8 +1360,8 @@
 040f 70484405 jam 5 ,mem_le_start_encrypt_timer 
 
 p_mouse_le_ll_reconn_start_encryt_new:
-0410 6fe0cbf7 fetch 1 ,mem_le_conn_rcv_new 
-0411 67e0cbf8 store 1 ,mem_le_conn_first_rcv 
+0410 6fe0cbf9 fetch 1 ,mem_le_conn_rcv_new 
+0411 67e0cbfa store 1 ,mem_le_conn_first_rcv 
 0412 20205af6 branch mouse_le_ll_enable_start_enc_flag 
 
 p_mouse_le_conn_param_update_rsp_recieved:
@@ -1404,7 +1404,7 @@
 042f 1fe17e03 and pdata ,0x03 ,pdata 
 0430 20405b21 call mouse_le_clean_connect_flag 
 0431 c081d4a9 bne 0x03 ,mouse_start_reconnect 
-0432 6fe0cbfb fetch 1 ,mem_le_check_retransmit_discon_flag 
+0432 6fe0cbfd fetch 1 ,mem_le_check_retransmit_discon_flag 
 0433 243a54a9 nbranch mouse_start_reconnect ,blank 
 0434 202054cd branch mouse_app_enter_hibernate 
 
Index: program/patch.prog
===================================================================
--- /1121s/branch/mouse/mouse_public_1M/program/patch.prog	(revision 2570)
+++ /1121s/branch/mouse/mouse_public_1M/program/patch.prog	(working copy)
@@ -1,11 +1,13 @@
 
 //define PWM_SET
 //define SELECT_ANGLE_MZ
+//define ICE_SELECT_ANGLE
 define POWER_CTRL
 //define MORE_POWER_CTRL
 //define ADC_1121SB
 //define ADC_1121SB_1V8_MODE
 //define XTAL_CALP_SET
+//define COMMBINATION_DPI
 
 	bbit1 8,pf_patch_ext
 	beq patch00_0,p_soft_reset
@@ -23,6 +25,12 @@
 	beq patch0d_1,p_mouse_load_device_info_check
 	beq patch0d_2,p_mouse_default_init
 	beq patch0d_4,p_mouse_param_init
+ifdef SELECT_ANGLE_MZ
+	beq patch0d_5,p_mouse_sensor_set_angle
+endif
+ifdef ICE_SELECT_ANGLE
+	beq patch0d_5,p_mouse_sensor_set_angle
+endif
 	beq patch0d_6,p_mouse_start_work
 	beq patch0e_3,p_mouse_setgpio_hibernate
 	beq patch0e_4,p_mouse_lpm_before_common
@@ -1055,6 +1063,29 @@
 	rtn
 endif
 
+ifdef ICE_SELECT_ANGLE
+p_mouse_sensor_set_angle:
+	fetch 1,mem_sensor_angle_default
+	store 1,mem_config_sensor_angle
+	fetch 1,mem_select_sensor_angle_gpio
+	rtneq GPIO_DISABLE
+	fetch 1,mem_select_sensor_angle_gpio
+	call mouse_gpio_config_output_low
+	fetch 1,mem_mouse_reuse_2ice_gpio
+ 	call mouse_gpio_config_output_low
+ 	fetcht 1,mem_mouse_sensor_sdio_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_mouse_sensor_sdio_gpio
+	call gpio_get_bit
+	ncall mouse_sensor_switch_angle,true
+	call mouse_gpio_config_input_pd	
+p_ice_gpio_set_float:
+ 	fetcht 1,mem_select_sensor_angle_gpio
+	call gpio_set_high_impedance
+	fetcht 1,mem_mouse_reuse_2ice_gpio
+	branch gpio_set_high_impedance
+endif
+
 p_mouse_load_device_info_check:
 	call p_mouse_store_normal_tx_power
 	fetch MOUSE_FLAG_LEN,mem_mouse_flag
@@ -1448,6 +1479,9 @@
 	call g24_pair_timeout_timer
 	call g24_reconn_timeout_timer
 	call mouse_24g_long_sleep_param_update_timer
+ifdef COMMBINATION_DPI
+	call p_mouse_commbination_dpi_check_timer
+endif
 	//poll
 	call mouse_dpi_key_check_long_press
 	call mouse_bt_discovery_check
@@ -1464,6 +1498,31 @@
 	call mouse_wheel_trigger_timer
 	call mouse_store_information_delay_timer
 	branch mouse_check_no_data_timeout_timer
+
+ifdef COMMBINATION_DPI
+p_mouse_commbination_dpi_check_timer:
+	fetch 1,mem_mouse_commbination_key_dpi
+	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
+	call mouse_check_key_gpio
+	and rega,0x07,pdata
+	fetcht 1,mem_mouse_commbination_key_dpi
+	isub temp,null
+	branch p_mouse_commbination_dpi_check,zero
+	jam 0x1e,mem_commbination_dpi_timer
+	rtn
+p_mouse_commbination_dpi_check:	
+	arg mem_commbination_dpi_timer,regc
+	arg mouse_dpi_process_next,regb		//skip gost key
+	branch timer_single_step
+endif
 	
 p_mouse_le_send_conn_param_update_timer:
 	arg mem_mouse_le_send_conn_param_update_timer,regc
