Frame Level Language for controlling DUALSHOCK2

Dependents:   koibumi2000

Committer:
amutake
Date:
Thu Feb 19 13:47:15 2015 +0000
Revision:
1:905fe1a0ca5a
Parent:
0:a436e2063a3d
Change logic of EasySource

Who changed what in which revision?

UserRevisionLine numberNew contents of line
amutake 0:a436e2063a3d 1 // Frame Level Language
amutake 0:a436e2063a3d 2 // interface
amutake 0:a436e2063a3d 3
amutake 0:a436e2063a3d 4 #pragma once
amutake 0:a436e2063a3d 5
amutake 0:a436e2063a3d 6 #include "mbed.h"
amutake 0:a436e2063a3d 7 #include "rtos.h"
amutake 0:a436e2063a3d 8 #include <stdint.h>
amutake 0:a436e2063a3d 9
amutake 0:a436e2063a3d 10 #define MAIL_BOX_SIZE 16
amutake 0:a436e2063a3d 11
amutake 0:a436e2063a3d 12 #define FRAME (1.0 / 59.94) // 1 frame (sec)
amutake 0:a436e2063a3d 13
amutake 0:a436e2063a3d 14 #define R1 0x0001
amutake 0:a436e2063a3d 15 #define TRIANGLE 0x0002
amutake 0:a436e2063a3d 16 #define CIRCLE 0x0004
amutake 0:a436e2063a3d 17 #define CROSS 0x0008
amutake 0:a436e2063a3d 18 #define SQUARE 0x0010
amutake 0:a436e2063a3d 19 #define R2 0x0020
amutake 0:a436e2063a3d 20 #define START 0x0040
amutake 0:a436e2063a3d 21 #define ANALOG 0x0080
amutake 0:a436e2063a3d 22 #define SELECT 0x0100
amutake 0:a436e2063a3d 23 #define L2 0x0200
amutake 0:a436e2063a3d 24 #define UP 0x0400
amutake 0:a436e2063a3d 25 #define DOWN 0x0800
amutake 0:a436e2063a3d 26 #define LEFT 0x1000
amutake 0:a436e2063a3d 27 #define RIGHT 0x2000
amutake 0:a436e2063a3d 28 #define L1 0x4000
amutake 0:a436e2063a3d 29 #define BUTTON_NUM 15
amutake 0:a436e2063a3d 30
amutake 0:a436e2063a3d 31 typedef uint16_t button_t;
amutake 0:a436e2063a3d 32
amutake 0:a436e2063a3d 33 // Base object for stream network
amutake 0:a436e2063a3d 34 class Producer
amutake 0:a436e2063a3d 35 {
amutake 0:a436e2063a3d 36 public:
amutake 0:a436e2063a3d 37 virtual button_t await() = 0;
amutake 0:a436e2063a3d 38 virtual bool is_finished() = 0;
amutake 0:a436e2063a3d 39 virtual void reset() = 0;
amutake 0:a436e2063a3d 40 };
amutake 0:a436e2063a3d 41
amutake 0:a436e2063a3d 42 // Sink is the end of button stream network
amutake 0:a436e2063a3d 43 // It sends next button to Output object through rtos::Mail
amutake 0:a436e2063a3d 44 class Sink
amutake 0:a436e2063a3d 45 {
amutake 0:a436e2063a3d 46 private:
amutake 0:a436e2063a3d 47 Producer* source;
amutake 0:a436e2063a3d 48 rtos::Mail<button_t, MAIL_BOX_SIZE>* mail_box;
amutake 0:a436e2063a3d 49 Mutex* mutex;
amutake 0:a436e2063a3d 50 button_t temporary[MAIL_BOX_SIZE];
amutake 0:a436e2063a3d 51 int temporary_size;
amutake 0:a436e2063a3d 52 bool paused;
amutake 0:a436e2063a3d 53 public:
amutake 0:a436e2063a3d 54 Sink(Producer* src, rtos::Mail<button_t, MAIL_BOX_SIZE>* box, Mutex* mut);
amutake 0:a436e2063a3d 55 void run();
amutake 0:a436e2063a3d 56 void resume();
amutake 0:a436e2063a3d 57 void pause();
amutake 0:a436e2063a3d 58 void restart(); // reset source
amutake 0:a436e2063a3d 59 void reset(Producer* src); // reset with new source
amutake 0:a436e2063a3d 60 };
amutake 0:a436e2063a3d 61
amutake 0:a436e2063a3d 62 class FLL
amutake 0:a436e2063a3d 63 {
amutake 0:a436e2063a3d 64 public:
amutake 0:a436e2063a3d 65 FLL(Producer* p);
amutake 0:a436e2063a3d 66 ~FLL();
amutake 0:a436e2063a3d 67 void press(button_t btn);
amutake 0:a436e2063a3d 68 void run();
amutake 0:a436e2063a3d 69 private:
amutake 0:a436e2063a3d 70 Producer *producer;
amutake 0:a436e2063a3d 71 DigitalOut* pin[BUTTON_NUM];
amutake 0:a436e2063a3d 72 int off[BUTTON_NUM];
amutake 0:a436e2063a3d 73 };
amutake 0:a436e2063a3d 74
amutake 0:a436e2063a3d 75 // Output reads the next button from mail box and press the button
amutake 0:a436e2063a3d 76 // It must be run per 1/60 sec
amutake 0:a436e2063a3d 77 class Output
amutake 0:a436e2063a3d 78 {
amutake 0:a436e2063a3d 79 private:
amutake 0:a436e2063a3d 80 rtos::Mail<button_t, MAIL_BOX_SIZE>* mail_box;
amutake 0:a436e2063a3d 81 FLL *fll;
amutake 0:a436e2063a3d 82 public:
amutake 0:a436e2063a3d 83 Output(rtos::Mail<button_t, MAIL_BOX_SIZE>* box, FLL *f);
amutake 0:a436e2063a3d 84 void run();
amutake 0:a436e2063a3d 85 };