Skip to content

Commit

Permalink
ver.0.8.3 MATLED RUNモードの表示を上から下ではなく左から右に変更
Browse files Browse the repository at this point in the history
・元のMATLEDのコードと比べて確認したところ、上から下に表示するようにしてしまったのが間違いであることが判明。
左から右に表示するように修正。
・その他、リファクタリング少々。
  • Loading branch information
yhironaka committed Sep 21, 2015
1 parent 8828d43 commit 741b466
Show file tree
Hide file tree
Showing 4 changed files with 363 additions and 338 deletions.
46 changes: 33 additions & 13 deletions app_uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,28 +37,35 @@ MATLED SHOW 183C7EFFFF7E3C18
#include "uart.h"
#include "iap.h"

// フレームの全体長
#define LEN_DATA 1024

// フレーム総数
#define N_FRAME ((LEN_DATA - 8) / 10)
// ^ ^ struct Frameの大きさ
// | save_tagの大きさ

// SAVEデータ識別タグ
const char *save_tag = "MATLED01";

// ----- struct -----
// 1画面分のデータ
struct Frame {
char frame[8];
short waitms;
};

// Saveデータ全体 識別フラグ付き
struct Save_data {
char header[8];
struct Frame frame[N_FRAME];
};

//struct Frame* fr[N_FRAME];
//char g_data[LEN_DATA];

// Saveデータエリア初期化
void init_frame(struct Save_data *sd) {
struct Frame *fr = sd->frame;

// 識別フラグをコピー
memcpy(sd->header, save_tag, 8);

for (int i = 0; i < N_FRAME; i++) {
Expand All @@ -73,16 +80,22 @@ void loadFlash(char* buf, int len) {

boolean load(struct Save_data *sd) {
loadFlash((char *)sd, LEN_DATA);

// memcpy(sd, SAVED_FLASH, LEN_DATA);

if (startsWith(sd->header, save_tag)) {
println(save_tag);
return true;
}
init_frame(sd);
return false;
}

void save(struct Save_data *sd) {
saveFlash((char *) sd, LEN_DATA);
int save(struct Save_data *sd) {
// 識別フラグをコピー
memcpy(sd->header, save_tag, 8);

// データを保存
return saveFlash((char *) sd, LEN_DATA);
}

void show(const char *input_buf , char *data) {
Expand Down Expand Up @@ -132,8 +145,8 @@ void set_anim(const char *input_buf , char *data , struct Frame *fr) {
int n = indexOf(pbuf, ' ');
if (n >= 0) {
pbuf += n + 1; // 表示データ取得
decode_top2bottom(pbuf, fr[nf].frame);
decode_top2bottom(pbuf, data); // 停止時の画面にも表示
decode_left2right(pbuf, fr[nf].frame);
decode_left2right(pbuf, data); // 停止時の画面にも表示
n = indexOf(pbuf, ' ');
int nw = 100;
if (n >= 0) {
Expand All @@ -152,6 +165,7 @@ void app_uart() {
int mode = 0; // 0: 停止状態 1: RUN状態
int cnt = 0; // RUN時のwaitカウンタ
int nframe = 0; // 実行中のフレーム番号
int ret = 0; // コマンド実行結果
char data[8]; // 表示バッファ

static struct Save_data sd;
Expand Down Expand Up @@ -190,12 +204,12 @@ void app_uart() {
println("STOP");
} else if (startsWith(input_buf, "MATLED SAVE")) {
mode = 0;
save(&sd);
println("SAVE");
ret = save(&sd);
xprintf("SAVE %d\n", ret);
} else if (startsWith(input_buf, "MATLED LOAD")) {
mode = 0;
load(&sd);
println("LOAD");
ret = load(&sd);
xprintf("LOAD %d\n", 1 - ret);
} else if (startsWith(input_buf, "MATLED BREAK")) {
println("BREAK");
return;
Expand All @@ -211,13 +225,19 @@ void app_uart() {
}
if (mode == 0) {
set_matrix(data);
} else {
} else if(mode == 1) {
set_matrix(fr[nframe].frame);
WAIT(1);
cnt++;
if (cnt >= fr[nframe].waitms) { // 待ち時間を過ぎたら
cnt = 0;

// 次に接続されているマトリクスに送るデータ
xprintf("MATLED SHOW ");
for (int j = 0 ; j < 8 ; j++) xprintf("%02X", fr[nframe].frame[j]);
xprintf("\n");

// 次のフレームに切り替え
nframe++;
if (nframe == N_FRAME || fr[nframe].waitms == 0) nframe = 0; // ループして最初から
}
Expand Down
34 changes: 17 additions & 17 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,6 @@ int g_bkuxbtn = 0;
int g_timenobtn = 0;
volatile int g_systick;

boolean ux_state() {
return GPIO1MASKED[1 << 4] == 0;
}

int get_systick() {
return g_systick;
}
Expand All @@ -35,6 +31,15 @@ void set_systick(int systick) {
g_systick = systick;
}

void ux_init() {
IOCON_PIO1_4 = 0x000000d0;
GPIO1DIR &= ~(1 << 4);
IOCON_PIO1_5 = 0x000000d0;
GPIO1DIR |= 1 << 5;

psg_init();
}

void ux_tick() {
int btn = ux_state();
if (btn && !g_bkuxbtn) {
Expand All @@ -43,6 +48,10 @@ void ux_tick() {
g_bkuxbtn = btn;
}

boolean ux_state() {
return GPIO1MASKED[1 << 4] == 0;
}

boolean ux_btn() {
if (g_uxbtn) {
g_uxbtn = 0;
Expand All @@ -51,24 +60,15 @@ boolean ux_btn() {
return 0;
}

void ux_init() {
IOCON_PIO1_4 = 0x000000d0;
GPIO1DIR &= ~(1 << 4);
IOCON_PIO1_5 = 0x000000d0;
GPIO1DIR |= 1 << 5;

psg_init();
}

void initUART() {
void uart_init() {
uart0_init();
xdev_out(uart0_putc);
xdev_in(uart0_getc);

xprintf("Ichigo Dot S Ver.%s\n" , VERSION_NUM);
}

void InitSysTick(int hz) {
void SysTick_init(int hz) {
SYST_RVR = SYSCLK / hz - 1;
SYST_CSR = 0x07;
}
Expand Down Expand Up @@ -117,8 +117,8 @@ void no_sleep() {
int main() {
matrixled_init();
ux_init();
InitSysTick(12000); // 12,000,000Hz 12,000 -> 10 = 1ms
initUART();
SysTick_init(12000); // 12,000,000Hz 12,000 -> 10 = 1ms
uart_init();

for (;;) {
if (!ux_state()) break;
Expand Down
2 changes: 1 addition & 1 deletion main.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ main.h

#include "utils.h"

#define VERSION_NUM "0.8.2"
#define VERSION_NUM "0.8.3"

#define TYPE 0 // 通常
//#define TYPE 1 // マトリクスLEDの位置、間違えた時
Expand Down
Loading

0 comments on commit 741b466

Please sign in to comment.