skipstone/examples/test.c

123 lines
3.9 KiB
C
Raw Normal View History

2017-11-23 18:24:16 +00:00
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
2017-11-23 18:24:16 +00:00
#include <skipstone/link.h>
#include <skipstone/message.h>
2017-11-26 16:22:00 -06:00
#include <skipstone/system.h>
2017-11-23 18:24:16 +00:00
2017-11-26 18:31:13 -06:00
#include "../src/util.h"
2017-11-23 18:24:16 +00:00
static void usage(int argc, char **argv) {
fprintf(stderr, "usage: %s /dev/rfcommX\n", argv[0]);
exit(1);
}
static int answer_phone_version_message(skipstone_message_service *service,
2017-11-24 12:28:49 -06:00
void *buf, uint16_t size, uint16_t id, void *context) {
2017-11-26 16:22:00 -06:00
const uint32_t flags = SKIPSTONE_SYSTEM_CLIENT_ANDROID;
2017-11-24 11:57:55 -06:00
2017-11-26 16:22:00 -06:00
return skipstone_system_send_client_version(service, flags);
2017-11-24 11:57:55 -06:00
}
2017-11-26 16:22:00 -06:00
static int answer_music_message(skipstone_message_service *service,
2017-11-24 12:28:49 -06:00
void *buf, uint16_t size, uint16_t id, void *context) {
2017-11-26 18:31:13 -06:00
skipstone_message *message;
if (((uint8_t *)buf)[0] == 0x08) {
message = skipstone_message_new();
skipstone_message_append_uint8(message, 0x10);
skipstone_message_append_string(message, "KMFDM", 5);
skipstone_message_append_string(message, "Nihil", 5);
skipstone_message_append_string(message, "Ultra", 5);
skipstone_message_append_uint32(message, htobe32(274));
skipstone_message_append_uint16(message, htobe16(10));
skipstone_message_append_uint16(message, htobe16(1));
skipstone_message_service_queue(service, message, 32);
skipstone_message_destroy(message);
2017-11-24 17:44:40 +00:00
2017-11-26 18:31:13 -06:00
message = skipstone_message_new();
skipstone_message_append_uint8(message, 0x11);
skipstone_message_append_uint8(message, 1);
skipstone_message_append_uint32(message, htobe32(120));
skipstone_message_append_uint32(message, htobe32(1));
skipstone_message_append_uint8(message, 1);
skipstone_message_append_uint8(message, 1);
skipstone_message_service_queue(service, message, 32);
skipstone_message_destroy(message);
2017-11-24 15:25:28 -06:00
2017-11-26 18:31:13 -06:00
message = skipstone_message_new();
skipstone_message_append_uint8(message, 0x13);
skipstone_message_append_string(message, "DeaDBeeF", 8);
skipstone_message_append_string(message, "DeaDBeeF", 8);
skipstone_message_service_queue(service, message, 32);
skipstone_message_destroy(message);
} else {
printf("Got playback command %02x\n", ((uint8_t *)buf)[0]);
2017-11-26 18:31:13 -06:00
}
2017-11-23 18:24:16 +00:00
return 0;
}
int main(int argc, char **argv) {
skipstone_link *link;
skipstone_message_service *service;
if (argc != 2) {
usage(argc, argv);
}
if ((link = skipstone_link_open_serial(argv[1])) == NULL) {
perror("skipstone_link_open_serial()");
2017-11-23 18:24:16 +00:00
goto error_link_open;
}
if ((service = skipstone_message_service_new()) == NULL) {
perror("skipstone_message_service_new()");
2017-11-23 18:24:16 +00:00
goto error_message_service_new;
}
skipstone_message_service_register(service, 17, answer_phone_version_message, NULL);
2017-11-26 16:22:00 -06:00
skipstone_message_service_register(service, 32, answer_music_message, NULL);
2017-11-23 18:24:16 +00:00
time_t start = time(NULL);
int done = 0;
while (1) {
struct timeval timeout = {
.tv_sec = 0,
.tv_usec = 50000
};
2017-11-23 18:24:16 +00:00
if (skipstone_message_service_next_event(service, link, &timeout) < 0) {
perror("skipstone_message_service_next_event()");
goto error_io;
}
if (!done && time(NULL) - start >= 10) {
skipstone_message *message = skipstone_message_new();
skipstone_message_append_uint8(message, 4);
skipstone_message_append_uint32(message, htobe32(0xdeadbeef));
skipstone_message_append_string(message, "+19004206969", 12);
skipstone_message_append_string(message, "XANTRONIX ehf", 13);
skipstone_message_service_queue(service, message, 0x21);
skipstone_message_destroy(message);
done = 1;
}
}
2017-11-23 18:24:16 +00:00
skipstone_link_close(link);
return 0;
error_io:
2017-11-23 18:24:16 +00:00
error_message_service_new:
skipstone_link_close(link);
error_link_open:
return 1;
}