Browse Source

new: 增加实验性质的蜂鸣器发声函数(未来将移除)

fslongjin 2 years ago
parent
commit
3c4a953388
2 changed files with 32 additions and 0 deletions
  1. 25 0
      kernel/common/glib.c
  2. 7 0
      kernel/common/glib.h

+ 25 - 0
kernel/common/glib.c

@@ -1,3 +1,28 @@
 #include "glib.h"
 #include "string.h"
 
+/**
+ * @brief 这个函数让蜂鸣器发声,目前仅用于真机调试。未来将移除,请勿依赖此函数。
+ * 
+ * @param times 发声循环多少遍
+ */
+void __experimental_beep(uint64_t times)
+{
+    io_out8(0x43, 182&0xff);
+    io_out8(0x42, 2280&0xff);
+    io_out8(0x42, (2280>>8)&0xff);
+    uint32_t x = io_in8(0x61)&0xff;
+    x |= 3;
+    io_out8(0x61, x&0xff);
+
+    times *= 10000;
+    for(uint64_t i=0;i<times;++i)
+        pause();
+    x = io_in8(0x61);
+    x &= 0xfc;
+    io_out8(0x61, x&0xff);
+
+    // 延迟一段时间
+    for(uint64_t i=0;i<times;++i)
+        pause();
+}

+ 7 - 0
kernel/common/glib.h

@@ -484,3 +484,10 @@ static inline uint64_t copy_to_user(void *dst, void *src, uint64_t size)
                  : "memory");
     return size;
 }
+
+/**
+ * @brief 这个函数让蜂鸣器发声,目前仅用于真机调试。未来将移除,请勿依赖此函数。
+ * 
+ * @param times 发声循环多少遍
+ */
+void __experimental_beep(uint64_t times);