Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: fll mbed-rtos mbed
fll.h
- Committer:
- amutake
- Date:
- 2015-02-14
- Revision:
- 8:d16a0fcc2735
- Parent:
- 7:61b4825304e2
- Child:
- 9:0d6631edfc32
File content as of revision 8:d16a0fcc2735:
// Frame Level Language
// interface
#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;
};
// 0 input and repeat given button sequence
class RepeaterSource : public Producer
{
private:
int i;
button_t* button_seq;
int size;
public:
RepeaterSource(button_t *bs, int s);
virtual button_t await();
};
// N inputs
class FoldFlow : public Producer
{
private:
Producer** sources;
int sources_size;
public:
FoldFlow(Producer **srcs, int srcs_size);
virtual button_t fold(button_t *bs, int bs_size) = 0;
virtual button_t await();
};
// 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);
// main function
void fll_run(Producer* producer);
