北海道情報専門学校 ライフハック研究所のエンベデッドUSBチーム松葉和仁により開発されたUSBSecのmbedに使用するソースコード by 和仁

Dependencies:   SDFileSystem MusicEngine

Fork of mbed-os-example-ble-LED by mbed-os-examples

北海道情報専門学校 ライフハック研究所 エンベデッドUSB USBSec用mbedプログラム

松葉和仁

Revision:
15:c65fdaa7bfc0
Parent:
14:be4e43ce1578
Child:
16:1ef03a07fbab
--- a/source/main.cpp	Wed Dec 21 02:56:24 2016 +0000
+++ b/source/main.cpp	Thu Jan 19 01:27:19 2017 +0000
@@ -30,7 +30,8 @@
 InterruptIn powerSwitch(p17);//パワー検出コード
 InterruptIn resetSwitch(p18);//リセットボタン
 
-PwmOut speaker(LED3);//スピーカ
+PwmOut speakerP(LED4);//スピーカPWM
+DigitalOut speakerD(LED3, 0);//スピーカ省電力化デジタル
 
 //SDFileSystem local("local");//SDカードを定義する
 SDFileSystem sd(p13,p14,p15,p19,"sd");
@@ -53,6 +54,7 @@
 char password[] = {0x00,0x00,0x00,0x00,0x00,0x00};//デバッグパスワード
 
 int connectAlertCount = 0;
+int disconnectAlertCount = 0;
 float connectAlert[]={mE,mF,mG,mA,mB};
 float disconnectAlert[]={mB,mA,mG,mF,mE};
 
@@ -64,9 +66,9 @@
  */
 void connectAlertOn() {
     DEBUG("connectAlertOn\r\n");
-    speaker.period(1.0/connectAlert[connectAlertCount]);
-    speaker.write(0.5f);
-    queue.call_in(600, &connectAlertOff);
+    speakerP.period(1.0/connectAlert[connectAlertCount]);
+    speakerP.write(0.5f);
+    eventQueue.call_in(1.0f, &connectAlertOff);
 }
 
 /**
@@ -75,11 +77,15 @@
  */
 void connectAlertOff() {
     DEBUG("connectAlertOff\r\n");
-    speaker.write(0.0f);
+    speakerP.write(0.0f);
     if(connectAlertCount<4){
-        queue.call_in(600, &connectAlertOn);
         connectAlertCount += 1;
+        eventQueue.call_in(1.0f, &connectAlertOn);
     }else{
+        if(disconnectAlertCount<=0){
+            speakerD = 0;
+        }
+        connectAlertCount = 0;
         DEBUG("connectAlertStop\r\n");
     }
 }
@@ -90,8 +96,52 @@
  */
 void connectAlertStart() {
     DEBUG("connectAlertStart\r\n");
+    speakerD = 1;
     connectAlertCount = 0;
-    queue.call(&connectAlertOn);
+    eventQueue.call(&connectAlertOn);
+}
+
+void disconnectAlertOff();
+
+/**
+ *切断時発音
+ *切断時に発音されるためのキュー
+ */
+void disconnectAlertOn() {
+    DEBUG("disconnectAlertOn\r\n");
+    speakerP.period(1.0/disconnectAlert[disconnectAlertCount]);
+    speakerP.write(0.5f);
+    eventQueue.call_in(1.0f, &disconnectAlertOff);
+}
+
+/**
+ *切断時発音
+ *切断時に発音されるためのキュー
+ */
+void disconnectAlertOff() {
+    DEBUG("disconnectAlertOff\r\n");
+    speakerP.write(0.0f);
+    if(disconnectAlertCount<4){
+        disconnectAlertCount += 1;
+        eventQueue.call_in(1.0f, &disconnectAlertOn);
+    }else{
+        if(connectAlertCount<=0){
+            speakerD = 0;
+        }
+        disconnectAlertCount = 0;
+        DEBUG("disconnectAlertStop\r\n");
+    }
+}
+
+/**
+ *切断時発音
+ *切断時に発音を開始するためのキュー
+ */
+void disconnectAlertStart() {
+    DEBUG("disconnectAlertStart\r\n");
+    speakerD = 1;
+    disconnectAlertCount = 0;
+    eventQueue.call(&disconnectAlertOn);
 }
 
 /**
@@ -200,6 +250,9 @@
         DEBUG("%d ", params->ownAddr[i]);
     }
     DEBUG("\r\n");
+    
+    
+    eventQueue.call(&connectAlertStart);
         
     DEBUG("BluetoothConnection!\r\n");
 }
@@ -218,6 +271,8 @@
     stateServicePtr->usbStateUpdate(0x00);
     
     BLE::Instance().gap().startAdvertising();
+    
+    eventQueue.call(&disconnectAlertStart);
     DEBUG("BluetoothDisconnection!\r\n");
 }
 
@@ -426,7 +481,7 @@
 }
 
 int main()
-{
+{    
     //SDカードパスワードの取得
     char charpass;//SDカードから取得されたパスワード
     FILE *fp = fopen("/sd/sdtest.txt", "r");