Compare commits
10 Commits
install.2
...
printf_flo
Author | SHA1 | Date | |
---|---|---|---|
d23b3e88a4 | |||
a47848f304 | |||
db8c1ce8e1 | |||
4aeb78ece2 | |||
396e4bd925 | |||
7f2f5950f2 | |||
af4b7855e1 | |||
b1d8c72780 | |||
55e65fa270 | |||
69fb5f6ee1 |
@ -401,6 +401,7 @@ sc_adb_list_devices(struct sc_intr *intr, unsigned flags,
|
||||
#define BUFSIZE 65536
|
||||
char *buf = malloc(BUFSIZE);
|
||||
if (!buf) {
|
||||
LOG_OOM();
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -710,5 +711,5 @@ sc_adb_get_device_ip(struct sc_intr *intr, const char *serial, unsigned flags) {
|
||||
// It is parsed as a NUL-terminated string
|
||||
buf[r] = '\0';
|
||||
|
||||
return sc_adb_parse_device_ip_from_output(buf);
|
||||
return sc_adb_parse_device_ip(buf);
|
||||
}
|
||||
|
@ -199,7 +199,7 @@ sc_adb_parse_device_ip_from_line(char *line) {
|
||||
}
|
||||
|
||||
char *
|
||||
sc_adb_parse_device_ip_from_output(char *str) {
|
||||
sc_adb_parse_device_ip(char *str) {
|
||||
size_t idx_line = 0;
|
||||
while (str[idx_line] != '\0') {
|
||||
char *line = &str[idx_line];
|
||||
|
@ -25,6 +25,6 @@ sc_adb_parse_devices(char *str, struct sc_vec_adb_devices *out_vec);
|
||||
* Warning: this function modifies the buffer for optimization purposes.
|
||||
*/
|
||||
char *
|
||||
sc_adb_parse_device_ip_from_output(char *str);
|
||||
sc_adb_parse_device_ip(char *str);
|
||||
|
||||
#endif
|
||||
|
@ -98,7 +98,7 @@ sc_clock_update(struct sc_clock *clock, sc_tick system, sc_tick stream) {
|
||||
sc_clock_estimate(clock, &clock->slope, &clock->offset);
|
||||
|
||||
#ifndef SC_CLOCK_NDEBUG
|
||||
LOGD("Clock estimation: %g * pts + %" PRItick,
|
||||
LOGD("Clock estimation: %f * pts + %" PRItick,
|
||||
clock->slope, clock->offset);
|
||||
#endif
|
||||
}
|
||||
|
@ -170,7 +170,7 @@ sc_control_msg_log(const struct sc_control_msg *msg) {
|
||||
if (id == POINTER_ID_MOUSE || id == POINTER_ID_VIRTUAL_FINGER) {
|
||||
// string pointer id
|
||||
LOG_CMSG("touch [id=%s] %-4s position=%" PRIi32 ",%" PRIi32
|
||||
" pressure=%g buttons=%06lx",
|
||||
" pressure=%f buttons=%06lx",
|
||||
id == POINTER_ID_MOUSE ? "mouse" : "vfinger",
|
||||
MOTIONEVENT_ACTION_LABEL(action),
|
||||
msg->inject_touch_event.position.point.x,
|
||||
@ -180,7 +180,7 @@ sc_control_msg_log(const struct sc_control_msg *msg) {
|
||||
} else {
|
||||
// numeric pointer id
|
||||
LOG_CMSG("touch [id=%" PRIu64_ "] %-4s position=%" PRIi32 ",%"
|
||||
PRIi32 " pressure=%g buttons=%06lx",
|
||||
PRIi32 " pressure=%f buttons=%06lx",
|
||||
id,
|
||||
MOTIONEVENT_ACTION_LABEL(action),
|
||||
msg->inject_touch_event.position.point.x,
|
||||
|
@ -37,8 +37,8 @@ sc_demuxer_recv_packet(struct sc_demuxer *demuxer, AVPacket *packet) {
|
||||
// CK...... ........ ........ ........ ........ ........ ........ ........
|
||||
// ^^<------------------------------------------------------------------->
|
||||
// || PTS
|
||||
// | `- config packet
|
||||
// `-- key frame
|
||||
// | `- key frame
|
||||
// `-- config packet
|
||||
|
||||
uint8_t header[SC_PACKET_HEADER_SIZE];
|
||||
ssize_t r = net_recv_all(demuxer->socket, header, SC_PACKET_HEADER_SIZE);
|
||||
|
@ -1,51 +0,0 @@
|
||||
#ifndef STREAM_H
|
||||
#define STREAM_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <libavcodec/avcodec.h>
|
||||
#include <libavformat/avformat.h>
|
||||
|
||||
#include "trait/packet_sink.h"
|
||||
#include "util/net.h"
|
||||
#include "util/thread.h"
|
||||
|
||||
#define STREAM_MAX_SINKS 2
|
||||
|
||||
struct stream {
|
||||
sc_socket socket;
|
||||
sc_thread thread;
|
||||
|
||||
struct sc_packet_sink *sinks[STREAM_MAX_SINKS];
|
||||
unsigned sink_count;
|
||||
|
||||
AVCodecContext *codec_ctx;
|
||||
AVCodecParserContext *parser;
|
||||
// successive packets may need to be concatenated, until a non-config
|
||||
// packet is available
|
||||
AVPacket *pending;
|
||||
|
||||
const struct stream_callbacks *cbs;
|
||||
void *cbs_userdata;
|
||||
};
|
||||
|
||||
struct stream_callbacks {
|
||||
void (*on_eos)(struct stream *stream, void *userdata);
|
||||
};
|
||||
|
||||
void
|
||||
stream_init(struct stream *stream, sc_socket socket,
|
||||
const struct stream_callbacks *cbs, void *cbs_userdata);
|
||||
|
||||
void
|
||||
stream_add_sink(struct stream *stream, struct sc_packet_sink *sink);
|
||||
|
||||
bool
|
||||
stream_start(struct stream *stream);
|
||||
|
||||
void
|
||||
stream_join(struct stream *stream);
|
||||
|
||||
#endif
|
@ -23,6 +23,11 @@ read_string(libusb_device_handle *handle, uint8_t desc_index) {
|
||||
|
||||
// When non-negative, 'result' contains the number of bytes written
|
||||
char *s = malloc(result + 1);
|
||||
if (!s) {
|
||||
LOG_OOM();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memcpy(s, buffer, result);
|
||||
s[result] = '\0';
|
||||
return s;
|
||||
|
@ -3,11 +3,10 @@
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <SDL2/SDL_platform.h>
|
||||
|
||||
#include "log.h"
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
#ifdef _WIN32
|
||||
# include <ws2tcpip.h>
|
||||
typedef int socklen_t;
|
||||
typedef SOCKET sc_raw_socket;
|
||||
@ -29,7 +28,7 @@
|
||||
|
||||
bool
|
||||
net_init(void) {
|
||||
#ifdef __WINDOWS__
|
||||
#ifdef _WIN32
|
||||
WSADATA wsa;
|
||||
int res = WSAStartup(MAKEWORD(2, 2), &wsa) < 0;
|
||||
if (res < 0) {
|
||||
@ -42,14 +41,14 @@ net_init(void) {
|
||||
|
||||
void
|
||||
net_cleanup(void) {
|
||||
#ifdef __WINDOWS__
|
||||
#ifdef _WIN32
|
||||
WSACleanup();
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline sc_socket
|
||||
wrap(sc_raw_socket sock) {
|
||||
#ifdef __WINDOWS__
|
||||
#ifdef _WIN32
|
||||
if (sock == INVALID_SOCKET) {
|
||||
return SC_SOCKET_NONE;
|
||||
}
|
||||
@ -72,7 +71,7 @@ wrap(sc_raw_socket sock) {
|
||||
|
||||
static inline sc_raw_socket
|
||||
unwrap(sc_socket socket) {
|
||||
#ifdef __WINDOWS__
|
||||
#ifdef _WIN32
|
||||
if (socket == SC_SOCKET_NONE) {
|
||||
return INVALID_SOCKET;
|
||||
}
|
||||
@ -248,7 +247,7 @@ net_interrupt(sc_socket socket) {
|
||||
|
||||
sc_raw_socket raw_sock = unwrap(socket);
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
#ifdef _WIN32
|
||||
if (!atomic_flag_test_and_set(&socket->closed)) {
|
||||
return !closesocket(raw_sock);
|
||||
}
|
||||
@ -262,7 +261,7 @@ bool
|
||||
net_close(sc_socket socket) {
|
||||
sc_raw_socket raw_sock = unwrap(socket);
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
#ifdef _WIN32
|
||||
bool ret = true;
|
||||
if (!atomic_flag_test_and_set(&socket->closed)) {
|
||||
ret = !closesocket(raw_sock);
|
||||
|
@ -5,9 +5,8 @@
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <SDL2/SDL_platform.h>
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
#ifdef _WIN32
|
||||
|
||||
# include <winsock2.h>
|
||||
# include <stdatomic.h>
|
||||
@ -17,7 +16,7 @@
|
||||
atomic_flag closed;
|
||||
} *sc_socket;
|
||||
|
||||
#else // not __WINDOWS__
|
||||
#else // not _WIN32
|
||||
|
||||
# include <sys/socket.h>
|
||||
# define SC_SOCKET_NONE -1
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include "adb/adb_device.h"
|
||||
#include "adb/adb_parser.h"
|
||||
|
||||
static void test_adb_devices() {
|
||||
static void test_adb_devices(void) {
|
||||
char output[] =
|
||||
"List of devices attached\n"
|
||||
"0123456789abcdef device usb:2-1 product:MyProduct model:MyModel "
|
||||
@ -31,7 +31,7 @@ static void test_adb_devices() {
|
||||
sc_adb_devices_destroy(&vec);
|
||||
}
|
||||
|
||||
static void test_adb_devices_cr() {
|
||||
static void test_adb_devices_cr(void) {
|
||||
char output[] =
|
||||
"List of devices attached\r\n"
|
||||
"0123456789abcdef device usb:2-1 product:MyProduct model:MyModel "
|
||||
@ -57,7 +57,7 @@ static void test_adb_devices_cr() {
|
||||
sc_adb_devices_destroy(&vec);
|
||||
}
|
||||
|
||||
static void test_adb_devices_daemon_start() {
|
||||
static void test_adb_devices_daemon_start(void) {
|
||||
char output[] =
|
||||
"* daemon not running; starting now at tcp:5037\n"
|
||||
"* daemon started successfully\n"
|
||||
@ -78,7 +78,7 @@ static void test_adb_devices_daemon_start() {
|
||||
sc_adb_devices_destroy(&vec);
|
||||
}
|
||||
|
||||
static void test_adb_devices_daemon_start_mixed() {
|
||||
static void test_adb_devices_daemon_start_mixed(void) {
|
||||
char output[] =
|
||||
"List of devices attached\n"
|
||||
"adb server version (41) doesn't match this client (39); killing...\n"
|
||||
@ -105,7 +105,7 @@ static void test_adb_devices_daemon_start_mixed() {
|
||||
sc_adb_devices_destroy(&vec);
|
||||
}
|
||||
|
||||
static void test_adb_devices_without_eol() {
|
||||
static void test_adb_devices_without_eol(void) {
|
||||
char output[] =
|
||||
"List of devices attached\n"
|
||||
"0123456789abcdef device usb:2-1 product:MyProduct model:MyModel "
|
||||
@ -124,7 +124,7 @@ static void test_adb_devices_without_eol() {
|
||||
sc_adb_devices_destroy(&vec);
|
||||
}
|
||||
|
||||
static void test_adb_devices_without_header() {
|
||||
static void test_adb_devices_without_header(void) {
|
||||
char output[] =
|
||||
"0123456789abcdef device usb:2-1 product:MyProduct model:MyModel "
|
||||
"device:MyDevice transport_id:1\n";
|
||||
@ -134,7 +134,7 @@ static void test_adb_devices_without_header() {
|
||||
assert(!ok);
|
||||
}
|
||||
|
||||
static void test_adb_devices_corrupted() {
|
||||
static void test_adb_devices_corrupted(void) {
|
||||
char output[] =
|
||||
"List of devices attached\n"
|
||||
"corrupted_garbage\n";
|
||||
@ -145,7 +145,7 @@ static void test_adb_devices_corrupted() {
|
||||
assert(vec.size == 0);
|
||||
}
|
||||
|
||||
static void test_adb_devices_spaces() {
|
||||
static void test_adb_devices_spaces(void) {
|
||||
char output[] =
|
||||
"List of devices attached\n"
|
||||
"0123456789abcdef unauthorized usb:1-4 transport_id:3\n";
|
||||
@ -163,81 +163,81 @@ static void test_adb_devices_spaces() {
|
||||
sc_adb_devices_destroy(&vec);
|
||||
}
|
||||
|
||||
static void test_get_ip_single_line() {
|
||||
static void test_get_ip_single_line(void) {
|
||||
char ip_route[] = "192.168.1.0/24 dev wlan0 proto kernel scope link src "
|
||||
"192.168.12.34\r\r\n";
|
||||
|
||||
char *ip = sc_adb_parse_device_ip_from_output(ip_route);
|
||||
char *ip = sc_adb_parse_device_ip(ip_route);
|
||||
assert(ip);
|
||||
assert(!strcmp(ip, "192.168.12.34"));
|
||||
free(ip);
|
||||
}
|
||||
|
||||
static void test_get_ip_single_line_without_eol() {
|
||||
static void test_get_ip_single_line_without_eol(void) {
|
||||
char ip_route[] = "192.168.1.0/24 dev wlan0 proto kernel scope link src "
|
||||
"192.168.12.34";
|
||||
|
||||
char *ip = sc_adb_parse_device_ip_from_output(ip_route);
|
||||
char *ip = sc_adb_parse_device_ip(ip_route);
|
||||
assert(ip);
|
||||
assert(!strcmp(ip, "192.168.12.34"));
|
||||
free(ip);
|
||||
}
|
||||
|
||||
static void test_get_ip_single_line_with_trailing_space() {
|
||||
static void test_get_ip_single_line_with_trailing_space(void) {
|
||||
char ip_route[] = "192.168.1.0/24 dev wlan0 proto kernel scope link src "
|
||||
"192.168.12.34 \n";
|
||||
|
||||
char *ip = sc_adb_parse_device_ip_from_output(ip_route);
|
||||
char *ip = sc_adb_parse_device_ip(ip_route);
|
||||
assert(ip);
|
||||
assert(!strcmp(ip, "192.168.12.34"));
|
||||
free(ip);
|
||||
}
|
||||
|
||||
static void test_get_ip_multiline_first_ok() {
|
||||
static void test_get_ip_multiline_first_ok(void) {
|
||||
char ip_route[] = "192.168.1.0/24 dev wlan0 proto kernel scope link src "
|
||||
"192.168.1.2\r\n"
|
||||
"10.0.0.0/24 dev rmnet proto kernel scope link src "
|
||||
"10.0.0.2\r\n";
|
||||
|
||||
char *ip = sc_adb_parse_device_ip_from_output(ip_route);
|
||||
char *ip = sc_adb_parse_device_ip(ip_route);
|
||||
assert(ip);
|
||||
assert(!strcmp(ip, "192.168.1.2"));
|
||||
free(ip);
|
||||
}
|
||||
|
||||
static void test_get_ip_multiline_second_ok() {
|
||||
static void test_get_ip_multiline_second_ok(void) {
|
||||
char ip_route[] = "10.0.0.0/24 dev rmnet proto kernel scope link src "
|
||||
"10.0.0.3\r\n"
|
||||
"192.168.1.0/24 dev wlan0 proto kernel scope link src "
|
||||
"192.168.1.3\r\n";
|
||||
|
||||
char *ip = sc_adb_parse_device_ip_from_output(ip_route);
|
||||
char *ip = sc_adb_parse_device_ip(ip_route);
|
||||
assert(ip);
|
||||
assert(!strcmp(ip, "192.168.1.3"));
|
||||
free(ip);
|
||||
}
|
||||
|
||||
static void test_get_ip_no_wlan() {
|
||||
static void test_get_ip_no_wlan(void) {
|
||||
char ip_route[] = "192.168.1.0/24 dev rmnet proto kernel scope link src "
|
||||
"192.168.12.34\r\r\n";
|
||||
|
||||
char *ip = sc_adb_parse_device_ip_from_output(ip_route);
|
||||
char *ip = sc_adb_parse_device_ip(ip_route);
|
||||
assert(!ip);
|
||||
}
|
||||
|
||||
static void test_get_ip_no_wlan_without_eol() {
|
||||
static void test_get_ip_no_wlan_without_eol(void) {
|
||||
char ip_route[] = "192.168.1.0/24 dev rmnet proto kernel scope link src "
|
||||
"192.168.12.34";
|
||||
|
||||
char *ip = sc_adb_parse_device_ip_from_output(ip_route);
|
||||
char *ip = sc_adb_parse_device_ip(ip_route);
|
||||
assert(!ip);
|
||||
}
|
||||
|
||||
static void test_get_ip_truncated() {
|
||||
static void test_get_ip_truncated(void) {
|
||||
char ip_route[] = "192.168.1.0/24 dev rmnet proto kernel scope link src "
|
||||
"\n";
|
||||
|
||||
char *ip = sc_adb_parse_device_ip_from_output(ip_route);
|
||||
char *ip = sc_adb_parse_device_ip(ip_route);
|
||||
assert(!ip);
|
||||
}
|
||||
|
||||
@ -262,4 +262,6 @@ int main(int argc, char *argv[]) {
|
||||
test_get_ip_no_wlan();
|
||||
test_get_ip_no_wlan_without_eol();
|
||||
test_get_ip_truncated();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -19,7 +19,6 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
testImplementation 'junit:junit:4.13.1'
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user