@@ -59,6 +59,88 @@ void speaker_pulse(void)
59
59
timer_set (& pulse .timer , now + volume * volume * (TIME_MHZ /3 ));
60
60
}
61
61
62
+ static void speaker_hz (unsigned int hz , unsigned int ms )
63
+ {
64
+ unsigned int vol = (ff_cfg .notify_volume & NOTIFY_volume_mask ) + 1 ;
65
+ unsigned int period = STK_MHZ * 1000000 / hz ;
66
+ unsigned int period_on = period * vol * vol / (2 * 400 );
67
+ unsigned int nr = hz * ms / 1000 ;
68
+ while (nr -- ) {
69
+ gpio_write_pin (gpio_spk , pin_spk , TRUE);
70
+ delay_ticks (period_on );
71
+ gpio_write_pin (gpio_spk , pin_spk , FALSE);
72
+ delay_ticks (period - period_on );
73
+ }
74
+ }
75
+
76
+ static void speaker_lock (void )
77
+ {
78
+ uint32_t oldpri ;
79
+ oldpri = IRQ_save (TIMER_IRQ_PRI );
80
+ timer_cancel (& pulse .timer );
81
+ pulse .state = STATE_masked ;
82
+ IRQ_restore (oldpri );
83
+ }
84
+
85
+ static void speaker_unlock (void )
86
+ {
87
+ pulse .state = STATE_idle ;
88
+ }
89
+
90
+ static void speaker_notify_slot (unsigned int nr )
91
+ {
92
+ while (nr >= 5 ) {
93
+ speaker_hz (1500 , 100 );
94
+ nr -= 5 ;
95
+ if (nr != 0 )
96
+ delay_ms (120 );
97
+ }
98
+
99
+ while (nr != 0 ) {
100
+ speaker_hz (1500 , 40 );
101
+ nr -= 1 ;
102
+ if (nr != 0 )
103
+ delay_ms (120 );
104
+ }
105
+ }
106
+
107
+ void speaker_notify_insert (unsigned int slotnr )
108
+ {
109
+ if ((ff_cfg .notify_volume & NOTIFY_volume_mask ) == 0 )
110
+ return ;
111
+
112
+ speaker_lock ();
113
+
114
+ speaker_hz (880 , 40 ); /* a5 */
115
+ delay_ms (20 );
116
+ speaker_hz (784 , 40 ); /* g5 */
117
+ delay_ms (20 );
118
+ speaker_hz (1046 , 60 ); /* c6 */
119
+
120
+ if (ff_cfg .notify_volume & NOTIFY_slotnr ) {
121
+ delay_ms (300 );
122
+ speaker_notify_slot (slotnr );
123
+ }
124
+
125
+ speaker_unlock ();
126
+ }
127
+
128
+ void speaker_notify_eject (void )
129
+ {
130
+ if ((ff_cfg .notify_volume & NOTIFY_volume_mask ) == 0 )
131
+ return ;
132
+
133
+ speaker_lock ();
134
+
135
+ speaker_hz (932 , 40 ); /* a#5 */
136
+ delay_ms (20 );
137
+ speaker_hz (831 , 40 ); /* g#5 */
138
+ delay_ms (20 );
139
+ speaker_hz (659 , 60 ); /* e5 */
140
+
141
+ speaker_unlock ();
142
+ }
143
+
62
144
/*
63
145
* Local variables:
64
146
* mode: C
0 commit comments