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:
+14
-3
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user