A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita
audio
rust
zig
deno
mpris
rockbox
mpd
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2007-2009 Joshua Simmons <mud at majidejima dot com>
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22#ifndef GOBAN_MAIN_H
23#define GOBAN_MAIN_H
24
25/* Enable this to run test mode. (see the end of util.c) */
26#if 0
27#define GBN_TEST
28#endif
29
30#include "types.h"
31#include "util.h"
32
33
34/* Colors of various things. The colors on mono bitmap targets is fixed
35 based on the background/foreground color. */
36#ifdef HAVE_LCD_COLOR
37#define BOARD_COLOR LCD_RGBPACK(184,136,72)
38#define WHITE_COLOR LCD_RGBPACK(255,255,255)
39#define BLACK_COLOR LCD_RGBPACK(0,0,0)
40#define LINE_COLOR LCD_RGBPACK(0,0,0)
41#define BACKGROUND_COLOR LCD_RGBPACK(41,104,74)
42#define CURSOR_COLOR LCD_RGBPACK(222,0,0)
43#define MARK_COLOR LCD_RGBPACK(0,0,255)
44#elif LCD_DEPTH > 1 /* grayscale */
45#define BOARD_COLOR LCD_LIGHTGRAY
46#define WHITE_COLOR LCD_WHITE
47#define BLACK_COLOR LCD_BLACK
48#define LINE_COLOR LCD_BLACK
49#define BACKGROUND_COLOR LCD_DARKGRAY
50#define CURSOR_COLOR LCD_DARKGRAY
51#define MARK_COLOR LCD_DARKGRAY
52#endif
53
54/* Key setups */
55#ifdef HAVE_TOUCHSCREEN
56#define GBN_BUTTON_UP BUTTON_TOPMIDDLE
57#define GBN_BUTTON_DOWN BUTTON_BOTTOMMIDDLE
58#define GBN_BUTTON_LEFT BUTTON_MIDLEFT
59#define GBN_BUTTON_RIGHT BUTTON_MIDRIGHT
60#define GBN_BUTTON_RETREAT BUTTON_BOTTOMLEFT
61#define GBN_BUTTON_ADVANCE BUTTON_BOTTOMRIGHT
62#define GBN_BUTTON_MENU BUTTON_TOPLEFT
63#define GBN_BUTTON_PLAY BUTTON_CENTER | BUTTON_REL
64#define GBN_BUTTON_CONTEXT BUTTON_CENTER | BUTTON_REPEAT
65#define GBN_BUTTON_NEXT_VAR BUTTON_TOPRIGHT
66
67#elif (CONFIG_KEYPAD == IPOD_1G2G_PAD) \
68 || (CONFIG_KEYPAD == IPOD_3G_PAD) \
69 || (CONFIG_KEYPAD == IPOD_4G_PAD)
70#define GBN_BUTTON_UP BUTTON_MENU
71#define GBN_BUTTON_DOWN BUTTON_PLAY
72#define GBN_BUTTON_LEFT BUTTON_LEFT
73#define GBN_BUTTON_RIGHT BUTTON_RIGHT
74#define GBN_BUTTON_RETREAT BUTTON_SCROLL_BACK
75#define GBN_BUTTON_ADVANCE BUTTON_SCROLL_FWD
76#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
77#define GBN_BUTTON_MENU BUTTON_SELECT | BUTTON_REPEAT
78/* no context */
79/* no next var */
80
81#elif (CONFIG_KEYPAD == SANSA_E200_PAD)
82#define GBN_BUTTON_UP BUTTON_UP
83#define GBN_BUTTON_DOWN BUTTON_DOWN
84#define GBN_BUTTON_LEFT BUTTON_LEFT
85#define GBN_BUTTON_RIGHT BUTTON_RIGHT
86#define GBN_BUTTON_RETREAT BUTTON_SCROLL_BACK
87#define GBN_BUTTON_ADVANCE BUTTON_SCROLL_FWD
88#define GBN_BUTTON_MENU BUTTON_POWER
89#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
90#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
91#define GBN_BUTTON_NEXT_VAR BUTTON_REC
92
93#elif (CONFIG_KEYPAD == SANSA_FUZE_PAD)
94#define GBN_BUTTON_UP BUTTON_UP
95#define GBN_BUTTON_DOWN BUTTON_DOWN
96#define GBN_BUTTON_LEFT BUTTON_LEFT
97#define GBN_BUTTON_RIGHT BUTTON_RIGHT
98#define GBN_BUTTON_RETREAT BUTTON_SCROLL_BACK
99#define GBN_BUTTON_ADVANCE BUTTON_SCROLL_FWD
100#define GBN_BUTTON_MENU (BUTTON_HOME|BUTTON_REPEAT)
101#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
102#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
103/* No next var */
104
105#elif (CONFIG_KEYPAD == SANSA_C200_PAD)
106#define GBN_BUTTON_UP BUTTON_UP
107#define GBN_BUTTON_DOWN BUTTON_DOWN
108#define GBN_BUTTON_LEFT BUTTON_LEFT
109#define GBN_BUTTON_RIGHT BUTTON_RIGHT
110#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
111#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
112#define GBN_BUTTON_MENU BUTTON_POWER
113#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
114#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
115#define GBN_BUTTON_NEXT_VAR BUTTON_REC
116
117#elif (CONFIG_KEYPAD == SANSA_CLIP_PAD)
118#define GBN_BUTTON_UP BUTTON_UP
119#define GBN_BUTTON_DOWN BUTTON_DOWN
120#define GBN_BUTTON_LEFT BUTTON_LEFT
121#define GBN_BUTTON_RIGHT BUTTON_RIGHT
122#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
123#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
124#define GBN_BUTTON_MENU BUTTON_POWER
125#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
126#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
127#define GBN_BUTTON_NEXT_VAR BUTTON_HOME
128
129#elif (CONFIG_KEYPAD == SANSA_M200_PAD)
130#define GBN_BUTTON_UP BUTTON_UP
131#define GBN_BUTTON_DOWN BUTTON_DOWN
132#define GBN_BUTTON_LEFT BUTTON_LEFT
133#define GBN_BUTTON_RIGHT BUTTON_RIGHT
134#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
135#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
136#define GBN_BUTTON_MENU BUTTON_POWER
137#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
138#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
139/* No next var */
140
141#elif (CONFIG_KEYPAD == SANSA_CONNECT_PAD)
142#define GBN_BUTTON_UP BUTTON_UP
143#define GBN_BUTTON_DOWN BUTTON_DOWN
144#define GBN_BUTTON_LEFT BUTTON_LEFT
145#define GBN_BUTTON_RIGHT BUTTON_RIGHT
146#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
147#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
148#define GBN_BUTTON_MENU BUTTON_POWER
149#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
150#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
151#define GBN_BUTTON_NEXT_VAR BUTTON_NEXT
152
153
154#elif (CONFIG_KEYPAD == CREATIVEZVM_PAD) \
155 || (CONFIG_KEYPAD == CREATIVEZV_PAD)
156#define GBN_BUTTON_UP BUTTON_UP
157#define GBN_BUTTON_DOWN BUTTON_DOWN
158#define GBN_BUTTON_LEFT BUTTON_LEFT
159#define GBN_BUTTON_RIGHT BUTTON_RIGHT
160#define GBN_BUTTON_RETREAT BUTTON_BACK
161#define GBN_BUTTON_ADVANCE BUTTON_CUSTOM
162#define GBN_BUTTON_MENU BUTTON_MENU
163#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
164#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
165#define GBN_BUTTON_NEXT_VAR BUTTON_PLAY
166
167#elif (CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD)
168#define GBN_BUTTON_UP BUTTON_UP | BUTTON_REL
169#define GBN_BUTTON_DOWN BUTTON_DOWN
170#define GBN_BUTTON_LEFT BUTTON_BACK
171#define GBN_BUTTON_RIGHT BUTTON_MENU
172#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
173#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
174#define GBN_BUTTON_MENU BUTTON_POWER
175#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
176#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
177
178#elif (CONFIG_KEYPAD == PHILIPS_HDD1630_PAD)
179#define GBN_BUTTON_UP BUTTON_UP
180#define GBN_BUTTON_DOWN BUTTON_DOWN
181#define GBN_BUTTON_LEFT BUTTON_LEFT
182#define GBN_BUTTON_RIGHT BUTTON_RIGHT
183#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
184#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
185#define GBN_BUTTON_MENU BUTTON_MENU
186#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
187#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
188#define GBN_BUTTON_NEXT_VAR BUTTON_VIEW
189
190#elif (CONFIG_KEYPAD == PHILIPS_HDD6330_PAD)
191#define GBN_BUTTON_UP BUTTON_UP
192#define GBN_BUTTON_DOWN BUTTON_DOWN
193#define GBN_BUTTON_LEFT BUTTON_LEFT
194#define GBN_BUTTON_RIGHT BUTTON_RIGHT
195#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
196#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
197#define GBN_BUTTON_MENU BUTTON_MENU
198#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
199#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
200#define GBN_BUTTON_NEXT_VAR BUTTON_NEXT
201
202#elif (CONFIG_KEYPAD == PHILIPS_SA9200_PAD)
203#define GBN_BUTTON_UP BUTTON_UP
204#define GBN_BUTTON_DOWN BUTTON_DOWN
205#define GBN_BUTTON_LEFT BUTTON_PREV
206#define GBN_BUTTON_RIGHT BUTTON_NEXT
207#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
208#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
209#define GBN_BUTTON_MENU BUTTON_MENU
210#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
211#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
212#define GBN_BUTTON_NEXT_VAR BUTTON_RIGHT
213
214#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
215#define GBN_BUTTON_UP BUTTON_UP
216#define GBN_BUTTON_DOWN BUTTON_DOWN
217#define GBN_BUTTON_LEFT BUTTON_LEFT
218#define GBN_BUTTON_RIGHT BUTTON_RIGHT
219#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
220#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
221#define GBN_BUTTON_MENU BUTTON_MENU
222#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
223#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
224#define GBN_BUTTON_NEXT_VAR BUTTON_A
225
226#elif (CONFIG_KEYPAD == GIGABEAT_S_PAD)
227#define GBN_BUTTON_UP BUTTON_UP
228#define GBN_BUTTON_DOWN BUTTON_DOWN
229#define GBN_BUTTON_LEFT BUTTON_LEFT
230#define GBN_BUTTON_RIGHT BUTTON_RIGHT
231#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
232#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
233#define GBN_BUTTON_MENU BUTTON_MENU
234#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
235#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
236#define GBN_BUTTON_NEXT_VAR BUTTON_PLAY
237
238#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
239#define GBN_BUTTON_UP BUTTON_SCROLL_UP
240#define GBN_BUTTON_DOWN BUTTON_SCROLL_DOWN
241#define GBN_BUTTON_LEFT BUTTON_LEFT
242#define GBN_BUTTON_RIGHT BUTTON_RIGHT
243#define GBN_BUTTON_RETREAT BUTTON_FF
244#define GBN_BUTTON_ADVANCE BUTTON_REW
245#define GBN_BUTTON_MENU BUTTON_POWER
246#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
247#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
248/* No next var */
249
250#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
251 (CONFIG_KEYPAD == IRIVER_H300_PAD)
252#define GBN_BUTTON_UP BUTTON_UP
253#define GBN_BUTTON_DOWN BUTTON_DOWN
254#define GBN_BUTTON_LEFT BUTTON_LEFT
255#define GBN_BUTTON_RIGHT BUTTON_RIGHT
256#define GBN_BUTTON_RETREAT BUTTON_OFF
257#define GBN_BUTTON_ADVANCE BUTTON_ON
258#define GBN_BUTTON_MENU BUTTON_MODE
259#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
260#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
261#define GBN_BUTTON_NEXT_VAR BUTTON_REC
262
263#elif (CONFIG_KEYPAD == MROBE100_PAD)
264#define GBN_BUTTON_UP BUTTON_UP
265#define GBN_BUTTON_DOWN BUTTON_DOWN
266#define GBN_BUTTON_LEFT BUTTON_LEFT
267#define GBN_BUTTON_RIGHT BUTTON_RIGHT
268#define GBN_BUTTON_RETREAT BUTTON_MENU
269#define GBN_BUTTON_ADVANCE BUTTON_PLAY
270#define GBN_BUTTON_MENU BUTTON_DISPLAY
271#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
272#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
273#define GBN_BUTTON_NEXT_VAR BUTTON_POWER
274
275#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
276#define GBN_BUTTON_UP BUTTON_UP
277#define GBN_BUTTON_DOWN BUTTON_DOWN
278#define GBN_BUTTON_LEFT BUTTON_LEFT
279#define GBN_BUTTON_RIGHT BUTTON_RIGHT
280#define GBN_BUTTON_RETREAT BUTTON_PLAY
281#define GBN_BUTTON_ADVANCE BUTTON_REC
282#define GBN_BUTTON_MENU BUTTON_POWER
283#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
284#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
285/* no next var */
286
287#elif (CONFIG_KEYPAD == IAUDIO_M3_PAD)
288/* TODO: these are basically complete guesses, I have no manual to go by */
289#define GBN_BUTTON_UP BUTTON_RC_VOL_UP
290#define GBN_BUTTON_DOWN BUTTON_RC_VOL_DOWN
291#define GBN_BUTTON_LEFT BUTTON_RC_REW
292#define GBN_BUTTON_RIGHT BUTTON_RC_FF
293#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
294#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
295#define GBN_BUTTON_MENU BUTTON_MODE
296#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
297#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
298/* no next var */
299
300#elif (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD)
301#define GBN_BUTTON_UP BUTTON_UP
302#define GBN_BUTTON_DOWN BUTTON_DOWN
303#define GBN_BUTTON_LEFT BUTTON_LEFT
304#define GBN_BUTTON_RIGHT BUTTON_RIGHT
305#define GBN_BUTTON_RETREAT BUTTON_FFWD | BUTTON_LEFT
306#define GBN_BUTTON_ADVANCE BUTTON_FFWD | BUTTON_RIGHT
307#define GBN_BUTTON_MENU BUTTON_REW
308#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
309#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
310#define GBN_BUTTON_NEXT_VAR BUTTON_FFWD | BUTTON_UP
311
312#elif (CONFIG_KEYPAD == SAMSUNG_YH820_PAD)
313#define GBN_BUTTON_UP BUTTON_UP
314#define GBN_BUTTON_DOWN BUTTON_DOWN
315#define GBN_BUTTON_LEFT BUTTON_LEFT
316#define GBN_BUTTON_RIGHT BUTTON_RIGHT
317#define GBN_BUTTON_RETREAT BUTTON_REC | BUTTON_LEFT
318#define GBN_BUTTON_ADVANCE BUTTON_REC | BUTTON_RIGHT
319#define GBN_BUTTON_MENU BUTTON_REW
320#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
321#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
322#define GBN_BUTTON_NEXT_VAR BUTTON_REC | BUTTON_UP
323
324#elif (CONFIG_KEYPAD == PBELL_VIBE500_PAD)
325#define GBN_BUTTON_UP BUTTON_UP
326#define GBN_BUTTON_DOWN BUTTON_DOWN
327#define GBN_BUTTON_LEFT BUTTON_PREV
328#define GBN_BUTTON_RIGHT BUTTON_NEXT
329#define GBN_BUTTON_RETREAT (BUTTON_OK | BUTTON_PREV)
330#define GBN_BUTTON_ADVANCE (BUTTON_OK | BUTTON_NEXT)
331#define GBN_BUTTON_MENU BUTTON_MENU
332#define GBN_BUTTON_PLAY BUTTON_PLAY
333#define GBN_BUTTON_CONTEXT BUTTON_OK
334#define GBN_BUTTON_NEXT_VAR BUTTON_CANCEL
335
336#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
337#define GBN_BUTTON_UP BUTTON_REW
338#define GBN_BUTTON_DOWN BUTTON_FF
339#define GBN_BUTTON_LEFT BUTTON_VOL_DOWN
340#define GBN_BUTTON_RIGHT BUTTON_VOL_UP
341#define GBN_BUTTON_RETREAT (BUTTON_REC | BUTTON_REW)
342#define GBN_BUTTON_ADVANCE (BUTTON_REC | BUTTON_FF)
343#define GBN_BUTTON_PLAY (BUTTON_FUNC | BUTTON_REL)
344#define GBN_BUTTON_MENU BUTTON_PLAY
345#define GBN_BUTTON_CONTEXT (BUTTON_FUNC | BUTTON_REPEAT)
346#define GBN_BUTTON_NEXT_VAR BUTTON_REC
347
348#elif (CONFIG_KEYPAD == MPIO_HD300_PAD)
349#define GBN_BUTTON_UP BUTTON_UP
350#define GBN_BUTTON_DOWN BUTTON_DOWN
351#define GBN_BUTTON_LEFT BUTTON_REW
352#define GBN_BUTTON_RIGHT BUTTON_FF
353#define GBN_BUTTON_RETREAT (BUTTON_REC | BUTTON_REW)
354#define GBN_BUTTON_ADVANCE (BUTTON_REC | BUTTON_FF)
355#define GBN_BUTTON_PLAY (BUTTON_ENTER | BUTTON_REL)
356#define GBN_BUTTON_CONTEXT (BUTTON_ENTER | BUTTON_REPEAT)
357#define GBN_BUTTON_MENU BUTTON_MENU
358#define GBN_BUTTON_NEXT_VAR BUTTON_REC
359
360#elif (CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD)
361#define GBN_BUTTON_UP BUTTON_UP
362#define GBN_BUTTON_DOWN BUTTON_DOWN
363#define GBN_BUTTON_LEFT BUTTON_LEFT
364#define GBN_BUTTON_RIGHT BUTTON_RIGHT
365#define GBN_BUTTON_MENU BUTTON_POWER
366#define GBN_BUTTON_PLAY BUTTON_SELECT
367#define GBN_BUTTON_RETREAT BUTTON_BACK
368#define GBN_BUTTON_ADVANCE BUTTON_PLAYPAUSE
369#define GBN_BUTTON_CONTEXT BUTTON_BOTTOMLEFT
370#define GBN_BUTTON_NEXT_VAR BUTTON_BOTTOMRIGHT
371
372#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
373#define GBN_BUTTON_UP BUTTON_UP
374#define GBN_BUTTON_DOWN BUTTON_DOWN
375#define GBN_BUTTON_LEFT BUTTON_LEFT
376#define GBN_BUTTON_RIGHT BUTTON_RIGHT
377#define GBN_BUTTON_RETREAT BUTTON_BACK
378#define GBN_BUTTON_ADVANCE BUTTON_USER
379#define GBN_BUTTON_PLAY BUTTON_SELECT
380#define GBN_BUTTON_MENU BUTTON_MENU
381
382#elif CONFIG_KEYPAD == SONY_NWZ_PAD
383#define GBN_BUTTON_UP BUTTON_UP
384#define GBN_BUTTON_DOWN BUTTON_DOWN
385#define GBN_BUTTON_LEFT BUTTON_LEFT
386#define GBN_BUTTON_RIGHT BUTTON_RIGHT
387#define GBN_BUTTON_PLAY BUTTON_PLAY
388#define GBN_BUTTON_MENU BUTTON_BACK
389
390#elif CONFIG_KEYPAD == CREATIVE_ZEN_PAD
391#define GBN_BUTTON_UP BUTTON_UP
392#define GBN_BUTTON_DOWN BUTTON_DOWN
393#define GBN_BUTTON_LEFT BUTTON_LEFT
394#define GBN_BUTTON_RIGHT BUTTON_RIGHT
395#define GBN_BUTTON_PLAY BUTTON_SELECT
396#define GBN_BUTTON_MENU BUTTON_MENU
397
398#elif (CONFIG_KEYPAD == HM60X_PAD)
399#define GBN_BUTTON_UP BUTTON_UP
400#define GBN_BUTTON_DOWN BUTTON_DOWN
401#define GBN_BUTTON_LEFT BUTTON_LEFT
402#define GBN_BUTTON_RIGHT BUTTON_RIGHT
403#define GBN_BUTTON_MENU BUTTON_POWER
404#define GBN_BUTTON_PLAY BUTTON_SELECT
405#define GBN_BUTTON_RETREAT (BUTTON_POWER | BUTTON_LEFT)
406#define GBN_BUTTON_ADVANCE (BUTTON_POWER | BUTTON_UP)
407#define GBN_BUTTON_CONTEXT (BUTTON_POWER | BUTTON_DOWN)
408#define GBN_BUTTON_NEXT_VAR (BUTTON_POWER | BUTTON_RIGHT)
409
410#elif (CONFIG_KEYPAD == HM801_PAD)
411#define GBN_BUTTON_UP BUTTON_UP
412#define GBN_BUTTON_DOWN BUTTON_DOWN
413#define GBN_BUTTON_LEFT BUTTON_LEFT
414#define GBN_BUTTON_RIGHT BUTTON_RIGHT
415#define GBN_BUTTON_MENU BUTTON_POWER
416#define GBN_BUTTON_PLAY BUTTON_SELECT
417#define GBN_BUTTON_RETREAT BUTTON_PREV
418#define GBN_BUTTON_ADVANCE (BUTTON_POWER | BUTTON_PLAY)
419#define GBN_BUTTON_CONTEXT BUTTON_PLAY
420#define GBN_BUTTON_NEXT_VAR BUTTON_NEXT
421
422#elif (CONFIG_KEYPAD == DX50_PAD)
423#define GBN_BUTTON_MENU (BUTTON_POWER|BUTTON_REL)
424
425#elif (CONFIG_KEYPAD == AGPTEK_ROCKER_PAD)
426#define GBN_BUTTON_UP BUTTON_UP
427#define GBN_BUTTON_DOWN BUTTON_DOWN
428#define GBN_BUTTON_LEFT BUTTON_LEFT
429#define GBN_BUTTON_RIGHT BUTTON_RIGHT
430#define GBN_BUTTON_MENU BUTTON_POWER
431#define GBN_BUTTON_PLAY (BUTTON_SELECT | BUTTON_REL)
432#define GBN_BUTTON_NAV_MODE BUTTON_VOLUP
433
434#elif (CONFIG_KEYPAD == XDUOO_X3_PAD)
435#define GBN_BUTTON_UP BUTTON_HOME
436#define GBN_BUTTON_DOWN BUTTON_OPTION
437#define GBN_BUTTON_LEFT BUTTON_PREV
438#define GBN_BUTTON_RIGHT BUTTON_NEXT
439#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
440#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
441#define GBN_BUTTON_MENU BUTTON_POWER
442#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
443#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
444#define GBN_BUTTON_NEXT_VAR BUTTON_HOME | BUTTON_PWRALT
445
446#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
447#define GBN_BUTTON_UP BUTTON_HOME
448#define GBN_BUTTON_DOWN BUTTON_OPTION
449#define GBN_BUTTON_LEFT BUTTON_PREV
450#define GBN_BUTTON_RIGHT BUTTON_NEXT
451#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
452#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
453#define GBN_BUTTON_MENU BUTTON_POWER
454#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
455#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
456#define GBN_BUTTON_NEXT_VAR BUTTON_HOME | BUTTON_POWER
457
458#elif (CONFIG_KEYPAD == FIIO_M3K_LINUX_PAD)
459#define GBN_BUTTON_UP BUTTON_HOME
460#define GBN_BUTTON_DOWN BUTTON_OPTION
461#define GBN_BUTTON_LEFT BUTTON_PREV
462#define GBN_BUTTON_RIGHT BUTTON_NEXT
463#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
464#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
465#define GBN_BUTTON_MENU BUTTON_POWER
466#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
467#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
468#define GBN_BUTTON_NEXT_VAR BUTTON_HOME | BUTTON_POWER
469
470#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
471
472#define GBN_BUTTON_UP BUTTON_PREV
473#define GBN_BUTTON_DOWN BUTTON_NEXT
474#define GBN_BUTTON_LEFT BUTTON_HOME
475#define GBN_BUTTON_RIGHT BUTTON_VOL_DOWN
476#define GBN_BUTTON_RETREAT BUTTON_POWER | BUTTON_VOL_DOWN
477#define GBN_BUTTON_ADVANCE BUTTON_POWER | BUTTON_VOL_UP
478#define GBN_BUTTON_MENU BUTTON_POWER
479#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
480#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
481#define GBN_BUTTON_NEXT_VAR BUTTON_POWER | BUTTON_HOME
482
483#elif (CONFIG_KEYPAD == EROSQ_PAD)
484#define GBN_BUTTON_UP BUTTON_PREV
485#define GBN_BUTTON_DOWN BUTTON_NEXT
486#define GBN_BUTTON_LEFT BUTTON_SCROLL_BACK
487#define GBN_BUTTON_RIGHT BUTTON_SCROLL_FWD
488#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
489#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
490#define GBN_BUTTON_MENU BUTTON_MENU
491#define GBN_BUTTON_PLAY BUTTON_PLAY
492#define GBN_BUTTON_CONTEXT BUTTON_MENU | BUTTON_REPEAT
493#define GBN_BUTTON_NEXT_VAR BUTTON_BACK
494
495#elif CONFIG_KEYPAD == FIIO_M3K_PAD
496#define GBN_BUTTON_UP BUTTON_UP
497#define GBN_BUTTON_DOWN BUTTON_DOWN
498#define GBN_BUTTON_LEFT BUTTON_LEFT
499#define GBN_BUTTON_RIGHT BUTTON_RIGHT
500#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
501#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
502#define GBN_BUTTON_MENU BUTTON_MENU
503#define GBN_BUTTON_PLAY BUTTON_PLAY
504#define GBN_BUTTON_CONTEXT (BUTTON_SELECT|BUTTON_REPEAT)
505#define GBN_BUTTON_NEXT_VAR BUTTON_BACK
506
507#elif CONFIG_KEYPAD == MA_PAD
508#define GBN_BUTTON_UP BUTTON_UP
509#define GBN_BUTTON_DOWN BUTTON_DOWN
510#define GBN_BUTTON_LEFT BUTTON_LEFT
511#define GBN_BUTTON_RIGHT BUTTON_RIGHT
512#define GBN_BUTTON_MENU BUTTON_MENU
513#define GBN_BUTTON_PLAY BUTTON_PLAY
514
515#elif CONFIG_KEYPAD == RG_NANO_PAD
516#define GBN_BUTTON_UP BUTTON_UP
517#define GBN_BUTTON_DOWN BUTTON_DOWN
518#define GBN_BUTTON_LEFT BUTTON_LEFT
519#define GBN_BUTTON_RIGHT BUTTON_RIGHT
520#define GBN_BUTTON_RETREAT BUTTON_L
521#define GBN_BUTTON_ADVANCE BUTTON_R
522#define GBN_BUTTON_MENU BUTTON_B
523#define GBN_BUTTON_PLAY BUTTON_A
524#define GBN_BUTTON_CONTEXT BUTTON_X
525#define GBN_BUTTON_NEXT_VAR BUTTON_Y
526
527#else
528#error Unsupported keypad
529#endif
530
531
532/* The smallest dimension of the LCD */
533#define LCD_MIN_DIMENSION (LCD_HEIGHT > LCD_WIDTH ? LCD_WIDTH : LCD_HEIGHT)
534
535
536/* Determine if we have a wide screen or a tall screen. This is used to
537 place the board and footer in acceptable locations also, set the
538 LCD_BOARD_SIZE, making sure that we have at least 16 pixels for the
539 "footer" on either the bottom or the right. */
540
541#define FOOTER_RESERVE (16)
542
543#if (LCD_WIDTH > LCD_HEIGHT)
544
545#define GBN_WIDE_SCREEN
546
547#define LCD_BOARD_WIDTH (LCD_WIDTH - FOOTER_RESERVE)
548#define LCD_BOARD_HEIGHT LCD_HEIGHT
549
550#else
551
552#define GBN_TALL_SCREEN
553
554#define LCD_BOARD_WIDTH LCD_WIDTH
555#define LCD_BOARD_HEIGHT (LCD_HEIGHT - FOOTER_RESERVE)
556
557#endif /* LCD_WIDTH > LCD_HEIGHT */
558
559
560/* The directory we default to for saving crap */
561#define DEFAULT_SAVE_DIR PLUGIN_GAMES_DIR "/goban"
562
563/* The default file we save to */
564#define DEFAULT_SAVE (DEFAULT_SAVE_DIR "/goban_d.sgf")
565
566/* The size of the buffer we store filenames in (1 reserved for '\0') */
567#define SAVE_FILE_LENGTH 256
568
569/* The maximum setting for idle autosave time, in minutes */
570#define MAX_AUTOSAVE (30)
571
572/* On mono targets, draw while stones with a black outline so they are
573 actually visibile instead of being white on white */
574#if (LCD_DEPTH == 1)
575#define OUTLINE_STONES
576#endif
577
578/* The current play mode */
579extern enum play_mode_t play_mode;
580
581/* Show comments when redoing onto a move? */
582extern bool auto_show_comments;
583
584/* A stack used for parsing/outputting as well as some board functions
585 such as counting liberties and filling in/ removing stones */
586extern struct stack_t parse_stack;
587
588#endif