@@ -18,8 +18,7 @@ use log::info;
18
18
19
19
use matrix:: Matrix ;
20
20
use zephyr:: { kobj_define, printkln} ;
21
- use zephyr:: driver:: uart:: LineControl ;
22
- use zephyr:: object:: KobjInit ;
21
+ use zephyr:: device:: uart:: LineControl ;
23
22
use zephyr:: sync:: channel:: {
24
23
self ,
25
24
Sender ,
@@ -63,22 +62,21 @@ extern "C" fn rust_main() {
63
62
zephyr:: set_logger ( ) ;
64
63
65
64
// Initialize the main event queue.
66
- EVENT_QUEUE_STATIC . init ( ) ;
67
- let equeue = EVENT_QUEUE_STATIC . get ( ) ;
65
+ let equeue = EVENT_QUEUE_STATIC . init_once ( ( ) ) . unwrap ( ) ;
68
66
let ( equeue_send, equeue_recv) = channel:: unbounded_from :: < Event > ( equeue) ;
69
67
70
68
// This is the steno queue.
71
- STENO_QUEUE_STATIC . init ( ) ;
72
- let stenoq = STENO_QUEUE_STATIC . get ( ) ;
69
+ let stenoq = STENO_QUEUE_STATIC . init_once ( ( ) ) . unwrap ( ) ;
73
70
let ( stenoq_send, stenoq_recv) = channel:: unbounded_from :: < Stroke > ( stenoq) ;
74
71
75
72
// Spawn the steno thread.
76
73
// TODO: This needs to be lower priority.
77
74
let sc = equeue_send. clone ( ) ;
78
- let thread = STENO_THREAD . spawn ( STENO_STACK . token ( ) , 5 , move || {
75
+ let mut thread = STENO_THREAD . init_once ( STENO_STACK . init_once ( ( ) ) . unwrap ( ) ) . unwrap ( ) ;
76
+ thread. set_priority ( 5 ) ;
77
+ thread. spawn ( move || {
79
78
steno_thread ( stenoq_recv, sc) ;
80
79
} ) ;
81
- thread. start ( ) ;
82
80
83
81
unsafe {
84
82
// Store a sender for the USB callback.
@@ -110,20 +108,20 @@ extern "C" fn rust_main() {
110
108
let cols = zephyr:: devicetree:: aliases:: matrix:: get_cols ( ) ;
111
109
112
110
// Build a Vec for these.
113
- let rows: Vec < _ > = rows. into_iter ( ) . collect ( ) ;
114
- let cols: Vec < _ > = cols. into_iter ( ) . collect ( ) ;
111
+ let rows: Vec < _ > = rows. into_iter ( ) . map ( |p| p . unwrap ( ) ) . collect ( ) ;
112
+ let cols: Vec < _ > = cols. into_iter ( ) . map ( |p| p . unwrap ( ) ) . collect ( ) ;
115
113
116
114
let matrix = Matrix :: new ( rows, cols, side) ;
117
115
let mut scanner = Scanner :: new ( matrix, equeue_send. clone ( ) , & info) ;
118
116
119
117
let mut layout = LayoutManager :: new ( ) ;
120
118
121
- let leds = zephyr:: devicetree:: aliases:: led_strip:: get_instance ( ) ;
119
+ let leds = zephyr:: devicetree:: aliases:: led_strip:: get_instance ( ) . unwrap ( ) ;
122
120
let mut leds = LedManager :: new ( leds) ;
123
121
124
122
let mut inter = get_inter ( side, equeue_send. clone ( ) ) ;
125
123
126
- let mut acm = zephyr:: devicetree:: labels:: acm_uart_0:: get_instance ( ) ;
124
+ let mut acm = zephyr:: devicetree:: labels:: acm_uart_0:: get_instance ( ) . unwrap ( ) ;
127
125
let mut acm_active;
128
126
129
127
let mut eq_send = SendWrap ( equeue_send. clone ( ) ) ;
@@ -140,7 +138,7 @@ extern "C" fn rust_main() {
140
138
141
139
loop {
142
140
// Update the state of the Gemini indicator.
143
- if let Ok ( 1 ) = acm. line_ctrl_get ( LineControl :: DTR ) {
141
+ if let Ok ( 1 ) = unsafe { acm. line_ctrl_get ( LineControl :: DTR ) } {
144
142
leds. set_base ( 2 , & leds:: GEMINI_INDICATOR ) ;
145
143
acm_active = true ;
146
144
} else {
@@ -154,6 +152,7 @@ extern "C" fn rust_main() {
154
152
match ev {
155
153
Event :: Tick => is_tick = true ,
156
154
Event :: Matrix ( key) => {
155
+ // info!("Matrix: {:?}", key);
157
156
match state {
158
157
InterState :: Primary | InterState :: Idle => {
159
158
layout. handle_event ( key, & mut eq_send) ;
@@ -189,7 +188,7 @@ extern "C" fn rust_main() {
189
188
// TODO: Do the tx enable tx disable stuff.
190
189
let packet = stroke. to_gemini ( ) ;
191
190
// Deal with errors and such.
192
- match acm. fifo_fill ( & packet) {
191
+ match unsafe { acm. fifo_fill ( & packet) } {
193
192
Ok ( _) => ( ) ,
194
193
Err ( _) => ( ) ,
195
194
}
@@ -304,7 +303,7 @@ extern "C" fn rust_main() {
304
303
/// Conditionally return the inter-board code.
305
304
#[ cfg( CONFIG_JOLT_INTER ) ]
306
305
fn get_inter ( side : Side , equeue_send : Sender < Event > ) -> Option < InterHandler > {
307
- let uart = zephyr:: devicetree:: chosen:: inter_board_uart:: get_instance ( ) ;
306
+ let uart = zephyr:: devicetree:: chosen:: inter_board_uart:: get_instance ( ) . unwrap ( ) ;
308
307
Some ( InterHandler :: new ( side, uart, equeue_send) )
309
308
}
310
309
@@ -458,7 +457,9 @@ extern "C" fn rust_heartbeat() {
458
457
} ) ;
459
458
// Send it, if there was one there to send.
460
459
if let Some ( boxed) = boxed {
461
- send. send_boxed ( boxed) . unwrap ( ) ;
460
+ unsafe {
461
+ send. send_boxed ( boxed) . unwrap ( ) ;
462
+ }
462
463
}
463
464
}
464
465
0 commit comments