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