-int create_master_connection(struct hci_dev_info *master){//establish connection and send a coutn of bytes every x second
+int create_master_connection(connection_hci *p_connection){//establish connection and send a coutn of bytes every x second
//array of open request which are in waiting state for appropriate event or answer
- connection_hci connection,*p_connection=&connection;
p_connection->con_id=0;
p_connection->con_state=DISCONNECTED;
+ p_connection->socket_fd=hci_open_device(p_connection->master.dev_id);
+ if(l2cap_call_cmd(CREATE_CONNECTION_CMD_OP,p_connection->socket_fd,p_connection)<0){
+ printf("connection problem \n");
+ return -1;
+ }
- while(1){
- if(!p_connection->con_state){ //there is no connection, create it
-
- }
-
-
-
- }
return 0;
}
printf("Error in call hci bd addr cmd \n");
return -1;
}
+ //hci_close_dev(dev_array[i].dev_id);
}
*master = dev_array[0]; //I will take a first dev like a master
}
+int show_all_remote_dev(struct hci_dev_info *p_master, bt_address *p_remadrar, int *p_remd_count){
+ int dd=hci_open_device(p_master->dev_id);
+
+ if((*p_remd_count=l2cap_call_cmd(INQUIRY_CMD_OP, dd, p_remadrar))< 0){
+ printf("Error in call inquiry command \n");
+ return -1;
+ }
+ return 0;
+
+}
+
int l2cap_call_cmd(__u16 ocf_ogf,int dd, void *p_param){
cmd_state_request new_req,*p_new_req=&new_req;
__u16 sw_opcode;
- sw_opcode=swap_2_bytes(ocf_ogf);
+ int remd_count;
+ sw_opcode=swap_2_bytes(ocf_ogf);
+ p_new_req->actual_status=ESTABLISHED;
+ p_new_req->id=cmd_req_id++;
+ p_new_req->req_opcode = ocf_ogf;
+
switch(ocf_ogf){
- case READ_BD_ADDR_CMD_OP:{
- p_new_req->actual_status=ESTABLISHED;
- p_new_req->id=cmd_req_id++;
- p_new_req->req_opcode = ocf_ogf;
+ case READ_BD_ADDR_CMD_OP:
p_new_req->evt_code = EVT_CMD_COMPLETE;
- p_new_req->p_serv_rutine=rutine_catch_bd_addr;
+ p_new_req->p_serv_rutine=NULL;
if(req_fcn_add(p_new_req)<0){
printf("Mistake with req array adding \n ");
req_fcn_remove();
return 0;
-
- }
- case READ_LOCAL_NAME_CMD_OP:{
- p_new_req->actual_status=ESTABLISHED;
- p_new_req->id=cmd_req_id++;
- p_new_req->req_opcode = ocf_ogf;
+ case READ_LOCAL_NAME_CMD_OP:
p_new_req->evt_code = EVT_CMD_COMPLETE;
- p_new_req->p_serv_rutine=rutine_catch_bd_addr;
+ p_new_req->p_serv_rutine=NULL;
if(req_fcn_add(p_new_req)<0){
printf("Mistake with req array adding \n ");
}
req_fcn_remove();
return 0;
- }
+
+ case INQUIRY_CMD_OP:
+
+ p_new_req->evt_code = EVT_INQUIRY_COMPLETE;
+ p_new_req->p_serv_rutine=NULL;
+
+ if(req_fcn_add(p_new_req)<0){
+ printf("Mistake with req array adding \n ");
+ return -1;
+ }
+ if((remd_count=call_hci_inquiry_cmd(dd,p_param,&sw_opcode)) < 0){
+ printf("Mistake with inquiry cmd \n ");
+ return -1;
+ }
+ req_fcn_remove();
+ return remd_count;
+
+ case CREATE_CONNECTION_CMD_OP:
+ p_new_req->evt_code = EVT_CONN_COMPLETE;
+ p_new_req->p_serv_rutine=NULL;
+
+ if(req_fcn_add(p_new_req)<0){
+ printf("Mistake with req array adding \n ");
+ return -1;
+ }
+ if((((connection_hci *)p_param)->handle=call_hci_create_connection_cmd(dd, &(((connection_hci *)p_param)->slave.bdaddr), &sw_opcode)) < 0){
+ printf("Mistake with inquiry cmd \n ");
+ return -1;
+ }
+ ((connection_hci *)p_param)->con_state=CONNECTED;
+ req_fcn_remove();
+ return 0;
}
return 0;
int main(void){
struct hci_dev_info master,*p_master=&master;
+ bt_address remote_bd_addr_array[HCI_MAX_DEV];
+ memset(remote_bd_addr_array,0,(sizeof(bt_address)*HCI_MAX_DEV));
+ connection_hci connection,*p_connection=&connection;
+ int remd_count,i;
cmd_req_id=0;
global_index=0;
memset(array_req,0,(sizeof(cmd_state_request)*MAX_CMD_STATE_REQUEST));
printf("error no dev \n");
return -1;
}
+ if(show_all_remote_dev(p_master, remote_bd_addr_array, &remd_count)<0){
+ printf("error no remote dev \n");
+ return -1;
+ }
+ printf("All remote devices:\n");
+ for(i=0;i<remd_count;i++){
+ printba(&remote_bd_addr_array[i]);
+ }
+ p_connection->master=master;
+ p_connection->slave.bdaddr=remote_bd_addr_array[0];
-
-
-
+ if(create_master_connection(p_connection)<0){
+ printf("connection error");
+ return -1;
+ }
+
return 0;
}
-
-//void call_hci_send_data(unsigned short con_handle, __u8 pb_flag, __u8 b_flag, unsigned short data_lenght)
-
-//void call_hci_create_connection(bt_address *dev_adress,unsigned short pkt_type,__u8 sc_mod){//
-
-//}
-
-//Socket functions
-/* */
-
-
-