functional yet ugly
This commit is contained in:
		| @@ -8,29 +8,8 @@ import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| func main() { | func main() { | ||||||
| 	/* |  | ||||||
| 		temp, err := GetTemperature() |  | ||||||
|  |  | ||||||
| 		if err == nil { |  | ||||||
| 			log.Printf( |  | ||||||
| 				"Temperature: %.2f°K %.2f°F %.2f°C\n", |  | ||||||
| 				temp.Temperature+273.15, |  | ||||||
| 				9.0/5.0*temp.Temperature+32, |  | ||||||
| 				temp.Temperature, |  | ||||||
| 			) |  | ||||||
| 		} else { |  | ||||||
| 			log.Fatalf("Failed: %s", err) |  | ||||||
| 		} |  | ||||||
| 	*/ |  | ||||||
| 	dev, err := temper.GetDevice() |  | ||||||
| 	if err != nil { |  | ||||||
| 		log.Fatalf("[FATAL] Unable to get TEMPer Device ID: %v\n", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	defer dev.Device.Close() |  | ||||||
|  |  | ||||||
| 	for { | 	for { | ||||||
| 		temp, err := dev.GetTemperature() | 		temp, err := temper.GetTemperature() | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			log.Printf("[WARNING] Unable to get temperature from device: %v\n", err) | 			log.Printf("[WARNING] Unable to get temperature from device: %v\n", err) | ||||||
| 		} else { | 		} else { | ||||||
| @@ -45,72 +24,3 @@ func main() { | |||||||
| 		time.Sleep(time.Duration(5 * time.Second)) | 		time.Sleep(time.Duration(5 * time.Second)) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| /* |  | ||||||
| type DeviceTemperature struct { |  | ||||||
| 	Device      *gousb.Device |  | ||||||
| 	Temperature float64 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func GetTemperature() (DeviceTemperature, error) { |  | ||||||
| 	ctx := gousb.NewContext() |  | ||||||
| 	defer ctx.Close() |  | ||||||
|  |  | ||||||
| 	vid, pid := gousb.ID(0x0c45), gousb.ID(0x7401) |  | ||||||
| 	devs, err := ctx.OpenDevices(func(desc *gousb.DeviceDesc) bool { |  | ||||||
| 		return desc.Vendor == vid && desc.Product == pid |  | ||||||
| 	}) |  | ||||||
|  |  | ||||||
| 	if err != nil { |  | ||||||
| 		return DeviceTemperature{}, err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if len(devs) == 0 { |  | ||||||
| 		return DeviceTemperature{}, fmt.Errorf("no devices found matching VID %s and PID %s", vid, pid) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Pick the first device found. |  | ||||||
| 	dev := devs[0] |  | ||||||
| 	devs[0].SetAutoDetach(true) |  | ||||||
|  |  | ||||||
| 	for _, d := range devs { |  | ||||||
| 		defer d.Close() |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	temp, err := getDeviceTemperature(dev) |  | ||||||
| 	return temp, err |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func getDeviceTemperature(dev *gousb.Device) (DeviceTemperature, error) { |  | ||||||
| 	cfg, err := dev.Config(1) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return DeviceTemperature{}, err |  | ||||||
| 	} |  | ||||||
| 	defer cfg.Close() |  | ||||||
|  |  | ||||||
| 	intf, err := cfg.Interface(1, 0) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return DeviceTemperature{}, err |  | ||||||
| 	} |  | ||||||
| 	defer intf.Close() |  | ||||||
|  |  | ||||||
| 	epIn, err := intf.InEndpoint(0x82) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return DeviceTemperature{}, err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	_, err = dev.Control( |  | ||||||
| 		0x21, 0x09, 0x0200, 0x01, []byte{0x01, 0x80, 0x33, 0x01, 0x00, 0x00, 0x00, 0x00}, |  | ||||||
| 	) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return DeviceTemperature{}, err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	buf := make([]byte, 8) |  | ||||||
| 	if _, err = epIn.Read(buf); err != nil { |  | ||||||
| 		return DeviceTemperature{}, err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return DeviceTemperature{Device: dev, Temperature: float64(buf[2]) + float64(buf[3])/256}, nil |  | ||||||
| } |  | ||||||
| */ |  | ||||||
|   | |||||||
| @@ -6,12 +6,7 @@ import ( | |||||||
| 	"github.com/google/gousb" | 	"github.com/google/gousb" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| type TEMPer struct { | func GetTemperature() (float64, error) { | ||||||
| 	Device *gousb.Device |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // GetDevice will return the first temper device found. |  | ||||||
| func GetDevice() (*TEMPer, error) { |  | ||||||
| 	ctx := gousb.NewContext() | 	ctx := gousb.NewContext() | ||||||
| 	defer ctx.Close() | 	defer ctx.Close() | ||||||
|  |  | ||||||
| @@ -21,24 +16,20 @@ func GetDevice() (*TEMPer, error) { | |||||||
| 	}) | 	}) | ||||||
|  |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return &TEMPer{}, err | 		return 0, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if len(devs) == 0 { | 	if len(devs) == 0 { | ||||||
| 		return &TEMPer{}, fmt.Errorf("no devices found matching VID %s and PID %s", vid, pid) | 		return 0, fmt.Errorf("no devices found matching VID %s and PID %s", vid, pid) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	devs[0].SetAutoDetach(true) | 	devs[0].SetAutoDetach(true) | ||||||
|  |  | ||||||
| 	for i := 1; i <= len(devs)-1; i++ { | 	for _, d := range devs { | ||||||
| 		defer devs[i].Close() | 		defer d.Close() | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return &TEMPer{Device: devs[0]}, nil | 	cfg, err := devs[0].Config(1) | ||||||
| } |  | ||||||
|  |  | ||||||
| func (d *TEMPer) GetTemperature() (float64, error) { |  | ||||||
| 	cfg, err := d.Device.Config(1) |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return 0, err | 		return 0, err | ||||||
| 	} | 	} | ||||||
| @@ -55,7 +46,7 @@ func (d *TEMPer) GetTemperature() (float64, error) { | |||||||
| 		return 0, err | 		return 0, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	_, err = d.Device.Control( | 	_, err = devs[0].Control( | ||||||
| 		0x21, 0x09, 0x0200, 0x01, []byte{0x01, 0x80, 0x33, 0x01, 0x00, 0x00, 0x00, 0x00}, | 		0x21, 0x09, 0x0200, 0x01, []byte{0x01, 0x80, 0x33, 0x01, 0x00, 0x00, 0x00, 0x00}, | ||||||
| 	) | 	) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user