1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
package camera
import (
"github.com/jouyouyun/hardware/utils"
)
const (
cameraSysfsDir = "/sys/class/video4linux"
)
// Camera store camera device info
type Camera struct {
utils.CardInfo
}
// CameraList store camera device list
type CameraList []*Camera
// GetCameraList return camera device list
func GetCameraList() (CameraList, error) {
list, err := utils.ScanDir(cameraSysfsDir, utils.FilterCameraName)
if err != nil {
return nil, err
}
var cards CameraList
for _, name := range list {
card, err := newCamera(cameraSysfsDir, name)
if err != nil {
return nil, err
}
cards = cards.Append(card)
}
return cards, nil
}
func newCamera(dir, name string) (*Camera, error) {
card, err := utils.NewCardInfo(cameraSysfsDir, name)
if err != nil {
return nil, err
}
return &Camera{CardInfo: *card}, nil
}
// Append append camera device after filter duplication device
// In X230 has two same camera device
func (list CameraList) Append(card *Camera) CameraList {
for _, v := range list {
if v.Equal(card) {
return list
}
}
list = append(list, card)
return list
}
// Equal check device whether equal by vendor and product
func (c *Camera) Equal(tmp *Camera) bool {
return c.Vendor == tmp.Vendor && c.Product == tmp.Product
}
|