forked from Elara6331/infinitime
Initial Commit
This commit is contained in:
81
music.go
Normal file
81
music.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package infinitime
|
||||
|
||||
import "github.com/muka/go-bluetooth/bluez/profile/gatt"
|
||||
|
||||
type MusicEvent uint8
|
||||
|
||||
const (
|
||||
MusicEventChar = "00000001-78fc-48fe-8e23-433b3a1942d0"
|
||||
MusicStatusChar = "00000002-78fc-48fe-8e23-433b3a1942d0"
|
||||
MusicArtistChar = "00000003-78fc-48fe-8e23-433b3a1942d0"
|
||||
MusicTrackChar = "00000004-78fc-48fe-8e23-433b3a1942d0"
|
||||
MusicAlbumChar = "00000005-78fc-48fe-8e23-433b3a1942d0"
|
||||
)
|
||||
|
||||
const (
|
||||
MusicEventOpen MusicEvent = 0xe0
|
||||
MusicEventPlay MusicEvent = 0x00
|
||||
MusicEventPause MusicEvent = 0x01
|
||||
MusicEventNext MusicEvent = 0x03
|
||||
MusicEventPrev MusicEvent = 0x04
|
||||
MusicEventVolUp MusicEvent = 0x05
|
||||
MusicEventVolDown MusicEvent = 0x06
|
||||
)
|
||||
|
||||
// MusicCtrl stores everything required to control music
|
||||
type MusicCtrl struct {
|
||||
eventChar *gatt.GattCharacteristic1
|
||||
statusChar *gatt.GattCharacteristic1
|
||||
artistChar *gatt.GattCharacteristic1
|
||||
trackChar *gatt.GattCharacteristic1
|
||||
albumChar *gatt.GattCharacteristic1
|
||||
}
|
||||
|
||||
// SetStatus sets the playing status
|
||||
func (mc MusicCtrl) SetStatus(playing bool) error {
|
||||
if playing {
|
||||
return mc.statusChar.WriteValue([]byte{0x1}, nil)
|
||||
}
|
||||
return mc.statusChar.WriteValue([]byte{0x0}, nil)
|
||||
}
|
||||
|
||||
// SetArtist sets the artist on InfniTime
|
||||
func (mc MusicCtrl) SetArtist(artist string) error {
|
||||
return mc.artistChar.WriteValue([]byte(artist), nil)
|
||||
}
|
||||
|
||||
// SetTrack sets the track name on InfniTime
|
||||
func (mc MusicCtrl) SetTrack(track string) error {
|
||||
return mc.trackChar.WriteValue([]byte(track), nil)
|
||||
}
|
||||
|
||||
// SetAlbum sets the album on InfniTime
|
||||
func (mc MusicCtrl) SetAlbum(album string) error {
|
||||
return mc.albumChar.WriteValue([]byte(album), nil)
|
||||
}
|
||||
|
||||
// WatchEvents watches music events from InfiniTime
|
||||
func (mc MusicCtrl) WatchEvents() (<-chan MusicEvent, error) {
|
||||
// Start notifications on music event characteristic
|
||||
err := mc.eventChar.StartNotify()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Watch music event properties
|
||||
ch, err := mc.eventChar.WatchProperties()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
musicEventCh := make(chan MusicEvent, 5)
|
||||
go func() {
|
||||
// For every event
|
||||
for event := range ch {
|
||||
// If value changes
|
||||
if event.Name == "Value" {
|
||||
// Send music event to channel
|
||||
musicEventCh <- MusicEvent(event.Value.([]byte)[0])
|
||||
}
|
||||
}
|
||||
}()
|
||||
return musicEventCh, nil
|
||||
}
|
||||
Reference in New Issue
Block a user