primeiro commit - detecta eventos de conexión
This commit is contained in:
commit
24e635da88
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# build results
|
||||||
|
target
|
||||||
|
|
28
Makefile
Normal file
28
Makefile
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
CC ?= cc
|
||||||
|
INSTALL_PATH ?= /usr
|
||||||
|
|
||||||
|
all: build
|
||||||
|
|
||||||
|
build: target/mpfm target/mpfm.service
|
||||||
|
|
||||||
|
target/mpfm: mpfm.c
|
||||||
|
mkdir -p target
|
||||||
|
$(CC) -std=gnu99 -O2 mpfm.c -I/usr/include/libusb-1.0 -lusb-1.0 -o target/mpfm
|
||||||
|
|
||||||
|
target/mpfm.service: mpfm.service
|
||||||
|
mkdir -p target
|
||||||
|
sed -E 's|__INSTALL_PATH__|$(INSTALL_PATH)|g' mpfm.service > target/mpfm.service
|
||||||
|
|
||||||
|
install: build mpfm.rules
|
||||||
|
mkdir -p $(INSTALL_PATH)/{bin,lib/systemd/system}
|
||||||
|
install target/mpfm $(INSTALL_PATH)/bin/mpfm
|
||||||
|
install target/mpfm.service $(INSTALL_PATH)/lib/systemd/system/mpfm.service
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
rm -f $(INSTALL_PATH)/lib/systemd/system/mpfm.service
|
||||||
|
rm -f $(INSTALL_PATH)/bin/mpfm
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf target
|
||||||
|
|
||||||
|
.PHONY: all build clean install uninstall
|
9
README.md
Normal file
9
README.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Music Player FM
|
||||||
|
|
||||||
|
A idea é non cambiar o aparello de radio do coche e poder escoitar música desde
|
||||||
|
unha unidade USB. Para esto vou usar unha raspberry para emitir a música que
|
||||||
|
leva o pendrive a través de radio FM.
|
||||||
|
|
||||||
|
Este proxecto estará «vixilando» a existencia de un pendrive conectado á raspberry
|
||||||
|
e en canto sexa posible, montarao e reproducirá os arquivos de música. Levándoos
|
||||||
|
ás ondas de radio gracias a [este outro proxecto](https://github.com/markondej/fm_transmitter).
|
65
mpfm.c
Normal file
65
mpfm.c
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <libusb.h>
|
||||||
|
|
||||||
|
static int count = 0;
|
||||||
|
|
||||||
|
int hotplug_callback(struct libusb_context *ctx, struct libusb_device *dev,
|
||||||
|
libusb_hotplug_event event, void *user_data) {
|
||||||
|
static libusb_device_handle *dev_handle = NULL;
|
||||||
|
struct libusb_device_descriptor desc;
|
||||||
|
int rc;
|
||||||
|
printf("Entering callback\n"); // DEBUG
|
||||||
|
(void)libusb_get_device_descriptor(dev, &desc);
|
||||||
|
|
||||||
|
if (LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED == event) {
|
||||||
|
rc = libusb_open(dev, &dev_handle);
|
||||||
|
if (LIBUSB_SUCCESS != rc) {
|
||||||
|
printf("Could not open USB device\n");
|
||||||
|
}
|
||||||
|
} else if (LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT == event) {
|
||||||
|
if (dev_handle) {
|
||||||
|
libusb_close(dev_handle);
|
||||||
|
dev_handle = NULL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
printf("Unhandled event %d\n", event);
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main (void) {
|
||||||
|
libusb_hotplug_callback_handle callback_handle;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
libusb_init(NULL);
|
||||||
|
|
||||||
|
rc = libusb_hotplug_register_callback(
|
||||||
|
NULL,
|
||||||
|
LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED | LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT,
|
||||||
|
0,
|
||||||
|
LIBUSB_HOTPLUG_MATCH_ANY,
|
||||||
|
LIBUSB_HOTPLUG_MATCH_ANY,
|
||||||
|
LIBUSB_HOTPLUG_MATCH_ANY,
|
||||||
|
hotplug_callback,
|
||||||
|
NULL,
|
||||||
|
&callback_handle);
|
||||||
|
if (LIBUSB_SUCCESS != rc) {
|
||||||
|
printf("Error creating a hotplug callback\n");
|
||||||
|
libusb_exit(NULL);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (count < 2) {
|
||||||
|
libusb_handle_events_completed(NULL, NULL);
|
||||||
|
nanosleep(&(struct timespec){0, 10000000UL}, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
libusb_hotplug_deregister_callback(NULL, callback_handle);
|
||||||
|
libusb_exit(NULL);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
6
mpfm.service
Normal file
6
mpfm.service
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Music Player FM
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=__INSTALL_PATH__/bin/mpfm
|
||||||
|
|
Loading…
Reference in New Issue
Block a user