TODO:
mode exit mechanism
- new function in modes.c, 'mode_transition_initiate(new mode)'
- sets a global timeval for the time when the mode exit was initiated
- up to mode to do whatever it wants in this exit phase, then call
mode_transition_finalize which actually sets new_mode
- input should probably be disregarded during exit transition
update mechanims
- use nonblocking abortable mode instead of preemptive loop
H go over vram bank setting now that I grok it better having found-
- http://www.dev-scene.com/NDS/NDS_Tutorials_VramTable
H textviewer mode: firstpass for help
H die() needs to take printf args, and reliably print an error message
- probably existing assert function is even sufficient, though for fun
may want to effectively reimplement it, just simple one screen console init...
H libtremor, ogg playability
M splash scroll hexmatrix font splash bottom (welcome to guitar zyx)
- perhaps scaled/colored font at first
M test max throughput both to file and wifi (i.e. enough for audio?)
M synthpad, local and remote, with buttons
M need to polish the rest of the mode transitions as I partially did
for the intro transition. I.e. I think zeroing out the background
if I I don't want a flicker, or also bypassing videomodesetting if
the mode isn't changing, and I want the background to persist. I.e.
I think currently I have lava lower background fading, even though
I want it to persist, with only the text fading
L mcp_kb_init with externs, etc... (could be a lurking console bug)
- for bonus points, try with lava, and if so, go for abstratifying the few common modesets
L code cleanups
- definitely the set up of the < half doz background/vid modes can be consolidated
- simple console goes on 0 (or 3D?)
- kb goes on 1
- 256c simple background goes on 2
- 16bit bg or 3D or scaled console goes on 3
- fadein/out code could be made to have default behaviour
- mode struct could have simple top/bot fade pre/fadein/fadeout/post values
- these get overridden by #defines if nondefault is used
L arch/desn: make modes array of mode function pointers a linked list on the heap,
i.e. only have to add a new mode to modes.h, then each of those gets
initially added to the linked list.
L build: put modes in directory, lose mode__ namespace
L aesthetic: appropriately rename mode_intro__credits to mode_show_credits
L client: scroll pad infra: add touchpad based scrolling
- nearest neighbor in un-pad area, same in pad, but pad area implies scrolling (by a ramping speed)
L function for do_blend_fade and do_text_fade
- take mode_ms, and 4 timing parameters, and for text, address of pallette entry and full value
- good first candidate for libdmc, along with timeval
U use etrace/ptrace/__cyg_profile_func_enter()/_exit to profile stack usage to file,
document it in hacking
- and while at it, do a -DFIRSTMODE=XXX
U alternate undoubled menu mode
- maybe even dynamic width option
U have unselectable flag for entries, and then put an entry on every line instead of e-other
- mic: try audio packets over wifi (does dsi buy more bw?), and to file
- input: steve(&agree): basic log/recording, suitable for input playback effectively
- user/custom: pull userstring, birthday, favcolor from usermem
- input: pull user touchpad cal from usermem, see if it seems obviously relevent
- prerender a 0..255 128 value lut from that info, then >>1 for typ midival
- arch/desn: keep/generate statistics on number of times the Hz counters are
skipped, i.e. number of loops where nothing is done. perhaps adding a
trivial compute (1flop) function, to measure a number of 'idle flops'...
- ogl: 2nd pass at using fixedpoint for GL stuff instead of floats
- c: start a style document
- fs: use fat file reading for image files
- nitrofs backups
- on liveusb, '[sudo ]gzmcp nukeformat next-plugged-in-usbdisk'
- on liveusb, 'sudo gzmcp trybrowse next-plugged-in-usbdisk'
- udp experiment: add configfile setting for experimental alternate udp implementation
- rak: add interface to rak to send bank preset names, and current value probing, etc...
ping guy about that and maintenance
- security: add random magic cookie in default configfile for 'security'
(and documented deployment process)
- c: check all return values (closesocket/shutdown, etc...)
- wifi: use Wifi_FindMatchingAP to have a list of APs to search for instead of one
- stack: spend more time on reporting function and have it log some kind
of 'max stack depth' etc...
DEBUG/LOGGING INFRASTRUCTURE
/
MAX_LOG_LINE_LENGTH defaults to 32 (256 could be used for serious debugging)
MAX_LOG_LINES defaults to 32 (256 could be used for serious debugging)
global pointer variable points to last log entry index (wrapping at M_L_L)
log/debug function (thin textout wrapper) also takes a delay argument (or
rather, takes a working delay argument... this will obsolete the broken one).
these delays will cause a global timestamp in the future to be set, upon
which, the debug line will be cleared.
at any time, an Lh+Rh+up will enable debug mode, displaying the last log
message, and disabling the auto clear mechanism. ..+down will clear
the debug message and reenable the auto clear mechanism. +right and +left
will also enable as +up, but incr/decr the index of the log message being
shown.
Lh+Rh+[ABXY] should be reserved for launching 4 apps.
(OR! for recording hotkeys- start/stop/playlast/? ... leaving startheld+abxy for starting the apps)
apps- dslinux, moonshell, strumme, snake3d(some homebrew game until I port it)
+start/select should do something drastic (reboot, lockscreen)
all of this, can be l+r held for mintime (3 seconds def), to avoid
casual invocation
- use NODEBUG for double line (wrap) tw-vert: and tw-horz: display
of midi (numeric at first, then alpha)
- could use start-held + cross for tw-v&h parms, then use in normal
mode for the 4 hot-modes, thus freeing up abxy for hydro outputs
selectheld+cross can be for incr/decr amongs presets
selectheld+abxy can be RESERVED (or rather, the only thing left open)
... but not something you want to cause accidental start+ bootage, maybe just another 4 apps
startheld + abxy can be for initiating arbitary animated scripts (midi/anything)
startheld+select can then be for online/offline
(optionally replace all above with start/select swapped)
LRheld(not3s-min) + double tap on touch screen can bring up advanced stylus based gui
triple tap R toggles metronome, Lheld+R increases bpm, Rheld+L decreases bpm
tripple tap L does something completely silly/eyecandy
--------------
gzmcp
callbacks for toprender, bottomrender, input,
global for toprender_rate, bottomrender_rate,
- start with simple array of 8 possible no arg functions
gamestate state machine, each state setting up linked list of callbacks of above
- zillions of states, but a semantic namespacing with __, thus
INTRO__MAIN__FADEIN
INTRO__MAIN__HOLD
INTRO__MAIN__FADEOUT
INTRO__CREDITS__FADEIN
INTRO__CREDITS__HOLD
INTRO__CREDITS__FADEOUT
INTRO__CONSOLE__FADEIN
TPW__INTRO__FADEIN
TPW__JAM
TPW__FADEOUT
// 4 fade levels/screenrenders
SERVERCONSOLE__FADEIN
// 4 fade levels/screenrenders
SERVERCONSOLE__ACTIVE
// 4 fade levels/screenrenders
SERVERCONSOLE__FADEOUT
// 4 fade levels/screenrenders
TPW__FADEIN
// 4 fade levels/screenrenders
SCROLLMENU__FADEIN
SCROLLMENU__ACTIVE
// 4 fade levels/screenrenders
SCROLLMENU__FADEOUT
STRINGINPUT__FADEIN
// 1st use, ssid input, use/displaystrings defined with globals
STRINGINPUT__ACTIVE
STRINGINPUT__FADEOUT
// single slider,
// with miniscroll numerical inputs
// (or slider w/dragable tikmarks)
// for min and max
// and reverse toggle
SLIDERINPUT__3
// one for each rakmod
ONOFFINPUT__3
// 10/18 radio buttons
ACTIVERAKMODS__3
RECCONTROL__3
TUNERFEEDBACK__3