Auto full-combo Koibumi2000 in Taiko no Tatsujin CS5

Dependencies:   fll mbed-rtos mbed

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?

UserRevisionLine numberNew 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 }