![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
sdasd
Dependencies: BLE_API mbed nRF51822
Fork of MEDRON_SNIFFER_ABCD-KIMLIKLI-OLANLARI-TARAMA-YAPAR_30062016 by
Revision 15:a88e0135e67e, committed 2017-09-21
- Comitter:
- Adembay
- Date:
- Thu Sep 21 09:16:14 2017 +0000
- Parent:
- 14:59ba4a2a17c7
- Commit message:
- sda
Changed in this revision
diff -r 59ba4a2a17c7 -r a88e0135e67e main.cpp --- a/main.cpp Thu Jun 30 07:09:50 2016 +0000 +++ b/main.cpp Thu Sep 21 09:16:14 2017 +0000 @@ -1,133 +1,484 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2015 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #include "mbed.h" #include "toolchain.h" #include "ble/BLE.h" +#include "spi_master.h" -//ABCD bir kimlik olarak belirlenir ve şifre vazifedi görür herhangi bir bluetooth modülü ABCD içerirse burada görülecektir. -//Yayın okuyan program + +/////////////////////////////SPI////////////////////// +SPIClass SPI1(NRF_SPI1); +//# CS P0_14 +//# SCK P0_25 +//# MOSI P0_20" +//# MISO P0_22 +DigitalOut spi_cs(P0_7); +///////////////////////////////////////////////////// + +DigitalIn esp_baglimi(P0_11); + +////////////////////////////////DATA_FORMATIM/////////////////////////////////////////////////////// + +Serial pc(TX_PIN_NUMBER, P0_3/*RX_PIN_NUMBER*/); + +#define ToplamCihaz 1// (10) hakan değiştir 01122016 +#define bufferSize 60 +uint8_t bulunan_index[ToplamCihaz]; +struct Medron_Data +{ + uint8_t MacID[6]; // MAC ID leri bunun içinde tutacağız + uint8_t RSSI; // MAC ID leri bunun içinde tutacağız + uint8_t LENGTH; + uint8_t MYDATA[50]; + uint8_t PAKET_LENGTH;//SPI'YDAN STM32'YE GÖNDERİLCEK DATANIN TOPLAM + //UZUNLUGU. +} PACKED_Data[ToplamCihaz]; +////////////////////////////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// ÖZEL BİR BEACON ALIYORSAK BU KULLANILIR. ARANACAK OLAN BEACON SAYILARI BELİRTİLMELİ +// VE BEACON MAC ID'SI SİSTEME TANITILMALIDIR. +#define ARANAN_MAC_SAYI 6 +typedef struct +{ + uint8_t mac_id[6]; +}Beacon_MAC_ID; +Beacon_MAC_ID b_mac[ARANAN_MAC_SAYI]; +uint8_t say=0; + +void mac_id_gir() +{ + + //ISIK SENSOR + b_mac[0].mac_id[5]=0xAC; + b_mac[0].mac_id[4]=0x23; + b_mac[0].mac_id[3]=0x3F; + b_mac[0].mac_id[2]=0xB0; + b_mac[0].mac_id[1]=0x42; + b_mac[0].mac_id[0]=0x12; -DigitalOut alivenessLED(LED1, 1); -Ticker ticker; -Serial pc(TX_PIN_NUMBER, RX_PIN_NUMBER); + //hum+temp s1 SENSOR + b_mac[1].mac_id[5]=0xAC; + b_mac[1].mac_id[4]=0x23; + b_mac[1].mac_id[3]=0x3F; + b_mac[1].mac_id[2]=0xa0; + b_mac[1].mac_id[1]=0x03; + b_mac[1].mac_id[0]=0xcd; + + +/* //personel SENSOR + b_mac[2].mac_id[5]=0xe7; + b_mac[2].mac_id[4]=0x5e; + b_mac[2].mac_id[3]=0xb3; + b_mac[2].mac_id[2]=0x21; + b_mac[2].mac_id[1]=0x69;* + b_mac[2].mac_id[0]=0xa6; */ + + //personel SENSOR + b_mac[2].mac_id[5]=0xCF; + b_mac[2].mac_id[4]=0x70; + b_mac[2].mac_id[3]=0x44; + b_mac[2].mac_id[2]=0xD7; + b_mac[2].mac_id[1]=0x12; + b_mac[2].mac_id[0]=0xA8; + + + //motion SENSOR + b_mac[3].mac_id[5]=0xC7; + b_mac[3].mac_id[4]=0x6E; + b_mac[3].mac_id[3]=0x50; + b_mac[3].mac_id[2]=0x70; + b_mac[3].mac_id[1]=0x64; + b_mac[3].mac_id[0]=0x6E; + + //hum+temp s1 SENSOR + b_mac[4].mac_id[5]=0xAC; + b_mac[4].mac_id[4]=0x23; + b_mac[4].mac_id[3]=0x3F; + b_mac[4].mac_id[2]=0xa0; + b_mac[4].mac_id[1]=0x04; + b_mac[4].mac_id[0]=0x43; + + //motion SENSOR + b_mac[5].mac_id[5]=0xE6; + b_mac[5].mac_id[4]=0xD0; + b_mac[5].mac_id[3]=0x4C; + b_mac[5].mac_id[2]=0xFC; + b_mac[5].mac_id[1]=0x4C; + b_mac[5].mac_id[0]=0xB8; +} +//////////////////////////////////////////////////////////////////////////////////////////////// -void periodicCallback(void) +void Flash_Buff_WriteBytes(uint16_t addr, uint8_t *pbuf, uint16_t len) { - alivenessLED = !alivenessLED; /* Do blinky on LED1 while we're waiting for BLE events. This is optional. */ + uint16_t index; + + spi_cs = 0; + wait_us(20); + for(index=0; index<len; index++) + { + SPI1.transfer(*pbuf); + pbuf++; + } + + wait_us(20); + spi_cs = 1; } /* - * This function is called every time we scan an advertisement. - */ + This function is called every time we scan an advertisement. +*/ void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params) { - struct AdvertisingData_t { - uint8_t length; /* doesn't include itself */ - GapAdvertisingData::DataType_t dataType; - uint8_t data[0]; - } PACKED; + + /* EXAMPLE + + fa 8c b3 c7 1c 61 :MAC ; 6 BYTE + 2b:RSSI;1BYTE + 0a:UZUNLUK;1BYTE-->0A H=10 D + 09 ff cd ab 01 00 4d 52 e8 00 00 00 00 00 00 00 00 00 00 00 ;DATA + 1 2 3 4 5 6 7 8 9 10 X X X X X X X X X X ;DATA SAYISI + + c8 60 85 e2 73 e2 :MAC:6 + 37:RSSI:1 + 08:LENGTH:1 + 07 ff cd ab 00 00 e7 00:DATA + 1 2 3 4 5 6 7 8 ;DATA SAYISI + */ + + struct AdvertisingData_t + { + uint8_t length; /* doesn't include itself */ + GapAdvertisingData::DataType_t dataType; + uint8_t data[0]; + } PACKED; + + struct ApplicationData_t + { + uint16_t applicationSpecificId; /* An ID used to identify temperature value + in the manufacture specific AD data field */ + } PACKED; + + + for (uint8_t macsay=0; macsay < ARANAN_MAC_SAYI; macsay++) + { + + if (( params->peerAddr[5] == b_mac[macsay].mac_id[5] && params->peerAddr[4] == b_mac[macsay].mac_id[4] + && params->peerAddr[3] == b_mac[macsay].mac_id[3] && params->peerAddr[2] == b_mac[macsay].mac_id[2] + && params->peerAddr[1] == b_mac[macsay].mac_id[1] && params->peerAddr[0] == b_mac[macsay].mac_id[0] )) + { + + PACKED_Data[say].MacID[5] = params->peerAddr[5]; + PACKED_Data[say].MacID[4] = params->peerAddr[4]; + PACKED_Data[say].MacID[3] = params->peerAddr[3]; + PACKED_Data[say].MacID[2] = params->peerAddr[2]; + PACKED_Data[say].MacID[1] = params->peerAddr[1]; + PACKED_Data[say].MacID[0] = params->peerAddr[0]; + //IŞIK İSE + if (( params->peerAddr[5] ==0xac && params->peerAddr[4] ==0x23 + && params->peerAddr[3] ==0x3f && params->peerAddr[2] ==0xb0 + && params->peerAddr[1] ==0x42 && params->peerAddr[0] ==0x12)) + { + PACKED_Data[say].RSSI = (params->rssi) * -1; + PACKED_Data[say].LENGTH = 10; //params->advertisingDataLen; + PACKED_Data[say].PAKET_LENGTH = 6 + 1 + 1 + 10; //MAC+RSSI+1+LENGTH + + pc.printf("TOPLAM PAKET UZUNLUK = (%d ) : ---> ", PACKED_Data[say].PAKET_LENGTH); + PACKED_Data[say].MYDATA[0] = 0x07; + PACKED_Data[say].MYDATA[1] = 0xff; + + PACKED_Data[say].MYDATA[2] = 0xef;//medrona ait olmayan beaconlar için, abcd değil + PACKED_Data[say].MYDATA[3] = 0xab; + + PACKED_Data[say].MYDATA[4] = 0x08;// tipi elle girilmiş. + PACKED_Data[say].MYDATA[5] = 0x00; - struct ApplicationData_t { - uint16_t applicationSpecificId; /* An ID used to identify temperature value - in the manufacture specific AD data field */ - //TMP_nrf51::TempSensorValue_t tmpSensorValue; /* User defined application data */ - } PACKED; + PACKED_Data[say].MYDATA[6] = params->advertisingData[14];// ISIK + PACKED_Data[say].MYDATA[7] = 0x00; + + PACKED_Data[say].MYDATA[8] = params->advertisingData[13];//PİL + PACKED_Data[say].MYDATA[9] = 0x00; + } + + if (( params->peerAddr[5] ==0xac && params->peerAddr[4] ==0x23 + && params->peerAddr[3] ==0x3f && params->peerAddr[2] ==0xa0 + && params->peerAddr[1] ==0x03 && params->peerAddr[0] ==0xcd)) + { + PACKED_Data[say].RSSI = (params->rssi) * -1; + PACKED_Data[say].LENGTH = 12; //params->advertisingDataLen; + PACKED_Data[say].PAKET_LENGTH = 6 + 1 + 1 + 12; //MAC+RSSI+1+LENGTH + + pc.printf("TOPLAM PAKET UZUNLUK = (%d ) : ---> ", PACKED_Data[say].PAKET_LENGTH); + PACKED_Data[say].MYDATA[0] = 0x07; + PACKED_Data[say].MYDATA[1] = 0xff; + + PACKED_Data[say].MYDATA[2] = 0xef;//medrona ait olmayan beaconlar için, abcd değil + PACKED_Data[say].MYDATA[3] = 0xab; + + PACKED_Data[say].MYDATA[4] = 0x09;// tipi elle girilmiş. + PACKED_Data[say].MYDATA[5] = 0x00; + + PACKED_Data[say].MYDATA[6] = params->advertisingData[14];// temp + PACKED_Data[say].MYDATA[7] = params->advertisingData[15]; + + PACKED_Data[say].MYDATA[8] = params->advertisingData[16];//hum + PACKED_Data[say].MYDATA[9] = params->advertisingData[17]; + + PACKED_Data[say].MYDATA[10] = params->advertisingData[13];//PİL + PACKED_Data[say].MYDATA[11] = 0x00; + } + + if (( params->peerAddr[5] ==0xac && params->peerAddr[4] ==0x23 + && params->peerAddr[3] ==0x3f && params->peerAddr[2] ==0xa0 + && params->peerAddr[1] ==0x04 && params->peerAddr[0] ==0x43)) + { + PACKED_Data[say].RSSI = (params->rssi) * -1; + PACKED_Data[say].LENGTH = 12; //params->advertisingDataLen; + PACKED_Data[say].PAKET_LENGTH = 6 + 1 + 1 + 12; //MAC+RSSI+1+LENGTH + + pc.printf("TOPLAM PAKET UZUNLUK = (%d ) : ---> ", PACKED_Data[say].PAKET_LENGTH); + PACKED_Data[say].MYDATA[0] = 0x07; + PACKED_Data[say].MYDATA[1] = 0xff; + + PACKED_Data[say].MYDATA[2] = 0xef;//medrona ait olmayan beaconlar için, abcd değil + PACKED_Data[say].MYDATA[3] = 0xab; + + PACKED_Data[say].MYDATA[4] = 0x09;// tipi elle girilmiş. + PACKED_Data[say].MYDATA[5] = 0x00; + + PACKED_Data[say].MYDATA[6] = params->advertisingData[14];// temp + PACKED_Data[say].MYDATA[7] = params->advertisingData[15]; + + PACKED_Data[say].MYDATA[8] = params->advertisingData[16];//hum + PACKED_Data[say].MYDATA[9] = params->advertisingData[17]; + + PACKED_Data[say].MYDATA[10] = params->advertisingData[13];//PİL + PACKED_Data[say].MYDATA[11] = 0x00; + } + - static const uint16_t MED_KIMLIK = 0xABCD; - /* Search for the manufacturer specific data with matching application-ID */ - AdvertisingData_t *pAdvData; - size_t index = 0; - while (index < params->advertisingDataLen) { - pAdvData = (AdvertisingData_t *)¶ms->advertisingData[index]; - if (pAdvData->dataType == GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA) { - ApplicationData_t *pAppData = (ApplicationData_t *)pAdvData->data; - if (pAppData->applicationSpecificId == MED_KIMLIK ) { - /* dump information on the console. */ - pc.printf("name=aysegul&pass=123&sender=sniffer1&temparaturedata=");// Birinci Sniffer - pc.printf("%02x%02x",0xFA,0xCC);//BASLANGIC BİTLERİ - //MAC adresi, RSSI - pc.printf("%02x%02x%02x%02x%02x%02x%x", - params->peerAddr[5], params->peerAddr[4], params->peerAddr[3], params->peerAddr[2], params->peerAddr[1], params->peerAddr[0],((params->rssi)*-1)); - pc.printf("%02x", params->advertisingDataLen);// AdvDATA UZUNLUGU - /* RSSI DEĞERİNİ DECİMALE ÇEVİRDİKTEN SONRA -1 İLE ÇARPILMALIDIR. */ - for (unsigned index = 0; index < params->advertisingDataLen; index++) + + if (( params->peerAddr[5] ==0xCF && params->peerAddr[4] ==0x70 + && params->peerAddr[3] ==0x44 && params->peerAddr[2] ==0xD7 + && params->peerAddr[1] ==0x12 && params->peerAddr[0] ==0xA8)) + { + PACKED_Data[say].RSSI = (params->rssi) * -1; + PACKED_Data[say].LENGTH = 6; //params->advertisingDataLen; + PACKED_Data[say].PAKET_LENGTH = 6 + 1 + 1 + 6; //MAC+RSSI+1+LENGTH + + pc.printf("TOPLAM PAKET UZUNLUK = (%d ) : ---> ", PACKED_Data[say].PAKET_LENGTH); + PACKED_Data[say].MYDATA[0] = 0x07; + PACKED_Data[say].MYDATA[1] = 0xff; + + PACKED_Data[say].MYDATA[2] = 0xef;//medrona ait olmayan beaconlar için, abcd değil + PACKED_Data[say].MYDATA[3] = 0xab; + + PACKED_Data[say].MYDATA[4] = 0x05;// tipi elle girilmiş. + PACKED_Data[say].MYDATA[5] = 0x00; + } + + if (( params->peerAddr[5] ==0xC7 && params->peerAddr[4] ==0x6E + && params->peerAddr[3] ==0x50 && params->peerAddr[2] ==0x70 + && params->peerAddr[1] ==0x64 && params->peerAddr[0] ==0x6E)) + { + PACKED_Data[say].RSSI = (params->rssi) * -1; + PACKED_Data[say].LENGTH = 6; //params->advertisingDataLen; + PACKED_Data[say].PAKET_LENGTH = 6 + 1 + 1 + 6; //MAC+RSSI+1+LENGTH + + pc.printf("TOPLAM PAKET UZUNLUK = (%d ) : ---> ", PACKED_Data[say].PAKET_LENGTH); + PACKED_Data[say].MYDATA[0] = 0x07; + PACKED_Data[say].MYDATA[1] = 0xff; + + PACKED_Data[say].MYDATA[2] = 0xef;//medrona ait olmayan beaconlar için, abcd değil + PACKED_Data[say].MYDATA[3] = 0xab; + + PACKED_Data[say].MYDATA[4] = 0x07;// tipi elle girilmiş. + PACKED_Data[say].MYDATA[5] = 0x00; + } + + /* if (( params->peerAddr[5] ==0xC7 && params->peerAddr[4] ==0x6E + && params->peerAddr[3] ==0x50 && params->peerAddr[2] ==0x70 + && params->peerAddr[1] ==0x64 && params->peerAddr[0] ==0x6E)) + { + PACKED_Data[say].RSSI = (params->rssi) * -1; + PACKED_Data[say].LENGTH = 14; //params->advertisingDataLen; + PACKED_Data[say].PAKET_LENGTH = 6 + 1 + 1 + 14; //MAC+RSSI+1+LENGTH + + pc.printf("TOPLAM PAKET UZUNLUK = (%d ) : ---> ", PACKED_Data[say].PAKET_LENGTH); + PACKED_Data[say].MYDATA[0] = 0x07; + PACKED_Data[say].MYDATA[1] = 0xff; + + PACKED_Data[say].MYDATA[2] = 0xef;//medrona ait olmayan beaconlar için, abcd değil + PACKED_Data[say].MYDATA[3] = 0xab; + + PACKED_Data[say].MYDATA[4] = 0x06;// tipi elle girilmiş. + PACKED_Data[say].MYDATA[5] = 0x00; + + PACKED_Data[say].MYDATA[6] = params->advertisingData[6];// x + PACKED_Data[say].MYDATA[7] = params->advertisingData[7]; + + PACKED_Data[say].MYDATA[8] = params->advertisingData[8];//y + PACKED_Data[say].MYDATA[9] = params->advertisingData[9]; + + PACKED_Data[say].MYDATA[10] = params->advertisingData[10];// z + PACKED_Data[say].MYDATA[11] = params->advertisingData[11]; + + PACKED_Data[say].MYDATA[12] = params->advertisingData[12];// pil + PACKED_Data[say].MYDATA[13] = params->advertisingData[13]; + + } */ + + say++; + } + + } + + + static const uint16_t MED_KIMLIK = 0xABEF; + AdvertisingData_t *pAdvData; + size_t index = 0; + while (index < params->advertisingDataLen) + { + pAdvData = (AdvertisingData_t *)¶ms->advertisingData[index]; + if (pAdvData->dataType == GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA) + { + ApplicationData_t *pAppData = (ApplicationData_t *)pAdvData->data; + if (pAppData->applicationSpecificId == MED_KIMLIK) + { + + PACKED_Data[say].MacID[5]=params->peerAddr[5]; + PACKED_Data[say].MacID[4]=params->peerAddr[4]; + PACKED_Data[say].MacID[3]=params->peerAddr[3]; + PACKED_Data[say].MacID[2]=params->peerAddr[2]; + PACKED_Data[say].MacID[1]=params->peerAddr[1]; + PACKED_Data[say].MacID[0]=params->peerAddr[0]; + PACKED_Data[say].RSSI=(params->rssi) * -1; + PACKED_Data[say].LENGTH=params->advertisingDataLen; + + PACKED_Data[say].PAKET_LENGTH= 6 + 1 + 1 + params->advertisingDataLen;//MAC+RSSI+1+LENGTH + + pc.printf("TOPLAM PAKET UZUNLUK = (%d ) : ---> ",PACKED_Data[say].PAKET_LENGTH); + + for (unsigned index = 0; index < params->advertisingDataLen; index++) + { + PACKED_Data[say].MYDATA[index]=params->advertisingData[index]; + } + + for (unsigned index = params->advertisingDataLen; index < 50; index++) + { + PACKED_Data[say].MYDATA[index]=0x00; + } + + say++; + break; + } + } + index += (pAdvData->length + 1); + } + + + for (unsigned i = 0; i < say; i++) + { + uint8_t buffertoSpi[bufferSize]; + + for (unsigned a = 0; a < bufferSize; a++) + { + buffertoSpi[a]=0x00; + } + + buffertoSpi[0]=PACKED_Data[i].PAKET_LENGTH; + + for (unsigned a = 1; a < 7; a++) + { + buffertoSpi[a]= PACKED_Data[i].MacID[6-a]; + } + + buffertoSpi[7]=PACKED_Data[i].RSSI; + buffertoSpi[8]=PACKED_Data[i].LENGTH; + + for (unsigned a = 0; a < PACKED_Data[i].LENGTH; a++) + { + buffertoSpi[9+a]=PACKED_Data[i].MYDATA[a]; + } + + pc.printf("nRF51 to stm32f103 SENT (BEACON NUMBER = %d ) : ",i); + + for (unsigned a = 0; a < bufferSize; a++) + { + pc.printf("%02x",buffertoSpi[a]); + } + pc.printf("\r\n"); + + // SPI ÜZERİDEN HAZIRLANAN OLUŞTURULAN PAKET VERİ STM32F103'E GÖNDERİLİR. + //PAKET VERİMİZİ ŞÖYLEDİR; + /* TPU + MAC_ID + RSSI + LEN + BEACONDAN OKUNAN VERİLER + " + TPU : TOPLAM PAKET BYTE UZUNLUGU + LEN : BEACONDAN OKUNAN VERİLER TOPLAM BYTE UZUNLUGU + + */ + + if(esp_baglimi) { - pc.printf("%02x", params->advertisingData[index]); - } - pc.printf("%02x\r",0xFF);// BITIS + Flash_Buff_WriteBytes(0, buffertoSpi, bufferSize); //eger esp nete baglandıysa göndermeye basla // 13072017 + } - break; - } - } - index += (pAdvData->length + 1); - } + + //wait_ms(200); // hakan ekledi 01122016 + wait_ms(1); + bulunan_index[i]=0x00; + } + say=0; } /** - * This function is called when the ble initialization process has failed - */ + This function is called when the ble initialization process has failed +*/ void onBleInitError(BLE &ble, ble_error_t error) { - /* Initialization error handling should go here */ + /* Initialization error handling should go here */ } /** - * Callback triggered when the ble initialization process has finished - */ + Callback triggered when the ble initialization process has finished +*/ void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) { - BLE& ble = params->ble; - ble_error_t error = params->error; + BLE& ble = params->ble; + ble_error_t error = params->error; - if (error != BLE_ERROR_NONE) { - /* In case of error, forward the error handling to onBleInitError */ - onBleInitError(ble, error); - return; - } + if (error != BLE_ERROR_NONE) { + /* In case of error, forward the error handling to onBleInitError */ + onBleInitError(ble, error); + return; + } - /* Ensure that it is the default instance of BLE */ - if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { - return; - } + /* Ensure that it is the default instance of BLE */ + if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { + return; + } - /* Setup and start scanning */ - ble.gap().setScanParams(1800 /* scan interval */, 100 /* scan window */); - ble.gap().startScan(advertisementCallback); + /* Setup and start scanning */ + ble.gap().setScanParams(100 /* scan interval */, 100 /* scan window */); + ble.gap().startScan(advertisementCallback); + } int main(void) { - pc.baud(9600); //local terminal baud - ticker.attach(periodicCallback, 1); /* trigger sensor polling every 2 seconds */ + pc.baud(115200); //local terminal baud + pc.printf("----MEDRON TEKNOLOJİ SNIFFER---- \r\n"); + mac_id_gir(); + + while(!esp_baglimi) + { + wait_ms(1); + } + SPI1.begin(); + BLE &ble = BLE::Instance(); + ble.init(bleInitComplete); - for(uint8_t say=0; say<5; say++ ) - { - wait(1); - pc.printf("wifi_id=MedronTeknoloji|<>|pass=medron2011"); - - //pc.printf("wifi_id=AndroidAP|<>|pass=duqy0286"); //Ayşegülün telefonuna bağlanırken kullanıyorduk - pc.printf("\r"); - - } - - - BLE &ble = BLE::Instance(); - ble.init(bleInitComplete); - - while (true) { - ble.waitForEvent(); - } + while (true) + { + ble.waitForEvent(); + } }
diff -r 59ba4a2a17c7 -r a88e0135e67e spi_master.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/spi_master.cpp Thu Sep 21 09:16:14 2017 +0000 @@ -0,0 +1,236 @@ +/* + +Copyright (c) 2012-2014 RedBearLab + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#include "spi_master.h" + +/********************************************************************** +name : +function : +**********************************************************************/ +SPIClass::SPIClass(NRF_SPI_Type *_spi) : spi(_spi) +{ + //do nothing +} + +/********************************************************************** +name : +function : +**********************************************************************/ +void SPIClass::setCPOL( bool active_low) +{ + if(active_low) + { + spi->CONFIG |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos); + } + else + { + spi->CONFIG |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos); + } +} + +/********************************************************************** +name : +function : +**********************************************************************/ +void SPIClass::setCPHA( bool trailing) +{ + if(trailing) + { + spi->CONFIG |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos); + } + else + { + spi->CONFIG |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos); + } + +} + +/********************************************************************** +name : +function : MSBFIRST, LSBFIRST +**********************************************************************/ +void SPIClass::setBitORDER( BitOrder bit) +{ + if(bit == MSBFIRST) + { + spi->CONFIG |= (SPI_CONFIG_ORDER_MsbFirst << SPI_CONFIG_ORDER_Pos); + } + else + { + spi->CONFIG |= (SPI_CONFIG_ORDER_LsbFirst << SPI_CONFIG_ORDER_Pos); + } +} + +/********************************************************************** +name : +function : +**********************************************************************/ +void SPIClass::setFrequency(uint8_t speed) +{ + if (speed == 0) + { + spi->FREQUENCY = SPI_FREQUENCY_125K; + } + else if (speed == 1) + { + spi->FREQUENCY = SPI_FREQUENCY_250K; + } + else if (speed == 2) + { + spi->FREQUENCY = SPI_FREQUENCY_500K; + } + else if (speed == 3) + { + spi->FREQUENCY = SPI_FREQUENCY_1M; + } + else if (speed == 4) + { + spi->FREQUENCY = SPI_FREQUENCY_2M; + } + else if (speed == 5) + { + spi->FREQUENCY = SPI_FREQUENCY_4M; + } + else if (speed == 6) + { + spi->FREQUENCY = SPI_FREQUENCY_8M; + } + else + { + spi->FREQUENCY = SPI_FREQUENCY_4M; + } +} + +/********************************************************************** +name : +function : +**********************************************************************/ +void SPIClass::setSPIMode( uint8_t mode ) +{ + if (SPI_MODE0 == mode) + { + setCPOL(0); + setCPHA(0); + } + else if (mode == SPI_MODE1) + { + setCPOL(0); + setCPHA(1); + } + else if (mode == SPI_MODE2) + { + setCPOL(1); + setCPHA(0); + } + else if (mode == SPI_MODE3) + { + setCPOL(1); + setCPHA(1); + } + else + { + setCPOL(0); + setCPHA(0); + } +} + +/********************************************************************** +name : +function : +**********************************************************************/ +void SPIClass::begin(uint32_t sck, uint32_t mosi, uint32_t miso) +{ + + SCK_Pin = sck; + MOSI_Pin = mosi; + MISO_Pin = miso; + + NRF_GPIO->PIN_CNF[SCK_Pin] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) + | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) + | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) + | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) + | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); + + NRF_GPIO->PIN_CNF[MOSI_Pin] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) + | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) + | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) + | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) + | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); + + NRF_GPIO->PIN_CNF[MISO_Pin] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) + | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) + | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) + | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) + | (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos); + spi->PSELSCK = SCK_Pin; + spi->PSELMOSI = MOSI_Pin; + spi->PSELMISO = MISO_Pin; + + setFrequency(SPI_2M); + setSPIMode(SPI_MODE0); + setBitORDER(MSBFIRST); + + spi->EVENTS_READY = 0; + spi->ENABLE = (SPI_ENABLE_ENABLE_Enabled << SPI_ENABLE_ENABLE_Pos); + +} + +/********************************************************************** +name : +function : +**********************************************************************/ +void SPIClass::begin() +{ + begin(SCK, MOSI, MISO); +} + +/********************************************************************** +name : +function : +**********************************************************************/ +uint8_t SPIClass::transfer(uint8_t data) +{ + while( spi->EVENTS_READY != 0U ); + + spi->TXD = (uint32_t)data; + + while(spi->EVENTS_READY == 0); + + data = (uint8_t)spi->RXD; + + spi->EVENTS_READY = 0; + + return data; +} + +/********************************************************************** +name : +function : +**********************************************************************/ +void SPIClass::endTransfer() +{ + spi->ENABLE = (SPI_ENABLE_ENABLE_Disabled << SPI_ENABLE_ENABLE_Pos); +} + +/********************************************************************** +name : +function : +**********************************************************************/ + +//SPIClass SPI(NRF_SPI1);
diff -r 59ba4a2a17c7 -r a88e0135e67e spi_master.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/spi_master.h Thu Sep 21 09:16:14 2017 +0000 @@ -0,0 +1,84 @@ +/* + +Copyright (c) 2012-2014 RedBearLab + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#ifndef _SPI_MASTER_H_ +#define _SPI_MASTER_H_ + +#include "mbed.h" + +#define SPI_FREQUENCY_125K 0x02000000UL +#define SPI_FREQUENCY_250K 0x04000000UL +#define SPI_FREQUENCY_500K 0x08000000UL +#define SPI_FREQUENCY_1M 0x10000000UL +#define SPI_FREQUENCY_2M 0x20000000UL +#define SPI_FREQUENCY_4M 0x40000000UL +#define SPI_FREQUENCY_8M 0x80000000UL + +#define SPI_125K 0 +#define SPI_250K 1 +#define SPI_500K 2 +#define SPI_1M 3 +#define SPI_2M 4 +#define SPI_4M 5 +#define SPI_8M 6 + +#define SPI_MODE0 0 +#define SPI_MODE1 1 +#define SPI_MODE2 2 +#define SPI_MODE3 3 + +#define CS P0_14 +#define SCK P0_25 +#define MOSI P0_20 +#define MISO P0_22 + +typedef enum{ + + MSBFIRST = 0, + LSBFIRST = 1 + +}BitOrder; + +class SPIClass +{ + public: + SPIClass(NRF_SPI_Type *_spi); + + void begin(); + void begin(uint32_t sck, uint32_t mosi, uint32_t miso); + uint8_t transfer(uint8_t data); + void endTransfer(); + + void setSPIMode( uint8_t mode ); + void setFrequency(uint8_t speed ); + void setBitORDER( BitOrder bit); + void setCPHA( bool trailing); + void setCPOL( bool active_low); + + + private: + NRF_SPI_Type *spi; + + uint32_t SCK_Pin; + uint32_t MOSI_Pin; + uint32_t MISO_Pin; + +}; + +#endif