Auto full-combo Koibumi2000 in Taiko no Tatsujin CS5
Dependencies: fll mbed-rtos mbed
main.cpp@30:d056c7c3e81e, 2015-02-15 (annotated)
- Committer:
- sierra
- Date:
- Sun Feb 15 10:21:15 2015 +0000
- Revision:
- 30:d056c7c3e81e
- Parent:
- 29:2f3d6d09eaac
[WIP] Optimize press() function
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
amutake | 0:c80e972b4c59 | 1 | #include "mbed.h" |
amutake | 0:c80e972b4c59 | 2 | #include "rtos.h" |
amutake | 0:c80e972b4c59 | 3 | #include "fll.h" |
sierra | 29:2f3d6d09eaac | 4 | #include "fllaux.h" |
amutake | 0:c80e972b4c59 | 5 | |
amutake | 0:c80e972b4c59 | 6 | #define FRAME 1.0 / 60 // 1 frame (sec) |
amutake | 0:c80e972b4c59 | 7 | |
sierra | 6:d0348b7a2f05 | 8 | class OrFoldFlow : public FoldFlow { |
sierra | 5:130721ce29f7 | 9 | public: |
sierra | 6:d0348b7a2f05 | 10 | OrFoldFlow(Producer **srcs, int srcs_size) : FoldFlow(srcs, srcs_size) {} |
sierra | 5:130721ce29f7 | 11 | virtual button_t fold(button_t *bs, int bs_size) { |
sierra | 5:130721ce29f7 | 12 | button_t b = 0x00; |
sierra | 5:130721ce29f7 | 13 | for(int i = 0; i < bs_size; i++) { |
sierra | 5:130721ce29f7 | 14 | b |= bs[i]; |
sierra | 5:130721ce29f7 | 15 | } |
sierra | 5:130721ce29f7 | 16 | return b; |
sierra | 5:130721ce29f7 | 17 | } |
sierra | 5:130721ce29f7 | 18 | }; |
sierra | 5:130721ce29f7 | 19 | |
sierra | 5:130721ce29f7 | 20 | void invoke_sinkrun(const void *p) { |
amutake | 0:c80e972b4c59 | 21 | ((Sink*)p)->run(); |
amutake | 0:c80e972b4c59 | 22 | } |
amutake | 0:c80e972b4c59 | 23 | void outputrun(const void *p) |
amutake | 0:c80e972b4c59 | 24 | { |
amutake | 0:c80e972b4c59 | 25 | ((Output*)p)->run(); |
amutake | 0:c80e972b4c59 | 26 | } |
amutake | 0:c80e972b4c59 | 27 | |
amutake | 0:c80e972b4c59 | 28 | int main(void) |
amutake | 0:c80e972b4c59 | 29 | { |
sierra | 29:2f3d6d09eaac | 30 | button_t array0[] = {R1, 0, R1, 0}; |
sierra | 30:d056c7c3e81e | 31 | button_t array1[] = {B_DOWN, B_UP}; |
amutake | 0:c80e972b4c59 | 32 | // user must make Source |
sierra | 6:d0348b7a2f05 | 33 | Producer* source0 = new RepeaterSource(array0, sizeof(array0)/sizeof(button_t)); |
sierra | 6:d0348b7a2f05 | 34 | Producer* source1 = new RepeaterSource(array1, sizeof(array1)/sizeof(button_t)); |
sierra | 6:d0348b7a2f05 | 35 | Producer* ss[] = {source0, source1}; |
sierra | 6:d0348b7a2f05 | 36 | Producer* source = new OrFoldFlow(ss, 2); |
amutake | 0:c80e972b4c59 | 37 | |
amutake | 0:c80e972b4c59 | 38 | // common pattern |
sierra | 3:edbf31a8589f | 39 | Mail<button_t, MAIL_BOX_SIZE>* mail_box = new Mail<button_t, MAIL_BOX_SIZE>(); |
amutake | 0:c80e972b4c59 | 40 | Mutex* mutex = new Mutex(); |
amutake | 0:c80e972b4c59 | 41 | |
amutake | 2:165723d41023 | 42 | Sink* sink = new Sink(source, mail_box, mutex); |
amutake | 0:c80e972b4c59 | 43 | |
amutake | 0:c80e972b4c59 | 44 | Ticker ticker; |
amutake | 2:165723d41023 | 45 | Output* output = new Output(mail_box); |
amutake | 0:c80e972b4c59 | 46 | |
sierra | 4:9ee673ca05ad | 47 | Thread th(invoke_sinkrun, (void *)sink); |
amutake | 0:c80e972b4c59 | 48 | ticker.attach(output, &Output::run, FRAME); |
amutake | 0:c80e972b4c59 | 49 | |
sierra | 1:1abcd83947bf | 50 | Thread::wait(osWaitForever); |
amutake | 0:c80e972b4c59 | 51 | } |