Api.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package drviers
  2. type IDriver interface {
  3. Name() string
  4. Probe(name string, param interface{})
  5. CreateDevice(model interface{}) (int, []IDevice)
  6. GetModel() interface{}
  7. GetDevice(id string) IDevice
  8. GetDeviceList() map[string]IDevice
  9. Uninstall()
  10. }
  11. type baseDriver struct {
  12. DrvName string
  13. DevList map[string]IDevice
  14. }
  15. func (drv *baseDriver) Name() string {
  16. return drv.DrvName
  17. }
  18. func (drv *baseDriver) Probe(name string, param interface{}) {
  19. drv.DrvName = name
  20. drv.DevList = make(map[string]IDevice)
  21. }
  22. func (drv *baseDriver) CreateDevice(model interface{}) (int, []IDevice) {
  23. dev := make([]IDevice, len(drv.DevList))
  24. i := 0
  25. for _, v := range drv.DevList {
  26. dev[i] = v
  27. i++
  28. }
  29. return i, dev
  30. }
  31. func (drv *baseDriver) GetModel() interface{} {
  32. return nil
  33. }
  34. func (drv *baseDriver) GetDevice(id string) IDevice {
  35. if dev, has := drv.DevList[id]; has {
  36. return dev
  37. }
  38. return nil
  39. }
  40. func (drv *baseDriver) GetDeviceList() map[string]IDevice {
  41. return drv.DevList
  42. }
  43. func (drv *baseDriver) Uninstall() {
  44. for _, dev := range drv.DevList {
  45. dev.Close()
  46. }
  47. drv.DevList = nil
  48. }
  49. type funcRegDriver func(interface{}) IDriver
  50. var driverReg map[string]funcRegDriver
  51. func Install(name string, param interface{}) IDriver {
  52. if f, has := driverReg[name]; has && f != nil {
  53. drv := f(param)
  54. drv.Probe(name, param)
  55. return drv
  56. }
  57. return nil
  58. }
  59. func init() {
  60. driverReg = make(map[string]funcRegDriver)
  61. }