Initial commit to the repository
[deb_shairplay.git] / test / shairport.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <unistd.h>
4
5 #include "dnssd.h"
6 #include "raop.h"
7
8 static void
9 audio_init(void *cls, void **session, int bits, int channels, int samplerate)
10 {
11 *session = fopen("audio.pcm", "wb");
12 }
13
14 static void
15 audio_set_volume(void *cls, void *session, float volume)
16 {
17 printf("Setting volume to %f\n", volume);
18 }
19
20 static void
21 audio_process(void *cls, void *session, const void *buffer, int buflen)
22 {
23 int orig = buflen;
24 while (buflen > 0) {
25 buflen -= fwrite(buffer+orig-buflen, 1, buflen, session);
26 }
27 }
28
29 static void
30 audio_flush(void *cls, void *session)
31 {
32 printf("Flushing audio\n");
33 }
34
35 static void
36 audio_destroy(void *cls, void *session)
37 {
38 fclose(session);
39 }
40
41 int
42 main(int argc, char *argv[])
43 {
44 const char *name = "AppleTV";
45 unsigned short raop_port = 5000;
46 const char hwaddr[] = { 0x48, 0x5d, 0x60, 0x7c, 0xee, 0x22 };
47
48 dnssd_t *dnssd;
49 raop_t *raop;
50 raop_callbacks_t raop_cbs;
51
52 raop_cbs.cls = NULL;
53 raop_cbs.audio_init = audio_init;
54 raop_cbs.audio_set_volume = audio_set_volume;
55 raop_cbs.audio_process = audio_process;
56 raop_cbs.audio_flush = audio_flush;
57 raop_cbs.audio_destroy = audio_destroy;
58
59 raop = raop_init_from_keyfile(&raop_cbs, "airport.key", hwaddr, sizeof(hwaddr));
60 raop_start(raop, &raop_port);
61
62 dnssd = dnssd_init(hwaddr, sizeof(hwaddr), NULL);
63 dnssd_register_raop(dnssd, name, raop_port);
64
65 sleep(100);
66
67 dnssd_unregister_raop(dnssd);
68 dnssd_destroy(dnssd);
69
70 raop_stop(raop);
71 raop_destroy(raop);
72
73 return 0;
74 }
75