]> rtime.felk.cvut.cz Git - tiny-bt.git/blobdiff - src2/bt_hw.c
Better coding style and evt_array is setted on zeros in init function
[tiny-bt.git] / src2 / bt_hw.c
index 00d18f6bae02f74f8957a2bd2063f6edcd177241..ca59dfdf80d348ae84b4941fd92bb9b76837d0de 100644 (file)
@@ -9,7 +9,8 @@
 * Copyright: See COPYING file that comes with this distribution
 *
 */
-#include<sys/socket.h>
+
+#include <sys/socket.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/ioctl.h>
 #include "bt_hw.h"
 #include "hciembeded.h"
 
-static int hw_dd;
+static int hw_dd; /*TODO: this is only for one socket connection */
 
-int hw_bt_open_device(__u8 dev_id){
+int hw_bt_open_device(__u8 dev_id)
+{
        struct sockaddr_hci address;
        int dd;
        int oldflag;
-       if((dd=socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI))<0){
+       int err;
+       
+       if ((dd = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI)) < 0) {
                perror("socket no created");
-               return dd; //it return -1 when socket isn't created
+               return dd; /*it return -1 when socket isn't created*/
        }
        
-       oldflag=fcntl(dd, F_GETFL, 0);
-       if(fcntl(dd, F_SETFL, oldflag | O_NONBLOCK) < 0){
+       oldflag = fcntl(dd, F_GETFL, 0);
+       if (fcntl(dd, F_SETFL, oldflag | O_NONBLOCK) < 0) {
                perror("problem with socket flag setting");
-               return -1;
+               err = -1;
+               goto close_socket;
        }
        
-       memset(&address,0,sizeof(address));
-       address.hci_family=AF_BLUETOOTH;
-       address.hci_dev=dev_id;
-       if(bind(dd,(struct sockaddr *) &address, sizeof(address))<0){
+       memset(&address, 0, sizeof(address));
+       address.hci_family = AF_BLUETOOTH;
+       address.hci_dev = dev_id;
+       if (bind(dd, (struct sockaddr *) &address, sizeof(address)) < 0) {
                perror("Socket not binded to hci device");
-               close(dd);
-               return -1;
+               err = -1;
+               goto close_socket;
        }
        
-       if(ioctl(dd, HCISETRAW,1)<0){
+       if(ioctl(dd, HCISETRAW, 1) < 0) {
                perror("error in ioctl HCISETRAW");
-               return -1;
-                       
+               err = -1;
+               goto close_socket;
        }
-       hw_dd=dd;
+       
+       hw_dd = dd;
        return dd;
+close_socket:
+       close(dd);
+       return err;
 }
 
-int hw_bt_close_dev(){
+int hw_bt_close_dev()
+{
        return close(hw_dd);
 }
 
-int hw_bt_write(__u8 *p_array, __u16 length){
-       while(write(hw_dd, p_array, length)<0){
+int hw_bt_write(__u8 *p_array, __u16 length)
+{
+       while (write(hw_dd, p_array, length) < 0) {
                perror("write interrupted");
-               if(errno == EAGAIN || errno == EINTR)
+               if (errno == EAGAIN || errno == EINTR)
                        continue;
                return -1;
                
@@ -71,14 +82,17 @@ int hw_bt_write(__u8 *p_array, __u16 length){
        return 0;
 }
 
-int hw_bt_read(__u8 *p_recbuf){
+int hw_bt_read(__u8 *p_recbuf)
+{
        int len;
-       while((len=read(hw_dd, p_recbuf, sizeof(p_recbuf)*HCI_MAX_EVENT_SIZE))<0){
-               if(errno == EINTR)
+       
+       while ((len = read(hw_dd, p_recbuf,
+                        sizeof(p_recbuf) * HCI_MAX_EVENT_SIZE)) < 0) {
+               if (errno == EINTR)
                        continue;
-               if(errno == EAGAIN)
+               if (errno == EAGAIN)
                        return 0;
-               perror("Problem with reading \n");
+               perror("Problem with reading\n");
                        return -1;
        }
        return len;