Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of NUCLEO_BLUENRG by
sample_service.cpp
00001 /******************************************************************************/ 00002 /******************************************************************************/ 00003 #include "mbed.h" 00004 #include "sample_service.h" 00005 00006 //Set client address here 00007 //#define CLIENT_ADDRESS {0x36, 0x1F, 0xAC, 0x29, 0x6A, 0xBC} 00008 #define CLIENT_ADDRESS {0x05, 0x25, 0xAC, 0x29, 0x6A, 0xBC}; 00009 00010 volatile int connected = FALSE; 00011 volatile uint8_t set_connectable = 1; 00012 volatile uint16_t connection_handle = 0; 00013 volatile uint8_t notification_enabled = FALSE; 00014 volatile uint8_t read_finished = FALSE; 00015 00016 uint8_t *readData; 00017 uint8_t dataLength; 00018 00019 extern Serial pc; 00020 /******************************************************************************/ 00021 /******************************************************************************/ 00022 00023 #define COPY_UUID_128(uuid_struct, uuid_15, uuid_14, uuid_13, uuid_12, uuid_11, uuid_10, uuid_9, uuid_8, uuid_7, uuid_6, uuid_5, uuid_4, uuid_3, uuid_2, uuid_1, uuid_0) \ 00024 do {\ 00025 uuid_struct.uuid128[0] = uuid_0; uuid_struct.uuid128[1] = uuid_1; uuid_struct.uuid128[2] = uuid_2; uuid_struct.uuid128[3] = uuid_3; \ 00026 uuid_struct.uuid128[4] = uuid_4; uuid_struct.uuid128[5] = uuid_5; uuid_struct.uuid128[6] = uuid_6; uuid_struct.uuid128[7] = uuid_7; \ 00027 uuid_struct.uuid128[8] = uuid_8; uuid_struct.uuid128[9] = uuid_9; uuid_struct.uuid128[10] = uuid_10; uuid_struct.uuid128[11] = uuid_11; \ 00028 uuid_struct.uuid128[12] = uuid_12; uuid_struct.uuid128[13] = uuid_13; uuid_struct.uuid128[14] = uuid_14; uuid_struct.uuid128[15] = uuid_15; \ 00029 }while(0) 00030 00031 00032 00033 /******************************************************************************/ 00034 /******************************************************************************/ 00035 void Make_Connection(void) 00036 { 00037 tBleStatus ret; 00038 00039 // 00040 tBDAddr bdaddr = CLIENT_ADDRESS; 00041 00042 ret = aci_gap_create_connection(0x4000, 0x4000, PUBLIC_ADDR, bdaddr, PUBLIC_ADDR, 9, 9, 0, 60, 1000 , 1000); 00043 00044 if (ret != 0) { 00045 pc.printf("Error while starting connection.\n"); 00046 Clock_Wait(100); 00047 } 00048 00049 } 00050 /******************************************************************************/ 00051 /******************************************************************************/ 00052 void sendData(uint16_t handle, uint8_t* data_buffer, uint8_t Nb_bytes) 00053 { 00054 aci_gatt_write_without_response(connection_handle, handle, Nb_bytes, data_buffer); 00055 } 00056 00057 /******************************************************************************/ 00058 /******************************************************************************/ 00059 00060 uint8_t *readValue(unsigned short handle, uint8_t* len) 00061 { 00062 volatile unsigned char res; 00063 static uint32_t timeout = 0; 00064 00065 res = aci_gatt_read_charac_val(connection_handle, handle); 00066 00067 timeout = 0; 00068 while ((!read_finished)&&(timeout < READ_TIMEOUT)) 00069 { 00070 HCI_Process(); 00071 timeout++; 00072 } 00073 if (timeout == READ_TIMEOUT) 00074 { 00075 dataLength = 0; 00076 } 00077 00078 *len = dataLength; 00079 00080 read_finished = 0; 00081 return readData; 00082 00083 } 00084 00085 /******************************************************************************/ 00086 /******************************************************************************/ 00087 void enableNotification() 00088 { 00089 uint8_t client_char_conf_data[] = {0x01, 0x00}; // Enable notifications 00090 struct timer t; 00091 Timer_Set(&t, CLOCK_SECOND*10); 00092 00093 while(aci_gatt_write_charac_descriptor(connection_handle, 0x0060, 2, client_char_conf_data)==BLE_STATUS_NOT_ALLOWED){ 00094 /* Radio is busy */ 00095 if(Timer_Expired(&t)) break; 00096 } 00097 notification_enabled = TRUE; 00098 } 00099 00100 /******************************************************************************/ 00101 /******************************************************************************/ 00102 void GAP_ConnectionComplete_CB(uint8_t addr[6], uint16_t handle) 00103 { 00104 connected = TRUE; 00105 connection_handle = handle; 00106 00107 } 00108 00109 /******************************************************************************/ 00110 /******************************************************************************/ 00111 void GAP_DisconnectionComplete_CB(void) 00112 { 00113 connected = FALSE; 00114 set_connectable = TRUE; 00115 notification_enabled = FALSE; 00116 } 00117 00118 /******************************************************************************/ 00119 /******************************************************************************/ 00120 00121 void GATT_Notification_CB(uint16_t attr_handle, uint8_t attr_len, uint8_t *attr_value) 00122 { 00123 //reserved 00124 } 00125 00126 /******************************************************************************/ 00127 /******************************************************************************/ 00128 00129 void GATT_Read_CB(uint16_t attr_handle, uint8_t attr_len, uint8_t *attr_value) 00130 { 00131 readData = attr_value; 00132 dataLength = attr_len; 00133 read_finished = 1; 00134 } 00135 00136 /******************************************************************************/ 00137 /******************************************************************************/ 00138 00139 void HCI_Event_CB(void *pckt) 00140 { 00141 hci_uart_pckt *hci_pckt = (hci_uart_pckt *)pckt; 00142 hci_event_pckt *event_pckt = (hci_event_pckt*)hci_pckt->data; 00143 00144 if(hci_pckt->type != HCI_EVENT_PKT) 00145 return; 00146 00147 switch(event_pckt->evt){ 00148 00149 case EVT_DISCONN_COMPLETE: 00150 { 00151 GAP_DisconnectionComplete_CB(); 00152 } 00153 break; 00154 00155 case EVT_LE_META_EVENT: 00156 { 00157 evt_le_meta_event *evt = (evt_le_meta_event *)event_pckt->data; 00158 00159 switch(evt->subevent){ 00160 case EVT_LE_CONN_COMPLETE: 00161 { 00162 evt_le_connection_complete *cc = (evt_le_connection_complete *)evt->data; 00163 GAP_ConnectionComplete_CB(cc->peer_bdaddr, cc->handle); 00164 } 00165 break; 00166 } 00167 } 00168 break; 00169 00170 case EVT_VENDOR: 00171 { 00172 evt_blue_aci *blue_evt = (evt_blue_aci *)event_pckt->data; 00173 switch(blue_evt->ecode){ 00174 00175 case EVT_BLUE_GATT_NOTIFICATION: { 00176 evt_gatt_attr_notification *evt = (evt_gatt_attr_notification*)blue_evt->data; 00177 GATT_Notification_CB(evt->attr_handle, evt->data_length - 2, evt->attr_value); 00178 } 00179 break; 00180 case EVT_BLUE_ATT_READ_RESP: { 00181 evt_gatt_procedure_complete *evt = (evt_gatt_procedure_complete*)blue_evt->data; 00182 GATT_Read_CB(evt->conn_handle, evt->data_length, evt->data); 00183 00184 } 00185 break; 00186 } 00187 } 00188 break; 00189 } 00190 } 00191 /******************************************************************************/ 00192 /******************************************************************************/ 00193 00194 /*****************************END OF FILE**************************************/
Generated on Tue Jul 12 2022 22:44:50 by
1.7.2
