#include #include #include #include #include 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) { 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; }