This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi,
I am new user, i am trying to use PAN1326B for my project. but I dont know how to begin. Can you help me?
My project plan: I use ATTiny1634 to connect (UART) with PAN1326B (CC2560). i want to communicate with another device by bluetooth.
I am using atmel studio to programm for it, and I use reference from https://github.com/RedBearLab/BLE_HCI/tree/master/arduino.
Can I use HCI command from this library (CC2540) for my project (CC2560) ?
I am waiting for some components, so I cant test my circuit now.
this my code:
Thank you so much
hng
sorry for my bad english
/* * main.c * * Created: 6/26/2017 11:28:29 AM * BLE_HCI central */ #define F_CPU 8000000 #include <avr/io.h> #include <stdio.h> #include <avr/interrupt.h> #include <util/delay.h> #include "CPble_UART.h" //#include "CPble_HCI_driver.h" //#include "CPble_PCM_driver.h" #include "CPble_MSPIM.h" #include <stdlib.h> #include <string.h> #include "CPble_typedef.h" char found_address[6]; char ble_event_process() { //uint8_t type, event_code, data_len, status1; //uint16_t event; //uint8_t buf[64]; char type, event_code, data_len, status1; char event; char buf[64]; UART0_Init(); // UART0_Receive(); receive a char, type = UART0_Receive(); _delay_ms(35); event_code = UART0_Receive(); data_len = UART0_Receive(); UART1_Init(); SerialPrint1("-----------------------------\r\n"); SerialPrint1("-Type :"); SerialPrint1(type); SerialPrint1("\n"); SerialPrint1("-EventCode :"); SerialPrint1(event_code); SerialPrint1("\n"); SerialPrint1("-Data Length :"); SerialPrint1(data_len); SerialPrint1("\n"); for (int i = 0; i < data_len; i++) { buf[i] = UART0_Receive();} event = BUILD_UINT16(buf[0], buf[1]); status1 = buf[2]; SerialPrint1("-Event :"); SerialPrint1(event); SerialPrint1("\n"); SerialPrint1("-Status :"); SerialPrint1(status1); SerialPrint1("\n"); switch (event) { case 0x060D: // GAP_DeviceInformation { SerialPrint1("GAP_DeviceInformation:\n"); int8_t rssi = buf[11]; SerialPrint1("RSSI :"); // RSSI Receiev Signal Strength Indication SerialPrint1(rssi); SerialPrint1("\n"); SerialPrint1("MAC Address:"); SerialPrint1(buf[10]); SerialPrint1(buf[9]);SerialPrint1(buf[8]);SerialPrint1(buf[7]);SerialPrint1(buf[6]);SerialPrint1(buf[5]); SerialPrint1("\n"); } break; case 0x0601: // GAP_DeviceDiscoveryDone { SerialPrint1("GAP_DeviceDiscoveryDone\n"); uint8_t num_devs = buf[3]; SerialPrint1("NumDevs :"); // RSSI Receiev Signal Strength Indication SerialPrint1(num_devs); SerialPrint1("\n"); if (num_devs > 0) memcpy(found_address, &buf[6], 6); // store 1 device address only in this demo } break; case 0x051B: // ATT_HandleValueNotification { SerialPrint1("ATT_HandleValueNotification\r\n"); uint8_t data[21] = {0}; uint8_t len = data_len - 8; if (len > 20) len = 20; memcpy(data, &buf[8], len); SerialPrint1(" -------------> Received from cpble peripheral:"); SerialPrint1(data);SerialPrint1("\n"); } break; default: SerialPrint1(" -> No connecting\n"); } } int main() { SerialPrint1("Step1: cpble_central_init\n"); cpble_central_init(); SerialPrint1("Step2: ble_event_process\n"); ble_event_process(); int intval; UART1_Init(); while(1){ char str = UART1_Receive(); switch(str) { case 'D': case 'd': SerialPrint1(" -> Start discovery...\r\n"); cpble_central_start_discovery(); break; case 'E': case 'e': SerialPrint1(" -> Connecting to cpble peripheral...\r\n"); cpble_central_connect(found_address); break; case 'N': case 'n': SerialPrint1(" -> Enable notification to receive data...\r\n"); cpble_central_enable_notification(); break; case '1': SerialPrint1(" -> Send \"Hello World!\" to the cpble peripheral...\r\n"); cpble_central_write_bytes((uint8_t *)"Hello World!\r\n", 14); break; case '2': SerialPrint1(" -> Send \"I love BLE!\" to the cpble peripheral...\r\n"); cpble_central_write_bytes((uint8_t *)"I love BLE!\r\n", 13); break; default: SerialPrint1(" -> Invalid command.\r\n"); } } } /* int main() { //int byte, val, val1; int intval; char str[30]; intval = 50; //itoa(intval, str, 10); //convI8toStr(str, intval); adc_init(); UART0_Init(); UART1_Init(); while(1){ /*print adc value ****A int adc_value = read_adc(0x03);// 0x03 pin PA6 itoa(adc_value, str, 10); // receive data from port0 //Serialgets0(str); // send back data from port1 SerialPrint1("the ADC value: "); SerialPrint1(str);SerialPrint1("\n"); //str[0] = UART0_Receive(); //byte=atoi(str); // return integer values //UART0_Init(); //UART0_Sendstr(str);//SerialPrint1("\n"); } } */ /* ready and replay int main() { //int byte, val, val1; uint8_t intval; char str[30]; char buf; UART1_Init(); while(1){ //*print adc value ****A Serialgets1(str); //intval = atoi(str); // return integer values //str[0] = UART1_Receive(); //intval=atoi(str); //UART0_Init(); SerialPrint1(str); } } */ /* int main(void) { UART1_Init(); SerialPrint1("Start:\n"); SerialPrint1("Wait for data:\n"); unsigned char receivedata; //int val; while(1) { // doesnt work receivedata = UART1_Receive(); SerialPrint1(receivedata); //SerialPrint0(""Start:\n"); //SerialPrint1("Hello the world\n"); _delay_ms(500); // Send back //SerialPrint0("echo:\n"); //_delay_ms(200); //SerialPrint0(receivedata); //UART0_Transmit(receivedata); // _delay_ms(200); } } */ /* int main() { int byte, val, val1; char str[20]; UART0_Init(); while(1){ Serialgets(str); byte=atoi(str); val = atoi(str); // sprintf(str,"data retrived from mem= 0x%x\n", val ); //sprintf(str) SerialPrint0("String value ="); SerialPrint0(str); SerialPrint0("\n"); SerialPrint0("Int value ="); SerialPrint0(val1); SerialPrint0("\n"); strcpy(str, "tutorialspoint.com"); val = atoi(str); val1 = sprintf(str,"data retrived from mem= 0x%x\n", val ); SerialPrint0("String value ="); SerialPrint0(str); SerialPrint0("\n"); SerialPrint0("Int value ="); SerialPrint0(val1); SerialPrint0("\n"); //return(0); //} } */
/* * CPble_hci.c * * Created: 6/30/2017 1:19:10 PM * */ //#include <AltSoftSerial.h> #include "CPble_typedef.h" #include "CPble_hci.h" #include <string.h> #include <stdio.h> #include <stdint.h> uint8_t GAP_DeviceInit( uint8_t taskID, uint8_t profileRole, uint8_t maxScanResponses, uint8_t *pIRK, uint8_t *pSRK, uint32_t *pSignCounter ) { uint8_t buf[42]; uint8_t len = 0; buf[len++] = 0x01; // -Type : 0x01 (Command) buf[len++] = 0x00; // -Opcode : 0xFE00 (GAP_DeviceInit) buf[len++] = 0xFE; buf[len++] = 0x26; // -Data Length 0x26bytes (38bytes) = 1 + 1 + 16 + 16 + 4 buf[len++] = profileRole; // Profile Role buf[len++] = maxScanResponses; // MaxScanRsps memcpy(&buf[len], pIRK, 16); // IRK // copy 16bytes from pIRK to buf[] len += 16; memcpy(&buf[len], pSRK, 16); // SRK // copy 16bytes from pSRK to buf[] len += 16; memcpy(&buf[len], pSignCounter, 4); // SignCounter // copy 4bytes from pSignCounter to buf[] len += 4; UART0_Init(); SerialPrintln0(buf, len); //AltSoftSerial.write(buf, len); return 1; } uint8_t GAP_DeviceDiscoveryRequest( gapDevDiscReq_t *pParams ) { uint8_t buf[20]; uint8_t len = 0; buf[len++] = 0x01; // -Type : 0x01 (Command) buf[len++] = 0x04; // -Opcode : 0xFE04 (GAP_DeviceDiscoveryRequest) buf[len++] = 0xFE; buf[len++] = 0x03; // -Data Length 0x03bytes (3bytes) = 1 + 1 + 1 buf[len++] = pParams->mode; // Mode buf[len++] = pParams->activeScan; // ActiveScan buf[len++] = pParams->whiteList; // WhiteList // hci_tl_write(buf, len); // hci_tl_wait_for_response(); UART0_Init(); SerialPrintln0(buf, len); //AltSoftSerial.write(buf, len); return 1; } uint8_t GAP_EstablishLinkReq( gapEstLinkReq_t *pParams ) { uint8_t buf[20]; uint8_t len = 0; buf[len++] = 0x01; // memcpy(&buf[len], "\x09\xFE", 2); len += 2; buf[len++] = 0x03 + B_ADDR_LEN; buf[len++] = pParams->highDutyCycle; buf[len++] = pParams->whiteList; buf[len++] = pParams->addrTypePeer; memcpy(&buf[len], pParams->peerAddr, B_ADDR_LEN); len+=B_ADDR_LEN; UART0_Init(); SerialPrintln0(buf, len); return 1; } uint8_t GATT_WriteCharValue( uint16_t connHandle, attWriteReq_t *pReq, uint8_t taskId ) { uint8_t buf[20]; uint8_t len = 0; buf[len++] = 0x01; memcpy(&buf[len], "\x92\xFD", 2); len += 2; buf[len++] = 0x04 + pReq->len; memcpy(&buf[len], &connHandle, 2); len += 2; memcpy(&buf[len], &pReq->handle, 2); len += 2; memcpy(&buf[len], pReq->value, pReq->len); len += pReq->len; UART0_Init(); SerialPrintln0(buf, len); return 1; } uint8_t GATT_WriteNoRsp( uint16_t connHandle, attWriteReq_t *pReq, uint8_t taskId ) { uint8_t buf[20]; uint8_t len = 0; buf[len++] = 0x01; memcpy(&buf[len], "\xB6\xFD", 2); len += 2; buf[len++] = 0x04 + pReq->len; memcpy(&buf[len], &connHandle, 2); len += 2; memcpy(&buf[len], &pReq->handle, 2); len += 2; memcpy(&buf[len], pReq->value, pReq->len); len += pReq->len; UART0_Init(); SerialPrintln0(buf, len); //AltSoftSerial.write(buf, len); return 1; } /*********************************** * Master device *************************************/ /* void biscuit_central_init() { GAPCentralRole_StartDevice(); } static uint8_t gapCentralRoleTaskId = 0; static uint8_t gapCentralRoleIRK[KEYLEN] = {0}; static uint8_t gapCentralRoleSRK[KEYLEN] = {0}; static uint32_t gapCentralRoleSignCounter = 1; static uint8_t gapCentralRoleBdAddr[B_ADDR_LEN]; static uint8_t gapCentralRoleMaxScanRes = 5; */ static uint8_t gapCentralRoleTaskId = 0; static uint8_t gapCentralRoleIRK[KEYLEN] = {0}; static uint8_t gapCentralRoleSRK[KEYLEN] = {0}; static uint32_t gapCentralRoleSignCounter = 1; static uint8_t gapCentralRoleBdAddr[B_ADDR_LEN]; static uint8_t gapCentralRoleMaxScanRes = 5; uint8_t GAPCentralRole_StartDevice() { // gapCentralRoleTaskId = 0, // GAP_PROFILE_CENTRAL = 0x08 // gapCentralRoleMaxScanRes = 5 // gapCentralRoleIRK = gapCentralRoleIRK[KEYLEN] = {0}; // KEYLEN= 16 // gapCentralRoleSRK = {0}; // gapCentralRoleSignCounter = 1 return GAP_DeviceInit( gapCentralRoleTaskId, GAP_PROFILE_CENTRAL, gapCentralRoleMaxScanRes, gapCentralRoleIRK, gapCentralRoleSRK, &gapCentralRoleSignCounter ); } uint8_t GAPCentralRole_EstablishLink( uint8_t highDutyCycle, uint8_t whiteList, uint8_t addrTypePeer, uint8_t *peerAddr ) { gapEstLinkReq_t params; params.taskID = gapCentralRoleTaskId; params.highDutyCycle = highDutyCycle; params.whiteList = whiteList; params.addrTypePeer = addrTypePeer; memcpy( params.peerAddr, peerAddr, B_ADDR_LEN ); return GAP_EstablishLinkReq( ¶ms ); } uint8_t GAPCentralRole_StartDiscovery( uint8_t mode, uint8_t activeScan, uint8_t whiteList ) { gapDevDiscReq_t params; params.taskID = gapCentralRoleTaskId; params.mode = mode; params.activeScan = activeScan; params.whiteList = whiteList; return GAP_DeviceDiscoveryRequest( ¶ms ); }
Hi,
Ja, I am trying to use ATtiny1634 as the processor platform for CC2560.
I am trying to build:
AtmelStudio (AVR) ----(FTDI)-----ATTiny163-------(UART-Levelshifter) ----------PAN1326B PAN1326B -------------(UART-Levelshifter)-------ATTiny1634--------(FTDI)----------AtmelStudio(AVR)
I am trying to transmitt data between 2 bluetooth devices (PAN1326B)
Thank you
Hoang,
We do not offer support for MCUs other than the ones listed in our wiki (MSP432, MSP430, Tiva, STM32F4). For assistance with porting to other MCUs, please utilize the resources at this site.