Initial commit
This commit is contained in:
11
README.md
11
README.md
@ -0,0 +1,11 @@
|
||||
## Bose Companion 5 - Fix Sound
|
||||
|
||||
I got really fed up with the sound constantly cutting out on the Bose Companion 5, and so made this. Bose should really fix the issue, as all this does is perform a reset of the device whenever it happens.
|
||||
|
||||
To use install Go and then run:
|
||||
|
||||
```shell
|
||||
go build
|
||||
chmod +x bose-usbfix
|
||||
./bose-usbfix
|
||||
```
|
69
main.go
Normal file
69
main.go
Normal file
@ -0,0 +1,69 @@
|
||||
package main
|
||||
|
||||
//The below C code is compiled and executed using CGo.
|
||||
|
||||
//#include <stdio.h>
|
||||
//#include <unistd.h>
|
||||
//#include <fcntl.h>
|
||||
//#include <errno.h>
|
||||
//#include <sys/ioctl.h>
|
||||
//
|
||||
//#include <linux/usbdevice_fs.h>
|
||||
//
|
||||
//
|
||||
//int resetUSB(char *filearg)
|
||||
//{
|
||||
// const char *filename;
|
||||
// int fd;
|
||||
// int rc;
|
||||
//
|
||||
// filename = filearg;
|
||||
//
|
||||
// fd = open(filename, O_WRONLY);
|
||||
// if (fd < 0) {
|
||||
// perror("Error opening output file");
|
||||
// return 1;
|
||||
// }
|
||||
//
|
||||
// printf("Resetting USB device %s\n", filename);
|
||||
// rc = ioctl(fd, USBDEVFS_RESET, 0);
|
||||
// if (rc < 0) {
|
||||
// perror("Error in ioctl");
|
||||
// return 1;
|
||||
// }
|
||||
// printf("Reset successful\n");
|
||||
//
|
||||
// close(fd);
|
||||
// return 0;
|
||||
//}
|
||||
import "C"
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
lsusbCmd := exec.Command("lsusb")
|
||||
lsusbOut, err := lsusbCmd.Output()
|
||||
if err != nil {
|
||||
log.Fatalf("could not get output of lsusb: %v", err)
|
||||
}
|
||||
|
||||
scanner := bufio.NewScanner(bytes.NewReader(lsusbOut))
|
||||
for scanner.Scan() {
|
||||
if strings.Contains(scanner.Text(), "Bose Corp.") {
|
||||
busID := "002"
|
||||
devID := "005"
|
||||
usbFilename := C.CString(fmt.Sprintf("/dev/bus/usb/%s/%s", busID, devID))
|
||||
C.resetUSB(usbFilename)
|
||||
}
|
||||
}
|
||||
if err := scanner.Err(); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "reading standard input:", err)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user