ENSMM / Mbed 2 deprecated BLE_Meuhve_Sensor

Dependencies:   mbed Driver_BLE_Mheuve BLE_API

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "ble/BLE.h"
00003 #include "ble/services/UARTService.h"
00004 #include "Serial.h"
00005 #include "stdlib.h"
00006 
00007 #define UART_BUFFER (UARTService::BLE_UART_SERVICE_MAX_DATA_LEN)
00008 
00009 
00010 const static char DEVICE_NAME[] = "Mheuve";
00011 UARTService *uartServicePtr;
00012 
00013 //PWM output
00014 
00015 DigitalOut Green(PC_4);              //Red LED
00016 DigitalOut Red(PC_5);                //Green LED
00017 
00018 Ticker tempo;
00019 
00020 // Tableau et index de communication avec UART
00021 static char uartBuff[UART_BUFFER];
00022 
00023 // Routine de traitement des erreurs
00024 void onBleError(ble_error_t error);
00025 
00026 /****************************************************/
00027 /* Ticker actif lorsque la connexion BLE est présente */
00028 /****************************************************/
00029 void ConnectedBLE(void)
00030 {
00031     // Signal de vie: allumer et éteindre la LED
00032      Red = 0;
00033     Green = 1 ;
00034 
00035 }
00036 
00037 void message(void)
00038 {
00039     //Integre les trois chaines de caractere contenant les accelerations dans la chaine uartBuff
00040     sprintf(uartBuff, "coucou") ;
00041     //Envoie la chaine uartBuff sur le sevice TX UART BLE
00042     uartServicePtr->write(uartBuff, UARTService::BLE_UART_SERVICE_MAX_DATA_LEN);
00043     // Réinitialiser la chaîne uartBuff en entrant 0 dans les premiers caractères UART_BUFFER
00044     memset(uartBuff, 0, UART_BUFFER);
00045 
00046 }
00047 
00048 /*************************/
00049 /* Connexion BLE réussie */
00050 /*************************/
00051 void BleConnectionCallback(const Gap::ConnectionCallbackParams_t *params)
00052 {
00053     // Signal de connexion BLE: allume / éteint la LED avec une période de 1 seconde
00054     ConnectedBLE();
00055     tempo.attach(message, 1);
00056 }
00057 
00058 /*****************************/
00059 /* Déconnexion du client BLE */
00060 /*****************************/
00061 void BleDisconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
00062 {
00063     (void)params;
00064     // Redémarrer la publicité
00065     tempo.detach();
00066     BLE::Instance().gap().startAdvertising();
00067     
00068     Green = 0;
00069     Red = 1;
00070     
00071 }
00072 
00073 /***************************/
00074 /* Rx de BLE et Rx vers USB*/
00075 /***************************/
00076 void BleOnDataWrittenCallback(const GattWriteCallbackParams *params)
00077 {
00078     char reception[UART_BUFFER];
00079     char commande[2];
00080     float valeur;
00081 
00082     // Reçoit une chaîne de BLE
00083     if (params->handle == uartServicePtr->getTXCharacteristicHandle()) {
00084         // Copie de la chaine reçue dans reception
00085         sprintf(reception,"%s", params->data);
00086         // Copie dans la chaine commande des deux premier caracteres de la chaine reception
00087         sprintf(commande,"%c%c", reception[0], reception[1]);
00088         // Transformation des 3 caracteres suivants en valeur numerique
00089         valeur = ((reception[2] - '0')* 100 + (reception[3] - '0')* 10 +(reception[4] - '0')) ;
00090         valeur = valeur/255;
00091                 
00092         if( strcmp(commande, "LR")==0) {
00093             
00094         }
00095         if( strcmp(commande, "LV")==0) {
00096             
00097         }  
00098 
00099     }
00100 }
00101 
00102 /***************************/
00103 /* Erreur sur le canal BLE */
00104 /***************************/
00105 
00106 void onBleError(ble_error_t error)
00107 {
00108     Red = 1;  
00109     
00110     /* Entrer le traitement des erreurs */
00111 }
00112 
00113 /**************************************/
00114 /* Initialisation du service BLE UART */
00115 /**************************************/
00116 
00117 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
00118 {
00119     BLE&        ble   = params->ble;
00120     ble_error_t error = params->error;
00121 
00122     if (error != BLE_ERROR_NONE) {
00123 
00124         /* En cas d'erreur, transmettez le traitement d'erreur à onBleInitError*/
00125         onBleError(error);
00126         return;
00127     }
00128 
00129     /* Assurez-vous qu'il s'agit de l'instance par défaut de BLE */
00130     if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
00131         return;
00132     }
00133 
00134     ble.gap().onConnection(BleConnectionCallback);
00135     ble.gap().onDisconnection(BleDisconnectionCallback);
00136     ble.gattServer().onDataWritten(BleOnDataWrittenCallback);
00137 
00138     /* Configuration du service primaire. */
00139     UARTService uartService(ble);
00140     uartServicePtr = &uartService;
00141 
00142     /* Configurer la publicité */
00143     ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
00144     ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
00145     ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
00146     ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
00147     ble.gap().setAdvertisingInterval(500); /* 500ms. */
00148     ble.gap().startAdvertising();
00149 
00150     // Attend les événements sur BLE
00151     while (true) {
00152         ble.waitForEvent();
00153     }
00154 }
00155 
00156 /********/
00157 /* MAIN */
00158 /********/
00159 int main(void)
00160 {
00161 
00162     // Initialiser LED
00163     Green = 0;
00164     Red = 1;
00165   
00166 
00167 
00168     /****** START Initialiser BLE **********/
00169     BLE &ble = BLE::Instance();
00170     ble.init(bleInitComplete);
00171     /******* FIN initialise BLE ***********/
00172 
00173 }
00174