sound volume configurable
This commit is contained in:
@ -84,27 +84,22 @@ void buttonsExec(void *handle) {
|
||||
|
||||
if (buttonsMoveLeftPressed()) {
|
||||
stoneMoveLeft();
|
||||
soundCtrl(SOUND_MOTION);
|
||||
buttonPressed = 1;
|
||||
}
|
||||
if (buttonsMoveRightPressed()) {
|
||||
stoneMoveRight();
|
||||
soundCtrl(SOUND_MOTION);
|
||||
buttonPressed = 1;
|
||||
}
|
||||
if (buttonsRotateLeftPressed()) {
|
||||
stoneRotateLeft();
|
||||
soundCtrl(SOUND_MOTION);
|
||||
buttonPressed = 1;
|
||||
}
|
||||
if (buttonsRotateRightPressed()) {
|
||||
stoneRotateRight();
|
||||
soundCtrl(SOUND_MOTION);
|
||||
buttonPressed = 1;
|
||||
}
|
||||
if (buttonsMoveDownPressed()) {
|
||||
stoneMoveDown();
|
||||
soundCtrl(SOUND_MOTION);
|
||||
buttonPressed = 1;
|
||||
}
|
||||
|
||||
|
@ -7,9 +7,11 @@
|
||||
#include "eeprom.h"
|
||||
#include "display.h"
|
||||
#include "shapes.h"
|
||||
#include "sound.h"
|
||||
|
||||
|
||||
static bool configChanged = false;
|
||||
static bool muted = false;
|
||||
|
||||
static void configHandleFlash() {
|
||||
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) {
|
||||
@ -62,7 +83,14 @@ void configExec(void *handle) {
|
||||
|
||||
miniCanvasClear();
|
||||
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()) {
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include "spi.h"
|
||||
|
||||
|
||||
#define MAGIC 0xb001
|
||||
#define MAGIC 0xb002
|
||||
#define HIGHSCORE_ADDR 0x00
|
||||
#define DUMMY 0x00
|
||||
#define CMD_READ 0b00000011
|
||||
@ -18,6 +18,7 @@ typedef struct {
|
||||
uint16_t highScore;
|
||||
uint8_t flashColor;
|
||||
uint8_t brightness;
|
||||
uint8_t amplitude;
|
||||
} t_configBlock;
|
||||
|
||||
typedef union {
|
||||
@ -93,3 +94,11 @@ void eepromSetBrightness(uint8_t 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 eepromCommit();
|
||||
uint16_t eepromReadHighScore();
|
||||
void eepromSetHighScore(uint16_t v);
|
||||
uint8_t eepromReadFlashColor();
|
||||
void eepromSetFlashColor(uint8_t v);
|
||||
uint8_t eepromReadBrightness();
|
||||
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 {
|
||||
e_BootWait,
|
||||
e_Start, e_NewStone, e_Down, e_DownDelay,
|
||||
e_ClearRowInit, e_ClearRowNext, e_ClearRowCheck, e_ClearRowFlash, e_ClearRowFlashDelay, e_ClearRowWipe,
|
||||
e_GameOver, e_GameOverFill, e_GameOverWipe, e_GameOverDelay
|
||||
} state_t;
|
||||
|
||||
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 rowIndex;
|
||||
static uint16_t proceedDelay;
|
||||
@ -46,6 +48,12 @@ void gameExec(void *handle) {
|
||||
#endif
|
||||
// --- engine begin -------------------------------------------------------
|
||||
switch (state) {
|
||||
case e_BootWait:
|
||||
bootWaitTime -= 1;
|
||||
if (bootWaitTime == 0) {
|
||||
state = e_Start;
|
||||
}
|
||||
break;
|
||||
// --- phase: game --------------------------------------------------------
|
||||
case e_Start:
|
||||
canvasClear();
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "display.h"
|
||||
#include "eeprom.h"
|
||||
#include "config.h"
|
||||
#include "sound.h"
|
||||
|
||||
|
||||
int main() {
|
||||
@ -34,6 +35,7 @@ int main() {
|
||||
displayInit();
|
||||
myRandInit();
|
||||
canvasInit();
|
||||
soundInit();
|
||||
buttonsInit();
|
||||
|
||||
if (isConfigMode()) {
|
||||
|
@ -1,10 +1,12 @@
|
||||
#include <stdint.h>
|
||||
#include "sound.h"
|
||||
#include "spi.h"
|
||||
#include "eeprom.h"
|
||||
|
||||
|
||||
|
||||
void soundInit() {
|
||||
soundCtrl(SOUND_COMMAND + SOUND_SUBCMD_AMPLITUDE + eepromReadAmplitude());
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user