96 lines
2.4 KiB
Text
96 lines
2.4 KiB
Text
#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
|
|
};
|
|
|
|
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) {
|
|
skipstone_message *message = skipstone_message_new(32);
|
|
|
|
uint8_t out[4096];
|
|
uint16_t outsz;
|
|
|
|
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_pack(message, &out, &outsz);
|
|
|
|
skipstone_message_service_queue(service, &out, outsz, 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;
|
|
}
|