Index: main/format/app_mouse.format
===================================================================
--- /branch/mouse_project/YJX_Project/YJX_Only24g/main/format/app_mouse.format	(revision 1083)
+++ /branch/mouse_project/YJX_Project/YJX_Only24g/main/format/app_mouse.format	(working copy)
@@ -241,6 +241,9 @@
 1 mem_l2cap_rcv
 1 mem_mouse_bt_boot_mode
 5 mem_mouse_bt_boot_data
+
+1 mem_power_on_flag
+1 mem_mouse_latest_mode
 )
 
 (
@@ -353,7 +356,8 @@
 0X5F MOUSE_RANDOM_ADDR_COUNT_EEPROM_OFFSET	//2bytes
 0X61 MOUSE_DEVICE_MODE_EEPROM_OFFSET	//1byte	
 0X62 MOUSE_EEPROM_MODULE_INIT_FLAG		//eeprom_module_init_flag 2bytes
-
+0X64 MOUSE_FAST_CONN_FLAG_OFFSET	//1byte
+0X65 MOUSE_LATEST_MODE_OFFSET	//1byte
 
 // Sensor id number
 0x30 P32XX_ID1
@@ -449,5 +453,9 @@
 1 MULTI_LED_BLINK
 )
 
+(
+1 LATEST_MODE_BT
+2 LATEST_MODE_24G
+)
 
 
Index: main/format/g24.format
===================================================================
--- /branch/mouse_project/YJX_Project/YJX_Only24g/main/format/g24.format	(revision 1083)
+++ /branch/mouse_project/YJX_Project/YJX_Only24g/main/format/g24.format	(working copy)
@@ -124,7 +124,8 @@
 1 mem_24g_auto_paring_switch
 1 mem_24g_paccnt
 1 mem_24g_transmit_by_interrupt
-1 mem_24g_transmit_by_interrupt_exit_count
+2 mem_24g_transmit_by_interrupt_exit_count
+2 mem_24g_transmit_by_interrupt_exit_count_init
 )
 
 (
Index: main/program/bt.prog
===================================================================
--- /branch/mouse_project/YJX_Project/YJX_Only24g/main/program/bt.prog	(revision 1083)
+++ /branch/mouse_project/YJX_Project/YJX_Only24g/main/program/bt.prog	(working copy)
@@ -79,6 +79,7 @@
 
 endif
 endif
+soft_reset_2:
 	call lpm_recover_clk,wake
 main_loop:	
 	bpatch patch00_3,mem_patch00
Index: main/program/patch.prog
===================================================================
--- /branch/mouse_project/YJX_Project/YJX_Only24g/main/program/patch.prog	(revision 1083)
+++ /branch/mouse_project/YJX_Project/YJX_Only24g/main/program/patch.prog	(working copy)
@@ -22,13 +22,14 @@
 	beq patch10_5,p_shutdown_radio
 	beq patch11_1,p_set_freq_tx
 	beq patch11_2,p_initialize_radio_cont
-
+	beq patch00_2,p_soft_reset_2
 ifdef DONGLE
 	beq patch11_6,p_save_rssi
 	beq patch18_4,p_app_init
 	beq patch1f_0,p_usb_status1
 endif
 ifdef MOUSE
+	beq patch00_0,p_soft_reset
 	beq patch00_1,p_soft_reset_1
 ifdef CLASSIC_BT
 	beq patch03_3,p_page_wait_fhs_reply_ok
@@ -1028,7 +1029,12 @@
 	and_into RSSI_BUF_LEN_SIGNAL,temp
 	storet 1,mem_rssi_signal_index
 	rtn
-
+	
+p_soft_reset:
+	hfetch 1,0x813b
+	store 1,mem_power_on_flag
+	branch soft_reset+1
+	
 p_soft_reset_1:
 	arg mem_sp_state,contw
 	arg 12,loopcnt
@@ -1039,7 +1045,21 @@
 	ncall lpm_disable_exen_output,wake
 	call ui_init+1
 	branch soft_reset+11
-
+	
+p_soft_reset_2:
+	call app_lpm_init,wake
+ifdef SIMPLE_PAIRING
+	call p_publickey_init
+else
+	call ssp_disable
+ifdef SECURE_CONNECTION
+	call p_publickey_init
+endif
+endif
+	branch soft_reset_2
+p_publickey_init:
+	rtnmark1 mark_24g
+	branch publickey_init
 
 p_init_param:
 	setarg param_le_version
@@ -1085,17 +1105,23 @@
 	call g24_long_sleep_shorter_param_update
 	fetch 1,mem_24g_transmit_by_interrupt
 	rtneq G24_TX_TIMER_INT_ENABLE
-p_g24_short_sleep:
-	call lpo_calibration
-	fetch 3,mem_clks_per_lpo
-	rtn blank
-	fetch 1,mem_lpm_mode
-	rtn blank
-	call p_mouse_setgpio_lpm
+//p_g24_short_sleep:
+//	call lpo_calibration
+//	fetch 3,mem_clks_per_lpo
+//	rtn blank
+//	fetch 1,mem_lpm_mode
+//	rtn blank
+//	call p_mouse_setgpio_lpm
+//	call p_clear_wake
+//	setarg 63000
+//	branch lpm_dispatch_sleep
+p_g24_short_sleep:	
+	call p_g24_lpm_wait
+	nrtn user
 	call p_clear_wake
+//	setarg 60500
 	setarg 63000
 	branch lpm_dispatch_sleep
-
 g24_long_sleep_shorter_param_update:
 	fetch 1,mem_config_function_enable
 	rtnbit1 ENABLE_SENSOR_MOTION_PIN
@@ -1108,15 +1134,19 @@
 	call p_g24_timer_check
 	nrtn user
 	call p_g24_interval_calibrate	
-	fetch 1,mem_24g_transmit_by_interrupt_exit_count
+	fetch 2,mem_24g_transmit_by_interrupt_exit_count
 	increase 1,pdata
-	store 1,mem_24g_transmit_by_interrupt_exit_count
-	sub pdata,25,null	//200ms
+	store 2,mem_24g_transmit_by_interrupt_exit_count
+	fetcht 2,mem_24g_transmit_by_interrupt_exit_count_init
+	isub temp,null
 	call p_g24_transmit_by_interrupt_exit,zero
 	branch p_g24_transmit_process
 p_g24_transmit_by_interrupt_exit:
 	jam G24_TX_TIMER_INT_DISABLE,mem_24g_transmit_by_interrupt
-	jam 0,mem_24g_transmit_by_interrupt_exit_count
+	setarg 0
+	store 2,mem_24g_transmit_by_interrupt_exit_count
+	setarg 25
+	store 2,mem_24g_transmit_by_interrupt_exit_count_init
 p_g24_interval_min:
 	jam 0,mem_24g_pac_index
 	fetch 1,mem_24g_interval_min
@@ -1141,17 +1171,35 @@
 p_g24_nodata_transmit:
 	fetch 1,mem_24g_abort_pac
 	call p_g24_send_abort_packet,blank
+//p_g24_long_sleep:
+//	call lpo_calibration
+//	fetch 3,mem_clks_per_lpo
+//	rtn blank
+//	fetch 1,mem_lpm_mode
+//	rtn blank
+//	call p_mouse_setgpio_lpm
+//	fetch 8,mem_24g_enter_hibernate
+//	call clk2lpo
+//	storet 4,mem_sleep_counter
+//  	branch lpm_sleep
+
 p_g24_long_sleep:
-	call lpo_calibration
-	fetch 3,mem_clks_per_lpo
-	rtn blank
-	fetch 1,mem_lpm_mode
-	rtn blank
-	call p_mouse_setgpio_lpm
-	fetch 8,mem_24g_enter_hibernate
+	call p_g24_lpm_wait
+	nrtn user
+	fetch 3,mem_24g_enter_hibernate
 	call clk2lpo
 	storet 4,mem_sleep_counter
   	branch lpm_sleep
+p_g24_lpm_wait:
+	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_sp_local_key_invalid	// simple pairing is not ready
+	branch disable_user,blank
+	branch p_mouse_setgpio_lpm
 
 p_g24_send_abort_packet:
 	jam 1,mem_24g_abort_pac
@@ -1462,6 +1510,10 @@
 	fetch MOUSE_FLAG_LEN,mem_mouse_flag 
 	rtnbit0 MOUSE_ENABLE_GPIO_CONTROL_ADC_SENSOR
 p_mouse_sensor_set_angle:
+	hfetch 1,core_gpio_pu0
+	set1 5,pdata
+	hstore 1,core_gpio_pu0
+	
 	fetcht 1,mem_select_sensor_angle_gpio
 	call gpio_config_input
 	fetcht 1,mem_select_sensor_angle_gpio
@@ -1469,6 +1521,9 @@
 	jam MOUSE_12CLK_ANGLE,mem_config_sensor_angle
 	rtn true
 	jam MOUSE_3CLK_ANGLE,mem_config_sensor_angle
+	hfetch 1,core_gpio_pu0
+	set1 5,pdata
+	hstore 1,core_gpio_pu0
 	rtn
 	
 ifdef CLASSIC_BT
@@ -1548,27 +1603,49 @@
 	rtn
 */
 
+p_mouse_24g_transmit_by_interrupt_exit_count_max:
+	setarg 375
+	store 2,mem_24g_transmit_by_interrupt_exit_count_init
+	rtn
 p_mouse_wakeup_from_power:
-	fetch MOUSE_FLAG_LEN,mem_mouse_flag
-	bbit0 MOUSE_ENABLE_WAKEUP_FROM_POWER,p_mouse_wakeup_no_from_power
-	fetch 1,mem_wakup_from_power_flag
-	isolate0 gpio_latch,pdata
-	nbranch p_mouse_wakeup_no_from_power,true
+	setarg 25
+	store 2,mem_24g_transmit_by_interrupt_exit_count_init
+	ncall p_mouse_24g_transmit_by_interrupt_exit_count_max,wake
+	
+//	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+//	bbit0 MOUSE_ENABLE_WAKEUP_FROM_POWER,p_mouse_wakeup_no_from_power
+//	fetch 1,mem_wakup_from_power_flag
+//	isolate0 gpio_latch,pdata
+//	nbranch p_mouse_wakeup_no_from_power,true
 	call p_mouse_init_sunt
 	call p_mouse_sensor_powerdown
 p_mouse_wakeup_no_from_power:
 	fetch 1,mem_reconn_times_init
 	store 1,mem_reconn_times
-	fetch 1,mem_config_function_enable
-	rtnbit1 ENABLE_SELECT_DEVICE_BY_GPIO_BUTTON
-	rtnbit1 ENABLE_SELECT_DEVICE_BY_SWITCH
+//	fetch 1,mem_config_function_enable	//standard do not need it
+//	rtnbit1 ENABLE_SELECT_DEVICE_BY_GPIO_BUTTON
+//	rtnbit1 ENABLE_SELECT_DEVICE_BY_SWITCH
 p_mouse_start_24g_mode:
 	fetch MOUSE_FLAG_LEN,mem_mouse_flag
 	rtnbit0 MOUSE_ENABLE_24G
+	fetch 1,mem_power_on_flag
+	bbit1 2,p_g24_start_24g_mode	//hibernate goto reconn
+//	fetch 1,mem_wakup_from_power_flag
+//	bbit1 gpio_latch,p_g24_start_24g_mode
+	setarg 0xffff	//power on goto pair
+	store 2,mem_24g_addr
+	istore 2,contw
+	call p_mouse_set_24g_addr_eeprom	//store rx dongle addr to eeprom
+	call iicd_write_protect_eep_data
+	branch p_g24_auto_pair_start
+
+/*p_mouse_start_24g_mode:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_24G
 	fetch 1,mem_wakup_from_power_flag
 //	bbit1 gpio_latch,p_g24_start_24g_mode
 	branch p_g24_auto_pair_start
-	
+*/	
 p_g24_factory_check:
 	arg 2,loopcnt
 	arg mem_24g_addr,contr
@@ -3523,6 +3600,13 @@
 //	fetch 1,mem_24g_pairing_sm
 //	rtnne STATE_24G_PAIRING_SUCCESS
 //	call p_g24_tx_attemp_data_prep
+p_g24_start_24g_mode:
+	set0 mark_24g,mark
+	jam with_ack_24g,mem_24g_no_ack	//tx ack
+	call p_g24_ch_syncword_crc8_init
+	fetch 1,mem_24g_pairing_sm
+	rtnne STATE_24G_PAIRING_SUCCESS
+	call p_g24_tx_attemp_data_prep	
 //p_g24_tx_attemp_dongle:
 //	setarg 0
 //	store 2,mem_24g_check_dongle_times
@@ -3589,7 +3673,7 @@
 	call lpo_calibration
 	nop 2000
 	fetch 2,mem_24g_check_dongle_times
-	arg 0x7788,temp		//30s  0x7788
+	arg 0x3bc4,temp		//30s  0x7788
 	isub temp,null
 	branch p_g24_stop_g24_mode,zero
 //	fetch 1,mem_24g_check_dongle_times
@@ -3616,6 +3700,7 @@
 //	beq 0,p_g24_auto_pair_device_attemp
 //	beq 1,p_g24_auto_pair_pair_attemp
 //	rtn
+
 p_g24_auto_pair_retry:
 	fetch 2,mem_24g_check_dongle_times
 	increase 1,pdata
@@ -3629,6 +3714,7 @@
 	beq 2,p_g24_auto_pair_all_powerful_attemp
 	beq 3,p_g24_auto_pair_pair_attemp
 	rtn
+	
 p_g24_auto_pair_first_attemp:
 	call p_mouse_tx_power_init
 	fetch 4,mem_24g_device_addr
@@ -3638,22 +3724,21 @@
 	call p_g24_ch_syncword_crc8_init
 	storet 1,mem_24g_pair_current_ch_num
 	rtn
-
 //p_g24_auto_pair_first_attemp:
 //	call p_g24_factory_check
 //	branch p_g24_auto_pair_all_powerful,user
+
 p_g24_auto_pair_dongle_addr_reconn:
 	call p_mouse_tx_power_init
 	call p_mouse_init_iic_read_24g_addr
 	call p_g24_factory_check
 	branch p_g24_auto_pair_all_powerful,user
 	branch p_g24_ch_syncword_crc8_init
-
-//p_g24_auto_pair_all_powerful:
-//	jam TX_POWER_PAIR,mem_tx_power
-//	setarg 0x0f0f
-//	store 2,mem_24g_addr
-//	istore 2,contw
+	
+p_g24_ch_syncword_crc8_init:	
+	call p_g24_syncword_crc8
+	branch p_g24_ch
+	
 p_g24_auto_pair_all_powerful:
 	jam TX_POWER_PAIR,mem_tx_power
 	setarg 0x0f0f
@@ -3664,14 +3749,10 @@
 	call p_g24_ch_syncword_crc8_init
 	storet 1,mem_24g_powerful_current_ch_num
 	rtn
-p_g24_ch_syncword_crc8_init:	
-	call p_g24_syncword_crc8
-	branch p_g24_ch
-	
 p_g24_auto_pair_device_attemp:
 	call p_g24_auto_pair_first_attemp
 	branch p_g24_auto_pair_start_loop
-	
+
 p_g24_auto_pair_pair_attemp:
 	call p_g24_pair_init
 	branch p_g24_auto_pair_start_loop
@@ -3679,6 +3760,37 @@
 p_g24_auto_pair_all_powerful_attemp:
 	call p_g24_auto_pair_all_powerful
 	branch p_g24_auto_pair_start_loop
+	
+//p_g24_auto_pair_all_powerful:
+//	jam TX_POWER_PAIR,mem_tx_power
+//	setarg 0x0f0f
+//	store 2,mem_24g_addr
+//	istore 2,contw
+//p_g24_auto_pair_all_powerful:
+//	jam TX_POWER_PAIR,mem_tx_power
+//	setarg 0x0f0f
+//	store 2,mem_24g_addr
+//	istore 2,contw
+//	fetch 1,mem_24g_powerful_current_ch_num
+//	store 1,mem_24g_current_ch_number
+//	call p_g24_ch_syncword_crc8_init
+//	storet 1,mem_24g_powerful_current_ch_num
+//	rtn
+//p_g24_ch_syncword_crc8_init:	
+//	call p_g24_syncword_crc8
+//	branch p_g24_ch
+//	
+//p_g24_auto_pair_device_attemp:
+//	call p_g24_auto_pair_first_attemp
+//	branch p_g24_auto_pair_start_loop
+//	
+//p_g24_auto_pair_pair_attemp:
+//	call p_g24_pair_init
+//	branch p_g24_auto_pair_start_loop
+
+//p_g24_auto_pair_all_powerful_attemp:
+//	call p_g24_auto_pair_all_powerful
+//	branch p_g24_auto_pair_start_loop
 
 //p_g24_auto_pair_pair_attemp:
 //	call p_g24_pair_init
Index: main/sched/109x.dat
===================================================================
--- /branch/mouse_project/YJX_Project/YJX_Only24g/main/sched/109x.dat	(revision 1083)
+++ /branch/mouse_project/YJX_Project/YJX_Only24g/main/sched/109x.dat	(working copy)
@@ -1,5 +1,5 @@
 
-mem_lpm_config:8f 1c ca	#4khz
+mem_lpm_config:8f 1c ce				###8f 1c ca	#4khz
 mem_lpm_xtalcnt:00 0a 0b ef 07
 mem_lpm_hibernate_switch:00
 mem_gpio_wakeup_low:00 00 00 00 00 00 00 00
Index: main/sched/mouse.dat
===================================================================
--- /branch/mouse_project/YJX_Project/YJX_Only24g/main/sched/mouse.dat	(revision 1083)
+++ /branch/mouse_project/YJX_Project/YJX_Only24g/main/sched/mouse.dat	(working copy)
@@ -1,4 +1,4 @@
-mem_patch00:02
+mem_patch00:03
 #mem_patch03:00
 #mem_patch09:00
 #mem_patch0a:00
@@ -54,7 +54,7 @@
 #bit5 MOUSE_ENABLE_AUTO_24G_PARING
 #bit6 MOUSE_ENABLE_WAKEUP_FROM_POWER
 #bit7 MOUSE_ENABLE_GPIO_CONTROL_ADC_SENSOR
-e5
+f5
 
 mem_mouse_mode_config:
 #bit0 MOUSE_24G_ONLY
@@ -65,7 +65,7 @@
 01
 
 mem_app_connection_options:06
-mem_lap:26 10 19 20 18 10
+mem_lap:26 11 19 20 12 11
 #mem_local_name_length:
 #'BT 3.0 Mouse
 #mem_sniff_param_interval:
@@ -157,18 +157,9 @@
 06 #mem_lbutton_gpio:16
 14 #mem_rbutton_gpio:14
 08 #mem_mbutton_gpio:15
-08 #mem_bk_button_gpio:ff
-14 #mem_fw_button_gpio:ff
-06 #mem_dpi_button_gpio:05
-#2
-#06 #mem_lbutton_gpio:16
-#14 #mem_rbutton_gpio:14
-#07 #mem_mbutton_gpio:15
-
-#06 #mem_bk_button_gpio:ff
-#07 #mem_fw_button_gpio:ff
-#14 #mem_dpi_button_gpio:05
-
+06 #mem_bk_button_gpio:ff
+08 #mem_fw_button_gpio:ff#14
+14 #mem_dpi_button_gpio:05
 1c #mem_whee_a_data_gpio:0b
 1b #mem_whee_b_data_gpio:07
 ff #mem_whee_ta_data_gpio:ff
