@@ -18,6 +18,75 @@ extern struct settings g_settings;
1818
1919const char * thread_cmd_val_str ;
2020
21+ SOCKET GetConnection (void ) {
22+ SOCKET socket = INVALID_SOCKET ;
23+
24+ if (g_settings .connection == CB_RADIO_IOS ) {
25+ socket = CheckiOSDevices (g_settings .port );
26+ if (socket <= 0 ) socket = INVALID_SOCKET ;
27+ } else {
28+ socket = Connect (g_settings .ip , g_settings .port );
29+ }
30+
31+ return socket ;
32+ }
33+
34+ // Battry Chcek thread
35+ void * BatteryThreadProc (__attribute__((__unused__ )) void * args ) {
36+ SOCKET socket = INVALID_SOCKET ;
37+ char buf [128 ];
38+ char battery_value [32 ];
39+ int i , j ;
40+
41+ memset (battery_value , 0 , sizeof (battery_value ));
42+ dbgprint ("Battery Thread Start\n" );
43+
44+ usleep (500000 );
45+ while (v_running || a_running ) {
46+ socket = GetConnection ();
47+ if (socket == INVALID_SOCKET ) {
48+ goto LOOP ;
49+ }
50+
51+ if (Send (BATTERY_REQ , CSTR_LEN (BATTERY_REQ ), socket ) <= 0 ) {
52+ errprint ("error sending battery status request\n" );
53+ goto LOOP ;
54+ }
55+
56+ memset (buf , 0 , sizeof (buf ));
57+ if (Recv (buf , sizeof (buf ), socket ) <= 0 ) {
58+ goto LOOP ;
59+ }
60+
61+ for (i = 0 ; i < (sizeof (buf )- 4 ); i ++ ) {
62+ if (buf [i ] == '\r' && buf [i + 1 ] == '\n' && buf [i + 2 ] == '\r' && buf [i + 3 ] == '\n' ) {
63+ i += 4 ;
64+ break ;
65+ }
66+ }
67+
68+ j = 0 ;
69+ while (i < sizeof (buf ) && j < (sizeof (battery_value )- 2 ) && buf [i ] >= '0' && buf [i ] <= '9' )
70+ battery_value [j ++ ] = buf [i ++ ];
71+
72+ if (j == 0 )
73+ battery_value [j ++ ] = '-' ;
74+
75+ battery_value [j ++ ] = '%' ;
76+ battery_value [sizeof (battery_value ) - 1 ] = 0 ;
77+ dbgprint ("battery_value: %s\n" , battery_value );
78+ UpdateBatteryLabel (battery_value );
79+
80+ LOOP :
81+ disconnect (socket );
82+ for (j = 0 ; j < 30000 && (v_running || a_running ); j ++ )
83+ usleep (1000 );
84+ }
85+
86+ dbgprint ("Battery Thread End\n" );
87+ return 0 ;
88+ }
89+
2190void * DecodeThreadProc (__attribute__((__unused__ )) void * args ) {
2291 dbgprint ("Decode Thread Start\n" );
2392 while (v_running != 0 ) {
@@ -48,13 +117,13 @@ void *VideoThreadProc(void *args) {
48117 }
49118
50119 len = snprintf (buf , sizeof (buf ), VIDEO_REQ , decoder_get_video_width (), decoder_get_video_height ());
51- if (SendRecv (true, buf , len , videoSocket ) <= 0 ){
120+ if (Send ( buf , len , videoSocket ) <= 0 ){
52121 MSG_ERROR ("Error sending request, DroidCam might be busy with another client." );
53122 goto early_out ;
54123 }
55124
56125 memset (buf , 0 , sizeof (buf ));
57- if (SendRecv (false, buf , 9 , videoSocket ) <= 0 ) {
126+ if (RecvAll ( buf , 9 , videoSocket ) <= 0 ) {
58127 MSG_ERROR ("Connection reset!\nIs the app running?" );
59128 goto early_out ;
60129 }
@@ -73,17 +142,17 @@ void *VideoThreadProc(void *args) {
73142 len = snprintf (buf , sizeof (buf ), OTHER_REQ , thread_cmd );
74143 }
75144 if (len ) {
76- SendRecv (true, buf , len , videoSocket );
145+ Send ( buf , len , videoSocket );
77146 }
78147 thread_cmd = 0 ;
79148 }
80149
81150 JPGFrame * f = pull_empty_jpg_frame ();
82- if (SendRecv (false, buf , 4 , videoSocket ) <= 0 )
151+ if (RecvAll ( buf , 4 , videoSocket ) <= 0 )
83152 break ;
84153
85154 f -> length = le32toh (* (uint32_t * ) buf );
86- if (SendRecv (false, ( char * )f -> data , f -> length , videoSocket ) <= 0 )
155+ if (RecvAll (( const char * )f -> data , f -> length , videoSocket ) <= 0 )
87156 break ;
88157
89158 push_jpg_frame (f , false);
@@ -151,25 +220,20 @@ void *AudioThreadProc(void *arg) {
151220TCP_ONLY :
152221 dbgprint ("UDP didnt work, trying TCP\n" );
153222 mode = TCP_STREAM ;
154- if (g_settings .connection == CB_RADIO_IOS ) {
155- socket = CheckiOSDevices (g_settings .port );
156- if (socket <= 0 ) socket = INVALID_SOCKET ;
157- } else {
158- socket = Connect (g_settings .ip , g_settings .port );
159- }
223+ socket = GetConnection ();
160224
161225 if (socket == INVALID_SOCKET ) {
162- errprint ("Audio: Connect failed to %s:%d \n" , g_settings . ip , g_settings . port );
226+ errprint ("Audio Connection failed\n" );
163227 return 0 ;
164228 }
165229
166- if (SendRecv (true, ( char * ) AUDIO_REQ , CSTR_LEN (AUDIO_REQ ), socket ) <= 0 ) {
230+ if (Send ( AUDIO_REQ , CSTR_LEN (AUDIO_REQ ), socket ) <= 0 ) {
167231 MSG_ERROR ("Error sending audio request" );
168232 goto early_out ;
169233 }
170234
171235 memset (stream_buf , 0 , 6 );
172- if (SendRecv (false, stream_buf , 6 , socket ) <= 0 ) {
236+ if (RecvAll ( stream_buf , 6 , socket ) <= 0 ) {
173237 MSG_ERROR ("Audio connection reset!" );
174238 goto early_out ;
175239 }
0 commit comments