sound volume configurable
This commit is contained in:
parent
f9b63c06fe
commit
faf75e158a
@ -84,27 +84,22 @@ void buttonsExec(void *handle) {
|
|||||||
|
|
||||||
if (buttonsMoveLeftPressed()) {
|
if (buttonsMoveLeftPressed()) {
|
||||||
stoneMoveLeft();
|
stoneMoveLeft();
|
||||||
soundCtrl(SOUND_MOTION);
|
|
||||||
buttonPressed = 1;
|
buttonPressed = 1;
|
||||||
}
|
}
|
||||||
if (buttonsMoveRightPressed()) {
|
if (buttonsMoveRightPressed()) {
|
||||||
stoneMoveRight();
|
stoneMoveRight();
|
||||||
soundCtrl(SOUND_MOTION);
|
|
||||||
buttonPressed = 1;
|
buttonPressed = 1;
|
||||||
}
|
}
|
||||||
if (buttonsRotateLeftPressed()) {
|
if (buttonsRotateLeftPressed()) {
|
||||||
stoneRotateLeft();
|
stoneRotateLeft();
|
||||||
soundCtrl(SOUND_MOTION);
|
|
||||||
buttonPressed = 1;
|
buttonPressed = 1;
|
||||||
}
|
}
|
||||||
if (buttonsRotateRightPressed()) {
|
if (buttonsRotateRightPressed()) {
|
||||||
stoneRotateRight();
|
stoneRotateRight();
|
||||||
soundCtrl(SOUND_MOTION);
|
|
||||||
buttonPressed = 1;
|
buttonPressed = 1;
|
||||||
}
|
}
|
||||||
if (buttonsMoveDownPressed()) {
|
if (buttonsMoveDownPressed()) {
|
||||||
stoneMoveDown();
|
stoneMoveDown();
|
||||||
soundCtrl(SOUND_MOTION);
|
|
||||||
buttonPressed = 1;
|
buttonPressed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,9 +7,11 @@
|
|||||||
#include "eeprom.h"
|
#include "eeprom.h"
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "shapes.h"
|
#include "shapes.h"
|
||||||
|
#include "sound.h"
|
||||||
|
|
||||||
|
|
||||||
static bool configChanged = false;
|
static bool configChanged = false;
|
||||||
|
static bool muted = false;
|
||||||
|
|
||||||
static void configHandleFlash() {
|
static void configHandleFlash() {
|
||||||
uint8_t color = eepromReadFlashColor();
|
uint8_t color = eepromReadFlashColor();
|
||||||
@ -50,7 +52,26 @@ static void configHandleBrightness() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void (*configHandler[])(void) = { configHandleFlash, configHandleResetHighScore, configHandleBrightness };
|
static void configHandleAmplitude() {
|
||||||
|
displaySetValue(eepromReadAmplitude());
|
||||||
|
if (muted) {
|
||||||
|
muted = false;
|
||||||
|
soundCtrl(SOUND_START);
|
||||||
|
soundCtrl(SOUND_UNMUTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buttonsConfig2Pressed()) {
|
||||||
|
configChanged = true;
|
||||||
|
uint8_t amplitude = eepromReadAmplitude() + 1;
|
||||||
|
if (amplitude > 15) {
|
||||||
|
amplitude = 0;
|
||||||
|
}
|
||||||
|
eepromSetAmplitude(amplitude);
|
||||||
|
soundCtrl(SOUND_COMMAND + SOUND_SUBCMD_AMPLITUDE + amplitude);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void (*configHandler[])(void) = { configHandleFlash, configHandleResetHighScore, configHandleBrightness,configHandleAmplitude };
|
||||||
|
|
||||||
|
|
||||||
void configExec(void *handle) {
|
void configExec(void *handle) {
|
||||||
@ -62,7 +83,14 @@ void configExec(void *handle) {
|
|||||||
|
|
||||||
miniCanvasClear();
|
miniCanvasClear();
|
||||||
canvasClear();
|
canvasClear();
|
||||||
miniCanvasSetPixel(configState, 0, _red);
|
if (! muted) {
|
||||||
|
muted = true;
|
||||||
|
soundCtrl(SOUND_MUTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t row = configState / 3;
|
||||||
|
uint8_t column = configState % 3;
|
||||||
|
miniCanvasSetPixel(column, row, _red);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buttonsConfig1Pressed()) {
|
if (buttonsConfig1Pressed()) {
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
|
|
||||||
|
|
||||||
#define MAGIC 0xb001
|
#define MAGIC 0xb002
|
||||||
#define HIGHSCORE_ADDR 0x00
|
#define HIGHSCORE_ADDR 0x00
|
||||||
#define DUMMY 0x00
|
#define DUMMY 0x00
|
||||||
#define CMD_READ 0b00000011
|
#define CMD_READ 0b00000011
|
||||||
@ -18,6 +18,7 @@ typedef struct {
|
|||||||
uint16_t highScore;
|
uint16_t highScore;
|
||||||
uint8_t flashColor;
|
uint8_t flashColor;
|
||||||
uint8_t brightness;
|
uint8_t brightness;
|
||||||
|
uint8_t amplitude;
|
||||||
} t_configBlock;
|
} t_configBlock;
|
||||||
|
|
||||||
typedef union {
|
typedef union {
|
||||||
@ -93,3 +94,11 @@ void eepromSetBrightness(uint8_t v) {
|
|||||||
buf.v.brightness = v;
|
buf.v.brightness = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t eepromReadAmplitude() {
|
||||||
|
return buf.v.amplitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
void eepromSetAmplitude(uint8_t v) {
|
||||||
|
buf.v.amplitude = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -5,13 +5,15 @@
|
|||||||
|
|
||||||
|
|
||||||
void eepromInit();
|
void eepromInit();
|
||||||
|
void eepromCommit();
|
||||||
uint16_t eepromReadHighScore();
|
uint16_t eepromReadHighScore();
|
||||||
void eepromSetHighScore(uint16_t v);
|
void eepromSetHighScore(uint16_t v);
|
||||||
uint8_t eepromReadFlashColor();
|
uint8_t eepromReadFlashColor();
|
||||||
void eepromSetFlashColor(uint8_t v);
|
void eepromSetFlashColor(uint8_t v);
|
||||||
uint8_t eepromReadBrightness();
|
uint8_t eepromReadBrightness();
|
||||||
void eepromSetBrightness(uint8_t v);
|
void eepromSetBrightness(uint8_t v);
|
||||||
void eepromCommit();
|
uint8_t eepromReadAmplitude();
|
||||||
|
void eepromSetAmplitude(uint8_t v);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,13 +24,15 @@ static uint16_t delayFactor(uint16_t level) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
e_BootWait,
|
||||||
e_Start, e_NewStone, e_Down, e_DownDelay,
|
e_Start, e_NewStone, e_Down, e_DownDelay,
|
||||||
e_ClearRowInit, e_ClearRowNext, e_ClearRowCheck, e_ClearRowFlash, e_ClearRowFlashDelay, e_ClearRowWipe,
|
e_ClearRowInit, e_ClearRowNext, e_ClearRowCheck, e_ClearRowFlash, e_ClearRowFlashDelay, e_ClearRowWipe,
|
||||||
e_GameOver, e_GameOverFill, e_GameOverWipe, e_GameOverDelay
|
e_GameOver, e_GameOverFill, e_GameOverWipe, e_GameOverDelay
|
||||||
} state_t;
|
} state_t;
|
||||||
|
|
||||||
void gameExec(void *handle) {
|
void gameExec(void *handle) {
|
||||||
static state_t state = e_Start;
|
static state_t state = e_BootWait;
|
||||||
|
static uint16_t bootWaitTime = 2500 / GAME_CYCLE_TIME;
|
||||||
static uint8_t gameOverDelay;
|
static uint8_t gameOverDelay;
|
||||||
static uint8_t rowIndex;
|
static uint8_t rowIndex;
|
||||||
static uint16_t proceedDelay;
|
static uint16_t proceedDelay;
|
||||||
@ -46,6 +48,12 @@ void gameExec(void *handle) {
|
|||||||
#endif
|
#endif
|
||||||
// --- engine begin -------------------------------------------------------
|
// --- engine begin -------------------------------------------------------
|
||||||
switch (state) {
|
switch (state) {
|
||||||
|
case e_BootWait:
|
||||||
|
bootWaitTime -= 1;
|
||||||
|
if (bootWaitTime == 0) {
|
||||||
|
state = e_Start;
|
||||||
|
}
|
||||||
|
break;
|
||||||
// --- phase: game --------------------------------------------------------
|
// --- phase: game --------------------------------------------------------
|
||||||
case e_Start:
|
case e_Start:
|
||||||
canvasClear();
|
canvasClear();
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "eeprom.h"
|
#include "eeprom.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "sound.h"
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
@ -34,6 +35,7 @@ int main() {
|
|||||||
displayInit();
|
displayInit();
|
||||||
myRandInit();
|
myRandInit();
|
||||||
canvasInit();
|
canvasInit();
|
||||||
|
soundInit();
|
||||||
buttonsInit();
|
buttonsInit();
|
||||||
|
|
||||||
if (isConfigMode()) {
|
if (isConfigMode()) {
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void soundInit() {
|
void soundInit() {
|
||||||
|
soundCtrl(SOUND_COMMAND + SOUND_SUBCMD_AMPLITUDE + eepromReadAmplitude());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ ASFLAGS=$(COMMONFLAGS) -D__ASSEMBLER__
|
|||||||
|
|
||||||
LDFLAGS=-mmcu=$(MCU) -L $(TOOLCHAIN_PREFIX)/include
|
LDFLAGS=-mmcu=$(MCU) -L $(TOOLCHAIN_PREFIX)/include
|
||||||
|
|
||||||
$(ARTIFACT).elf: main.o scheduler.o spi.o spi_init.o sequencer.o melody_tetris.o melody_tusch1.o psg.o mute.o melody_pling.o
|
$(ARTIFACT).elf: main.o scheduler.o spi.o spi_init.o sequencer.o melody_tetris.o melody_tusch1.o psg.o mute.o melody_pling.o config.o
|
||||||
$(CC) -o $@ $(LDFLAGS) $^
|
$(CC) -o $@ $(LDFLAGS) $^
|
||||||
$(OBJDUMP) -D $(ARTIFACT).elf > $(ARTIFACT).txt
|
$(OBJDUMP) -D $(ARTIFACT).elf > $(ARTIFACT).txt
|
||||||
|
|
||||||
|
19
sound-driver/config.c
Normal file
19
sound-driver/config.c
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t amplitude;
|
||||||
|
} config_t;
|
||||||
|
|
||||||
|
config_t config;
|
||||||
|
|
||||||
|
|
||||||
|
void configSetAmplitude(uint8_t v) {
|
||||||
|
config.amplitude = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t configGetAmplitude() {
|
||||||
|
return config.amplitude;
|
||||||
|
}
|
||||||
|
|
11
sound-driver/config.h
Normal file
11
sound-driver/config.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef _CONFIG_H_
|
||||||
|
#define _CONFIG_H_
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
void configSetAmplitude(uint8_t v);
|
||||||
|
uint8_t configGetAmplitude();
|
||||||
|
|
||||||
|
|
||||||
|
#endif // _CONFIG_H_
|
@ -1,8 +1,11 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <sys/param.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include "psg.h"
|
#include "psg.h"
|
||||||
#include "sequencer.h"
|
#include "sequencer.h"
|
||||||
#include "scheduler.h"
|
#include "scheduler.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
const t_tone plingVoice1[] = {
|
const t_tone plingVoice1[] = {
|
||||||
{ .octave = e_O_5, .note = e_C, .length = e_L_1_16, .legato = false, .staccato = false },
|
{ .octave = e_O_5, .note = e_C, .length = e_L_1_16, .legato = false, .staccato = false },
|
||||||
@ -18,13 +21,15 @@ const t_tone plingVoice1[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
t_melodies pling = {
|
t_melodies pling = {
|
||||||
.melodies = { { .amplitude = 12, .tones = plingVoice1 } },
|
.melodies = { { .tones = plingVoice1 } },
|
||||||
|
.amplitude = 12,
|
||||||
.numOfMelodies = 1,
|
.numOfMelodies = 1,
|
||||||
.pace = 200,
|
.pace = 200,
|
||||||
.chip = 1
|
.chip = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
void playPling() {
|
void playPling() {
|
||||||
|
pling.amplitude = MIN((configGetAmplitude() + 4), 15);
|
||||||
sequencerPlayMelodies(&pling);
|
sequencerPlayMelodies(&pling);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <sys/param.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include "psg.h"
|
#include "psg.h"
|
||||||
#include "sequencer.h"
|
#include "sequencer.h"
|
||||||
#include "scheduler.h"
|
#include "scheduler.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -924,7 +926,8 @@ const t_tone voice3[] = {
|
|||||||
|
|
||||||
#define INITIAL_PACE 160
|
#define INITIAL_PACE 160
|
||||||
t_melodies tetrisTheme = {
|
t_melodies tetrisTheme = {
|
||||||
.melodies = { { .amplitude = 8, .tones = voice1 }, { .amplitude = 8, .tones = voice2 }, { .amplitude = 8, .tones = voice3 } },
|
.melodies = { { .tones = voice1 }, { .tones = voice2 }, { .tones = voice3 } },
|
||||||
|
.amplitude = 8,
|
||||||
.numOfMelodies = 3,
|
.numOfMelodies = 3,
|
||||||
.pace = INITIAL_PACE,
|
.pace = INITIAL_PACE,
|
||||||
.chip = 0
|
.chip = 0
|
||||||
@ -932,6 +935,7 @@ t_melodies tetrisTheme = {
|
|||||||
|
|
||||||
void playMelodyTetris() {
|
void playMelodyTetris() {
|
||||||
tetrisTheme.pace = INITIAL_PACE; // reset to start value each time
|
tetrisTheme.pace = INITIAL_PACE; // reset to start value each time
|
||||||
|
tetrisTheme.amplitude = MIN((configGetAmplitude() + 4), 15);
|
||||||
sequencerPlayMelodies(&tetrisTheme);
|
sequencerPlayMelodies(&tetrisTheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,5 +5,6 @@
|
|||||||
void playMelodyTetris();
|
void playMelodyTetris();
|
||||||
void stopMelodyTetris();
|
void stopMelodyTetris();
|
||||||
void playMelodyTetrisFaster();
|
void playMelodyTetrisFaster();
|
||||||
|
void playMelodyTetrisAmplitude(uint8_t a);
|
||||||
|
|
||||||
#endif // _MELODY_TETRIS_H_
|
#endif // _MELODY_TETRIS_H_
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <sys/param.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include "psg.h"
|
#include "psg.h"
|
||||||
#include "sequencer.h"
|
#include "sequencer.h"
|
||||||
#include "scheduler.h"
|
#include "scheduler.h"
|
||||||
#include "melody_tetris.h"
|
#include "config.h"
|
||||||
|
|
||||||
const t_tone tusch1voice1[] = {
|
const t_tone tusch1voice1[] = {
|
||||||
{ .octave = e_O_5, .note = e_C, .length = e_L_1_4, .legato = false, .staccato = true },
|
{ .octave = e_O_5, .note = e_C, .length = e_L_1_4, .legato = false, .staccato = true },
|
||||||
@ -72,15 +73,16 @@ const t_tone tusch1voice3[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
t_melodies tusch1 = {
|
t_melodies tusch1 = {
|
||||||
.melodies = { { .amplitude = 12, .tones = tusch1voice1 }, { .amplitude = 12, .tones = tusch1voice2 }, { .amplitude = 12, .tones = tusch1voice3 } },
|
.melodies = { { .tones = tusch1voice1 }, { .tones = tusch1voice2 }, { .tones = tusch1voice3 } },
|
||||||
|
.amplitude = 12,
|
||||||
.numOfMelodies = 3,
|
.numOfMelodies = 3,
|
||||||
.pace = 200,
|
.pace = 200,
|
||||||
.chip = 1
|
.chip = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
void playTusch1() {
|
void playTusch1() {
|
||||||
|
tusch1.amplitude = MIN((configGetAmplitude() + 4), 15);
|
||||||
sequencerPlayMelodies(&tusch1);
|
sequencerPlayMelodies(&tusch1);
|
||||||
// playMelodyTetrisFaster();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ void sequencerExec(void *handle) {
|
|||||||
if (melody->tones[melody->idx].length == e_L_EndMark) {
|
if (melody->tones[melody->idx].length == e_L_EndMark) {
|
||||||
melody->idx = 0;
|
melody->idx = 0;
|
||||||
}
|
}
|
||||||
psgPlayTone(melodies->chip, channel, melody->amplitude, melody->tones[melody->idx].octave, melody->tones[melody->idx].note);
|
psgPlayTone(melodies->chip, channel, melodies->amplitude, melody->tones[melody->idx].octave, melody->tones[melody->idx].note);
|
||||||
melody->lengthCnt = (melody->tones[melody->idx].staccato) ?
|
melody->lengthCnt = (melody->tones[melody->idx].staccato) ?
|
||||||
(calcLength(melodies, melody->tones[melody->idx].length) / 2) :
|
(calcLength(melodies, melody->tones[melody->idx].length) / 2) :
|
||||||
calcLength(melodies, melody->tones[melody->idx].length);
|
calcLength(melodies, melody->tones[melody->idx].length);
|
||||||
|
@ -44,7 +44,6 @@ typedef struct {
|
|||||||
uint16_t idx;
|
uint16_t idx;
|
||||||
uint16_t lengthCnt;
|
uint16_t lengthCnt;
|
||||||
t_sequencerState state;
|
t_sequencerState state;
|
||||||
uint8_t amplitude;
|
|
||||||
const t_tone *tones;
|
const t_tone *tones;
|
||||||
} t_melody;
|
} t_melody;
|
||||||
|
|
||||||
@ -53,6 +52,7 @@ typedef struct {
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t slotMask;
|
uint8_t slotMask;
|
||||||
uint8_t chip;
|
uint8_t chip;
|
||||||
|
uint8_t amplitude;
|
||||||
uint8_t taskId;
|
uint8_t taskId;
|
||||||
uint16_t quarterLength;
|
uint16_t quarterLength;
|
||||||
uint8_t numOfMelodies;
|
uint8_t numOfMelodies;
|
||||||
|
@ -8,7 +8,9 @@
|
|||||||
#define SOUND_GAMEOVER 0x08
|
#define SOUND_GAMEOVER 0x08
|
||||||
#define SOUND_FANFARE 0x10
|
#define SOUND_FANFARE 0x10
|
||||||
#define SOUND_LOCK 0x20
|
#define SOUND_LOCK 0x20
|
||||||
#define SOUND_MOTION 0x40
|
#define SOUND_PLING 0x40
|
||||||
#define SOUND_PLING 0x80
|
#define SOUND_COMMAND 0x80
|
||||||
|
|
||||||
|
#define SOUND_SUBCMD_AMPLITUDE 0x40
|
||||||
|
|
||||||
#endif // _SOUND_CODES_H_
|
#endif // _SOUND_CODES_H_
|
||||||
|
@ -6,12 +6,21 @@
|
|||||||
receive_isr:
|
receive_isr:
|
||||||
bit #UCB0RXIFG, &UC0IFG
|
bit #UCB0RXIFG, &UC0IFG
|
||||||
jz receive_isr_no_data
|
jz receive_isr_no_data
|
||||||
|
bit #SOUND_COMMAND, &cmd
|
||||||
|
jnz receive_isr_no_data
|
||||||
bis UCB0RXBUF, &cmd
|
bis UCB0RXBUF, &cmd
|
||||||
receive_isr_no_data:
|
receive_isr_no_data:
|
||||||
reti
|
reti
|
||||||
|
|
||||||
.global spiCmdHandler
|
.global spiCmdHandler
|
||||||
spiCmdHandler:
|
spiCmdHandler:
|
||||||
|
spiCmdHandler_0:
|
||||||
|
bit #SOUND_COMMAND, &cmd
|
||||||
|
jz spiCmdHandler_1
|
||||||
|
;; insert a call here
|
||||||
|
call #spiCommandDispatcher
|
||||||
|
mov.b #0, &cmd
|
||||||
|
ret
|
||||||
spiCmdHandler_1:
|
spiCmdHandler_1:
|
||||||
bit #SOUND_MUTE, &cmd
|
bit #SOUND_MUTE, &cmd
|
||||||
jz spiCmdHandler_2
|
jz spiCmdHandler_2
|
||||||
@ -44,11 +53,6 @@ spiCmdHandler_6:
|
|||||||
;; insert a call here
|
;; insert a call here
|
||||||
bic #SOUND_LOCK, &cmd
|
bic #SOUND_LOCK, &cmd
|
||||||
spiCmdHandler_7:
|
spiCmdHandler_7:
|
||||||
bit #SOUND_MOTION, &cmd
|
|
||||||
jz spiCmdHandler_8
|
|
||||||
;; insert a call here
|
|
||||||
bic #SOUND_MOTION, &cmd
|
|
||||||
spiCmdHandler_8:
|
|
||||||
bit #SOUND_PLING, &cmd
|
bit #SOUND_PLING, &cmd
|
||||||
jz spiCmdHandler_end
|
jz spiCmdHandler_end
|
||||||
call #playPling
|
call #playPling
|
||||||
|
@ -4,9 +4,10 @@
|
|||||||
#include "scheduler.h"
|
#include "scheduler.h"
|
||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
#include "soundCodes.h"
|
#include "soundCodes.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
uint8_t cmd;
|
volatile uint8_t cmd;
|
||||||
|
|
||||||
void spiInit() {
|
void spiInit() {
|
||||||
// SPI slave
|
// SPI slave
|
||||||
@ -25,7 +26,14 @@ void spiInit() {
|
|||||||
UC0IE |= UCB0RXIE;
|
UC0IE |= UCB0RXIE;
|
||||||
|
|
||||||
cmd = SOUND_IDLE;
|
cmd = SOUND_IDLE;
|
||||||
schAdd(spiCmdHandler, NULL, 0, 100);
|
schAdd(spiCmdHandler, NULL, 0, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void spiCommandDispatcher() {
|
||||||
|
cmd &= ~SOUND_COMMAND;
|
||||||
|
|
||||||
|
if (cmd & SOUND_SUBCMD_AMPLITUDE) {
|
||||||
|
cmd &= ~SOUND_SUBCMD_AMPLITUDE;
|
||||||
|
configSetAmplitude(cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user