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

Dependencies:   SDFileSystem MusicEngine

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

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

松葉和仁

Committer:
kazu0o2
Date:
Mon Feb 06 01:59:13 2017 +0000
Revision:
31:0568376f3399
Parent:
30:8a28597cfa6e
Child:
32:c547412e77e3
change audio T

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