Index: format/app_dongle.format
===================================================================
--- /branch/keyboard/customer_FW/RY_project/RY_Dongle/format/app_dongle.format	(revision 1980)
+++ /branch/keyboard/customer_FW/RY_project/RY_Dongle/format/app_dongle.format	(working copy)
@@ -62,6 +62,13 @@
 1 mem_dg_mouse_dpi_level
 1 mem_dg_usb_ep2_data_flag
 65 mem_usb_dpi_info_data
+
+1 mem_dg_keyboard_keymatrix_profile
+1 mem_dg_keyboard_keymatrix_type
+1 mem_dg_keyboard_keymatrix_page
+1 mem_dg_keyboard_keymatrix_len
+56 mem_dg_keyboard_keymatrix_setup_keyvalue
+64 mem_dg_keyboard_keymatrix_getup_keyvalue
 )
 
 (
@@ -192,6 +199,7 @@
 0xFC CMD_GET_IN_DATA
 0xFE CMD_GET_TRANSLEN
 0x7A CMD_SET_TEST
-
+0xA0 CMD_SET_KEY_MATRIX
+0xA1 CMD_GET_KEY_MATRIX
 )
 
Index: output/eeprom.dat
===================================================================
--- /branch/keyboard/customer_FW/RY_project/RY_Dongle/output/eeprom.dat	(revision 1980)
+++ /branch/keyboard/customer_FW/RY_project/RY_Dongle/output/eeprom.dat	(working copy)
@@ -2,7 +2,7 @@
 02
 aa
 55
-62
+e6
 0f
 c2
 84
@@ -2351,7 +2351,7 @@
 58
 00
 03
-82
+9d
 67
 e1
 45
@@ -2359,7 +2359,7 @@
 58
 00
 03
-c7
+e2
 67
 e1
 45
@@ -3443,23 +3443,31 @@
 c0
 7b
 83
-61
+63
 c0
 7b
 03
-6e
+70
 c0
 7e
 03
-71
+73
 c0
 7f
 03
-77
+79
 c0
 3d
 03
-7a
+7c
+c0
+50
+03
+84
+c0
+50
+83
+92
 20
 20
 48
@@ -3598,20 +3606,120 @@
 80
 6f
 e0
+88
+77
+67
+e0
+c9
+90
+6f
+e0
+88
+78
+67
+e0
+c9
+91
+6f
+e0
+88
+79
+67
+e0
+c9
+92
+6f
+e0
+88
+7a
+67
+e0
+c9
+93
+1f
+e2
+72
+00
+d8
+c0
+08
+7e
+d8
+a0
+49
+94
+20
+40
+7c
+cc
+70
+08
+b6
+01
+20
+20
+48
+80
+6f
+e0
+88
+77
+67
+e0
+c9
+90
+6f
+e0
+88
+78
+67
+e0
+c9
+91
+6f
+e0
+88
+79
+67
+e0
+c9
+92
+df
+20
+00
+40
+d8
+a0
+49
+cc
+d8
+a0
+08
+b6
+20
+40
+7c
+cc
+20
+20
+48
+80
+6f
+e0
 c7
 b1
 c2
 83
 03
-a9
+c4
 c2
 83
 83
-b6
+d1
 c2
 82
 83
-b9
+d4
 6f
 e0
 c5
@@ -3623,11 +3731,11 @@
 20
 22
 83
-96
+b1
 20
 40
 03
-96
+b1
 6f
 e0
 c5
@@ -3663,15 +3771,15 @@
 c2
 83
 03
-a9
+c4
 c2
 83
 83
-b6
+d1
 c2
 82
 83
-b9
+d4
 20
 60
 00
@@ -3735,7 +3843,7 @@
 24
 22
 83
-a7
+c2
 6f
 e3
 49
@@ -3751,7 +3859,7 @@
 20
 20
 03
-be
+d9
 6f
 e0
 c7
@@ -3803,7 +3911,7 @@
 20
 20
 03
-be
+d9
 6f
 e0
 c7
@@ -3879,15 +3987,15 @@
 c0
 00
 03
-cc
+e7
 c0
 01
 03
-d2
+ed
 c0
 01
 83
-d5
+f0
 20
 20
 33
@@ -3940,8 +4048,32 @@
 20
 49
 07
-5c
-96
+da
+20
+00
+00
+ef
+e0
+80
+06
+9a
+20
+a2
+00
+c2
+00
+03
+f4
+1a
+21
+22
+ff
+20
+60
+00
+00
+56
+83
 aa
 55
 40
@@ -4090,9 +4222,9 @@
 00
 f1
 44
-26
-18
-83
+20
+17
+85
 74
 12
 23
@@ -4552,66 +4684,10 @@
 aa
 aa
 55
-5b
+56
 80
+1c
 a0
-be
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
 ff
 ff
 ff
@@ -8112,81 +8188,5 @@
 ff
 ff
 ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-aa
-44
+41
+ed
Index: output/flash.dat
===================================================================
--- /branch/keyboard/customer_FW/RY_project/RY_Dongle/output/flash.dat	(revision 1980)
+++ /branch/keyboard/customer_FW/RY_project/RY_Dongle/output/flash.dat	(working copy)
@@ -2,7 +2,7 @@
 02
 aa
 55
-62
+e6
 0f
 c2
 84
@@ -2351,7 +2351,7 @@
 58
 00
 03
-82
+9d
 67
 e1
 45
@@ -2359,7 +2359,7 @@
 58
 00
 03
-c7
+e2
 67
 e1
 45
@@ -3443,23 +3443,31 @@
 c0
 7b
 83
-61
+63
 c0
 7b
 03
-6e
+70
 c0
 7e
 03
-71
+73
 c0
 7f
 03
-77
+79
 c0
 3d
 03
-7a
+7c
+c0
+50
+03
+84
+c0
+50
+83
+92
 20
 20
 48
@@ -3598,20 +3606,120 @@
 80
 6f
 e0
+88
+77
+67
+e0
+c9
+90
+6f
+e0
+88
+78
+67
+e0
+c9
+91
+6f
+e0
+88
+79
+67
+e0
+c9
+92
+6f
+e0
+88
+7a
+67
+e0
+c9
+93
+1f
+e2
+72
+00
+d8
+c0
+08
+7e
+d8
+a0
+49
+94
+20
+40
+7c
+cc
+70
+08
+b6
+01
+20
+20
+48
+80
+6f
+e0
+88
+77
+67
+e0
+c9
+90
+6f
+e0
+88
+78
+67
+e0
+c9
+91
+6f
+e0
+88
+79
+67
+e0
+c9
+92
+df
+20
+00
+40
+d8
+a0
+49
+cc
+d8
+a0
+08
+b6
+20
+40
+7c
+cc
+20
+20
+48
+80
+6f
+e0
 c7
 b1
 c2
 83
 03
-a9
+c4
 c2
 83
 83
-b6
+d1
 c2
 82
 83
-b9
+d4
 6f
 e0
 c5
@@ -3623,11 +3731,11 @@
 20
 22
 83
-96
+b1
 20
 40
 03
-96
+b1
 6f
 e0
 c5
@@ -3663,15 +3771,15 @@
 c2
 83
 03
-a9
+c4
 c2
 83
 83
-b6
+d1
 c2
 82
 83
-b9
+d4
 20
 60
 00
@@ -3735,7 +3843,7 @@
 24
 22
 83
-a7
+c2
 6f
 e3
 49
@@ -3751,7 +3859,7 @@
 20
 20
 03
-be
+d9
 6f
 e0
 c7
@@ -3803,7 +3911,7 @@
 20
 20
 03
-be
+d9
 6f
 e0
 c7
@@ -3879,15 +3987,15 @@
 c0
 00
 03
-cc
+e7
 c0
 01
 03
-d2
+ed
 c0
 01
 83
-d5
+f0
 20
 20
 33
@@ -3940,8 +4048,32 @@
 20
 49
 07
-5c
-96
+da
+20
+00
+00
+ef
+e0
+80
+06
+9a
+20
+a2
+00
+c2
+00
+03
+f4
+1a
+21
+22
+ff
+20
+60
+00
+00
+56
+83
 aa
 55
 40
@@ -4090,9 +4222,9 @@
 00
 f1
 44
-26
-18
-83
+20
+17
+85
 74
 12
 23
@@ -4552,66 +4684,10 @@
 aa
 aa
 55
-5b
+56
 80
+1c
 a0
-be
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
 ff
 ff
 ff
@@ -8112,81 +8188,5 @@
 ff
 ff
 ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-ff
-aa
-44
+41
+ed
Index: output/memmap.format
===================================================================
--- /branch/keyboard/customer_FW/RY_project/RY_Dongle/output/memmap.format	(revision 1980)
+++ /branch/keyboard/customer_FW/RY_project/RY_Dongle/output/memmap.format	(working copy)
@@ -1509,6 +1509,12 @@
 0x494d mem_dg_mouse_dpi_level
 0x494e mem_dg_usb_ep2_data_flag
 0x494f mem_usb_dpi_info_data
+0x4990 mem_dg_keyboard_keymatrix_profile
+0x4991 mem_dg_keyboard_keymatrix_type
+0x4992 mem_dg_keyboard_keymatrix_page
+0x4993 mem_dg_keyboard_keymatrix_len
+0x4994 mem_dg_keyboard_keymatrix_setup_keyvalue
+0x49cc mem_dg_keyboard_keymatrix_getup_keyvalue
 0x45d3 mem_rssi_hex_received
 0x45d4 mem_24g_pair_sm
 0x45d5 mem_24g_pair_no_ack
Index: output/otp.dat
===================================================================
--- /branch/keyboard/customer_FW/RY_project/RY_Dongle/output/otp.dat	(revision 1980)
+++ /branch/keyboard/customer_FW/RY_project/RY_Dongle/output/otp.dat	(working copy)
@@ -11,7 +11,7 @@
 00
 aa
 55
-62
+e6
 0f
 c2
 84
@@ -2360,7 +2360,7 @@
 58
 00
 03
-82
+9d
 67
 e1
 45
@@ -2368,7 +2368,7 @@
 58
 00
 03
-c7
+e2
 67
 e1
 45
@@ -3452,23 +3452,31 @@
 c0
 7b
 83
-61
+63
 c0
 7b
 03
-6e
+70
 c0
 7e
 03
-71
+73
 c0
 7f
 03
-77
+79
 c0
 3d
 03
-7a
+7c
+c0
+50
+03
+84
+c0
+50
+83
+92
 20
 20
 48
@@ -3607,20 +3615,120 @@
 80
 6f
 e0
+88
+77
+67
+e0
+c9
+90
+6f
+e0
+88
+78
+67
+e0
+c9
+91
+6f
+e0
+88
+79
+67
+e0
+c9
+92
+6f
+e0
+88
+7a
+67
+e0
+c9
+93
+1f
+e2
+72
+00
+d8
+c0
+08
+7e
+d8
+a0
+49
+94
+20
+40
+7c
+cc
+70
+08
+b6
+01
+20
+20
+48
+80
+6f
+e0
+88
+77
+67
+e0
+c9
+90
+6f
+e0
+88
+78
+67
+e0
+c9
+91
+6f
+e0
+88
+79
+67
+e0
+c9
+92
+df
+20
+00
+40
+d8
+a0
+49
+cc
+d8
+a0
+08
+b6
+20
+40
+7c
+cc
+20
+20
+48
+80
+6f
+e0
 c7
 b1
 c2
 83
 03
-a9
+c4
 c2
 83
 83
-b6
+d1
 c2
 82
 83
-b9
+d4
 6f
 e0
 c5
@@ -3632,11 +3740,11 @@
 20
 22
 83
-96
+b1
 20
 40
 03
-96
+b1
 6f
 e0
 c5
@@ -3672,15 +3780,15 @@
 c2
 83
 03
-a9
+c4
 c2
 83
 83
-b6
+d1
 c2
 82
 83
-b9
+d4
 20
 60
 00
@@ -3744,7 +3852,7 @@
 24
 22
 83
-a7
+c2
 6f
 e3
 49
@@ -3760,7 +3868,7 @@
 20
 20
 03
-be
+d9
 6f
 e0
 c7
@@ -3812,7 +3920,7 @@
 20
 20
 03
-be
+d9
 6f
 e0
 c7
@@ -3888,15 +3996,15 @@
 c0
 00
 03
-cc
+e7
 c0
 01
 03
-d2
+ed
 c0
 01
 83
-d5
+f0
 20
 20
 33
@@ -3949,8 +4057,32 @@
 20
 49
 07
-5c
-96
+da
+20
+00
+00
+ef
+e0
+80
+06
+9a
+20
+a2
+00
+c2
+00
+03
+f4
+1a
+21
+22
+ff
+20
+60
+00
+00
+56
+83
 aa
 55
 40
@@ -4099,9 +4231,9 @@
 00
 f1
 44
-26
-18
-83
+20
+17
+85
 74
 12
 23
@@ -4561,8 +4693,8 @@
 aa
 aa
 55
-5b
+56
 80
+1c
 a0
-be
 21
Index: output/program.lis
===================================================================
--- /branch/keyboard/customer_FW/RY_project/RY_Dongle/output/program.lis	(revision 1980)
+++ /branch/keyboard/customer_FW/RY_project/RY_Dongle/output/program.lis	(working copy)
@@ -742,9 +742,9 @@
 p_app_init:
 0248 5800032c setarg p_dongle_dispatch 
 0249 67e145e0 store 2 ,mem_cb_24g_receive_process 
-024a 58000382 setarg p_dongle_g24_mouse 
+024a 5800039d setarg p_dongle_g24_mouse 
 024b 67e145e4 store 2 ,mem_cb_24g_data_device1 
-024c 580003c7 setarg p_dongle_g24_kb 
+024c 580003e2 setarg p_dongle_g24_kb 
 024d 67e145e6 store 2 ,mem_cb_24g_data_device2 
 024e 58000253 setarg p_dongle_ackpayload_prep 
 024f 67e145e2 store 2 ,mem_cb_24g_ackpayload 
@@ -1101,171 +1101,212 @@
 0358 6fe08875 fetch 1 ,mem_usb0_set_report_data 
 0359 c1dd0000 rtnne pc_report_id 
 035a 6fe08876 fetch 1 ,mem_usb0_set_report_data + 1 
-035b c07b8361 beq cmd_check_status ,p_dongle_dispose_cmd_check_status 
-035c c07b036e beq cmd_set ,p_dongle_dispose_cmd_set 
-035d c07e0371 beq cmd_get_in_data ,p_dongle_dispose_cmd_get_in_data 
-035e c07f0377 beq cmd_get_translen ,p_dongle_dispose_cmd_get_translen 
-035f c03d037a beq cmd_set_test ,p_dongle_dispose_cmd_set_test 
-0360 20204875 branch dongle_usb_dispatch_next 
+035b c07b8363 beq cmd_check_status ,p_dongle_dispose_cmd_check_status 
+035c c07b0370 beq cmd_set ,p_dongle_dispose_cmd_set 
+035d c07e0373 beq cmd_get_in_data ,p_dongle_dispose_cmd_get_in_data 
+035e c07f0379 beq cmd_get_translen ,p_dongle_dispose_cmd_get_translen 
+035f c03d037c beq cmd_set_test ,p_dongle_dispose_cmd_set_test 
+0360 c0500384 beq cmd_set_key_matrix ,p_dongle_dispose_cmd_set_key_matrix 
+0361 c0508392 beq cmd_get_key_matrix ,p_dongle_dispose_cmd_get_key_matrix 
+0362 20204875 branch dongle_usb_dispatch_next 
 
 p_dongle_dispose_cmd_check_status:
-0361 6fe0c7f6 fetch 1 ,mem_dg_keyboard_battery_level 
-0362 67e088b6 store 1 ,mem_usb0_get_report_data + 1 
-0363 6fe0c7f7 fetch 1 ,mem_dg_mouse_battery_level 
-0364 67e088b7 store 1 ,mem_usb0_get_report_data + 2 
-0365 6fe0c7fc fetch 1 ,mem_dg_keyboard_connected_status 
-0366 67e088b8 store 1 ,mem_usb0_get_report_data + 3 
-0367 6fe0c7fd fetch 1 ,mem_dg_mouse_connected_status 
-0368 67e088b9 store 1 ,mem_usb0_get_report_data + 4 
-0369 6fe0c7fe fetch 1 ,mem_dg_usb_driver_set_end 
-036a 67e088ba store 1 ,mem_usb0_get_report_data + 5 
-036b 6fe2458f fetch 4 ,mem_24g_addr 
-036c 67e208bd store 4 ,mem_usb0_get_report_data + 8 
-036d 20204880 branch dongle_usb0_data_ready_report_set1 
+0363 6fe0c7f6 fetch 1 ,mem_dg_keyboard_battery_level 
+0364 67e088b6 store 1 ,mem_usb0_get_report_data + 1 
+0365 6fe0c7f7 fetch 1 ,mem_dg_mouse_battery_level 
+0366 67e088b7 store 1 ,mem_usb0_get_report_data + 2 
+0367 6fe0c7fc fetch 1 ,mem_dg_keyboard_connected_status 
+0368 67e088b8 store 1 ,mem_usb0_get_report_data + 3 
+0369 6fe0c7fd fetch 1 ,mem_dg_mouse_connected_status 
+036a 67e088b9 store 1 ,mem_usb0_get_report_data + 4 
+036b 6fe0c7fe fetch 1 ,mem_dg_usb_driver_set_end 
+036c 67e088ba store 1 ,mem_usb0_get_report_data + 5 
+036d 6fe2458f fetch 4 ,mem_24g_addr 
+036e 67e208bd store 4 ,mem_usb0_get_report_data + 8 
+036f 20204880 branch dongle_usb0_data_ready_report_set1 
 
 p_dongle_dispose_cmd_set:
-036e 6fe08877 fetch 1 ,mem_usb0_set_report_data + 2 
-036f 67e0c7ff store 1 ,mem_dg_data_type 
-0370 2020487a branch dongle_usb0_data_ready_report_set0 
+0370 6fe08877 fetch 1 ,mem_usb0_set_report_data + 2 
+0371 67e0c7ff store 1 ,mem_dg_data_type 
+0372 2020487a branch dongle_usb0_data_ready_report_set0 
 
 p_dongle_dispose_cmd_get_in_data:
-0371 70087500 jam 0 ,mem_usb0_set_report_data 
-0372 d8c04803 arg mem_dg_usb_get_buff ,contr 
-0373 d8a008b5 arg mem_usb0_get_report_data ,contw 
-0374 df200040 arg 64 ,loopcnt 
-0375 20407ccc call memcpy_fast 
-0376 2020487a branch dongle_usb0_data_ready_report_set0 
+0373 70087500 jam 0 ,mem_usb0_set_report_data 
+0374 d8c04803 arg mem_dg_usb_get_buff ,contr 
+0375 d8a008b5 arg mem_usb0_get_report_data ,contw 
+0376 df200040 arg 64 ,loopcnt 
+0377 20407ccc call memcpy_fast 
+0378 2020487a branch dongle_usb0_data_ready_report_set0 
 
 p_dongle_dispose_cmd_get_translen:
-0377 6fe08877 fetch 1 ,mem_usb0_set_report_data + 2 
-0378 67e0c800 store 1 ,mem_dg_data_len 
-0379 2020487a branch dongle_usb0_data_ready_report_set0 
+0379 6fe08877 fetch 1 ,mem_usb0_set_report_data + 2 
+037a 67e0c800 store 1 ,mem_dg_data_len 
+037b 2020487a branch dongle_usb0_data_ready_report_set0 
 
 p_dongle_dispose_cmd_set_test:
-037a 70461602 jam dongle_test ,mem_24g_work_mode 
-037b 70461500 jam clear_init ,mem_24g_mode_init 
-037c 6fe08877 fetch 1 ,mem_usb0_set_report_data + 2 
-037d 67e0c801 store 1 ,mem_dg_test_mode 
-037e 6fe08878 fetch 1 ,mem_usb0_set_report_data + 3 
-037f 67e0c802 store 1 ,mem_dg_test_ch 
-0380 7008b601 jam 0x01 ,mem_usb0_get_report_data + 1 
-0381 20204880 branch dongle_usb0_data_ready_report_set1 
+037c 70461602 jam dongle_test ,mem_24g_work_mode 
+037d 70461500 jam clear_init ,mem_24g_mode_init 
+037e 6fe08877 fetch 1 ,mem_usb0_set_report_data + 2 
+037f 67e0c801 store 1 ,mem_dg_test_mode 
+0380 6fe08878 fetch 1 ,mem_usb0_set_report_data + 3 
+0381 67e0c802 store 1 ,mem_dg_test_ch 
+0382 7008b601 jam 0x01 ,mem_usb0_get_report_data + 1 
+0383 20204880 branch dongle_usb0_data_ready_report_set1 
+
+p_dongle_dispose_cmd_set_key_matrix:
+0384 6fe08877 fetch 1 ,mem_usb0_set_report_data + 2 
+0385 67e0c990 store 1 ,mem_dg_keyboard_keymatrix_profile 
+0386 6fe08878 fetch 1 ,mem_usb0_set_report_data + 3 
+0387 67e0c991 store 1 ,mem_dg_keyboard_keymatrix_type 
+0388 6fe08879 fetch 1 ,mem_usb0_set_report_data + 4 
+0389 67e0c992 store 1 ,mem_dg_keyboard_keymatrix_page 
+038a 6fe0887a fetch 1 ,mem_usb0_set_report_data + 5 
+038b 67e0c993 store 1 ,mem_dg_keyboard_keymatrix_len 
+038c 1fe27200 copy pdata ,loopcnt 
+038d d8c0087e arg mem_usb0_set_report_data + 9 ,contr 
+038e d8a04994 arg mem_dg_keyboard_keymatrix_setup_keyvalue ,contw 
+038f 20407ccc call memcpy_fast 
+0390 7008b601 jam 0x01 ,mem_usb0_get_report_data + 1 
+0391 20204880 branch dongle_usb0_data_ready_report_set1 
+
+p_dongle_dispose_cmd_get_key_matrix:
+0392 6fe08877 fetch 1 ,mem_usb0_set_report_data + 2 
+0393 67e0c990 store 1 ,mem_dg_keyboard_keymatrix_profile 
+0394 6fe08878 fetch 1 ,mem_usb0_set_report_data + 3 
+0395 67e0c991 store 1 ,mem_dg_keyboard_keymatrix_type 
+0396 6fe08879 fetch 1 ,mem_usb0_set_report_data + 4 
+0397 67e0c992 store 1 ,mem_dg_keyboard_keymatrix_page 
+0398 df200040 arg 64 ,loopcnt 
+0399 d8a049cc arg mem_dg_keyboard_keymatrix_getup_keyvalue ,contw 
+039a d8a008b6 arg mem_usb0_get_report_data + 1 ,contw 
+039b 20407ccc call memcpy_fast 
+039c 20204880 branch dongle_usb0_data_ready_report_set1 
 
 p_dongle_g24_mouse:
-0382 6fe0c7b1 fetch 1 ,mem_24g_rxdata_temp_new + 2 
-0383 c28303a9 bbit1 data_dpi ,p_dongle_receive_ms_dpi_info 
-0384 c28383b6 bbit1 data_battery ,p_dongle_receive_ms_battery_info 
-0385 c28283b9 bbit1 data_heart ,p_dongle_receive_ms_heart_info 
+039d 6fe0c7b1 fetch 1 ,mem_24g_rxdata_temp_new + 2 
+039e c28303c4 bbit1 data_dpi ,p_dongle_receive_ms_dpi_info 
+039f c28383d1 bbit1 data_battery ,p_dongle_receive_ms_battery_info 
+03a0 c28283d4 bbit1 data_heart ,p_dongle_receive_ms_heart_info 
 
 p_dongle_g24_mouse_next:
-0386 6fe0c57d fetch 1 ,mem_24g_rxdata_length 
-0387 1fe67c09 sub pdata ,0x09 ,null 
-0388 20228396 branch p_dongle_g24_mouse_data ,zero 
-0389 20400396 call p_dongle_g24_mouse_data 
-038a 6fe0c57d fetch 1 ,mem_24g_rxdata_length 
-038b 1fe0fff8 add pdata ,-8 ,pdata 
-038c 67e0c57d store 1 ,mem_24g_rxdata_length 
-038d 1fe27200 copy pdata ,loopcnt 
-038e d8a047b1 arg mem_24g_rxdata_temp_new + 2 ,contw 
-038f d8c047b9 arg mem_24g_rxdata_temp_new + 10 ,contr 
-0390 20407cda call memcpy 
-0391 6fe0c7b1 fetch 1 ,mem_24g_rxdata_temp_new + 2 
-0392 c28303a9 bbit1 data_dpi ,p_dongle_receive_ms_dpi_info 
-0393 c28383b6 bbit1 data_battery ,p_dongle_receive_ms_battery_info 
-0394 c28283b9 bbit1 data_heart ,p_dongle_receive_ms_heart_info 
-0395 20600000 rtn 
+03a1 6fe0c57d fetch 1 ,mem_24g_rxdata_length 
+03a2 1fe67c09 sub pdata ,0x09 ,null 
+03a3 202283b1 branch p_dongle_g24_mouse_data ,zero 
+03a4 204003b1 call p_dongle_g24_mouse_data 
+03a5 6fe0c57d fetch 1 ,mem_24g_rxdata_length 
+03a6 1fe0fff8 add pdata ,-8 ,pdata 
+03a7 67e0c57d store 1 ,mem_24g_rxdata_length 
+03a8 1fe27200 copy pdata ,loopcnt 
+03a9 d8a047b1 arg mem_24g_rxdata_temp_new + 2 ,contw 
+03aa d8c047b9 arg mem_24g_rxdata_temp_new + 10 ,contr 
+03ab 20407cda call memcpy 
+03ac 6fe0c7b1 fetch 1 ,mem_24g_rxdata_temp_new + 2 
+03ad c28303c4 bbit1 data_dpi ,p_dongle_receive_ms_dpi_info 
+03ae c28383d1 bbit1 data_battery ,p_dongle_receive_ms_battery_info 
+03af c28283d4 bbit1 data_heart ,p_dongle_receive_ms_heart_info 
+03b0 20600000 rtn 
 
 p_dongle_g24_mouse_data:
-0396 58000001 setarg ms_report_id 
-0397 67e08913 store 1 ,mem_usb_mouse_data 
-0398 6fe3c7b2 fetch 7 ,mem_24g_rxdata_temp_new + 3 
-0399 e7e38005 istore 7 ,contw 
-039a 6fe0c7b2 fetch 1 ,mem_24g_rxdata_temp_new + 3 
-039b 245a48dd ncall dongle_g24_ms_enable_blank_data_forcibly ,blank 
-039c 6fe0c7b2 fetch 1 ,mem_24g_rxdata_temp_new + 3 
-039d 205a48e1 call dongle_g24_ms_disable_blank_data_forcibly ,blank 
-039e 6fe38914 fetch 7 ,mem_usb_mouse_data + 1 
-039f 67e3c945 store 7 ,mem_dg_mouse_data 
-03a0 6fe0c945 fetch 1 ,mem_dg_mouse_data 
-03a1 6848c94c fetcht 1 ,mem_dg_mouse_key_data_last 
-03a2 67e0c94c store 1 ,mem_dg_mouse_key_data_last 
-03a3 98467c00 isub temp ,null 
-03a4 242283a7 nbranch p_dongle_mouse_data_tx_enable ,zero 
+03b1 58000001 setarg ms_report_id 
+03b2 67e08913 store 1 ,mem_usb_mouse_data 
+03b3 6fe3c7b2 fetch 7 ,mem_24g_rxdata_temp_new + 3 
+03b4 e7e38005 istore 7 ,contw 
+03b5 6fe0c7b2 fetch 1 ,mem_24g_rxdata_temp_new + 3 
+03b6 245a48dd ncall dongle_g24_ms_enable_blank_data_forcibly ,blank 
+03b7 6fe0c7b2 fetch 1 ,mem_24g_rxdata_temp_new + 3 
+03b8 205a48e1 call dongle_g24_ms_disable_blank_data_forcibly ,blank 
+03b9 6fe38914 fetch 7 ,mem_usb_mouse_data + 1 
+03ba 67e3c945 store 7 ,mem_dg_mouse_data 
+03bb 6fe0c945 fetch 1 ,mem_dg_mouse_data 
+03bc 6848c94c fetcht 1 ,mem_dg_mouse_key_data_last 
+03bd 67e0c94c store 1 ,mem_dg_mouse_key_data_last 
+03be 98467c00 isub temp ,null 
+03bf 242283c2 nbranch p_dongle_mouse_data_tx_enable ,zero 
 
 p_dongle_receive_mouse_data_check:
-03a5 6fe34946 fetch 6 ,mem_dg_mouse_data + 1 
-03a6 207a0000 rtn blank 
+03c0 6fe34946 fetch 6 ,mem_dg_mouse_data + 1 
+03c1 207a0000 rtn blank 
 
 p_dongle_mouse_data_tx_enable:
-03a7 70090c20 jam usb_ep2_ms ,mem_usb_ep2_data 
-03a8 202003be branch p_dongle_usb_tx_enable_ep2 
+03c2 70090c20 jam usb_ep2_ms ,mem_usb_ep2_data 
+03c3 202003d9 branch p_dongle_usb_tx_enable_ep2 
 
 p_dongle_receive_ms_dpi_info:
-03a9 6fe0c7b2 fetch 1 ,mem_24g_rxdata_temp_new + 3 
-03aa 6848c94d fetcht 1 ,mem_dg_mouse_dpi_level 
-03ab 67e0c94d store 1 ,mem_dg_mouse_dpi_level 
-03ac 98467c00 isub temp ,null 
-03ad 20628000 rtn zero 
+03c4 6fe0c7b2 fetch 1 ,mem_24g_rxdata_temp_new + 3 
+03c5 6848c94d fetcht 1 ,mem_dg_mouse_dpi_level 
+03c6 67e0c94d store 1 ,mem_dg_mouse_dpi_level 
+03c7 98467c00 isub temp ,null 
+03c8 20628000 rtn zero 
 
 p_dongle_usb_tx_dpi_level_enable:
-03ae 70494f40 jam 0x40 ,mem_usb_dpi_info_data 
-03af 704950a1 jam report_id_data_in ,mem_usb_dpi_info_data + 1 
-03b0 70495105 jam ms_type ,mem_usb_dpi_info_data + 2 
-03b1 6fe0c94d fetch 1 ,mem_dg_mouse_dpi_level 
-03b2 67e0c952 store 1 ,mem_usb_dpi_info_data + 3 
-03b3 70495300 jam 0 ,mem_usb_dpi_info_data + 4 
-03b4 70090c23 jam usb_ep2_dpi ,mem_usb_ep2_data 
-03b5 202003be branch p_dongle_usb_tx_enable_ep2 
+03c9 70494f40 jam 0x40 ,mem_usb_dpi_info_data 
+03ca 704950a1 jam report_id_data_in ,mem_usb_dpi_info_data + 1 
+03cb 70495105 jam ms_type ,mem_usb_dpi_info_data + 2 
+03cc 6fe0c94d fetch 1 ,mem_dg_mouse_dpi_level 
+03cd 67e0c952 store 1 ,mem_usb_dpi_info_data + 3 
+03ce 70495300 jam 0 ,mem_usb_dpi_info_data + 4 
+03cf 70090c23 jam usb_ep2_dpi ,mem_usb_ep2_data 
+03d0 202003d9 branch p_dongle_usb_tx_enable_ep2 
 
 p_dongle_receive_ms_battery_info:
-03b6 6fe0c7b2 fetch 1 ,mem_24g_rxdata_temp_new + 3 
-03b7 67e0c7f7 store 1 ,mem_dg_mouse_battery_level 
-03b8 20600000 rtn 
+03d1 6fe0c7b2 fetch 1 ,mem_24g_rxdata_temp_new + 3 
+03d2 67e0c7f7 store 1 ,mem_dg_mouse_battery_level 
+03d3 20600000 rtn 
 
 p_dongle_receive_ms_heart_info:
-03b9 6fe0c94e fetch 1 ,mem_dg_usb_ep2_data_flag 
-03ba 207a0000 rtn blank 
-03bb 70494e00 jam 0 ,mem_dg_usb_ep2_data_flag 
+03d4 6fe0c94e fetch 1 ,mem_dg_usb_ep2_data_flag 
+03d5 207a0000 rtn blank 
+03d6 70494e00 jam 0 ,mem_dg_usb_ep2_data_flag 
 
 p_24g_ackpayload_enable_set:
-03bc 704611a2 jam report_id_data_out ,mem_24g_ackpayload_enable 
-03bd 20600000 rtn 
+03d7 704611a2 jam report_id_data_out ,mem_24g_ackpayload_enable 
+03d8 20600000 rtn 
 
 p_dongle_usb_tx_enable_ep2:
-03be 6fe0890e fetch 1 ,mem_usb_device_enumeration_endflag 
-03bf 207a0000 rtn blank 
-03c0 da20493d arg mem_usb_ep2_fifo ,rega 
-03c1 20407da5 call fifo_is_full 
-03c2 247a0000 nrtn blank 
-03c3 6fe0890c fetch 1 ,mem_usb_ep2_data 
-03c4 67e0866f store 1 ,mem_fifo_temp 
-03c5 da20493d arg mem_usb_ep2_fifo ,rega 
-03c6 20207d8b branch fifo_in 
+03d9 6fe0890e fetch 1 ,mem_usb_device_enumeration_endflag 
+03da 207a0000 rtn blank 
+03db da20493d arg mem_usb_ep2_fifo ,rega 
+03dc 20407da5 call fifo_is_full 
+03dd 247a0000 nrtn blank 
+03de 6fe0890c fetch 1 ,mem_usb_ep2_data 
+03df 67e0866f store 1 ,mem_fifo_temp 
+03e0 da20493d arg mem_usb_ep2_fifo ,rega 
+03e1 20207d8b branch fifo_in 
 
 p_dongle_g24_kb:
-03c7 6fe0c7b2 fetch 1 ,mem_24g_rxdata_temp_new + 3 
-03c8 c00003cc beq 0 ,p_dongle_g24_kb_type0 
-03c9 c00103d2 beq 2 ,p_dongle_g24_kb_type2 
-03ca c00183d5 beq 3 ,p_dongle_g24_kb_type3 
-03cb 202033be branch g24_rx_interrupt_clear 
+03e2 6fe0c7b2 fetch 1 ,mem_24g_rxdata_temp_new + 3 
+03e3 c00003e7 beq 0 ,p_dongle_g24_kb_type0 
+03e4 c00103ed beq 2 ,p_dongle_g24_kb_type2 
+03e5 c00183f0 beq 3 ,p_dongle_g24_kb_type3 
+03e6 202033be branch g24_rx_interrupt_clear 
 
 p_dongle_g24_kb_type0:
-03cc 6fe0c7b4 fetch 1 ,mem_24g_rxdata_temp_new + 5 
-03cd 67e0c611 store 1 ,mem_24g_ackpayload_enable 
-03ce 7047b400 jam 0 ,mem_24g_rxdata_temp_new + 5 
-03cf d8a00923 arg mem_usb_kb_data ,contw 
-03d0 d8c047b3 arg mem_24g_rxdata_temp_new + 4 ,contr 
-03d1 202048ef branch dongle_g24_kb_type0 + 5 
+03e7 6fe0c7b4 fetch 1 ,mem_24g_rxdata_temp_new + 5 
+03e8 67e0c611 store 1 ,mem_24g_ackpayload_enable 
+03e9 7047b400 jam 0 ,mem_24g_rxdata_temp_new + 5 
+03ea d8a00923 arg mem_usb_kb_data ,contw 
+03eb d8c047b3 arg mem_24g_rxdata_temp_new + 4 ,contr 
+03ec 202048ef branch dongle_g24_kb_type0 + 5 
 
 p_dongle_g24_kb_type2:
-03d2 d8a00943 arg mem_usb_kb_system ,contw 
-03d3 d8c047b2 arg mem_24g_rxdata_temp_new + 3 ,contr 
-03d4 2020491f branch dongle_g24_kb_type2 + 2 
+03ed d8a00943 arg mem_usb_kb_system ,contw 
+03ee d8c047b2 arg mem_24g_rxdata_temp_new + 3 ,contr 
+03ef 2020491f branch dongle_g24_kb_type2 + 2 
 
 p_dongle_g24_kb_type3:
-03d5 d8a00933 arg mem_usb_kb_multikey ,contw 
-03d6 d8c047b2 arg mem_24g_rxdata_temp_new + 3 ,contr 
-03d7 20204907 branch dongle_g24_kb_type3 + 2 
+03f0 d8a00933 arg mem_usb_kb_multikey ,contw 
+03f1 d8c047b2 arg mem_24g_rxdata_temp_new + 3 ,contr 
+03f2 20204907 branch dongle_g24_kb_type3 + 2 
+
+p_checksum_calcu:
+03f3 da200000 arg 0 ,rega 
+
+p_dongle_data_checksum:
+03f4 efe08006 ifetch 1 ,contr 
+03f5 9a20a200 iadd rega ,rega 
+03f6 c20003f4 loop p_dongle_data_checksum 
+03f7 1a2122ff and_into 0xff ,rega 
+03f8 20600000 rtn 
               org 0x2000
 
 start:
Index: program/patch.prog
===================================================================
--- /branch/keyboard/customer_FW/RY_project/RY_Dongle/program/patch.prog	(revision 1980)
+++ /branch/keyboard/customer_FW/RY_project/RY_Dongle/program/patch.prog	(working copy)
@@ -1132,6 +1132,8 @@
 	beq CMD_GET_IN_DATA,p_dongle_dispose_cmd_get_in_data
 	beq CMD_GET_TRANSLEN,p_dongle_dispose_cmd_get_translen
 	beq CMD_SET_TEST,p_dongle_dispose_cmd_set_test
+	beq CMD_SET_KEY_MATRIX,p_dongle_dispose_cmd_set_key_matrix
+	beq CMD_GET_KEY_MATRIX,p_dongle_dispose_cmd_get_key_matrix
 	branch dongle_usb_dispatch_next
 
 p_dongle_dispose_cmd_check_status:
@@ -1183,6 +1185,38 @@
 	jam 0x01,mem_usb0_get_report_data+1
 	branch dongle_usb0_data_ready_report_set1
 
+p_dongle_dispose_cmd_set_key_matrix:
+	fetch 1,mem_usb0_set_report_data+2
+	store 1,mem_dg_keyboard_keymatrix_profile
+	fetch 1,mem_usb0_set_report_data+3
+	store 1,mem_dg_keyboard_keymatrix_type
+	fetch 1,mem_usb0_set_report_data+4
+	store 1,mem_dg_keyboard_keymatrix_page
+	fetch 1,mem_usb0_set_report_data+5
+	store 1,mem_dg_keyboard_keymatrix_len
+	copy pdata,loopcnt
+	arg mem_usb0_set_report_data+9,contr
+	arg mem_dg_keyboard_keymatrix_setup_keyvalue,contw
+	call memcpy_fast
+	
+	jam 0x01,mem_usb0_get_report_data+1
+	branch dongle_usb0_data_ready_report_set1
+
+p_dongle_dispose_cmd_get_key_matrix:
+	fetch 1,mem_usb0_set_report_data+2
+	store 1,mem_dg_keyboard_keymatrix_profile
+	fetch 1,mem_usb0_set_report_data+3
+	store 1,mem_dg_keyboard_keymatrix_type
+	fetch 1,mem_usb0_set_report_data+4
+	store 1,mem_dg_keyboard_keymatrix_page
+
+	arg 64,loopcnt
+	arg mem_dg_keyboard_keymatrix_getup_keyvalue,contw
+	arg mem_usb0_get_report_data+1,contw
+	call memcpy_fast
+	branch dongle_usb0_data_ready_report_set1
+
+
 p_dongle_g24_mouse:
 	fetch 1,mem_24g_rxdata_temp_new+2
 	bbit1 DATA_DPI,p_dongle_receive_ms_dpi_info
@@ -1313,6 +1347,16 @@
 	branch dongle_g24_kb_type3+2
 
 
+//input: contr--buff ptr, loopcnt--data len
+//output:rega--checksum
+p_checksum_calcu:
+	arg 0,rega
+p_dongle_data_checksum:
+	ifetch 1,contr
+	iadd rega,rega
+	loop p_dongle_data_checksum
+	and_into 0xff,rega
+	rtn
 
 
 	
Index: sched/dongle.dat
===================================================================
--- /branch/keyboard/customer_FW/RY_project/RY_Dongle/sched/dongle.dat	(revision 1980)
+++ /branch/keyboard/customer_FW/RY_project/RY_Dongle/sched/dongle.dat	(working copy)
@@ -34,7 +34,7 @@
 mem_24g_pair_tx_power_init:94 #94: -20dBm  9e: -30dBm  9f: -35dBm a0: -40dBm 
 
 #rf config
-mem_24g_lap:26 18 83 74 12 23#low 4B used for 24g rxaddr
+mem_24g_lap:20 17 85 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
@@ -128,3 +128,8 @@
 b1 02 
 C0 
 
+
+
+
+
+
