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

Dependencies:   SDFileSystem MusicEngine

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

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

松葉和仁

Committer:
kazu0o2
Date:
Wed Feb 08 03:00:32 2017 +0000
Revision:
37:dcb097426442
Parent:
34:41da17c652f5
term debug console

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 11:7404978b24e7 1 #include <events/mbed_events.h>
mbed_official 2:864ddfb70a9c 2 #include <mbed.h>
kazu0o2 14:be4e43ce1578 3 #include "SDFileSystem.h"
kazu0o2 19:13657e28b099 4 #include "MusicEngine.h"
mbed_official 2:864ddfb70a9c 5 #include "ble/BLE.h"
kazu0o2 14:be4e43ce1578 6 #include "INITService.h"//初期設定とその状態の送信を行う 0x01
kazu0o2 14:be4e43ce1578 7 #include "PINService.h"//パスワードの認証を行う0x02
kazu0o2 14:be4e43ce1578 8 #include "USBService.h"//USB機器の接続、切断を行う 0x03
kazu0o2 14:be4e43ce1578 9 #include "STATEService.h"//認証、電源、USB状態の送信を行う 0x04
kazu0o2 14:be4e43ce1578 10
kazu0o2 14:be4e43ce1578 11 #define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console;
kazu0o2 14:be4e43ce1578 12 * it will have an impact on code-size and power consumption. */
kazu0o2 14:be4e43ce1578 13 #if NEED_CONSOLE_OUTPUT
kazu0o2 14:be4e43ce1578 14 Serial pc(USBTX, USBRX);
kazu0o2 14:be4e43ce1578 15 #define DEBUG(...) { pc.printf(__VA_ARGS__); }
kazu0o2 14:be4e43ce1578 16 #else
kazu0o2 14:be4e43ce1578 17 #define DEBUG(...) /* nothing */
kazu0o2 14:be4e43ce1578 18 #endif /* #if NEED_CONSOLE_OUTPUT */
mbed_official 2:864ddfb70a9c 19
kazu0o2 14:be4e43ce1578 20 DigitalOut alivenessLED(LED1, 0);//システム生存確認LED
kazu0o2 14:be4e43ce1578 21 DigitalOut actuatedLED(LED2, 0);//USB用リレーピン
mbed_official 2:864ddfb70a9c 22
kazu0o2 14:be4e43ce1578 23 InterruptIn powerSwitch(p17);//パワー検出コード
kazu0o2 14:be4e43ce1578 24 InterruptIn resetSwitch(p18);//リセットボタン
kazu0o2 14:be4e43ce1578 25
kazu0o2 15:c65fdaa7bfc0 26 DigitalOut speakerD(LED3, 0);//スピーカ省電力化デジタル
kazu0o2 19:13657e28b099 27 MusicEngine Speaker(LED4);
kazu0o2 14:be4e43ce1578 28
kazu0o2 14:be4e43ce1578 29 //SDFileSystem local("local");//SDカードを定義する
kazu0o2 14:be4e43ce1578 30 SDFileSystem sd(p13,p14,p15,p19,"sd");
kazu0o2 14:be4e43ce1578 31
kazu0o2 14:be4e43ce1578 32 const static char DEVICE_NAME[] = "USBSec";
kazu0o2 14:be4e43ce1578 33 static const uint16_t uuid16_list[] = {USBService::USB_SERVICE_UUID,PINService::PIN_SERVICE_UUID,STATEService::STATE_SERVICE_UUID,INITService::INIT_SERVICE_UUID};//testcode
mbed_official 2:864ddfb70a9c 34
mbed_official 2:864ddfb70a9c 35 static EventQueue eventQueue(
mbed_official 2:864ddfb70a9c 36 /* event count */ 10 * /* event size */ 32
mbed_official 2:864ddfb70a9c 37 );
mbed_official 2:864ddfb70a9c 38
kazu0o2 14:be4e43ce1578 39 USBService *usbServicePtr;
kazu0o2 14:be4e43ce1578 40 PINService *pinServicePtr;
kazu0o2 14:be4e43ce1578 41 STATEService *stateServicePtr;
kazu0o2 14:be4e43ce1578 42 INITService *initServicePtr;
kazu0o2 14:be4e43ce1578 43
kazu0o2 14:be4e43ce1578 44 bool authenticationInformation = false;//パスワードは登録されているか
kazu0o2 14:be4e43ce1578 45 bool authenticated = false;//パスワード認証を行ったか
kazu0o2 14:be4e43ce1578 46
kazu0o2 14:be4e43ce1578 47 char password[] = {0x00,0x00,0x00,0x00,0x00,0x00};//デバッグパスワード
kazu0o2 14:be4e43ce1578 48
kazu0o2 23:64df5e4f1c0c 49 //http://mag.switch-science.com/2015/06/17/fathersday2015/
kazu0o2 28:846bd19a9230 50 //http://www.geocities.co.jp/Playtown-Denei/9628/whatsmml.html
kazu0o2 30:8a28597cfa6e 51 int speakerMode = 0;//1:接続 2:切断 3:認証エラー 4:パスワードリセット 5:起動 6:USB有効 7:USB無効
kazu0o2 32:c547412e77e3 52 int lastSpeakerId = -1;
kazu0o2 25:40ab1e81ae43 53
kazu0o2 25:40ab1e81ae43 54 //接続
kazu0o2 14:be4e43ce1578 55 void connectAlertOff();
kazu0o2 14:be4e43ce1578 56
kazu0o2 14:be4e43ce1578 57 /**
kazu0o2 14:be4e43ce1578 58 *接続時発音
kazu0o2 14:be4e43ce1578 59 *接続時に発音されるためのキュー
kazu0o2 14:be4e43ce1578 60 */
kazu0o2 14:be4e43ce1578 61 void connectAlertOn() {
kazu0o2 14:be4e43ce1578 62 DEBUG("connectAlertOn\r\n");
kazu0o2 29:9d2335450cd4 63 Speaker.play("T160L4CDEFEDCB+");//カエルの歌
kazu0o2 29:9d2335450cd4 64 //Speaker.play("T240L4CO4DO4EO4F");//再現
kazu0o2 32:c547412e77e3 65
kazu0o2 32:c547412e77e3 66 //直前のスピーカーの省電力モード移行をキャンセルする
kazu0o2 32:c547412e77e3 67 if(lastSpeakerId >=0){
kazu0o2 32:c547412e77e3 68 eventQueue.cancel(lastSpeakerId);
kazu0o2 32:c547412e77e3 69 DEBUG("キュー %d をキャンセルしました\r\n",lastSpeakerId);
kazu0o2 32:c547412e77e3 70 }
kazu0o2 32:c547412e77e3 71 lastSpeakerId=eventQueue.call_in(3000.0f, &connectAlertOff);
kazu0o2 14:be4e43ce1578 72 }
kazu0o2 14:be4e43ce1578 73
kazu0o2 14:be4e43ce1578 74 /**
kazu0o2 14:be4e43ce1578 75 *接続時発音
kazu0o2 14:be4e43ce1578 76 *接続時に発音されるためのキュー
kazu0o2 14:be4e43ce1578 77 */
kazu0o2 14:be4e43ce1578 78 void connectAlertOff() {
kazu0o2 21:969148afd29e 79 DEBUG("connectAlertOff\r\n");
kazu0o2 25:40ab1e81ae43 80 if(speakerMode==1){
kazu0o2 25:40ab1e81ae43 81 speakerD = 0;
kazu0o2 25:40ab1e81ae43 82 speakerMode = 0;
kazu0o2 25:40ab1e81ae43 83 }
kazu0o2 14:be4e43ce1578 84 }
kazu0o2 14:be4e43ce1578 85
kazu0o2 14:be4e43ce1578 86 /**
kazu0o2 14:be4e43ce1578 87 *接続時発音
kazu0o2 14:be4e43ce1578 88 *接続時に発音を開始するためのキュー
kazu0o2 14:be4e43ce1578 89 */
kazu0o2 14:be4e43ce1578 90 void connectAlertStart() {
kazu0o2 14:be4e43ce1578 91 DEBUG("connectAlertStart\r\n");
kazu0o2 25:40ab1e81ae43 92 speakerMode = 1;
kazu0o2 15:c65fdaa7bfc0 93 speakerD = 1;
kazu0o2 15:c65fdaa7bfc0 94 eventQueue.call(&connectAlertOn);
kazu0o2 15:c65fdaa7bfc0 95 }
kazu0o2 15:c65fdaa7bfc0 96
kazu0o2 25:40ab1e81ae43 97 //切断
kazu0o2 15:c65fdaa7bfc0 98 void disconnectAlertOff();
kazu0o2 15:c65fdaa7bfc0 99
kazu0o2 15:c65fdaa7bfc0 100 /**
kazu0o2 15:c65fdaa7bfc0 101 *切断時発音
kazu0o2 15:c65fdaa7bfc0 102 *切断時に発音されるためのキュー
kazu0o2 15:c65fdaa7bfc0 103 */
kazu0o2 15:c65fdaa7bfc0 104 void disconnectAlertOn() {
kazu0o2 15:c65fdaa7bfc0 105 DEBUG("disconnectAlertOn\r\n");
kazu0o2 30:8a28597cfa6e 106 Speaker.play("T160L4CR4CR4CR4CR4");
kazu0o2 32:c547412e77e3 107
kazu0o2 32:c547412e77e3 108 if(lastSpeakerId >=0){
kazu0o2 32:c547412e77e3 109 eventQueue.cancel(lastSpeakerId);
kazu0o2 32:c547412e77e3 110 DEBUG("キュー %d をキャンセルしました\r\n",lastSpeakerId);
kazu0o2 32:c547412e77e3 111 }
kazu0o2 32:c547412e77e3 112 lastSpeakerId=eventQueue.call_in(3000.0f, &disconnectAlertOff);
kazu0o2 15:c65fdaa7bfc0 113 }
kazu0o2 15:c65fdaa7bfc0 114
kazu0o2 15:c65fdaa7bfc0 115 /**
kazu0o2 15:c65fdaa7bfc0 116 *切断時発音
kazu0o2 15:c65fdaa7bfc0 117 *切断時に発音されるためのキュー
kazu0o2 15:c65fdaa7bfc0 118 */
kazu0o2 15:c65fdaa7bfc0 119 void disconnectAlertOff() {
kazu0o2 15:c65fdaa7bfc0 120 DEBUG("disconnectAlertOff\r\n");
kazu0o2 25:40ab1e81ae43 121 if(speakerMode == 2){
kazu0o2 25:40ab1e81ae43 122 speakerD = 0;
kazu0o2 25:40ab1e81ae43 123 speakerMode = 0;
kazu0o2 25:40ab1e81ae43 124 }
kazu0o2 15:c65fdaa7bfc0 125 }
kazu0o2 15:c65fdaa7bfc0 126
kazu0o2 15:c65fdaa7bfc0 127 /**
kazu0o2 15:c65fdaa7bfc0 128 *切断時発音
kazu0o2 15:c65fdaa7bfc0 129 *切断時に発音を開始するためのキュー
kazu0o2 15:c65fdaa7bfc0 130 */
kazu0o2 15:c65fdaa7bfc0 131 void disconnectAlertStart() {
kazu0o2 15:c65fdaa7bfc0 132 DEBUG("disconnectAlertStart\r\n");
kazu0o2 25:40ab1e81ae43 133 speakerMode = 2;
kazu0o2 15:c65fdaa7bfc0 134 speakerD = 1;
kazu0o2 15:c65fdaa7bfc0 135 eventQueue.call(&disconnectAlertOn);
kazu0o2 14:be4e43ce1578 136 }
kazu0o2 14:be4e43ce1578 137
kazu0o2 25:40ab1e81ae43 138 //認証エラー
kazu0o2 25:40ab1e81ae43 139 void authErrorAlertOff();
kazu0o2 25:40ab1e81ae43 140
kazu0o2 25:40ab1e81ae43 141 /**
kazu0o2 25:40ab1e81ae43 142 *認証エラー発音
kazu0o2 25:40ab1e81ae43 143 *認証エラー時に発音を開始するためのキュー
kazu0o2 25:40ab1e81ae43 144 */
kazu0o2 25:40ab1e81ae43 145 void authErrorAlertOn() {
kazu0o2 25:40ab1e81ae43 146 DEBUG("authErrorAlertOn\r\n");
kazu0o2 30:8a28597cfa6e 147 Speaker.play("T160L4CC");
kazu0o2 32:c547412e77e3 148
kazu0o2 32:c547412e77e3 149 if(lastSpeakerId >=0){
kazu0o2 32:c547412e77e3 150 eventQueue.cancel(lastSpeakerId);
kazu0o2 32:c547412e77e3 151 DEBUG("キュー %d をキャンセルしました\r\n",lastSpeakerId);
kazu0o2 32:c547412e77e3 152 }
kazu0o2 32:c547412e77e3 153 lastSpeakerId=eventQueue.call_in(1500.0f, &authErrorAlertOff);
kazu0o2 25:40ab1e81ae43 154 }
kazu0o2 25:40ab1e81ae43 155
kazu0o2 25:40ab1e81ae43 156 /**
kazu0o2 25:40ab1e81ae43 157 *認証エラー発音
kazu0o2 25:40ab1e81ae43 158 *認証エラー時に発音を開始するためのキュー
kazu0o2 25:40ab1e81ae43 159 */
kazu0o2 25:40ab1e81ae43 160 void authErrorAlertOff() {
kazu0o2 25:40ab1e81ae43 161 DEBUG("authErrorAlertOff\r\n");
kazu0o2 25:40ab1e81ae43 162 if(speakerMode == 3){
kazu0o2 25:40ab1e81ae43 163 speakerD = 0;
kazu0o2 25:40ab1e81ae43 164 speakerMode = 0;
kazu0o2 25:40ab1e81ae43 165 }
kazu0o2 25:40ab1e81ae43 166 }
kazu0o2 25:40ab1e81ae43 167
kazu0o2 25:40ab1e81ae43 168 /**
kazu0o2 25:40ab1e81ae43 169 *認証エラー発音
kazu0o2 25:40ab1e81ae43 170 *認証エラー時に発音を開始するためのキュー
kazu0o2 25:40ab1e81ae43 171 */
kazu0o2 25:40ab1e81ae43 172 void authErrorAlertStart() {
kazu0o2 25:40ab1e81ae43 173 DEBUG("authErrorAlertStart\r\n");
kazu0o2 25:40ab1e81ae43 174 speakerMode = 3;
kazu0o2 25:40ab1e81ae43 175 speakerD = 1;
kazu0o2 25:40ab1e81ae43 176 eventQueue.call(&authErrorAlertOn);
kazu0o2 25:40ab1e81ae43 177 }
kazu0o2 25:40ab1e81ae43 178
kazu0o2 25:40ab1e81ae43 179 //パスワードリセット
kazu0o2 26:f3bc0ee1e9b5 180 void passwordResetAlertOff();
kazu0o2 25:40ab1e81ae43 181
kazu0o2 25:40ab1e81ae43 182 /**
kazu0o2 25:40ab1e81ae43 183 *パスワードリセット発音
kazu0o2 25:40ab1e81ae43 184 *パスワードリセット時に発音を開始するためのキュー
kazu0o2 25:40ab1e81ae43 185 */
kazu0o2 25:40ab1e81ae43 186 void passwordResetAlertOn() {
kazu0o2 25:40ab1e81ae43 187 DEBUG("passwordResetAlertOn\r\n");
kazu0o2 25:40ab1e81ae43 188 Speaker.play("T160L4CDCDEFEF");
kazu0o2 32:c547412e77e3 189
kazu0o2 32:c547412e77e3 190 if(lastSpeakerId >=0){
kazu0o2 32:c547412e77e3 191 eventQueue.cancel(lastSpeakerId);
kazu0o2 32:c547412e77e3 192 DEBUG("キュー %d をキャンセルしました\r\n",lastSpeakerId);
kazu0o2 32:c547412e77e3 193 }
kazu0o2 32:c547412e77e3 194 lastSpeakerId=eventQueue.call_in(3000.0f, &passwordResetAlertOff);
kazu0o2 25:40ab1e81ae43 195 }
kazu0o2 25:40ab1e81ae43 196
kazu0o2 25:40ab1e81ae43 197 void passwordResetAlertOff() {
kazu0o2 25:40ab1e81ae43 198 DEBUG("passwordResetAlertOff\r\n");
kazu0o2 25:40ab1e81ae43 199 if(speakerMode == 4){
kazu0o2 25:40ab1e81ae43 200 speakerD = 0;
kazu0o2 25:40ab1e81ae43 201 speakerMode = 0;
kazu0o2 25:40ab1e81ae43 202 }
kazu0o2 25:40ab1e81ae43 203 }
kazu0o2 25:40ab1e81ae43 204
kazu0o2 25:40ab1e81ae43 205 void passwordResetAlertStart() {
kazu0o2 25:40ab1e81ae43 206 DEBUG("passwordResetAlertStart\r\n");
kazu0o2 25:40ab1e81ae43 207 speakerMode = 4;
kazu0o2 25:40ab1e81ae43 208 speakerD = 1;
kazu0o2 25:40ab1e81ae43 209 eventQueue.call(&passwordResetAlertOn);
kazu0o2 25:40ab1e81ae43 210 }
kazu0o2 25:40ab1e81ae43 211
kazu0o2 27:2416a123f5ad 212 //起動音
kazu0o2 27:2416a123f5ad 213 void startupAlertOff();
kazu0o2 27:2416a123f5ad 214
kazu0o2 27:2416a123f5ad 215 /**
kazu0o2 27:2416a123f5ad 216 *起動発音
kazu0o2 27:2416a123f5ad 217 *移動時に発音を開始するためのキュー
kazu0o2 27:2416a123f5ad 218 */
kazu0o2 27:2416a123f5ad 219 void startupAlertOn() {
kazu0o2 27:2416a123f5ad 220 DEBUG("startupAlertOn\r\n");
kazu0o2 27:2416a123f5ad 221 Speaker.play("T160L4CDCDEFE");
kazu0o2 32:c547412e77e3 222
kazu0o2 32:c547412e77e3 223 if(lastSpeakerId >=0){
kazu0o2 32:c547412e77e3 224 eventQueue.cancel(lastSpeakerId);
kazu0o2 32:c547412e77e3 225 DEBUG("キュー %d をキャンセルしました\r\n",lastSpeakerId);
kazu0o2 32:c547412e77e3 226 }
kazu0o2 32:c547412e77e3 227 lastSpeakerId=eventQueue.call_in(3000.0f, &startupAlertOff);
kazu0o2 27:2416a123f5ad 228 }
kazu0o2 27:2416a123f5ad 229
kazu0o2 27:2416a123f5ad 230 void startupAlertOff() {
kazu0o2 27:2416a123f5ad 231 DEBUG("startupAlertOff\r\n");
kazu0o2 27:2416a123f5ad 232 if(speakerMode == 5){
kazu0o2 27:2416a123f5ad 233 speakerD = 0;
kazu0o2 27:2416a123f5ad 234 speakerMode = 0;
kazu0o2 27:2416a123f5ad 235 }
kazu0o2 27:2416a123f5ad 236 }
kazu0o2 27:2416a123f5ad 237
kazu0o2 27:2416a123f5ad 238 void startupAlertStart() {
kazu0o2 27:2416a123f5ad 239 DEBUG("startupAlertStart\r\n");
kazu0o2 27:2416a123f5ad 240 speakerMode = 5;
kazu0o2 27:2416a123f5ad 241 speakerD = 1;
kazu0o2 27:2416a123f5ad 242 eventQueue.call(&startupAlertOn);
kazu0o2 27:2416a123f5ad 243 }
kazu0o2 27:2416a123f5ad 244
kazu0o2 30:8a28597cfa6e 245 //USB有効
kazu0o2 30:8a28597cfa6e 246 void enableUSBAlertOff();
kazu0o2 30:8a28597cfa6e 247
kazu0o2 30:8a28597cfa6e 248 /**
kazu0o2 30:8a28597cfa6e 249 *USB有効発音
kazu0o2 30:8a28597cfa6e 250 *USBの回路を有効にする際に発音を開始するためのキュー
kazu0o2 30:8a28597cfa6e 251 */
kazu0o2 30:8a28597cfa6e 252 void enableUSBAlertOn(){
kazu0o2 30:8a28597cfa6e 253 DEBUG("enableUSBAlertOn\r\n");
kazu0o2 31:0568376f3399 254 Speaker.play("T200L4CE");
kazu0o2 32:c547412e77e3 255
kazu0o2 32:c547412e77e3 256 if(lastSpeakerId >=0){
kazu0o2 32:c547412e77e3 257 eventQueue.cancel(lastSpeakerId);
kazu0o2 32:c547412e77e3 258 DEBUG("キュー %d をキャンセルしました\r\n",lastSpeakerId);
kazu0o2 32:c547412e77e3 259 }
kazu0o2 32:c547412e77e3 260 lastSpeakerId=eventQueue.call_in(3000.0f, &enableUSBAlertOff);
kazu0o2 30:8a28597cfa6e 261 }
kazu0o2 30:8a28597cfa6e 262
kazu0o2 30:8a28597cfa6e 263 void enableUSBAlertOff() {
kazu0o2 30:8a28597cfa6e 264 DEBUG("enableUSBAlertOff\r\n");
kazu0o2 30:8a28597cfa6e 265 if(speakerMode == 6){
kazu0o2 30:8a28597cfa6e 266 speakerD = 0;
kazu0o2 30:8a28597cfa6e 267 speakerMode = 0;
kazu0o2 30:8a28597cfa6e 268 }
kazu0o2 30:8a28597cfa6e 269 }
kazu0o2 30:8a28597cfa6e 270
kazu0o2 30:8a28597cfa6e 271 void enableUSBAlertStart() {
kazu0o2 30:8a28597cfa6e 272 DEBUG("enableUSBAlertStart\r\n");
kazu0o2 30:8a28597cfa6e 273 if(speakerMode == 1){
kazu0o2 30:8a28597cfa6e 274 DEBUG("接続アラートが有効なため中止しました\r\n");
kazu0o2 30:8a28597cfa6e 275 return;
kazu0o2 30:8a28597cfa6e 276 }
kazu0o2 30:8a28597cfa6e 277 speakerMode = 6;
kazu0o2 30:8a28597cfa6e 278 speakerD = 1;
kazu0o2 30:8a28597cfa6e 279 eventQueue.call(&enableUSBAlertOn);
kazu0o2 30:8a28597cfa6e 280 }
kazu0o2 30:8a28597cfa6e 281
kazu0o2 30:8a28597cfa6e 282 //USB無効
kazu0o2 30:8a28597cfa6e 283 void disableUSBAlertOff();
kazu0o2 30:8a28597cfa6e 284
kazu0o2 30:8a28597cfa6e 285 /**
kazu0o2 30:8a28597cfa6e 286 *USB無効発音
kazu0o2 30:8a28597cfa6e 287 *USBの回路を無効にする際に発音を開始するためのキュー
kazu0o2 30:8a28597cfa6e 288 */
kazu0o2 30:8a28597cfa6e 289 void disableUSBAlertOn(){
kazu0o2 30:8a28597cfa6e 290 DEBUG("disableUSBAlertOn\r\n");
kazu0o2 31:0568376f3399 291 Speaker.play("T200L4EC");
kazu0o2 32:c547412e77e3 292
kazu0o2 32:c547412e77e3 293 if(lastSpeakerId >=0){
kazu0o2 32:c547412e77e3 294 eventQueue.cancel(lastSpeakerId);
kazu0o2 32:c547412e77e3 295 DEBUG("キュー %d をキャンセルしました\r\n",lastSpeakerId);
kazu0o2 32:c547412e77e3 296 }
kazu0o2 32:c547412e77e3 297 lastSpeakerId=eventQueue.call_in(3000.0f, &disableUSBAlertOff);
kazu0o2 30:8a28597cfa6e 298 }
kazu0o2 30:8a28597cfa6e 299
kazu0o2 30:8a28597cfa6e 300 void disableUSBAlertOff() {
kazu0o2 30:8a28597cfa6e 301 DEBUG("disableUSBAlertOff\r\n");
kazu0o2 30:8a28597cfa6e 302 if(speakerMode == 7){
kazu0o2 30:8a28597cfa6e 303 speakerD = 0;
kazu0o2 30:8a28597cfa6e 304 speakerMode = 0;
kazu0o2 30:8a28597cfa6e 305 }
kazu0o2 30:8a28597cfa6e 306 }
kazu0o2 30:8a28597cfa6e 307
kazu0o2 30:8a28597cfa6e 308 void disableUSBAlertStart() {
kazu0o2 30:8a28597cfa6e 309 DEBUG("disableUSBAlertStart\r\n");
kazu0o2 30:8a28597cfa6e 310 if(speakerMode == 2){
kazu0o2 30:8a28597cfa6e 311 DEBUG("切断アラートが有効なため中止しました\r\n");
kazu0o2 30:8a28597cfa6e 312 return;
kazu0o2 30:8a28597cfa6e 313 }
kazu0o2 30:8a28597cfa6e 314 speakerMode = 7;
kazu0o2 30:8a28597cfa6e 315 speakerD = 1;
kazu0o2 30:8a28597cfa6e 316 eventQueue.call(&disableUSBAlertOn);
kazu0o2 30:8a28597cfa6e 317 }
kazu0o2 30:8a28597cfa6e 318
kazu0o2 14:be4e43ce1578 319 /**
kazu0o2 14:be4e43ce1578 320 *パワー検出コード
kazu0o2 14:be4e43ce1578 321 *タクトスイッチが押されたときに実行されるキュー
kazu0o2 14:be4e43ce1578 322 */
kazu0o2 14:be4e43ce1578 323 void togglePowerUp() {
kazu0o2 14:be4e43ce1578 324 DEBUG("PowerUp\r\n");
kazu0o2 14:be4e43ce1578 325 stateServicePtr->powerStateUpdate(0x01);
kazu0o2 14:be4e43ce1578 326 }
kazu0o2 14:be4e43ce1578 327
kazu0o2 14:be4e43ce1578 328 /**
kazu0o2 14:be4e43ce1578 329 *パワー検出コード
kazu0o2 14:be4e43ce1578 330 *タクトスイッチが離されたときに実行されるキュー
kazu0o2 14:be4e43ce1578 331 */
kazu0o2 14:be4e43ce1578 332 void togglePowerDown() {
kazu0o2 14:be4e43ce1578 333 DEBUG("PowerDown\r\n");
kazu0o2 14:be4e43ce1578 334 stateServicePtr->powerStateUpdate(0x00);
kazu0o2 14:be4e43ce1578 335
kazu0o2 14:be4e43ce1578 336 //USBの無効化
kazu0o2 14:be4e43ce1578 337 actuatedLED = 0x00;
kazu0o2 14:be4e43ce1578 338 stateServicePtr->usbStateUpdate(0x00);
kazu0o2 14:be4e43ce1578 339 }
kazu0o2 14:be4e43ce1578 340
kazu0o2 14:be4e43ce1578 341 /**
kazu0o2 14:be4e43ce1578 342 *パワー検出コード
kazu0o2 14:be4e43ce1578 343 *タクトスイッチが押されたときに実行される関数
kazu0o2 14:be4e43ce1578 344 */
kazu0o2 14:be4e43ce1578 345 void powerUp() {
kazu0o2 14:be4e43ce1578 346 // 即実行されるイベント
kazu0o2 14:be4e43ce1578 347 eventQueue.call(&togglePowerUp);
kazu0o2 14:be4e43ce1578 348 }
mbed_official 2:864ddfb70a9c 349
kazu0o2 14:be4e43ce1578 350 /**
kazu0o2 14:be4e43ce1578 351 *パワー検出コード
kazu0o2 14:be4e43ce1578 352 *タクトスイッチが離されたときに実行される関数
kazu0o2 14:be4e43ce1578 353 */
kazu0o2 14:be4e43ce1578 354 void powerDown() {
kazu0o2 14:be4e43ce1578 355 // 即実行されるイベント
kazu0o2 14:be4e43ce1578 356 eventQueue.call(&togglePowerDown);
kazu0o2 14:be4e43ce1578 357 }
kazu0o2 14:be4e43ce1578 358
kazu0o2 14:be4e43ce1578 359 /**
kazu0o2 14:be4e43ce1578 360 *リセットボタン
kazu0o2 14:be4e43ce1578 361 *タクトスイッチが離されたときに実行されるキュー
kazu0o2 14:be4e43ce1578 362 */
kazu0o2 14:be4e43ce1578 363 void toggleResetDown() {
kazu0o2 14:be4e43ce1578 364 DEBUG("ResetDown\r\n");
kazu0o2 14:be4e43ce1578 365 DEBUG("パスワードのリセットを行います\r\n");
kazu0o2 14:be4e43ce1578 366 //リセットパスワードの書き込み
kazu0o2 14:be4e43ce1578 367 FILE *fp = fopen("/sd/sdtest.txt", "w");
kazu0o2 14:be4e43ce1578 368 if(fp == NULL) {
kazu0o2 14:be4e43ce1578 369 DEBUG("Could not open file for write\n");
kazu0o2 14:be4e43ce1578 370 }else{
kazu0o2 14:be4e43ce1578 371 fprintf(fp, "00\n00\n00\n00\n00\n00\n");
kazu0o2 14:be4e43ce1578 372 fclose(fp);
kazu0o2 14:be4e43ce1578 373 }
kazu0o2 14:be4e43ce1578 374
kazu0o2 14:be4e43ce1578 375 //パスワード登録状態のリセット
kazu0o2 14:be4e43ce1578 376 authenticationInformation = false;
kazu0o2 14:be4e43ce1578 377 initServicePtr->stateUpdate(0x00);
kazu0o2 14:be4e43ce1578 378 //パスワード認証状態のリセット
kazu0o2 14:be4e43ce1578 379 authenticated=false;
kazu0o2 14:be4e43ce1578 380 stateServicePtr->authStateUpdate(0x00);
kazu0o2 25:40ab1e81ae43 381 eventQueue.call(&passwordResetAlertStart);
kazu0o2 14:be4e43ce1578 382 DEBUG("パスワードのリセットが完了しました\r\n");
kazu0o2 14:be4e43ce1578 383 }
kazu0o2 14:be4e43ce1578 384
kazu0o2 14:be4e43ce1578 385 /**
kazu0o2 14:be4e43ce1578 386 *リセットボタン
kazu0o2 14:be4e43ce1578 387 *タクトスイッチが離されたときに実行される関数
kazu0o2 14:be4e43ce1578 388 */
kazu0o2 14:be4e43ce1578 389 void resetDown() {
kazu0o2 14:be4e43ce1578 390 // 即実行されるイベント
kazu0o2 14:be4e43ce1578 391 eventQueue.call(&toggleResetDown);
kazu0o2 14:be4e43ce1578 392 }
kazu0o2 14:be4e43ce1578 393
kazu0o2 14:be4e43ce1578 394 /**
kazu0o2 14:be4e43ce1578 395 * Bluetooth接続時の操作
kazu0o2 14:be4e43ce1578 396 */
kazu0o2 14:be4e43ce1578 397 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
kazu0o2 14:be4e43ce1578 398 {
kazu0o2 14:be4e43ce1578 399 char mac[6];
kazu0o2 14:be4e43ce1578 400 DEBUG("peerMAC:%d\r\n",params->peerAddr);
kazu0o2 14:be4e43ce1578 401 DEBUG("peerMAC_length:%d\r\n",sizeof(params->peerAddr));
kazu0o2 14:be4e43ce1578 402 DEBUG("peerMAC:");
kazu0o2 14:be4e43ce1578 403 for(int i = 0;i<sizeof(params->peerAddr);i+=1){
kazu0o2 14:be4e43ce1578 404 mac[i]=params->peerAddr[i];
kazu0o2 14:be4e43ce1578 405 DEBUG("%02x ", params->peerAddr[i]);
kazu0o2 14:be4e43ce1578 406 }
kazu0o2 14:be4e43ce1578 407 DEBUG("\r\n");
kazu0o2 14:be4e43ce1578 408
kazu0o2 14:be4e43ce1578 409 /*
kazu0o2 14:be4e43ce1578 410 DEBUG("peerArrayMAC:%d\r\n",mac);
kazu0o2 14:be4e43ce1578 411 DEBUG("peerArrayMAC_length:%d\r\n",sizeof(mac));
kazu0o2 14:be4e43ce1578 412 DEBUG("peerArrayMAC:");
kazu0o2 14:be4e43ce1578 413 for(int i = 0;i<sizeof(mac);i+=1){
kazu0o2 14:be4e43ce1578 414 DEBUG("%d ", mac[i]);
kazu0o2 14:be4e43ce1578 415 }
kazu0o2 14:be4e43ce1578 416 DEBUG("\r\n");
kazu0o2 14:be4e43ce1578 417 */
kazu0o2 14:be4e43ce1578 418
kazu0o2 14:be4e43ce1578 419 DEBUG("ownAddrMAC:%d\r\n",params->ownAddr);
kazu0o2 14:be4e43ce1578 420 DEBUG("ownAddrMAC_length:%d\r\n",sizeof(params->ownAddr));
kazu0o2 14:be4e43ce1578 421 DEBUG("ownAddrMAC:");
kazu0o2 14:be4e43ce1578 422 for(int i = 0;i<sizeof(params->ownAddr);i+=1){
kazu0o2 14:be4e43ce1578 423 DEBUG("%d ", params->ownAddr[i]);
kazu0o2 14:be4e43ce1578 424 }
kazu0o2 14:be4e43ce1578 425 DEBUG("\r\n");
kazu0o2 15:c65fdaa7bfc0 426
kazu0o2 15:c65fdaa7bfc0 427
kazu0o2 15:c65fdaa7bfc0 428 eventQueue.call(&connectAlertStart);
kazu0o2 14:be4e43ce1578 429
kazu0o2 14:be4e43ce1578 430 DEBUG("BluetoothConnection!\r\n");
kazu0o2 14:be4e43ce1578 431 }
kazu0o2 14:be4e43ce1578 432
kazu0o2 14:be4e43ce1578 433 /**
kazu0o2 14:be4e43ce1578 434 * Bluetooth切断時の操作
kazu0o2 14:be4e43ce1578 435 */
mbed_official 2:864ddfb70a9c 436 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
mbed_official 2:864ddfb70a9c 437 {
mbed_official 2:864ddfb70a9c 438 (void) params;
kazu0o2 14:be4e43ce1578 439 //認証状態の無効化
kazu0o2 14:be4e43ce1578 440 authenticated = false;
kazu0o2 14:be4e43ce1578 441 stateServicePtr->authStateUpdate(0x00);
kazu0o2 14:be4e43ce1578 442 //USBの無効化
kazu0o2 14:be4e43ce1578 443 actuatedLED = 0x00;
kazu0o2 14:be4e43ce1578 444 stateServicePtr->usbStateUpdate(0x00);
kazu0o2 14:be4e43ce1578 445
mbed_official 2:864ddfb70a9c 446 BLE::Instance().gap().startAdvertising();
kazu0o2 15:c65fdaa7bfc0 447
kazu0o2 15:c65fdaa7bfc0 448 eventQueue.call(&disconnectAlertStart);
kazu0o2 14:be4e43ce1578 449 DEBUG("BluetoothDisconnection!\r\n");
mbed_official 2:864ddfb70a9c 450 }
mbed_official 2:864ddfb70a9c 451
kazu0o2 14:be4e43ce1578 452 /**
kazu0o2 14:be4e43ce1578 453 *動作確認ランプの状態変更
kazu0o2 14:be4e43ce1578 454 */
mbed_official 2:864ddfb70a9c 455 void blinkCallback(void)
mbed_official 2:864ddfb70a9c 456 {
mbed_official 2:864ddfb70a9c 457 alivenessLED = !alivenessLED; /* Do blinky on LED1 to indicate system aliveness. */
mbed_official 2:864ddfb70a9c 458 }
mbed_official 2:864ddfb70a9c 459
kazu0o2 14:be4e43ce1578 460
kazu0o2 14:be4e43ce1578 461 /**
kazu0o2 14:be4e43ce1578 462 *パスワードSDカード書き込み
kazu0o2 14:be4e43ce1578 463 *パスワードが変更されたときに実行されるキュー
kazu0o2 14:be4e43ce1578 464 */
kazu0o2 14:be4e43ce1578 465 void writeSD() {
kazu0o2 14:be4e43ce1578 466 //SDへの書き込み処理
kazu0o2 14:be4e43ce1578 467 DEBUG("SDカードを開きます\r\n");
kazu0o2 14:be4e43ce1578 468 FILE *fp = fopen("/sd/sdtest.txt", "w");
kazu0o2 14:be4e43ce1578 469 if(fp == NULL) {
kazu0o2 14:be4e43ce1578 470 DEBUG("Could not open file for write\n");
kazu0o2 14:be4e43ce1578 471 }else{
kazu0o2 14:be4e43ce1578 472 for(int i = 0;i<sizeof(password);i+=1){
kazu0o2 14:be4e43ce1578 473 fprintf(fp,"%02x", password[i]);
kazu0o2 14:be4e43ce1578 474 fprintf(fp, "\n");
kazu0o2 14:be4e43ce1578 475 }
kazu0o2 14:be4e43ce1578 476 fclose(fp);
kazu0o2 14:be4e43ce1578 477 }
kazu0o2 14:be4e43ce1578 478 DEBUG("SDカードを閉じます\r\n");
kazu0o2 14:be4e43ce1578 479 }
kazu0o2 14:be4e43ce1578 480
mbed_official 2:864ddfb70a9c 481 /**
mbed_official 2:864ddfb70a9c 482 * This callback allows the LEDService to receive updates to the ledState Characteristic.
kazu0o2 14:be4e43ce1578 483 * LEDサービスにて状態変更を受信した際に呼び出されるコールバック
mbed_official 2:864ddfb70a9c 484 *
mbed_official 2:864ddfb70a9c 485 * @param[in] params
mbed_official 2:864ddfb70a9c 486 * Information about the characterisitc being updated.
mbed_official 2:864ddfb70a9c 487 */
mbed_official 2:864ddfb70a9c 488 void onDataWrittenCallback(const GattWriteCallbackParams *params) {
kazu0o2 14:be4e43ce1578 489 DEBUG("onDataWrittenCallback:");
kazu0o2 14:be4e43ce1578 490
kazu0o2 14:be4e43ce1578 491 if (params->handle == initServicePtr->getValueHandle()) {
kazu0o2 14:be4e43ce1578 492 DEBUG("INITService\r\n");
kazu0o2 14:be4e43ce1578 493 DEBUG("length:%d\r\n",params->len);
kazu0o2 14:be4e43ce1578 494 for(int i = 0;i<params->len;i+=1){
kazu0o2 14:be4e43ce1578 495 DEBUG("%02x ", params->data[i]);
kazu0o2 14:be4e43ce1578 496 }
kazu0o2 14:be4e43ce1578 497 DEBUG("\r\n");
kazu0o2 14:be4e43ce1578 498
kazu0o2 14:be4e43ce1578 499 //認証情報の確認
kazu0o2 14:be4e43ce1578 500 if(authenticationInformation){
kazu0o2 14:be4e43ce1578 501 //認証情報が登録されていた場合は登録を行わない
kazu0o2 14:be4e43ce1578 502 DEBUG("認証情報登録済みのため、認証情報の登録を中止します\r\n");
kazu0o2 14:be4e43ce1578 503 return;
kazu0o2 14:be4e43ce1578 504 }
kazu0o2 14:be4e43ce1578 505
kazu0o2 14:be4e43ce1578 506 DEBUG("認証情報の登録を開始します\r\n");
kazu0o2 14:be4e43ce1578 507
kazu0o2 14:be4e43ce1578 508 for(int i = 0;i<params->len;i+=1){
kazu0o2 14:be4e43ce1578 509 password[i] = params->data[i];
kazu0o2 14:be4e43ce1578 510 }
kazu0o2 14:be4e43ce1578 511
kazu0o2 14:be4e43ce1578 512 DEBUG("PasswordLength:%d\r\n",sizeof(password));
kazu0o2 14:be4e43ce1578 513 for(int i = 0;i<sizeof(password);i+=1){
kazu0o2 14:be4e43ce1578 514 DEBUG("%02x ", password[i]);
kazu0o2 14:be4e43ce1578 515 }
kazu0o2 14:be4e43ce1578 516 DEBUG("\r\n");
kazu0o2 14:be4e43ce1578 517
kazu0o2 14:be4e43ce1578 518 authenticationInformation = true;
kazu0o2 14:be4e43ce1578 519 initServicePtr->stateUpdate(0x01);
kazu0o2 14:be4e43ce1578 520
kazu0o2 14:be4e43ce1578 521
kazu0o2 14:be4e43ce1578 522 // 即実行されるイベント
kazu0o2 14:be4e43ce1578 523 eventQueue.call(&writeSD);
kazu0o2 14:be4e43ce1578 524
kazu0o2 14:be4e43ce1578 525 DEBUG("認証情報の登録を終了します\r\n");
kazu0o2 14:be4e43ce1578 526 return;
kazu0o2 14:be4e43ce1578 527 }
kazu0o2 14:be4e43ce1578 528
kazu0o2 14:be4e43ce1578 529 if(!authenticationInformation){
kazu0o2 14:be4e43ce1578 530 //認証情報が登録されていない場合は操作を行わない
kazu0o2 14:be4e43ce1578 531 DEBUG("\r\n認証情報未登録のため、操作を中止します\r\n");
kazu0o2 14:be4e43ce1578 532 return;
kazu0o2 14:be4e43ce1578 533 }
kazu0o2 14:be4e43ce1578 534
kazu0o2 14:be4e43ce1578 535 if (params->handle == pinServicePtr->getValueHandle()) {
kazu0o2 14:be4e43ce1578 536 DEBUG("PINService\r\n");
kazu0o2 14:be4e43ce1578 537 DEBUG("length:%d\r\n",params->len);
kazu0o2 14:be4e43ce1578 538 for(int i = 0;i<params->len;i+=1){
kazu0o2 14:be4e43ce1578 539 DEBUG("%02x ", params->data[i]);
kazu0o2 14:be4e43ce1578 540 }
kazu0o2 14:be4e43ce1578 541 DEBUG("\r\n");
kazu0o2 14:be4e43ce1578 542
kazu0o2 14:be4e43ce1578 543 DEBUG("認証を開始します\r\n");
kazu0o2 14:be4e43ce1578 544 DEBUG("VerificationLength:%d\r\n",params->len);
kazu0o2 14:be4e43ce1578 545 DEBUG("RegisterLength:%d\r\n",sizeof(password));
kazu0o2 14:be4e43ce1578 546 if(params->len != sizeof(password)){
kazu0o2 27:2416a123f5ad 547 eventQueue.call(&authErrorAlertStart);
kazu0o2 14:be4e43ce1578 548 DEBUG("認証に失敗しました\r\n");
kazu0o2 14:be4e43ce1578 549 return;
kazu0o2 14:be4e43ce1578 550 }
kazu0o2 14:be4e43ce1578 551 DEBUG("Verification:Register\r\n");
kazu0o2 14:be4e43ce1578 552 for(int i = 0;i<params->len;i+=1){
kazu0o2 14:be4e43ce1578 553 DEBUG("%02x", params->data[i]);
kazu0o2 14:be4e43ce1578 554 DEBUG(":");
kazu0o2 14:be4e43ce1578 555 DEBUG("%02x", password[i]);
kazu0o2 14:be4e43ce1578 556 DEBUG("\r\n");
kazu0o2 14:be4e43ce1578 557 if(params->data[i]!= password[i]){
kazu0o2 14:be4e43ce1578 558 DEBUG("認証に失敗しました\r\n");
kazu0o2 25:40ab1e81ae43 559 eventQueue.call(&authErrorAlertStart);
kazu0o2 14:be4e43ce1578 560 return;
kazu0o2 14:be4e43ce1578 561 }
kazu0o2 14:be4e43ce1578 562 }
kazu0o2 14:be4e43ce1578 563 authenticated=true;
kazu0o2 14:be4e43ce1578 564 stateServicePtr->authStateUpdate(0x01);
kazu0o2 14:be4e43ce1578 565 DEBUG("認証が完了しました\r\n");
kazu0o2 14:be4e43ce1578 566 return;
kazu0o2 14:be4e43ce1578 567 }
kazu0o2 14:be4e43ce1578 568
kazu0o2 14:be4e43ce1578 569 if(!authenticated){
kazu0o2 14:be4e43ce1578 570 //認証が行われていない場合は操作を行わない
kazu0o2 14:be4e43ce1578 571 DEBUG("\r\n認証がされていないため、操作を中止します\r\n");
kazu0o2 14:be4e43ce1578 572 return;
kazu0o2 14:be4e43ce1578 573 }
kazu0o2 14:be4e43ce1578 574
kazu0o2 14:be4e43ce1578 575 if ((params->handle == usbServicePtr->getValueHandle()) && (params->len == 1)) {
kazu0o2 14:be4e43ce1578 576
kazu0o2 14:be4e43ce1578 577 DEBUG("USBService\r\n");
kazu0o2 14:be4e43ce1578 578 DEBUG("length:%d\r\n",params->len);
kazu0o2 14:be4e43ce1578 579 for(int i = 0;i<params->len;i+=1){
kazu0o2 14:be4e43ce1578 580 DEBUG("%d ", params->data[i]);
kazu0o2 14:be4e43ce1578 581 }
kazu0o2 14:be4e43ce1578 582 DEBUG("\r\n");
kazu0o2 14:be4e43ce1578 583
mbed_official 2:864ddfb70a9c 584 actuatedLED = *(params->data);
kazu0o2 14:be4e43ce1578 585 stateServicePtr->usbStateUpdate(*(params->data));
kazu0o2 30:8a28597cfa6e 586
kazu0o2 30:8a28597cfa6e 587 if(params->data[0] == 1){
kazu0o2 30:8a28597cfa6e 588 eventQueue.call(&enableUSBAlertStart);
kazu0o2 30:8a28597cfa6e 589 }else if(params->data[0] == 0){
kazu0o2 30:8a28597cfa6e 590 eventQueue.call(&disableUSBAlertStart);
kazu0o2 30:8a28597cfa6e 591 }
kazu0o2 14:be4e43ce1578 592 return;
mbed_official 2:864ddfb70a9c 593 }
mbed_official 2:864ddfb70a9c 594 }
mbed_official 2:864ddfb70a9c 595
mbed_official 2:864ddfb70a9c 596 /**
mbed_official 2:864ddfb70a9c 597 * This function is called when the ble initialization process has failled
kazu0o2 14:be4e43ce1578 598 * BLEの初期化失敗のコールバック
mbed_official 2:864ddfb70a9c 599 */
mbed_official 2:864ddfb70a9c 600 void onBleInitError(BLE &ble, ble_error_t error)
mbed_official 2:864ddfb70a9c 601 {
kazu0o2 14:be4e43ce1578 602 DEBUG("BluetoothError!\r\n");
mbed_official 2:864ddfb70a9c 603 /* Initialization error handling should go here */
mbed_official 2:864ddfb70a9c 604 }
mbed_official 2:864ddfb70a9c 605
mbed_official 2:864ddfb70a9c 606 /**
mbed_official 2:864ddfb70a9c 607 * Callback triggered when the ble initialization process has finished
kazu0o2 14:be4e43ce1578 608 * BLEの初期化が完了したときに呼び出されるコールバック
mbed_official 2:864ddfb70a9c 609 */
mbed_official 2:864ddfb70a9c 610 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
mbed_official 2:864ddfb70a9c 611 {
mbed_official 2:864ddfb70a9c 612 BLE& ble = params->ble;
mbed_official 2:864ddfb70a9c 613 ble_error_t error = params->error;
mbed_official 2:864ddfb70a9c 614
mbed_official 2:864ddfb70a9c 615 if (error != BLE_ERROR_NONE) {
mbed_official 2:864ddfb70a9c 616 /* In case of error, forward the error handling to onBleInitError */
kazu0o2 14:be4e43ce1578 617 /* エラーがあった場合はここから上の'onBleInitError'が呼び出される */
mbed_official 2:864ddfb70a9c 618 onBleInitError(ble, error);
mbed_official 2:864ddfb70a9c 619 return;
mbed_official 2:864ddfb70a9c 620 }
mbed_official 2:864ddfb70a9c 621
mbed_official 2:864ddfb70a9c 622 /* Ensure that it is the default instance of BLE */
kazu0o2 14:be4e43ce1578 623 /* BLEのデフォルトインスタンスであることを確認 */
mbed_official 2:864ddfb70a9c 624 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
mbed_official 2:864ddfb70a9c 625 return;
mbed_official 2:864ddfb70a9c 626 }
mbed_official 2:864ddfb70a9c 627
mbed_official 2:864ddfb70a9c 628 ble.gap().onDisconnection(disconnectionCallback);
kazu0o2 14:be4e43ce1578 629 ble.gap().onConnection(connectionCallback);
mbed_official 2:864ddfb70a9c 630 ble.gattServer().onDataWritten(onDataWrittenCallback);
mbed_official 2:864ddfb70a9c 631
kazu0o2 14:be4e43ce1578 632 bool initialValueForUSBUSBCharacteristic = false;
kazu0o2 14:be4e43ce1578 633 usbServicePtr = new USBService(ble, initialValueForUSBUSBCharacteristic);
kazu0o2 14:be4e43ce1578 634
kazu0o2 14:be4e43ce1578 635 char initialValueForPINPINCharacteristic[] = {0x00,0x00,0x00,0x00,0x00,0x00};
kazu0o2 14:be4e43ce1578 636 pinServicePtr = new PINService(ble, initialValueForPINPINCharacteristic);
kazu0o2 14:be4e43ce1578 637
kazu0o2 14:be4e43ce1578 638 char initialValueForSTATEAUTHCharacteristic = 0x00;
kazu0o2 14:be4e43ce1578 639 char initialValueForSTATEPOWERCharacteristic = 0x00;
kazu0o2 14:be4e43ce1578 640 char initialValueForSTATEUSBCharacteristic = 0x00;
kazu0o2 14:be4e43ce1578 641 stateServicePtr = new STATEService(ble, initialValueForSTATEAUTHCharacteristic, initialValueForSTATEPOWERCharacteristic, initialValueForSTATEUSBCharacteristic);
kazu0o2 14:be4e43ce1578 642
kazu0o2 14:be4e43ce1578 643 char initialValueForINITSETCharacteristic[] = {0x00,0x00,0x00,0x00,0x00,0x00};
kazu0o2 14:be4e43ce1578 644 char initialValueForINITGETCharacteristic = authenticationInformation;
kazu0o2 14:be4e43ce1578 645 initServicePtr = new INITService(ble, initialValueForINITSETCharacteristic,initialValueForINITGETCharacteristic);
mbed_official 2:864ddfb70a9c 646
mbed_official 2:864ddfb70a9c 647 /* setup advertising */
kazu0o2 14:be4e43ce1578 648 /* BLEクライアントへの広告の設定 */
mbed_official 2:864ddfb70a9c 649 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
kazu0o2 14:be4e43ce1578 650 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
mbed_official 2:864ddfb70a9c 651 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
mbed_official 2:864ddfb70a9c 652 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
mbed_official 2:864ddfb70a9c 653 ble.gap().setAdvertisingInterval(1000); /* 1000ms. */
mbed_official 2:864ddfb70a9c 654 ble.gap().startAdvertising();
kazu0o2 14:be4e43ce1578 655
kazu0o2 14:be4e43ce1578 656 DEBUG("BluetoothStart!\r\n");
kazu0o2 27:2416a123f5ad 657
kazu0o2 27:2416a123f5ad 658 eventQueue.call(&startupAlertStart);
mbed_official 2:864ddfb70a9c 659 }
mbed_official 2:864ddfb70a9c 660
mbed_official 2:864ddfb70a9c 661 void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
mbed_official 2:864ddfb70a9c 662 BLE &ble = BLE::Instance();
mbed_official 11:7404978b24e7 663 eventQueue.call(Callback<void()>(&ble, &BLE::processEvents));
mbed_official 2:864ddfb70a9c 664 }
mbed_official 2:864ddfb70a9c 665
kazu0o2 37:dcb097426442 666
kazu0o2 37:dcb097426442 667 /**
kazu0o2 37:dcb097426442 668 *機器状態デバッグ用出力
kazu0o2 37:dcb097426442 669 *機器状態を定期的に出力するためのキュー
kazu0o2 37:dcb097426442 670 */
kazu0o2 37:dcb097426442 671 void echoUsbsecState(){
kazu0o2 37:dcb097426442 672 DEBUG("USBSec is in operation\r\n");
kazu0o2 37:dcb097426442 673 DEBUG("Password regist state : %d\r\n",authenticationInformation);
kazu0o2 37:dcb097426442 674 DEBUG("Password auth state : %d\r\n",authenticated);
kazu0o2 37:dcb097426442 675 /*DEBUG("USB state : %d\r\n",actuatedLED);
kazu0o2 37:dcb097426442 676 DEBUG("Speaker ECO state : %d\r\n",speakerD);*/
kazu0o2 37:dcb097426442 677
kazu0o2 37:dcb097426442 678 eventQueue.call_in(5000.0f, &echoUsbsecState);
kazu0o2 37:dcb097426442 679 }
kazu0o2 37:dcb097426442 680
mbed_official 2:864ddfb70a9c 681 int main()
kazu0o2 15:c65fdaa7bfc0 682 {
kazu0o2 14:be4e43ce1578 683 //SDカードパスワードの取得
kazu0o2 14:be4e43ce1578 684 char charpass;//SDカードから取得されたパスワード
kazu0o2 14:be4e43ce1578 685 FILE *fp = fopen("/sd/sdtest.txt", "r");
kazu0o2 14:be4e43ce1578 686 if(fp == NULL) {
kazu0o2 14:be4e43ce1578 687 DEBUG("Could not open file for write\n");
kazu0o2 14:be4e43ce1578 688 }else{
kazu0o2 14:be4e43ce1578 689 int passwordindex = 0;
kazu0o2 14:be4e43ce1578 690 //パスワードを取り出しパスワード変数へ
kazu0o2 14:be4e43ce1578 691 while( fscanf( fp, "%02x",&charpass ) != EOF ){
kazu0o2 14:be4e43ce1578 692 DEBUG("%02x\r\n",charpass);
kazu0o2 14:be4e43ce1578 693 password[passwordindex] = charpass;
kazu0o2 14:be4e43ce1578 694 passwordindex+=1;
kazu0o2 14:be4e43ce1578 695 }
kazu0o2 14:be4e43ce1578 696 fclose(fp);
kazu0o2 14:be4e43ce1578 697 }
kazu0o2 14:be4e43ce1578 698
kazu0o2 14:be4e43ce1578 699 //起動時の認証情報状態の設定
kazu0o2 14:be4e43ce1578 700 authenticationInformation = false;
kazu0o2 14:be4e43ce1578 701 DEBUG("PasswordLength:%d\r\n",sizeof(password));
kazu0o2 14:be4e43ce1578 702 for(int i = 0;i<sizeof(password);i+=1){
kazu0o2 14:be4e43ce1578 703 DEBUG("%d ", password[i]);
kazu0o2 14:be4e43ce1578 704 if(password[i] != 0x00){
kazu0o2 14:be4e43ce1578 705 authenticationInformation = true;
kazu0o2 14:be4e43ce1578 706 }
kazu0o2 14:be4e43ce1578 707 }
kazu0o2 14:be4e43ce1578 708 DEBUG("\r\n");
kazu0o2 14:be4e43ce1578 709
kazu0o2 14:be4e43ce1578 710 powerSwitch.mode(PullUp);//パワー検出コード_スイッチピンをPullUpに
kazu0o2 14:be4e43ce1578 711 powerSwitch.fall(&powerUp);//パワー検出コード_スイッチが押されたときの割り込み処理
kazu0o2 14:be4e43ce1578 712 powerSwitch.rise(&powerDown);//パワー検出コード_スイッチが離されたときの割り込み処理
kazu0o2 14:be4e43ce1578 713
kazu0o2 14:be4e43ce1578 714 resetSwitch.mode(PullUp);//リセットボタン_スイッチピンをPullUpに
kazu0o2 14:be4e43ce1578 715 resetSwitch.rise(&resetDown);//リセットボタン_スイッチが離されたときの割り込み処理
kazu0o2 14:be4e43ce1578 716
mbed_official 11:7404978b24e7 717 eventQueue.call_every(500, blinkCallback);
mbed_official 2:864ddfb70a9c 718
kazu0o2 37:dcb097426442 719 //デバッグ用ステート確認
kazu0o2 37:dcb097426442 720 eventQueue.call_in(5000.0f, &echoUsbsecState);
kazu0o2 37:dcb097426442 721
mbed_official 2:864ddfb70a9c 722 BLE &ble = BLE::Instance();
mbed_official 2:864ddfb70a9c 723 ble.onEventsToProcess(scheduleBleEventsProcessing);
mbed_official 2:864ddfb70a9c 724 ble.init(bleInitComplete);
kazu0o2 14:be4e43ce1578 725
kazu0o2 14:be4e43ce1578 726 //パスワード設定情報のBluetoothへの反映
kazu0o2 14:be4e43ce1578 727 if(authenticationInformation){
kazu0o2 14:be4e43ce1578 728 initServicePtr->stateUpdate(0x01);
kazu0o2 14:be4e43ce1578 729 }
mbed_official 2:864ddfb70a9c 730
mbed_official 11:7404978b24e7 731 eventQueue.dispatch_forever();
kazu0o2 27:2416a123f5ad 732
mbed_official 2:864ddfb70a9c 733 return 0;
mbed_official 2:864ddfb70a9c 734 }