1 
2 #include "socket_class.h"
3 
4 MODULE = Socket::Class::BT		PACKAGE = Socket::Class
5 
6 BOOT:
7 {
8 	printf( "booting bluetooth module\n" );
9 }
10 
11 #/*****************************************************************************
12 # * bt_device_list()
13 # *****************************************************************************/
14 
15 void
16 bt_device_list( ... )
17 PREINIT:
18 	bdaddr_t addr[256];
19 	int r;
20 	my_thread_var_t *tv;
21 	char tmp[20];
22 PPCODE:
23 	r = bt_device_list( addr, sizeof( addr ) / sizeof( bdaddr_t ) );
24 	if( r == SOCKET_ERROR ) {
25 		tv = items > 0 ? my_thread_var_find( ST(0) ) : NULL;
26 		if( tv != NULL )
27 			tv->last_errno = Socket_errno();
28 		else
29 			global.last_errno = Socket_errno();
30 		XPUSHs( &PL_sv_undef );
31 	}
32 	else {
33 		for( r = r - 1; r >= 0; r -- ) {
34 			my_ba2str( &addr[r], tmp );
35 			XPUSHs( newSVpvn( tmp, 17 ) );
36 		}
37 	}
38 
39 
40 #/*****************************************************************************
41 # * bt_device_name()
42 # *****************************************************************************/
43 
44 void
45 bt_device_name( ... )
46 PREINIT:
47 	char tmp[256], *s1;
48 	STRLEN l1;
49 	int r;
50 	bdaddr_t addr;
51 	my_thread_var_t *tv;
52 PPCODE:
53 	if( items > 1 ) {
54 		s1 = SvPVbyte( ST(1), l1 );
55 		if( l1 == sizeof( bdaddr_t ) )
56 			r = bt_device_name( (bdaddr_t *) s1, tmp, sizeof( tmp ) - 1 );
57 		else {
58 			my_str2ba( s1, &addr );
59 			r = bt_device_name( &addr, tmp, sizeof( tmp ) - 1 );
60 		}
61 	}
62 	else {
63 		r = bt_device_name( NULL, tmp, sizeof( tmp ) - 1 );
64 	}
65 	if( r == SOCKET_ERROR ) {
66 		tv = items > 0 ? my_thread_var_find( ST(0) ) : NULL;
67 		if( tv != NULL )
68 			tv->last_errno = Socket_errno();
69 		else
70 			global.last_errno = Socket_errno();
71 		XPUSHs( &PL_sv_undef );
72 	}
73 	else {
74 		//_debug( "got name %d %s\n", r, tmp );
75 		XPUSHs( newSVpvn( tmp, r ) );
76 	}
77 
78 
79 #/*****************************************************************************
80 # * bt_service_list()
81 # *****************************************************************************/
82 
83 void
84 bt_service_list( ... )
85 PREINIT:
86 	char tmp[256], *s1;
87 	STRLEN l1;
88 	int r;
89 	bdaddr_t addr;
90 	my_thread_var_t *tv;
91 PPCODE:
92 	if( items > 1 ) {
93 		s1 = SvPVbyte( ST(1), l1 );
94 		if( l1 == sizeof( bdaddr_t ) )
95 			r = bt_service_list( (bdaddr_t *) s1 );
96 		else {
97 			my_str2ba( s1, &addr );
98 			r = bt_service_list( &addr );
99 		}
100 	}
101 	else {
102 		r = bt_service_list( NULL );
103 	}
104 	if( r == SOCKET_ERROR ) {
105 		tv = items > 0 ? my_thread_var_find( ST(0) ) : NULL;
106 		if( tv != NULL )
107 			tv->last_errno = Socket_errno();
108 		else
109 			global.last_errno = Socket_errno();
110 		XPUSHs( &PL_sv_undef );
111 	}
112 
113