212 lines
7.2 KiB
C
212 lines
7.2 KiB
C
#include "include.h"
|
||
|
||
// 1/8 4/4 3/4 2/4 1/4 4/4 3/4 2/4
|
||
//Rhythm = [ 0.062 0.094 0.125 0.125 0.187 0.250];
|
||
// Do Re Mi Fa Sol La Si
|
||
//Fin = [261.63 293.67 329.63 349.23 391.99 440 493.88 0 0 0];
|
||
#define PIANO_BASEKEYDLY (int)(48000*0.125)
|
||
#define TONE_DELAY(x) (int)(48*x)
|
||
#define TONE_FREQUENCY(a, b) (u32)((a << 16) | (u16)((1 << 15) / (48000 / b)))
|
||
|
||
struct tone_tbl_t {
|
||
u32 res;
|
||
u32 last_time; //持续时间
|
||
};
|
||
|
||
struct warning_tone_tbl_t {
|
||
u32 len;
|
||
const struct tone_tbl_t *res_tbl;
|
||
};
|
||
|
||
struct warning_piano_tbl_t {
|
||
u32 len;
|
||
const u32 *res_tbl;
|
||
};
|
||
|
||
extern const u16 dac_dvol_table[16 + 1];
|
||
|
||
//频率: 380Hz 间隔40mS 380Hz
|
||
//持续时间:103mS 103mS
|
||
//窗函数: fade out fade out
|
||
//窗持续: 1/2 1
|
||
AT(.piano_com.tbl)
|
||
static const struct tone_tbl_t tone_disconnected_tbl[3] = {
|
||
{TONE_FREQUENCY(0x7ff, 380), TONE_DELAY(103)},
|
||
{0, TONE_DELAY(40)}, //静音
|
||
{TONE_FREQUENCY(0x7ff, 380), TONE_DELAY(103)},
|
||
};
|
||
|
||
//频率: 760Hz
|
||
//持续时间:100mS
|
||
//窗函数: fade out
|
||
//窗持续: 1/2
|
||
AT(.piano_com.tbl)
|
||
static const struct tone_tbl_t tone_connected_tbl[1] = {
|
||
{TONE_FREQUENCY(0x7ff, 760), TONE_DELAY(100)},
|
||
};
|
||
|
||
//频率: 501Hz
|
||
//持续时间:100mS
|
||
//窗函数: fade out
|
||
//窗持续: 1/2
|
||
AT(.piano_com.tbl)
|
||
static const struct tone_tbl_t tone_pair_tbl[1] = {
|
||
{TONE_FREQUENCY(0x7ff, 501), TONE_DELAY(100)},
|
||
};
|
||
|
||
//频率: 200Hz 间隔20mS 302Hz 间隔20mS 400Hz 间隔20mS 501Hz
|
||
//持续时间:160mS 160mS 157mS 157mS
|
||
//窗函数: fade out fade out fade out fade out
|
||
//窗持续: 1/2 1/2 1/2 1
|
||
AT(.piano_com.tbl)
|
||
static const struct tone_tbl_t tone_power_on_tbl[7] = {
|
||
{TONE_FREQUENCY(0x7ff, 200), TONE_DELAY(160)},
|
||
{0, TONE_DELAY(20)}, //静音
|
||
{TONE_FREQUENCY(0x7ff, 302), TONE_DELAY(160)},
|
||
{0, TONE_DELAY(20)}, //静音
|
||
{TONE_FREQUENCY(0x7ff, 400), TONE_DELAY(157)},
|
||
{0, TONE_DELAY(20)}, //静音
|
||
{TONE_FREQUENCY(0x7ff, 501), TONE_DELAY(157)},
|
||
};
|
||
|
||
//频率: 501Hz 间隔20mS 400Hz 间隔20mS 302Hz 间隔20mS 200Hz
|
||
//持续时间:160mS 160mS 157mS 157mS
|
||
//窗函数: fade out fade out fade out fade out
|
||
//窗持续: 1/2 1/2 1/2 1
|
||
AT(.piano_com.tbl)
|
||
static const struct tone_tbl_t tone_power_off_tbl[7] = {
|
||
{TONE_FREQUENCY(0x7ff, 501), TONE_DELAY(160)},
|
||
{0, TONE_DELAY(20)}, //静音
|
||
{TONE_FREQUENCY(0x7ff, 400), TONE_DELAY(160)},
|
||
{0, TONE_DELAY(20)}, //静音
|
||
{TONE_FREQUENCY(0x7ff, 302), TONE_DELAY(157)},
|
||
{0, TONE_DELAY(20)}, //静音
|
||
{TONE_FREQUENCY(0x7ff, 200), TONE_DELAY(157)},
|
||
};
|
||
|
||
//频率: 450Hz
|
||
//持续时间:1365mS
|
||
//窗函数: sine
|
||
//窗调制: 15Hz
|
||
AT(.piano_com.tbl)
|
||
static const struct tone_tbl_t tone_ring_tbl[2] = {
|
||
{TONE_FREQUENCY(0x800a, 450), (TONE_DELAY(1364)+24)},
|
||
{0, TONE_DELAY(20)}, //静音
|
||
};
|
||
|
||
//频率: 2600Hz
|
||
//持续时间:100mS
|
||
//窗函数: fade out
|
||
//窗调制: 1
|
||
AT(.piano_com.tbl)
|
||
static const struct tone_tbl_t tone_maxvol_tbl[1] = {
|
||
{TONE_FREQUENCY(0x7ff, 2600), TONE_DELAY(100)},
|
||
};
|
||
|
||
//频率: 848Hz 间隔50mS 639Hz
|
||
//持续时间:207mS 208mS
|
||
//窗函数: fade out fade out
|
||
//窗调制: 1 1
|
||
AT(.piano_com.tbl)
|
||
static const struct tone_tbl_t tone_low_battery_tbl[3] = {
|
||
{TONE_FREQUENCY(0x7ff, 848), TONE_DELAY(207)},
|
||
{0, TONE_DELAY(50)}, //静音
|
||
{TONE_FREQUENCY(0x7ff, 639), TONE_DELAY(208)},
|
||
};
|
||
|
||
AT(.piano_com.tbl)
|
||
static const struct tone_tbl_t tone_redialing_tbl[1] = {
|
||
{TONE_FREQUENCY(0x7ff, 524), TONE_DELAY(100)},
|
||
};
|
||
|
||
AT(.piano_com.tbl)
|
||
static const struct tone_tbl_t tone_bt_mode_tbl[3] = {
|
||
{TONE_FREQUENCY(0x7ff, 392), TONE_DELAY(100)},
|
||
{0, TONE_DELAY(53)}, //静音
|
||
{TONE_FREQUENCY(0x7ff, 586), TONE_DELAY(98)},
|
||
};
|
||
|
||
//piano提示音
|
||
AT(.piano_com.tbl)
|
||
static const u32 piano_bt_mode_tbl[1] = {
|
||
0x00236521
|
||
};
|
||
|
||
AT(.piano_com.tbl)
|
||
static const u32 piano_camera_mode_tbl[1] = {
|
||
0x00030201
|
||
};
|
||
|
||
AT(.piano_com.tbl)
|
||
static const u32 piano_aux_mode_tbl[1] = {
|
||
0x00131203
|
||
};
|
||
|
||
AT(.piano_com.tbl)
|
||
static const u32 piano_power_on_tbl[1] = {
|
||
0x07050301
|
||
};
|
||
|
||
AT(.piano_com.tbl)
|
||
static const u32 piano_power_off_tbl[1] = {
|
||
0x01030507
|
||
};
|
||
|
||
AT(.text.piano.table)
|
||
static const struct warning_tone_tbl_t warning_tone_tbl[] = {
|
||
{sizeof(tone_power_on_tbl) / sizeof(struct tone_tbl_t), tone_power_on_tbl }, //1
|
||
{sizeof(tone_power_off_tbl) / sizeof(struct tone_tbl_t), tone_power_off_tbl }, //2
|
||
{sizeof(tone_pair_tbl) / sizeof(struct tone_tbl_t), tone_pair_tbl }, //3
|
||
{sizeof(tone_disconnected_tbl) / sizeof(struct tone_tbl_t), tone_disconnected_tbl }, //4
|
||
{sizeof(tone_connected_tbl) / sizeof(struct tone_tbl_t), tone_connected_tbl }, //5
|
||
{sizeof(tone_ring_tbl) / sizeof(struct tone_tbl_t), tone_ring_tbl }, //6
|
||
{sizeof(tone_maxvol_tbl) / sizeof(struct tone_tbl_t), tone_maxvol_tbl }, //7
|
||
{sizeof(tone_low_battery_tbl) / sizeof(struct tone_tbl_t), tone_low_battery_tbl }, //8
|
||
{sizeof(tone_redialing_tbl) / sizeof(struct tone_tbl_t), tone_redialing_tbl }, //9
|
||
{sizeof(tone_bt_mode_tbl) / sizeof(struct tone_tbl_t), tone_bt_mode_tbl }, //10
|
||
};
|
||
|
||
AT(.text.piano.table)
|
||
static const struct warning_piano_tbl_t warning_piano_tbl[] = {
|
||
{sizeof(piano_power_on_tbl) / 4, piano_power_on_tbl},
|
||
{sizeof(piano_power_off_tbl) / 4, piano_power_off_tbl},
|
||
{sizeof(piano_bt_mode_tbl) / 4, piano_bt_mode_tbl},
|
||
{sizeof(piano_camera_mode_tbl) / 4, piano_camera_mode_tbl},
|
||
{sizeof(piano_aux_mode_tbl) / 4, piano_aux_mode_tbl},
|
||
};
|
||
|
||
//type: 0-->Piano, 1--> Tone
|
||
AT(.text.piano)
|
||
void bsp_piano_warning_play(uint type, uint index)
|
||
{
|
||
void *res;
|
||
|
||
if (type == WARNING_PIANO) {
|
||
res = (void *)&warning_piano_tbl[index];
|
||
} else {
|
||
res = (void *)&warning_tone_tbl[index];
|
||
}
|
||
piano_warning_play(type, res, 0);
|
||
}
|
||
|
||
AT(.text.piano)
|
||
void piano_play_process(void)
|
||
{
|
||
WDT_CLR();
|
||
}
|
||
|
||
AT(.text.piano)
|
||
void *bsp_piano_get_play_res(uint type, uint index)
|
||
{
|
||
void *res;
|
||
|
||
if (type == WARNING_PIANO) {
|
||
res = (void *)&warning_piano_tbl[index];
|
||
} else {
|
||
res = (void *)&warning_tone_tbl[index];
|
||
}
|
||
return res;
|
||
}
|
||
|
||
|