@@ -3,7 +3,7 @@ use std::{
3
3
char,
4
4
} ;
5
5
6
- use crate :: { DaemonBoard , DaemonBoardWeak , Hs , Rect , Rgb } ;
6
+ use crate :: { DaemonBoard , DaemonBoardWeak , Hs , PhysicalLayoutKey , Rect , Rgb } ;
7
7
8
8
#[ derive( Debug ) ]
9
9
pub struct Key {
@@ -34,13 +34,12 @@ pub struct Key {
34
34
}
35
35
36
36
impl Key {
37
- pub ( crate ) fn new (
38
- board : & DaemonBoard ,
39
- logical : ( u8 , u8 ) ,
40
- physical : Rect ,
41
- physical_name : String ,
42
- background_color : Rgb ,
43
- ) -> Self {
37
+ pub ( crate ) fn new ( board : & DaemonBoard , physical_key : & PhysicalLayoutKey ) -> Self {
38
+ let logical = physical_key. logical ;
39
+ let physical = physical_key. physical ;
40
+ let physical_name = physical_key. physical_name . clone ( ) ;
41
+ let background_color = physical_key. background_color ;
42
+
44
43
debug ! ( "Key {}, {} = {:?}" , physical. x, physical. y, physical_name) ;
45
44
46
45
debug ! ( " Logical: {:?}" , logical) ;
@@ -75,6 +74,40 @@ impl Key {
75
74
led_name. push_str ( & led. to_string ( ) ) ;
76
75
}
77
76
77
+ let mut scancodes = Vec :: new ( ) ;
78
+ for layer in 0 ..board. layout ( ) . meta . num_layers {
79
+ debug ! ( " Layer {}" , layer) ;
80
+ let scancode =
81
+ match board
82
+ . 0
83
+ . daemon
84
+ . keymap_get ( board. 0 . board , layer, electrical. 0 , electrical. 1 )
85
+ {
86
+ Ok ( value) => value,
87
+ Err ( err) => {
88
+ error ! ( "Failed to read scancode: {:?}" , err) ;
89
+ 0
90
+ }
91
+ } ;
92
+ debug ! ( " Scancode: {:04X}" , scancode) ;
93
+
94
+ let scancode_name = match board. layout ( ) . scancode_names . get ( & scancode) {
95
+ Some ( some) => some. to_string ( ) ,
96
+ None => String :: new ( ) ,
97
+ } ;
98
+ debug ! ( " Scancode Name: {}" , scancode_name) ;
99
+
100
+ scancodes. push ( ( scancode, scancode_name) ) ;
101
+ }
102
+
103
+ let mut led_color = None ;
104
+ if board. layout ( ) . meta . has_mode && leds. len ( ) > 0 {
105
+ match board. 0 . daemon . color ( board. 0 . board , leds[ 0 ] ) {
106
+ Ok ( color) => led_color = Some ( color) ,
107
+ Err ( err) => error ! ( "error getting key color: {}" , err) ,
108
+ }
109
+ }
110
+
78
111
Self {
79
112
board : board. downgrade ( ) ,
80
113
logical,
@@ -85,9 +118,9 @@ impl Key {
85
118
electrical_name : format ! ( "{}, {}" , electrical. 0 , electrical. 1 ) ,
86
119
leds,
87
120
led_name,
88
- led_color : Cell :: new ( None ) ,
121
+ led_color : Cell :: new ( led_color ) ,
89
122
pressed : Cell :: new ( false ) ,
90
- scancodes : RefCell :: new ( Vec :: new ( ) ) ,
123
+ scancodes : RefCell :: new ( scancodes ) ,
91
124
background_color,
92
125
}
93
126
}
0 commit comments