int main(void) { int cycle = 0; int value = 0; int ret; struct timespec sleepValue = {0, INTERVAL_MS}; printf("LED usage example \n"); // enable access to GPIOs ret = gpio_setup(LED_GPIO, GPIO_DIRECTION_OUT, value); if (ret) return -1; do { value ^= 1; // toggle gpio_getValue gpio_setValue(LED_GPIO, value); nanosleep(&sleepValue, NULL); } while (cycle++ <= 10); gpio_cleanup(LED_GPIO); return 0; }
void *RxComParser(void *_bleCentral) { BLE_Central_t *bleCentral = (BLE_Central_t *)_bleCentral; datagram_t datagram; int i, j, data; char buf [30]; long connHandle, opCode; debug(1, "RX COM Parser started\n"); while(bleCentral->_run) { if(queueCount(&bleCentral->rxQueue) == 0) { usleep(STD_WAIT_TIME); continue; } i = 0; connHandle = 0; opCode = 0; dequeue(&bleCentral->rxQueue, &datagram); if(datagram.type == Event) { if((datagram.opcode & 0xFF) == HCI_LE_ExtEvent) { long evtCode = unload_16_bit(datagram.data, &i, 1); char success = unload_8_bit(datagram.data, &i); debug(3, "Event:\t(%02X %02X)\n", (unsigned int)evtCode >> 8 & 0xFF, (unsigned int)evtCode & 0xFF); debug(3, "Status:\t(%02X) %s\n",(unsigned int)success & 0xFF, getSuccessString(success)); switch(evtCode) { case ATT_ErrorRsp: debug(1, "ATT_ErrorResponce return %s\n", getSuccessString(success)); break; case ATT_WriteRsp: debug(1, "ATT_WriteResponce return %s\n", getSuccessString(success)); break; case ATT_HandleValueNotification: debug(1, "ATT_HandleValueNotifiction return %s ", getSuccessString(success)); connHandle = unload_16_bit(datagram.data, &i, 1); char pduLength = unload_8_bit(datagram.data, &i); if(pduLength < 2) break; long handle = unload_16_bit(datagram.data, &i, 1); char str[100]; format_time_of_day(str, datagram.timestamp); debug(1, "from connHandle %04X for handle 0x%04X at %s with data: ", (unsigned int)connHandle & 0xFFFF, (unsigned int)handle & 0xFFFF, str); for(j=0; j<pduLength-2; j++) { //debug(1, "%02X", (unsigned int)datagram.data[i++] & 0xFF); /* HERE WE WRITE INTO THE SHARED MEM */ printf("%2X", (unsigned int)datagram.data[i++] & 0xFF); } debug(1, "\n"); data = ((datagram.data[9]&0xFF)<<8)+(datagram.data[8]&0xFF); //Check if there is more space in the mapped mem. We need Bytes for the //XML string. //check_size_available(bleCentral->mapped_mem, 2); sprintf(buf,"%d",data*2); //append_mm_XMLfile(bleCentral->rt_count,buf,bleCentral->mapped_mem); //bleCentral->rt_count++; if( !gpio_setValue(LED_IND3, led_value) ) { printf("ERROR: Exporting gpio port."); return 0; } led_value=1-led_value; break; case GAP_DeviceInitDone: debug(1, "GAP_DeviceInitDone return %s with MAC addr: ", getSuccessString(success)); for(j=5; j>=0; j--) { bleCentral->MAC[j] = datagram.data[i++]; } for(j=0; j<6; j++) { debug(1, "%02X%c", (unsigned int)bleCentral->MAC[j] & 0xFF, (j<5)?':':'\n'); } break; case GAP_EstablishLink: { debug(1, "GAP_EstablishLink "); debug(1, "%s to device ", (success==0)?"successfully connected":"failed to connect"); i++; // Device address type char connMAC[6]; for(j=5; j>=0; j--) { connMAC[j] = datagram.data[i++]; } for(j=0; j<6; j++) { debug(1, "%02X%c", (unsigned int)connMAC[j] & 0xFF, (j<5)?':':' '); } if(success == HCI_SUCCESS) { /************************************************************************** * If a device with the given MAC address is already defined this will * be returned, otherwise the first unused device handle will be returned **************************************************************************/ BLE_Peripheral_t* device = getNextAvailableDevice(bleCentral, &datagram.data[i]); if(device == NULL) {//No available devices: bail out debug(1, "\nERROR: No connection handles available\n"); break; } memcpy(device->connMAC, connMAC, 6); device->_defined = 1; device->_connected = 1; device->connHandle = (long)datagram.data[i++]; device->connHandle |= (long)datagram.data[i++] << 8; debug(1, "with connHandle 0x%04X\n", device->connHandle); } } break; case GAP_TerminateLink: { debug(1, "GAP_TerminateLink "); connHandle = unload_16_bit(datagram.data, &i, 1); char reason = unload_8_bit(datagram.data, &i); debug(1, "connHandle 0x%04X with reason %s\n", (unsigned int)connHandle & 0xFFFF, getTerminateString(reason)); BLE_Peripheral_t* device = findDeviceByConnHandle(bleCentral, connHandle); device->_connected = 0; break; } case GAP_HCI_ExtentionCommandStatus: debug(1, "GAP_HCI_ExtentionCommandStatus "); opCode = 0; opCode = unload_16_bit(datagram.data, &i, 1); switch(opCode) { case GATT_WriteCharValue: debug(1, "return %s for WriteCharValue\n", getSuccessString(success)); break; case GAP_DeviceInit: debug(1, "return %s for DeviceInit\n", getSuccessString(success)); break; case GAP_EstablishLinkRequest: debug(1, "return %s for EstablishLinkRequest\n", getSuccessString(success)); break; case GAP_TerminateLinkRequest: debug(1, "return %s for TerminateLinkRequest\n", getSuccessString(success)); break; default: debug(1, "return %s for unknown opcode %04X\n", getSuccessString(success), (unsigned int)opCode); } break; default: debug(1, "HCI_LE_ExtEvent OpCode %04X not supported\n", (unsigned int)opCode); } } else { debug(1, "Datagram eventCode not supported: %04X\n", (unsigned int)datagram.opcode); } }