skipstone/examples/test.c
XANTRONIX Development f16908e7fb Context clues innit
2017-11-24 12:28:49 -06:00

103 lines
2.5 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <skipstone/link.h>
#include <skipstone/message.h>
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,
void *buf, uint16_t size, uint16_t id, void *context) {
uint8_t response[13] = {
1, 0xff, 0xff, 0xff, 0xff, 0x80, 0, 0, 0, 0, 0, 0, 0x32
};
printf("Got message on endpoint %hu\n", id);
skipstone_message_service_queue(service, &response, sizeof(response), id);
return 0;
}
static int answer_media_message(skipstone_message_service *service,
void *buf, uint16_t size, uint16_t id, void *context) {
struct {
uint8_t command;
uint8_t artist_len;
char artist[5];
uint8_t album_len;
char album[5];
uint8_t title_len;
char title[5];
} play_track = {
0x10,
5, { 'K', 'M', 'F', 'D', 'M' },
5, { 'N', 'i', 'h', 'i', 'l' },
5, { 'U', 'l', 't', 'r', 'a' }
};
printf("Got message on endpoint %hu\n", id);
skipstone_message_service_queue(service, &play_track, sizeof(play_track), 32);
return 0;
}
int main(int argc, char **argv) {
skipstone_link *link;
skipstone_message_service *service;
struct {
uint8_t command;
uint8_t state;
uint32_t track_position;
uint32_t play_rate;
uint8_t shuffle;
uint8_t repeat;
} play_state = {
0x11, 0x01, 0, 44100, 0x01, 0x01
};
struct {
uint8_t command;
uint8_t package_len;
char package[8];
uint8_t name_len;
char name[8];
} play_info = {
0x13,
8, { 'D', 'e', 'a', 'D', 'B', 'e', 'e', 'F' },
8, { 'R', 'e', 'a', 'L', 'D', 'e', 'a', 'D' }
};
if (argc != 2) {
usage(argc, argv);
}
if ((link = skipstone_link_open_serial(argv[1])) == NULL) {
goto error_link_open;
}
if ((service = skipstone_message_service_new()) == NULL) {
goto error_message_service_new;
}
skipstone_message_service_register(service, 17, answer_phone_version_message, NULL);
skipstone_message_service_register(service, 32, answer_media_message, NULL);
skipstone_message_service_run(service, link);
skipstone_link_close(link);
return 0;
error_message_service_new:
skipstone_link_close(link);
error_link_open:
return 1;
}