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

Dependencies:   SDFileSystem MusicEngine

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

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

松葉和仁

Revision:
25:40ab1e81ae43
Parent:
24:c0cc460aadef
Child:
26:f3bc0ee1e9b5
diff -r c0cc460aadef -r 40ab1e81ae43 source/main.cpp
--- a/source/main.cpp	Fri Feb 03 02:15:57 2017 +0000
+++ b/source/main.cpp	Fri Feb 03 02:32:17 2017 +0000
@@ -47,6 +47,9 @@
 char password[] = {0x00,0x00,0x00,0x00,0x00,0x00};//デバッグパスワード
 
 //http://mag.switch-science.com/2015/06/17/fathersday2015/
+int speakerMode = 0;//1:接続 2:切断 3:認証エラー 4:パスワードリセット
+
+//接続
 void connectAlertOff();
 
 /**
@@ -65,7 +68,10 @@
  */
 void connectAlertOff() {
     DEBUG("connectAlertOff\r\n");
-    speakerD = 0;
+    if(speakerMode==1){
+        speakerD = 0;
+        speakerMode = 0;
+    }
 }
 
 /**
@@ -74,10 +80,12 @@
  */
 void connectAlertStart() {
     DEBUG("connectAlertStart\r\n");
+    speakerMode = 1;
     speakerD = 1;
     eventQueue.call(&connectAlertOn);
 }
 
+//切断
 void disconnectAlertOff();
 
 /**
@@ -96,7 +104,10 @@
  */
 void disconnectAlertOff() {
     DEBUG("disconnectAlertOff\r\n");
-    speakerD = 0;
+    if(speakerMode == 2){
+        speakerD = 0;
+        speakerMode = 0;
+    }
 }
 
 /**
@@ -105,10 +116,75 @@
  */
 void disconnectAlertStart() {
     DEBUG("disconnectAlertStart\r\n");
+    speakerMode = 2;
     speakerD = 1;
     eventQueue.call(&disconnectAlertOn);
 }
 
+//認証エラー
+void authErrorAlertOff();
+
+/**
+ *認証エラー発音
+ *認証エラー時に発音を開始するためのキュー
+ */
+void authErrorAlertOn() {
+    DEBUG("authErrorAlertOn\r\n");
+    Speaker.play("T160L4CC");//非同期だった//非同期じゃないとすべての処理が止まるから当たり前か
+    eventQueue.call_in(1500.0f, &authErrorAlertOff);
+}
+
+/**
+ *認証エラー発音
+ *認証エラー時に発音を開始するためのキュー
+ */
+void authErrorAlertOff() {
+    DEBUG("authErrorAlertOff\r\n");
+    if(speakerMode == 3){
+        speakerD = 0;
+        speakerMode = 0;
+    }
+}
+
+/**
+ *認証エラー発音
+ *認証エラー時に発音を開始するためのキュー
+ */
+void authErrorAlertStart() {
+    DEBUG("authErrorAlertStart\r\n");
+    speakerMode = 3;
+    speakerD = 1;
+    eventQueue.call(&authErrorAlertOn);
+}
+
+//パスワードリセット
+void authErrorAlertOff();
+
+/**
+ *パスワードリセット発音
+ *パスワードリセット時に発音を開始するためのキュー
+ */
+void passwordResetAlertOn() {
+    DEBUG("passwordResetAlertOn\r\n");
+    Speaker.play("T160L4CDCDEFEF");
+    eventQueue.call_in(3000.0f, &passwordResetAlertOff);
+}
+
+void passwordResetAlertOff() {
+    DEBUG("passwordResetAlertOff\r\n");
+    if(speakerMode == 4){
+        speakerD = 0;
+        speakerMode = 0;
+    }
+}
+
+void passwordResetAlertStart() {
+    DEBUG("passwordResetAlertStart\r\n");
+    speakerMode = 4;
+    speakerD = 1;
+    eventQueue.call(&passwordResetAlertOn);
+}
+
 /**
  *パワー検出コード
  *タクトスイッチが押されたときに実行されるキュー
@@ -171,6 +247,7 @@
     //パスワード認証状態のリセット
     authenticated=false;
     stateServicePtr->authStateUpdate(0x00);
+    eventQueue.call(&passwordResetAlertStart);
     DEBUG("パスワードのリセットが完了しました\r\n");
 }
 
@@ -347,6 +424,7 @@
             DEBUG("\r\n");
             if(params->data[i]!= password[i]){
                 DEBUG("認証に失敗しました\r\n");
+                eventQueue.call(&authErrorAlertStart);
                 return;
             }
         }