bebop: enable video on firmware 3.3+

Signed-off-by: deadprogram <ron@hybridgroup.com>
This commit is contained in:
deadprogram 2016-12-26 18:37:55 +01:00
parent ecb03b64e1
commit 66a64111fc
6 changed files with 72 additions and 1 deletions

View File

@ -23,6 +23,8 @@ type drone interface {
StopRecording() error
HullProtection(protect bool) error
Outdoor(outdoor bool) error
VideoEnable(enable bool) error
VideoStreamMode(mode int8) error
}
// Adaptor is gobot.Adaptor representation for the Bebop

View File

@ -140,3 +140,13 @@ func (a *Driver) HullProtection(protect bool) error {
func (a *Driver) Outdoor(outdoor bool) error {
return a.adaptor().drone.Outdoor(outdoor)
}
// VideoEnable tells the drone to start/stop streaming video
func (a *Driver) VideoEnable(enable bool) error {
return a.adaptor().drone.VideoEnable(enable)
}
// VideoStreamMode tells the drone what mode to use for streaming video
func (a *Driver) VideoStreamMode(mode int8) error {
return a.adaptor().drone.VideoStreamMode(mode)
}

View File

@ -651,6 +651,50 @@ func (b *Bebop) Outdoor(outdoor bool) error {
return err
}
func (b *Bebop) VideoEnable(enable bool) error {
cmd := &bytes.Buffer{}
cmd.WriteByte(ARCOMMANDS_ID_PROJECT_ARDRONE3)
cmd.WriteByte(ARCOMMANDS_ID_ARDRONE3_CLASS_MEDIASTREAMING)
tmp := &bytes.Buffer{}
binary.Write(tmp,
binary.LittleEndian,
uint16(ARCOMMANDS_ID_ARDRONE3_MEDIASTREAMING_CMD_VIDEOENABLE),
)
cmd.Write(tmp.Bytes())
tmp = &bytes.Buffer{}
binary.Write(tmp, binary.LittleEndian, bool2int8(enable))
cmd.Write(tmp.Bytes())
_, err := b.write(b.networkFrameGenerator(cmd, ARNETWORKAL_FRAME_TYPE_DATA, BD_NET_CD_NONACK_ID).Bytes())
return err
}
func (b *Bebop) VideoStreamMode(mode int8) error {
cmd := &bytes.Buffer{}
cmd.WriteByte(ARCOMMANDS_ID_PROJECT_ARDRONE3)
cmd.WriteByte(ARCOMMANDS_ID_ARDRONE3_CLASS_MEDIASTREAMING)
tmp := &bytes.Buffer{}
binary.Write(tmp,
binary.LittleEndian,
uint16(ARCOMMANDS_ID_ARDRONE3_MEDIASTREAMING_CMD_VIDEOSTREAMMODE),
)
cmd.Write(tmp.Bytes())
tmp = &bytes.Buffer{}
binary.Write(tmp, binary.LittleEndian, mode)
cmd.Write(tmp.Bytes())
_, err := b.write(b.networkFrameGenerator(cmd, ARNETWORKAL_FRAME_TYPE_DATA, BD_NET_CD_NONACK_ID).Bytes())
return err
}
func bool2int8(b bool) int8 {
if b {
return 1

View File

@ -174,4 +174,7 @@ const (
ARCOMMANDS_ID_ARDRONE3_SPEEDSETTINGS_CMD_MAXROTATIONSPEED byte = 1
ARCOMMANDS_ID_ARDRONE3_SPEEDSETTINGS_CMD_HULLPROTECTION byte = 2
ARCOMMANDS_ID_ARDRONE3_SPEEDSETTINGS_CMD_OUTDOOR byte = 3
ARCOMMANDS_ID_ARDRONE3_MEDIASTREAMING_CMD_VIDEOENABLE byte = 0
ARCOMMANDS_ID_ARDRONE3_MEDIASTREAMING_CMD_VIDEOSTREAMMODE byte = 1
)

View File

@ -1,5 +1,5 @@
/*
This example will connect to the Bebop and stream it's video to a webpage
This example will connect to the Bebop and stream its video to a webpage
via ffserver. This requires you to have both ffmpeg and ffserver installed
on your computer.
@ -32,6 +32,16 @@ func main() {
return
}
if err := bebop.VideoEnable(true); err != nil {
fmt.Println(err)
return
}
if err := bebop.VideoStreamMode(0); err != nil {
fmt.Println(err)
return
}
ffmpeg := exec.Command("ffmpeg", "-i", "pipe:0", "http://localhost:8090/bebop.ffm")
ffmpegErr, err := ffmpeg.StderrPipe()

View File

@ -19,3 +19,5 @@ func (t testDrone) StartRecording() error { return nil }
func (t testDrone) StopRecording() error { return nil }
func (t testDrone) HullProtection(protect bool) error { return nil }
func (t testDrone) Outdoor(outdoor bool) error { return nil }
func (t testDrone) VideoEnable(enable bool) error { return nil }
func (t testDrone) VideoStreamMode(mode int8) error { return nil }