Hi, Tomek. Yeah, I know how drivers in NuttX works. I already could play beeps, tones and melodies using the tone driver available in Nuttx. I understand that I could correct a driver for special needs. But currently I just wondered is there a possibility using current note language to make a single constant beep with highest volume (that is the same as if just set and keep HIGH to pin of the buzzer)
пт, 26 мая 2023 г. в 12:08, Tomek CEDRO <to...@cedro.info>: > On Fri, May 26, 2023 at 10:43 AM Oleg wrote: > > Hi all, > > While playing with generating audio tones (thanks for the manual > > <https://www.youtube.com/watch?v=3U6OZaGnYcc>, Alan!), I wonder what I > need > > to write to /dev/tone to get constant signal, 100% PWM on the audio pin, > > that is beep of maximum volume? > > Hey there Oleg :-) > > Here is a documentation on how to create your own device driver and > general description on how drivers work in NuttX: > > https://nuttx.apache.org/docs/latest/components/drivers/index.html > > On FreeBSD there is a /dev/speaker device handled by a kernel module > that can text commands and convert them to a PC speaker tones. That > could be a reference point too if you want to write a simple melody > player :-) > > For instance this will play Star Trek tune: > l2b.f+.p16a.c+.p l4mne8a2mspg+e8c+f+8b2 > > https://man.freebsd.org/cgi/man.cgi?query=speaker > https://github.com/freebsd/freebsd-src/blob/main/sys/dev/speaker/spkr.c > > Applications may call ioctl(2) on a speaker file descriptor to control > the speaker driver directly; definitions for the ioctl(2) > interface are > in <dev/speaker/speaker.h>. The tone_t structure used in > these calls has > two fields, specifying a frequency (in Hz) and a duration > (in 1/100ths of > a second). A frequency of zero is interpreted as a rest. > > At present there are two such ioctl(2) calls. SPKRTONE > accepts a pointer > to a single tone structure as third argument and plays it. > SPKRTUNE ac- > cepts a pointer to the first of an array of tone structures and > plays > them in continuous sequence; this array must be terminated by a > final > member with a zero duration. > > The play-string language is modeled on the PLAY statement > conventions of > IBM Advanced BASIC 2.0. The MB, MF, and X primitives of PLAY > are not > useful in a timesharing environment and are omitted. The > `octave-track- > ing' feature and the slur mark are new. > > There are 84 accessible notes numbered 1-84 in 7 octaves, each running > from C to B, numbered 0-6; the scale is equal-tempered A440 and > octave 3 > starts with middle C. By default, the play function emits > half-second > notes with the last 1/16th second being `rest time'. > > Play strings are interpreted left to right as a series of play > command > groups; letter case is ignored. Play command groups are as follows: > > CDEFGAB Letters A through G cause the corresponding note to be > played > in the current octave. A note letter may optionally be fol- > lowed by an "accidental sign", one of # + or -; the first > two > of these cause it to be sharped one half-tone, the last > causes > it to be flatted one half-tone. It may also be followed > by a > time value number and by sustain dots (see below). Time val- > ues are interpreted as for the L command below. > > O n If n is numeric, this sets the current octave. n may > also be > one of L or N to enable or disable octave-tracking (it is dis- > abled by default). When octave-tracking is on, interpretation > of a pair of letter notes will change octaves if necessary in > order to make the smallest possible jump between notes. Thus > ``olbc'' will be played as ``olb>c'', and ``olcb'' as > ``olc<b''. Octave locking is disabled for one letter note > following >, < and O[0123456]. (The octave-locking feature is > not supported in IBM BASIC.) > > > Bump the current octave up one. > > < Drop the current octave down one. > > N n Play note n, n being 1 to 84 or 0 for a rest of > current time > value. May be followed by sustain dots. > > L n Sets the current time value for notes. The default is L4, > quarter or crotchet notes. The lowest possible value is > 1; > values up to 64 are accepted. L1 sets whole notes, L2 sets > half notes, L4 sets quarter notes, etc. > > P n Pause (rest), with n interpreted as for L n. May be > followed > by sustain dots. May also be written ~. > > T n Sets the number of quarter notes per minute; default is > 120. > Musical names for common tempi are: > > Tempo Beats Per Minute > very slow Larghissimo > Largo 40-60 > Larghetto 60-66 > Grave > Lento > Adagio 66-76 > slow Adagietto > Andante 76-108 > medium Andantino > Moderato 108-120 > fast Allegretto > Allegro 120-168 > Vivace > Veloce > Presto 168-208 > very fast Prestissimo > > M[LNS] Set articulation. MN (N for normal) is the default; the > last > 1/8th of the note's value is rest time. You can set ML for > legato (no rest space) or MS for staccato (1/4 rest space). > > Notes (that is, CDEFGAB or N command character groups) may > be followed by > sustain dots. Each dot causes the note's value to be > lengthened by one- > half for each one. Thus, a note dotted once is held for 3/2 of > its un- > dotted value; dotted twice, it is held 9/4, and three times would give > 27/8. > > A note and its sustain dots may also be followed by a slur > mark (under- > score). This causes the normal micro-rest after the note to be > filled > in, slurring it to the next one. (The slur feature is not > supported in > IBM BASIC.) > > Whitespace in play strings is simply skipped and may be > used to separate > melody sections. > > > -- > CeDeROM, SQ7MHZ, http://www.tomek.cedro.info >