You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							150 lines
						
					
					
						
							3.4 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							150 lines
						
					
					
						
							3.4 KiB
						
					
					
				| package nanoleaf | |
| 
 | |
| import "encoding/binary" | |
| 
 | |
| type EffectInfo struct { | |
| 	EffectsList []string `json:"effectsList"` | |
| 	Select      string   `json:"select"` | |
| } | |
| 
 | |
| type PanelLayout struct { | |
| 	GlobalOrientation GlobalOrientation `json:"globalOrientation"` | |
| 	Data              PanelLayoutData   `json:"layout"` | |
| } | |
| 
 | |
| type GlobalOrientation struct { | |
| 	Value int `json:"value"` | |
| 	Max   int `json:"max"` | |
| 	Min   int `json:"min"` | |
| } | |
| 
 | |
| type PanelLayoutData struct { | |
| 	NumPanels    int            `json:"numPanels"` | |
| 	SideLength   int            `json:"sideLength"` | |
| 	PositionData []PositionData `json:"positionData"` | |
| } | |
| 
 | |
| type PositionData struct { | |
| 	PanelID   uint16 `json:"panelId"` | |
| 	X         int    `json:"x"` | |
| 	Y         int    `json:"y"` | |
| 	O         int    `json:"o"` | |
| 	ShapeType int    `json:"shapeType"` | |
| } | |
| 
 | |
| type StateBool struct { | |
| 	Value bool `json:"value"` | |
| } | |
| 
 | |
| type StateInt struct { | |
| 	Value int `json:"value"` | |
| 	Max   int `json:"max"` | |
| 	Min   int `json:"min"` | |
| } | |
| 
 | |
| type State struct { | |
| 	Brightness StateInt  `json:"brightness"` | |
| 	ColorMode  string    `json:"colorMode"` | |
| 	Ct         StateInt  `json:"ct"` | |
| 	Hue        StateInt  `json:"hue"` | |
| 	On         StateBool `json:"on"` | |
| 	Sat        StateInt  `json:"sat"` | |
| } | |
| 
 | |
| type Overview struct { | |
| 	Name            string      `json:"name"` | |
| 	SerialNumber    string      `json:"serialNo"` | |
| 	Manufacturer    string      `json:"manufacturer"` | |
| 	FirmwareVersion string      `json:"firmwareVersion"` | |
| 	HardwareVersion string      `json:"hardwareVersion"` | |
| 	Model           string      `json:"model"` | |
| 	Effects         EffectInfo  `json:"effects"` | |
| 	PanelLayout     PanelLayout `json:"panelLayout"` | |
| 	State           State       `json:"state"` | |
| } | |
| 
 | |
| type DeviceInfo struct { | |
| 	SerialNumber      string `json:"serialNumber"` | |
| 	HardwareVersion   string `json:"hardwareVersion"` | |
| 	FirmwareVersion   string `json:"firmwareVersion"` | |
| 	BootloaderVersion string `json:"bootloaderVersion"` | |
| 	ModelNumber       string `json:"modelNumber"` | |
| } | |
| 
 | |
| type TokenResponse struct { | |
| 	Token string `json:"auth_token"` | |
| } | |
| 
 | |
| type PanelUpdate []byte | |
| 
 | |
| func (u *PanelUpdate) Add(message [8]byte) { | |
| 	if len(*u) < 2 { | |
| 		*u = make([]byte, 2, 10) | |
| 	} | |
| 
 | |
| 	binary.BigEndian.PutUint16(*u, binary.BigEndian.Uint16(*u)+1) | |
| 
 | |
| 	*u = append(*u, message[:]...) | |
| } | |
| 
 | |
| func (u *PanelUpdate) Len() int { | |
| 	if len(*u) < 2 { | |
| 		return 0 | |
| 	} | |
| 
 | |
| 	return int(binary.BigEndian.Uint16(*u)) | |
| } | |
| 
 | |
| type PanelEventMessage []byte | |
| 
 | |
| func (remote PanelEventMessage) Count() int { | |
| 	return int(binary.BigEndian.Uint16(remote[0:])) | |
| } | |
| 
 | |
| func (remote PanelEventMessage) ValidateLength() bool { | |
| 	return len(remote) >= (2 + remote.Count()*5) | |
| } | |
| 
 | |
| func (remote PanelEventMessage) PanelID(idx int) uint16 { | |
| 	return binary.BigEndian.Uint16(remote[2+(idx*5):]) | |
| } | |
| 
 | |
| func (remote PanelEventMessage) TouchType(idx int) int { | |
| 	value := int(remote[2+(idx*5)]) | |
| 	return (value & 0b11100000) >> 5 | |
| } | |
| 
 | |
| func (remote PanelEventMessage) TouchStrength(idx int) int { | |
| 	value := int(remote[2+(idx*5)]) | |
| 	return (value & 0b00011110) >> 1 | |
| } | |
| 
 | |
| func (remote PanelEventMessage) SwipedFromPanelID(idx int) uint16 { | |
| 	return binary.BigEndian.Uint16(remote[2+(idx*5)+3:]) | |
| } | |
| 
 | |
| var shapeTypeMap = map[int]string{ | |
| 	0:  "Triangle", | |
| 	1:  "Rhythm", | |
| 	2:  "Square", | |
| 	3:  "Control Square Master", | |
| 	4:  "Control Square Passive", | |
| 	7:  "Hexagon (Shapes)", | |
| 	8:  "Triangle (Shapes)", | |
| 	9:  "Mini Triangle (Shapes)", | |
| 	12: "Shapes Controller", | |
| } | |
| 
 | |
| var shapeWidthMap = map[int]int{ | |
| 	0:  150, | |
| 	1:  -1, | |
| 	2:  100, | |
| 	3:  100, | |
| 	4:  100, | |
| 	7:  67, | |
| 	8:  134, | |
| 	9:  67, | |
| 	12: -1, | |
| } | |
| 
 | |
| var httpMessage = []byte(`{ "write": { "command": "display", "animType": "extControl", "extControlVersion": "v2" }}`)
 |