Skip to content

Commit 18d10a9

Browse files
committed
Button presses over radio
1 parent b42ff10 commit 18d10a9

2 files changed

Lines changed: 46 additions & 29 deletions

File tree

controllerbutton.ts

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ enum ControllerShieldEvent {
4141
}
4242

4343

44+
// Used by radioControlRx to distinguish this event from a screen() fn request (see user-interface-base/screen.ts)
45+
export const BUTTON_PRESS_RADIO_ID = 1;
46+
47+
4448
namespace controller {
4549
export class Controller {
4650
constructor(no: number, v: any) { }
@@ -56,7 +60,7 @@ namespace controller {
5660
export function onShieldEvent(event: ControllerShieldEvent, handler: () => void) {
5761
context.onEvent(event, 0, handler);
5862
}
59-
63+
6064
let _userEventsEnabled = true;
6165
let defaultRepeatDelay = 500;
6266
let defaultRepeatInterval = 30;
@@ -71,7 +75,7 @@ namespace controller {
7175
}
7276

7377
export class ButtonEventHandlerState {
74-
constructor(public id: number) {};
78+
constructor(public id: number) { };
7579

7680
public user: ButtonHandler[];
7781
public system: ButtonHandler[];
@@ -112,25 +116,28 @@ namespace controller {
112116
}
113117
}
114118

115-
raiseButtonUp() {
116-
if (_userEventsEnabled)
117-
control.raiseEvent(ControllerKeys.KEY_UP, this.id)
119+
raiseButtonUp(overRadio = false) {
120+
const k = _userEventsEnabled ? ControllerKeys.KEY_UP : ControllerKeys.SYSTEM_KEY_UP;
121+
if (overRadio)
122+
radio.sendBuffer(Buffer.fromArray([BUTTON_PRESS_RADIO_ID, k, this.id]))
118123
else
119-
control.raiseEvent(ControllerKeys.SYSTEM_KEY_UP, this.id);
124+
control.raiseEvent(k, this.id);
120125
}
121126

122-
raiseButtonDown() {
123-
if (_userEventsEnabled)
124-
control.raiseEvent(ControllerKeys.KEY_DOWN, this.id)
127+
raiseButtonDown(overRadio = false) {
128+
const k = _userEventsEnabled ? ControllerKeys.KEY_DOWN : ControllerKeys.SYSTEM_KEY_DOWN;
129+
if (overRadio)
130+
radio.sendBuffer(Buffer.fromArray([BUTTON_PRESS_RADIO_ID, k, this.id])
125131
else
126-
control.raiseEvent(ControllerKeys.SYSTEM_KEY_DOWN, this.id)
132+
control.raiseEvent(k, this.id);
127133
}
128134

129-
private raiseButtonRepeat() {
130-
if (_userEventsEnabled)
131-
control.raiseEvent(ControllerKeys.KEY_REPEAT, this.id)
135+
private raiseButtonRepeat(overRadio = false) {
136+
const k = _userEventsEnabled ? ControllerKeys.KEY_REPEAT : ControllerKeys.SYSTEM_KEY_REPEAT;
137+
if (overRadio)
138+
radio.sendBuffer(Buffer.fromArray([BUTTON_PRESS_RADIO_ID, k, this.id]))
132139
else
133-
control.raiseEvent(ControllerKeys.SYSTEM_KEY_REPEAT, this.id)
140+
control.raiseEvent(k, this.id);
134141
}
135142

136143
/**
@@ -167,6 +174,7 @@ namespace controller {
167174
handlerState.system.push(new ButtonHandler(event, handler));
168175
}
169176

177+
170178
/**
171179
* Removes an event handler registered with addEventListener.
172180
*

shieldhelpers.ts

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ namespace shieldhelpers {
5555
}
5656

5757
private sendMessage(msg: string) {
58-
control.simmessages.send("microbit-apps/arcadeshield", Buffer.fromUTF8(msg) , false)
58+
control.simmessages.send("microbit-apps/arcadeshield", Buffer.fromUTF8(msg), false)
5959
}
6060

6161
initSim() {
@@ -112,15 +112,15 @@ namespace shieldhelpers {
112112
function getScreenState() {
113113
if (!_screenState) {
114114
_screenState = new ScreenState()
115-
startSim()
115+
startSim()
116116
}
117117
}
118118

119119
//% shim=TD_NOOP
120120
function simUpdateScreen(img: Bitmap) {
121121
getScreenState();
122122
if (_screenState)
123-
_screenState.showImage(img);
123+
_screenState.showImage(img);
124124
}
125125

126126
export function updateScreen(img: Bitmap) {
@@ -155,23 +155,23 @@ namespace shieldhelpers {
155155
// getters
156156

157157
let __height = 0
158-
158+
159159
//% shim=TD_NOOP
160160
function simDisplayHeight() {
161161
__height = 120
162162
getScreenState();
163163
if (_screenState)
164164
__height = _screenState.displayHeight();
165165
}
166-
166+
167167
export function displayHeight(): number {
168168
__height = __screenhelpers.displayHeight()
169169
simDisplayHeight()
170170
return __height
171171
}
172172

173173
let __width = 0
174-
174+
175175
//% shim=TD_NOOP
176176
function simDisplayWidth() {
177177
__width = 160
@@ -187,7 +187,7 @@ namespace shieldhelpers {
187187
}
188188

189189
let __present = undefined
190-
190+
191191
//% shim=TD_NOOP
192192
function simDisplayPresent() {
193193
__present = undefined
@@ -210,6 +210,11 @@ namespace shieldhelpers {
210210
return __present
211211
}
212212

213+
214+
export function WDSPresent(): boolean {
215+
return true;
216+
}
217+
213218
function getButton(id: ArcadeButtonId): controller.Button {
214219
switch (id) {
215220
case "left": return controller.left
@@ -226,6 +231,11 @@ namespace shieldhelpers {
226231
function handleShieldMessage(b: Buffer) {
227232
const s = b.toString()
228233
const msg = <ArcadeShieldMessage>JSON.parse(s)
234+
235+
// Presume WDS setup (group & handshake) is done
236+
const wds = WDSPresent() // Just returns true
237+
238+
229239
if (msg) {
230240
console.log(msg.type)
231241
getScreenState();
@@ -234,22 +244,21 @@ namespace shieldhelpers {
234244
if (msg.type === "button-down" || msg.type === "button-up") {
235245
const button = getButton((<ButtonMessage>msg).buttonId)
236246
if (button) {
237-
if (msg.type === "button-down") {
238-
button.raiseButtonDown()
239-
} else {
240-
button.raiseButtonUp()
241-
}
247+
if (msg.type === "button-down")
248+
button.raiseButtonDown(wds)
249+
else
250+
button.raiseButtonUp(wds)
242251
}
243252
} else if (msg.type === "display-on") {
244253
getScreenState()
245254
_screenState.displayOn = true
246255
basic.pause(0)
247-
control.raiseEvent(ControllerShieldEvent.Present,0)
256+
control.raiseEvent(ControllerShieldEvent.Present, 0)
248257
} else if (msg.type === "display-off") {
249258
getScreenState()
250259
_screenState.displayOn = false
251260
basic.pause(0)
252-
control.raiseEvent(ControllerShieldEvent.Absent,0)
261+
control.raiseEvent(ControllerShieldEvent.Absent, 0)
253262
}
254263
}
255264
}
@@ -263,4 +272,4 @@ namespace shieldhelpers {
263272
}
264273
}
265274

266-
shieldhelpers.registerSim()
275+
shieldhelpers.registerSim()

0 commit comments

Comments
 (0)