Shohei Yasutake / Mbed 2 deprecated koibumi2000

Dependencies:   fll mbed-rtos mbed

fll.h

Committer:
amutake
Date:
2015-02-16
Revision:
18:c5d3a4d6e8e5
Parent:
11:21b3b0494baa
Child:
22:b19dc0387288
Child:
32:fdf9f6fca8a2

File content as of revision 18:c5d3a4d6e8e5:

// Frame Level Language
// interface

#pragma once

#include "mbed.h"
#include "rtos.h"
#include <stdint.h>

// buttons represented by 16 bit
#define R1 0x0001
#define TRIANGLE 0x0002
#define CIRCLE 0x0004
#define CROSS 0x0008
#define SQUARE 0x0010
#define R2 0x0020
#define START 0x0040
#define ANALOG 0x0080
#define SELECT 0x0100
#define L2 0x0200
#define UP 0x0400
#define DOWN 0x0800
#define LEFT 0x1000
#define RIGHT 0x2000
#define L1 0x4000

#define MAIL_BOX_SIZE 16

#define FRAME (1.0 / 60) // 1 frame (sec)

typedef uint16_t button_t;

// Base object for stream network
class Producer
{
public:
    virtual button_t await() = 0;
    virtual bool is_finished() = 0;
};

// Sink is the end of button stream network
// It sends next button to Output object through rtos::Mail
class Sink
{
private:
    Producer* source;
    rtos::Mail<button_t, MAIL_BOX_SIZE>* mail_box;
    Mutex* mutex;
public:
    Sink(Producer* src, rtos::Mail<button_t, MAIL_BOX_SIZE>* box, Mutex* mut);
    void run();
    void reset(Producer* src);
};

// Output reads the next button from mail box and press the button
// It must be run per 1/60 sec
class Output
{
private:
    rtos::Mail<button_t, MAIL_BOX_SIZE>* mail_box;
public:
    Output(rtos::Mail<button_t, MAIL_BOX_SIZE>* box);
    void run();
};

// tells dualshock2 circuit which button is pressed
void press(button_t btn);

// init function
void fll_init();

// main function
void fll_run(Producer* producer);