Associate an ID to each set of prompts played by Function Switches so that if the ID is present in the prompts queue, it is not queued again.

This commit is contained in:
bsongis
2012-08-27 13:24:45 +00:00
parent 9960e84d2d
commit 77571bd9cd
12 changed files with 192 additions and 148 deletions
+14 -3
View File
@@ -411,6 +411,16 @@ void AudioQueue::pause(uint8_t tLen)
play(0, 0, tLen); // a pause
}
bool AudioQueue::isPlaying(uint8_t id)
{
for (uint8_t i=0; i<AUDIO_QUEUE_LENGTH; i++) {
AudioFragment & fragment = fragments[i];
if (fragment.id == id)
return true;
}
return false;
}
#ifndef SIMU
extern OS_MutexID audioMutex;
#endif
@@ -456,7 +466,7 @@ void AudioQueue::play(uint8_t tFreq, uint8_t tLen, uint8_t tPause, uint8_t tFlag
CoLeaveMutexSection(audioMutex);
}
void AudioQueue::playFile(const char *filename, uint8_t flags)
void AudioQueue::playFile(const char *filename, uint8_t flags, uint8_t id)
{
#ifdef SIMU
printf("playFile(\"%s\")\n", filename); fflush(stdout);
@@ -473,6 +483,7 @@ void AudioQueue::playFile(const char *filename, uint8_t flags)
memset(&fragment, 0, sizeof(fragment));
strcpy(fragment.file, filename);
fragment.repeat = flags & 0x0f;
fragment.id = id;
if (flags & PLAY_NOW)
prioIdx = widx;
widx = next_widx;
@@ -666,7 +677,7 @@ void audioEvent(uint8_t e, uint8_t f)
}
}
void pushPrompt(uint16_t prompt)
void pushPrompt(uint16_t prompt, uint8_t id)
{
#if defined(SDCARD)
@@ -677,7 +688,7 @@ void pushPrompt(uint16_t prompt)
prompt /= 10;
}
audioQueue.playFile(filename);
audioQueue.playFile(filename, id);
#endif
}
+13 -2
View File
@@ -47,6 +47,7 @@ class ToneFragment {
uint8_t pause;
uint8_t repeat;
int8_t freqIncr;
uint8_t id;
};
class AudioFragment : public ToneFragment {
@@ -72,10 +73,12 @@ class AudioQueue {
void play(uint8_t tFreq, uint8_t tLen, uint8_t tPause, uint8_t tFlags=0, int8_t tFreqIncr=0);
void playFile(const char *filename, uint8_t tFlags=0);
void playFile(const char *filename, uint8_t flags=0, uint8_t id=0);
void pause(uint8_t tLen);
bool isPlaying(uint8_t id);
bool busy()
{
#ifdef SIMU
@@ -134,6 +137,14 @@ void audioEvent(uint8_t e, uint8_t f=BEEP_DEFAULT_FREQ);
#define AUDIO_HEARTBEAT()
extern void pushPrompt(uint16_t prompt);
extern void pushPrompt(uint16_t prompt, uint8_t id=0);
#define PLAY_FUNCTION(x, ...) void x(__VA_ARGS__, uint8_t id)
#define PUSH_PROMPT(p) pushPrompt((p), id)
#define PLAY_NUMBER(n, u, a) playNumber((n), (u), (a), id)
#define PLAY_DURATION(d) playDuration((d), id)
#define IS_PLAYING(id) audioQueue.isPlaying((id))
#define PLAY_VALUE(v, id) playValue((v), (id))
#define PLAY_FILE(f, id) audioQueue.playFile((f), (id))
#endif
+4 -2
View File
@@ -166,8 +166,9 @@ ISR(TIMER4_COMPA_vect) //Every 0.5ms
}
#endif
void pushPrompt(uint16_t prompt)
void pushPrompt(uint16_t prompt, uint8_t id)
{
/* TODO id */
somo14playlist[somo14WIdx] = prompt;
somo14WIdx = (somo14WIdx + 1) % QUEUE_LENGTH;
cli();
@@ -175,8 +176,9 @@ void pushPrompt(uint16_t prompt)
sei();
}
bool isPlaying()
bool isPlaying(uint8_t id)
{
/* TODO id */
#if defined(SIMU)
return false;
#else
+10 -3
View File
@@ -34,7 +34,14 @@
#define PROMPT_SYSTEM_BASE 230
#define PROMPT_CUSTOM_BASE 256
#define pushCustomPrompt(p) pushPrompt(PROMPT_CUSTOM_BASE+(p))
extern void pushPrompt(uint16_t prompt);
extern bool isPlaying();
extern void pushPrompt(uint16_t prompt, uint8_t id=0);
extern bool isPlaying(uint8_t id);
#define PLAY_FUNCTION(x, ...) void x(__VA_ARGS__, uint8_t id)
#define PUSH_PROMPT(p) pushPrompt((p), id)
#define PUSH_CUSTOM_PROMPT(p, id) pushPrompt(PROMPT_CUSTOM_BASE+(p), (id))
#define PLAY_NUMBER(n, u, a) playNumber((n), (u), (a), id)
#define PLAY_DURATION(d) playDuration((d), id)
#define IS_PLAYING(id) isPlaying((id))
#define PLAY_VALUE(v, id) playValue((v), (id))
#define PLAY_FILE(f, id) audioQueue.playFile((f), (id))
+29 -21
View File
@@ -1666,13 +1666,13 @@ uint16_t activeFunctions = 0;
MASK_FSW_TYPE activeFunctionSwitches = 0;
#if defined(VOICE)
void playValue(uint8_t idx)
PLAY_FUNCTION(playValue, uint8_t idx)
{
int16_t val = getValue(idx);
switch (idx) {
case NUM_XCHNRAW+TELEM_TM1-1:
case NUM_XCHNRAW+TELEM_TM2-1:
playDuration(val);
PLAY_DURATION(val);
break;
#if defined(FRSKY)
case NUM_XCHNRAW+TELEM_MIN_A1-1:
@@ -1698,42 +1698,42 @@ void playValue(uint8_t idx)
att |= PREC1;
}
}
playNumber(converted_value, 1+UNIT_VOLTS, att);
PLAY_NUMBER(converted_value, 1+UNIT_VOLTS, att);
break;
}
case NUM_XCHNRAW+TELEM_CELL-1:
playNumber(val, 1+UNIT_VOLTS, PREC2);
PLAY_NUMBER(val, 1+UNIT_VOLTS, PREC2);
break;
case NUM_XCHNRAW+TELEM_VFAS-1:
case NUM_XCHNRAW+TELEM_CELLS_SUM-1:
playNumber(val, 1+UNIT_VOLTS, PREC1);
PLAY_NUMBER(val, 1+UNIT_VOLTS, PREC1);
break;
case NUM_XCHNRAW+TELEM_CURRENT-1:
case NUM_XCHNRAW+TELEM_MAX_CURRENT-1:
playNumber(val, 1+UNIT_AMPS, PREC1);
PLAY_NUMBER(val, 1+UNIT_AMPS, PREC1);
break;
case NUM_XCHNRAW+TELEM_ACCx-1:
case NUM_XCHNRAW+TELEM_ACCy-1:
case NUM_XCHNRAW+TELEM_ACCz-1:
case NUM_XCHNRAW+TELEM_VSPD-1:
playNumber(val, 0, PREC2);
PLAY_NUMBER(val, 0, PREC2);
break;
case NUM_XCHNRAW+TELEM_CONSUMPTION-1:
playNumber(val, 1+UNIT_MAH);
PLAY_NUMBER(val, 1+UNIT_MAH, 0);
break;
case NUM_XCHNRAW+TELEM_POWER-1:
playNumber(val, 1+UNIT_WATTS);
PLAY_NUMBER(val, 1+UNIT_WATTS, 0);
break;
case NUM_XCHNRAW+TELEM_RSSI_TX-1:
case NUM_XCHNRAW+TELEM_RSSI_RX-1:
playNumber(val);
PLAY_NUMBER(val, 0, 0);
break;
#if defined(IMPERIAL_UNITS)
@@ -1741,7 +1741,7 @@ void playValue(uint8_t idx)
case NUM_XCHNRAW+TELEM_MIN_ALT-1:
case NUM_XCHNRAW+TELEM_MAX_ALT-1:
if (g_model.frsky.usrProto == USR_PROTO_WS_HOW_HIGH) {
playNumber(val, 1+UNIT_FEET);
PLAY_NUMBER(val, 1+UNIT_FEET, 0);
break;
}
// no break
@@ -1765,13 +1765,13 @@ void playValue(uint8_t idx)
val = (val * 46) / 25;
}
#endif
playNumber(val, unit == UNIT_RAW ? 0 : unit+1);
PLAY_NUMBER(val, unit == UNIT_RAW ? 0 : unit+1, 0);
break;
}
#else
default:
{
playNumber(val, 0);
PLAY_NUMBER(val, 0, 0);
break;
}
#endif
@@ -1867,24 +1867,32 @@ void evalFunctions()
#if defined(PCBARM) && defined(SDCARD)
else if (sd->func == FUNC_PLAY_TRACK) {
char lfn[] = SOUNDS_PATH "/xxxxxx.wav";
strncpy(lfn+sizeof(SOUNDS_PATH), sd->param, sizeof(sd->param));
lfn[sizeof(SOUNDS_PATH)+sizeof(sd->param)] = '\0';
strcat(lfn+sizeof(SOUNDS_PATH), SOUNDS_EXT);
audioQueue.playFile(lfn);
if (!IS_PLAYING(i+1)) {
char lfn[] = SOUNDS_PATH "/xxxxxx.wav";
strncpy(lfn+sizeof(SOUNDS_PATH), sd->param, sizeof(sd->param));
lfn[sizeof(SOUNDS_PATH)+sizeof(sd->param)] = '\0';
strcat(lfn+sizeof(SOUNDS_PATH), SOUNDS_EXT);
PLAY_FILE(lfn, i+1);
}
}
else if (sd->func == FUNC_PLAY_VALUE) {
playValue(FSW_PARAM(sd));
if (!IS_PLAYING(i+1)) {
PLAY_VALUE(FSW_PARAM(sd), i+1);
}
}
else if (sd->func == FUNC_VOLUME) {
requiredSpeakerVolume = ((1024 + getValue(FSW_PARAM(sd))) * NUM_VOL_LEVELS) / 2048;
}
#elif defined(VOICE)
else if (sd->func == FUNC_PLAY_TRACK) {
pushCustomPrompt(sd->param);
if (!IS_PLAYING(i+1)) {
PUSH_CUSTOM_PROMPT(sd->param, i+1);
}
}
else if (sd->func == FUNC_PLAY_VALUE) {
playValue(sd->param);
if (!IS_PLAYING(i+1)) {
PLAY_VALUE(FSW_PARAM(sd), i+1);
}
}
#endif
+2 -2
View File
@@ -832,8 +832,6 @@ extern volatile uint8_t g_blinkTmr10ms;
extern uint8_t g_beepCnt;
extern uint8_t g_beepVal[5];
#include "translations.h"
extern uint8_t ppmInState; //0=unsync 1..8= wait for value i-1
extern int16_t g_ppmIns[8];
extern int32_t chans[NUM_CHNOUT];
@@ -1027,6 +1025,8 @@ enum AUDIO_SOUNDS {
#include "gruvin9x/somo14d.h"
#endif
#include "translations.h"
#if defined(HAPTIC)
#include "haptic.h"
#endif
+8
View File
@@ -121,3 +121,11 @@ inline bool isPlaying()
} \
}
#define PLAY_FUNCTION(x, ...) void x(__VA_ARGS__)
#define PUSH_PROMPT(p) pushPrompt((p))
#define PUSH_CUSTOM_PROMPT(p, ...) pushCustomPrompt((p))
#define PLAY_NUMBER(n, u, a) playNumber((n), (u), (a))
#define PLAY_DURATION(d) playDuration((d))
#define IS_PLAYING(id) isPlaying()
#define PLAY_VALUE(v, id) playValue((v))
#define PLAY_FILE(f, id) audioQueue.playFile((f))
+2 -2
View File
@@ -438,8 +438,8 @@ extern const pm_char STR_NA[];
#if defined(VOICE)
void playNumber(int16_t number, uint8_t unit=0, uint8_t att=0);
void playDuration(int16_t seconds);
PLAY_FUNCTION(playNumber, int16_t number, uint8_t unit, uint8_t att);
PLAY_FUNCTION(playDuration, int16_t seconds);
#endif
#endif
+45 -48
View File
@@ -104,26 +104,27 @@ enum CzechPrompts {
#if defined(VOICE)
#if defined(PCBSTD)
#define PUSH_UNIT_PROMPT(p, u) pushUnitPrompt((p), (u))
#else
#define PUSH_UNIT_PROMPT(p, u) pushUnitPrompt((p), (u), id)
#endif
#define MUZSKY 0x80
#define ZENSKY 0x81
#define STREDNI 0x82
void pushUnitPrompt(int16_t number, uint8_t unitprompt)
PLAY_FUNCTION(pushUnitPrompt, int16_t number, uint8_t unitprompt)
{
if (number == 1) {
pushPrompt(unitprompt);
}
else {
if (number > 1 && number < 5) {
pushPrompt(unitprompt+1);
}
else {
pushPrompt(unitprompt+2);
}
}
if (number == 1)
PUSH_PROMPT(unitprompt);
else if (number > 1 && number < 5)
PUSH_PROMPT(unitprompt+1);
else
PUSH_PROMPT(unitprompt+2);
}
void playNumber(int16_t number, uint8_t unit, uint8_t att)
PLAY_FUNCTION(playNumber, int16_t number, uint8_t unit, uint8_t att)
{
/* if digit >= 1000000000:
temp_digit, digit = divmod(digit, 1000000000)
@@ -135,29 +136,22 @@ void playNumber(int16_t number, uint8_t unit, uint8_t att)
prompts.append(Prompt(GUIDE_00_MILLION, dir=2))
*/
if (number < 0) {
pushPrompt(PROMPT_MINUS);
number = -number;
}
int8_t mode = MODE(att);
if (mode > 0) {
div_t qr = div(number, (mode == 1 ? 10 : 100));
if (qr.rem) {
playNumber(qr.quot);
if (qr.quot == 0) {
pushPrompt(PROMPT_CELA);
}
else {
pushUnitPrompt(qr.quot,PROMPT_CELA);
}
PLAY_NUMBER(qr.quot, 0, 0);
if (qr.quot == 0)
PUSH_PROMPT(PROMPT_CELA);
else
PUSH_UNIT_PROMPT(qr.quot, PROMPT_CELA);
if (mode == 2 && qr.rem < 10)
pushPrompt (PROMPT_NULA);
playNumber(qr.rem,0,ZENSKY);
pushPrompt(PROMPT_UNITS_BASE+((unit-1)*4)+3);
PUSH_PROMPT(PROMPT_NULA);
PLAY_NUMBER(qr.rem, 0, ZENSKY);
PUSH_PROMPT(PROMPT_UNITS_BASE+((unit-1)*4)+3);
}
else
playNumber(qr.quot, unit);
PLAY_NUMBER(qr.quot, unit, 0);
return;
}
@@ -168,83 +162,86 @@ void playNumber(int16_t number, uint8_t unit, uint8_t att)
break;
case 4:
att = ZENSKY;
break;
case 8:
att = STREDNI;
break;
case 10:
case 11:
case 12:
att = ZENSKY;
break;
default:
att = MUZSKY;
break;
}
if ((number == 1) && (att == MUZSKY)) {
pushPrompt(PROMPT_JEDEN);
PUSH_PROMPT(PROMPT_JEDEN);
number = -1;
}
if ((number == 1) && (att == STREDNI)) {
pushPrompt(PROMPT_JEDNO);
PUSH_PROMPT(PROMPT_JEDNO);
number = -1;
}
if ((number == 2) && ((att == ZENSKY) || (att == STREDNI))) {
pushPrompt(PROMPT_DVE);
PUSH_PROMPT(PROMPT_DVE);
number = -1;
}
if (number >= 1000) {
if (number >= 2000)
playNumber(number / 1000);
PLAY_NUMBER(number / 1000, 0, 0);
if (number >= 2000 && number < 5000)
pushPrompt(PROMPT_TISICE);
PUSH_PROMPT(PROMPT_TISICE);
else
pushPrompt(PROMPT_TISIC);
PUSH_PROMPT(PROMPT_TISIC);
number %= 1000;
if (number == 0)
number = -1;
}
if (number >= 100) {
pushPrompt(PROMPT_STO + (number/100)-1);
PUSH_PROMPT(PROMPT_STO + (number/100)-1);
number %= 100;
if (number == 0)
number = -1;
}
if (number >= 0) {
pushPrompt(PROMPT_NULA+number);
PUSH_PROMPT(PROMPT_NULA+number);
}
if (unit) {
pushUnitPrompt(tmp,(PROMPT_UNITS_BASE+((unit-1)*4)));
PUSH_UNIT_PROMPT(tmp, (PROMPT_UNITS_BASE+((unit-1)*4)));
}
}
void playDuration(int16_t seconds)
PLAY_FUNCTION(playDuration, int16_t seconds)
{
if (seconds < 0) {
pushPrompt(PROMPT_MINUS);
PUSH_PROMPT(PROMPT_MINUS);
seconds = -seconds;
}
uint8_t tmp = seconds / 3600;
seconds %= 3600;
if (tmp > 0) {
playNumber(tmp,0,ZENSKY);
pushUnitPrompt(tmp,PROMPT_HODINA);
PLAY_NUMBER(tmp, 0, ZENSKY);
PUSH_UNIT_PROMPT(tmp, PROMPT_HODINA);
}
tmp = seconds / 60;
seconds %= 60;
if (tmp > 0) {
playNumber(tmp,0,ZENSKY);
pushUnitPrompt(tmp,PROMPT_MINUTA);
PLAY_NUMBER(tmp, 0, ZENSKY);
PUSH_UNIT_PROMPT(tmp, PROMPT_MINUTA);
}
if (seconds > 0) {
playNumber(seconds,0,ZENSKY);
pushUnitPrompt(seconds,PROMPT_SEKUNDA);
PLAY_NUMBER(seconds, 0, ZENSKY);
PUSH_UNIT_PROMPT(seconds, PROMPT_SEKUNDA);
}
}
+18 -18
View File
@@ -72,7 +72,7 @@ enum EnglishPrompts {
#if defined(VOICE)
void playNumber(int16_t number, uint8_t unit, uint8_t att)
PLAY_FUNCTION(playNumber, int16_t number, uint8_t unit, uint8_t att)
{
/* if digit >= 1000000000:
temp_digit, digit = divmod(digit, 1000000000)
@@ -85,65 +85,65 @@ void playNumber(int16_t number, uint8_t unit, uint8_t att)
*/
if (number < 0) {
pushPrompt(PROMPT_MINUS);
PUSH_PROMPT(PROMPT_MINUS);
number = -number;
}
if (number >= 1000) {
playNumber(number / 1000);
pushPrompt(PROMPT_THOUSAND);
PLAY_NUMBER(number / 1000, 0, 0);
PUSH_PROMPT(PROMPT_THOUSAND);
number %= 1000;
if (number == 0)
number = -1;
}
if (number >= 100) {
pushPrompt(PROMPT_ZERO + number/100);
pushPrompt(PROMPT_HUNDRED);
PUSH_PROMPT(PROMPT_ZERO + number/100);
PUSH_PROMPT(PROMPT_HUNDRED);
number %= 100;
if (number == 0)
number = -1;
}
if (number >= 20) {
pushPrompt(PROMPT_TWENTY + (number-20)/10);
PUSH_PROMPT(PROMPT_TWENTY + (number-20)/10);
number %= 10;
if (number == 0)
number = -1;
}
if (number >= 0) {
pushPrompt(PROMPT_ZERO+number);
PUSH_PROMPT(PROMPT_ZERO+number);
}
if (unit) {
pushPrompt(PROMPT_UNITS_BASE+unit-1);
PUSH_PROMPT(PROMPT_UNITS_BASE+unit-1);
}
}
void playDuration(int16_t seconds)
PLAY_FUNCTION(playDuration, int16_t seconds)
{
if (seconds < 0) {
pushPrompt(PROMPT_MINUS);
PUSH_PROMPT(PROMPT_MINUS);
seconds = -seconds;
}
uint8_t tmp = seconds / 3600;
seconds %= 3600;
if (tmp > 0) {
playNumber(tmp);
pushPrompt(tmp == 1 ? PROMPT_HOUR : PROMPT_HOURS);
PLAY_NUMBER(tmp, 0, 0);
PUSH_PROMPT(tmp == 1 ? PROMPT_HOUR : PROMPT_HOURS);
}
tmp = seconds / 60;
seconds %= 60;
if (tmp > 0) {
playNumber(tmp);
pushPrompt(tmp == 1 ? PROMPT_MINUTE : PROMPT_MINUTES);
PLAY_NUMBER(tmp, 0, 0);
PUSH_PROMPT(tmp == 1 ? PROMPT_MINUTE : PROMPT_MINUTES);
if (seconds > 0)
pushPrompt(PROMPT_AND);
PUSH_PROMPT(PROMPT_AND);
}
if (seconds > 0) {
playNumber(seconds);
pushPrompt(tmp == 1 ? PROMPT_SECOND : PROMPT_SECONDS);
PLAY_NUMBER(seconds, 0, 0);
PUSH_PROMPT(tmp == 1 ? PROMPT_SECOND : PROMPT_SECONDS);
}
}
+23 -23
View File
@@ -104,7 +104,7 @@ enum FrenchPrompts {
#define FEMININ 0x80
void playNumber(int16_t number, uint8_t unit, uint8_t att)
PLAY_FUNCTION(playNumber, int16_t number, uint8_t unit, uint8_t att)
{
/* if digit >= 1000000000:
temp_digit, digit = divmod(digit, 1000000000)
@@ -120,77 +120,77 @@ void playNumber(int16_t number, uint8_t unit, uint8_t att)
if (mode > 0) {
div_t qr = div(number, (mode == 1 ? 10 : 100));
if (qr.rem > 0) {
playNumber(qr.quot);
pushPrompt(PROMPT_VIRGULE);
PLAY_NUMBER(qr.quot, 0, 0);
PUSH_PROMPT(PROMPT_VIRGULE);
if (mode==2 && qr.rem < 10)
pushPrompt(PROMPT_ZERO);
playNumber(qr.rem, unit);
PUSH_PROMPT(PROMPT_ZERO);
PLAY_NUMBER(qr.rem, unit, 0);
}
else {
playNumber(qr.quot, unit);
PLAY_NUMBER(qr.quot, unit, 0);
}
return;
}
if (number < 0) {
pushPrompt(PROMPT_MOINS);
PUSH_PROMPT(PROMPT_MOINS);
number = -number;
}
if (number >= 1000) {
if (number >= 2000)
playNumber(number / 1000);
pushPrompt(PROMPT_MILLE);
PLAY_NUMBER(number / 1000, 0, 0);
PUSH_PROMPT(PROMPT_MILLE);
number %= 1000;
if (number == 0)
number = -1;
}
if (number >= 100) {
if (number >= 200)
pushPrompt(PROMPT_ZERO + number/100);
pushPrompt(PROMPT_CENT);
PUSH_PROMPT(PROMPT_ZERO + number/100);
PUSH_PROMPT(PROMPT_CENT);
number %= 100;
if (number == 0)
number = -1;
}
if (((number % 10) == 1) && number < 90 && (att & FEMININ)) {
pushPrompt(PROMPT_UNE+(number/10));
PUSH_PROMPT(PROMPT_UNE+(number/10));
}
else if (number >= 0) {
pushPrompt(PROMPT_ZERO+number);
PUSH_PROMPT(PROMPT_ZERO+number);
}
if (unit) {
pushPrompt(PROMPT_UNITS_BASE+unit-1);
PUSH_PROMPT(PROMPT_UNITS_BASE+unit-1);
}
}
void playDuration(int16_t seconds)
PLAY_FUNCTION(playDuration, int16_t seconds)
{
if (seconds < 0) {
pushPrompt(PROMPT_MOINS);
PUSH_PROMPT(PROMPT_MOINS);
seconds = -seconds;
}
uint8_t tmp = seconds / 3600;
seconds %= 3600;
if (tmp > 0) {
playNumber(tmp, 0, FEMININ);
pushPrompt(PROMPT_HEURE);
PLAY_NUMBER(tmp, 0, FEMININ);
PUSH_PROMPT(PROMPT_HEURE);
}
tmp = seconds / 60;
seconds %= 60;
if (tmp > 0) {
playNumber(tmp, 0, FEMININ);
pushPrompt(PROMPT_MINUTE);
PLAY_NUMBER(tmp, 0, FEMININ);
PUSH_PROMPT(PROMPT_MINUTE);
if (seconds > 0)
pushPrompt(PROMPT_ET);
PUSH_PROMPT(PROMPT_ET);
}
if (seconds > 0) {
playNumber(seconds, 0, FEMININ);
pushPrompt(PROMPT_SECONDE);
PLAY_NUMBER(seconds, 0, FEMININ);
PUSH_PROMPT(PROMPT_SECONDE);
}
}
+24 -24
View File
@@ -95,7 +95,7 @@ enum ItalianPrompts {
#if defined(VOICE)
void playNumber(int16_t number, uint8_t unit, uint8_t att)
PLAY_FUNCTION(playNumber, int16_t number, uint8_t unit, uint8_t att)
{
/* if digit >= 1000000000:
temp_digit, digit = divmod(digit, 1000000000)
@@ -108,16 +108,16 @@ void playNumber(int16_t number, uint8_t unit, uint8_t att)
*/
if (number < 0) {
pushPrompt(PROMPT_MENO);
PUSH_PROMPT(PROMPT_MENO);
number = -number;
}
if (number >= 1000) {
if (number >= 2000) {
playNumber(number / 1000);
pushPrompt(PROMPT_MILA);
PLAY_NUMBER(number / 1000, 0, 0);
PUSH_PROMPT(PROMPT_MILA);
} else {
pushPrompt(PROMPT_MILLE);
PUSH_PROMPT(PROMPT_MILLE);
}
number %= 1000;
if (number == 0)
@@ -125,23 +125,23 @@ void playNumber(int16_t number, uint8_t unit, uint8_t att)
}
if (number >= 100) {
if (number >= 200)
pushPrompt(PROMPT_ZERO + number/100);
pushPrompt(PROMPT_CENT);
PUSH_PROMPT(PROMPT_ZERO + number/100);
PUSH_PROMPT(PROMPT_CENT);
number %= 100;
if (number == 0)
number = -1;
}
pushPrompt(PROMPT_ZERO+number);
PUSH_PROMPT(PROMPT_ZERO+number);
if (unit) {
pushPrompt(PROMPT_UNITS_BASE+unit-1);
PUSH_PROMPT(PROMPT_UNITS_BASE+unit-1);
}
}
void playDuration(int16_t seconds)
PLAY_FUNCTION(playDuration, int16_t seconds)
{
if (seconds < 0) {
pushPrompt(PROMPT_MENO);
PUSH_PROMPT(PROMPT_MENO);
seconds = -seconds;
}
@@ -151,11 +151,11 @@ void playDuration(int16_t seconds)
if (tmp > 0) {
ore=tmp;
if (tmp > 1) {
playNumber(tmp, 0);
pushPrompt(PROMPT_ORE);
PLAY_NUMBER(tmp, 0, 0);
PUSH_PROMPT(PROMPT_ORE);
} else {
pushPrompt(PROMPT_UN);
pushPrompt(PROMPT_ORA);
PUSH_PROMPT(PROMPT_UN);
PUSH_PROMPT(PROMPT_ORA);
}
}
@@ -163,21 +163,21 @@ void playDuration(int16_t seconds)
seconds %= 60;
if (tmp > 0 || ore >0) {
if (tmp != 1) {
playNumber(tmp, 0);
pushPrompt(PROMPT_MINUTI);
PLAY_NUMBER(tmp, 0, 0);
PUSH_PROMPT(PROMPT_MINUTI);
} else {
pushPrompt(PROMPT_UN);
pushPrompt(PROMPT_MINUTO);
PUSH_PROMPT(PROMPT_UN);
PUSH_PROMPT(PROMPT_MINUTO);
}
pushPrompt(PROMPT_E);
PUSH_PROMPT(PROMPT_E);
}
if (seconds != 1) {
playNumber(seconds, 0);
pushPrompt(PROMPT_SECONDI);
PLAY_NUMBER(seconds, 0, 0);
PUSH_PROMPT(PROMPT_SECONDI);
} else {
pushPrompt(PROMPT_UN);
pushPrompt(PROMPT_SECONDO);
PUSH_PROMPT(PROMPT_UN);
PUSH_PROMPT(PROMPT_SECONDO);
}
}