From 5b0985618c8a49ea5ff872486672324120e25361 Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Mon, 10 Jul 2023 15:24:32 +0800
Subject: [PATCH] add gpsd program and booster

---
 modules/c/beep.c |  151 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 145 insertions(+), 6 deletions(-)

diff --git a/modules/c/beep.c b/modules/c/beep.c
index 4108b1f..b26011c 100644
--- a/modules/c/beep.c
+++ b/modules/c/beep.c
@@ -32,9 +32,32 @@
 
 //#define CONFIG_ACTV_BEEP
 
+/* Only passive buzzer can play tone */
+#ifndef CONFIG_ACTV_BEEP 
+#define CONFIG_PLAY_LITTLE_STAR 
+//#define CONFIG_PLAY_TONE_TEST
+#endif
+
+void play_tone_freq(void);
+void play_little_star(void);
+
 int main(int argc, char *argv[])
 {
        	wiringPiSetup();
+
+#ifdef CONFIG_PLAY_LITTLE_STAR
+	while(1)
+	{
+		play_little_star();
+		sleep(3);
+	}
+#elif (defined CONFIG_PLAY_TONE_TEST)
+	while(1)
+	{
+	       	play_tone_freq();
+		sleep(3);
+	}
+#else
 
 	while(1)
 	{
@@ -52,20 +75,20 @@
 #endif
 		sleep(1);
 	}
+#endif
+
 
         return 0;
 }
+
+/*+-----------------------------+
+ *|  Turn buzzer on or off API  |
+ *+-----------------------------+*/
 
 
 int turn_passive_beep(int cmd, int freq)
 {
        	int range;
-
-	if(freq<2000 || freq>2500)
-	{
-		printf("Beep set invalid PWM frequency!\n");
-		return -1;
-	}
 
 	if(OFF == cmd)
 	{
@@ -74,6 +97,13 @@
 	}
 	else
 	{
+
+		if(freq<2000 || freq>5000)
+	       	{
+		       	printf("Beep set invalid PWM frequency[%d]!\n", freq);
+		       	return -1;
+	       	}
+
 		/* Set GPIO as PWM output mode */
 	       	pinMode(PWM_PIN, PWM_OUTPUT) ;
 
@@ -91,6 +121,7 @@
 		pwmWrite(PWM_PIN, range/2);
 	}
 }
+
 
 /* Turn ON/OFF buzzer, Active Buzzer can not set frequency */
 int turn_active_beep(int cmd)
@@ -116,3 +147,111 @@
 }
 
 
+/*+---------------------------------+
+ *|  Play Tone OD,RE,MI....XI,DO1   |
+ *+---------------------------------+*/
+
+enum
+{
+	UNUSED=0,
+	DO,
+	RE,
+	MI,
+	FA,
+	SO,
+	LA,
+	XI,
+	DO1,
+	RI1,
+	TONE_MAX,
+};
+
+#define msleep(x) usleep( 1000*(x) )
+
+static int tone_freq[TONE_MAX]={0, 2093, 2349, 2637, 2794, 3136, 3520, 3952, 4186, 4698 };
+//static int tone_freq[TONE_MAX]={0, 2000, 2130, 2250, 2360, 2450, 2530, 2620, 2700, 2780};
+
+static inline void play_tone(int tone, int delay)
+{
+	if(tone<DO || tone>RI1)
+		return ;
+
+       	turn_passive_beep(ON, tone_freq[tone]);
+	msleep(delay);
+       	turn_passive_beep(OFF, 0);
+}
+
+void play_tone_freq(void)
+{
+	int            i;
+
+	for(i=DO; i<TONE_MAX; i++)
+	{
+		play_tone( i, 500 );
+		msleep(500);
+	}
+}
+
+
+/*+------------------------------+
+ *|  Play song "Little Start"    |
+ *+------------------------------+*/
+
+typedef struct tone_s
+{
+	int     tone;
+	int     delay_ms;   
+
+} tone_t;
+
+#define DEF_DELAY      350 
+static tone_t little_start_notation[]=
+{
+	{DO, DEF_DELAY},
+	{DO, DEF_DELAY},
+	{SO, DEF_DELAY},
+	{SO, DEF_DELAY},
+	{LA, DEF_DELAY},
+	{LA, DEF_DELAY},
+	{SO, DEF_DELAY*2},
+
+	{FA, DEF_DELAY},
+	{FA, DEF_DELAY},
+	{MI, DEF_DELAY},
+	{MI, DEF_DELAY},
+	{RE, DEF_DELAY},
+	{RE, DEF_DELAY},
+	{DO, DEF_DELAY*2},
+
+
+	{SO, DEF_DELAY},
+	{SO, DEF_DELAY},
+	{FA, DEF_DELAY},
+	{FA, DEF_DELAY},
+	{MI, DEF_DELAY},
+	{MI, DEF_DELAY},
+	{RE, DEF_DELAY*2},
+
+
+	{SO, DEF_DELAY},
+	{SO, DEF_DELAY},
+	{FA, DEF_DELAY},
+	{FA, DEF_DELAY},
+	{MI, DEF_DELAY},
+	{MI, DEF_DELAY},
+	{RE, DEF_DELAY*2},
+};
+
+#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
+void play_little_star(void)
+{
+	int        i;
+
+	for(i=0; i<ARRAY_SIZE(little_start_notation); i++)
+	{
+		play_tone(little_start_notation[i].tone, little_start_notation[i].delay_ms);
+		msleep(30);
+	}
+}
+
+

--
Gitblit v1.9.1