functions

package
v0.9.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 27, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ActivateKeypads = Function{
	Name: "activate keypads",
	Description: []string{
		"Enables/disables door keypad readers.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "reader 1",
			Type:        "bool",
			Description: "enables/disable the keypad for reader 1",
		},
		{
			Name:        "reader 2",
			Type:        "bool",
			Description: "enables/disables the keypad for reader 2",
		},
		{
			Name:        "reader 3",
			Type:        "bool",
			Description: "enables/disables the keypad for reader 3",
		},
		{
			Name:        "reader 4",
			Type:        "bool",
			Description: "enables/disables the keypad for reader 4",
		},
	},
	Request:  requests.ActivateKeypadsRequest.Message,
	Response: responses.ActivateKeypadsResponse.Message,

	Tests: []FuncTest{
		{
			Name: "activate-keypads",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "reader 1",
					Type:  "bool",
					Value: true,
				},
				{
					Name:  "reader 2",
					Type:  "bool",
					Value: true,
				},
				{
					Name:  "reader 3",
					Type:  "bool",
					Value: false,
				},
				{
					Name:  "reader 4",
					Type:  "bool",
					Value: true,
				},
			},
			Request: []byte{
				0x17, 0xa4, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0xa4, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var AddTask = Function{
	Name: "add task",
	Description: []string{
		"Creates a scheduled task.",
		"",
		"Task types:",
		" - 0:  control door",
		" - 1:  unlock door",
		" - 2:  lock door",
		" - 3:  disable time profiles",
		" - 4:  enable time profiles",
		" - 5:  enable card, no password",
		" - 6:  enable card+IN password",
		" - 7:  enable card+password",
		" - 8:  enable more cards",
		" - 9:  disable more cards",
		" - 10: trigger once",
		" - 11: disable pushbutton",
		" - 12: enable pushbutton",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "task",
			Type:        "task",
			Description: "task type",
		},
		{
			Name:        "start date",
			Type:        "date",
			Description: "date from which task is scheduled (inclusive)",
		},
		{
			Name:        "end date",
			Type:        "date",
			Description: "date after which task no longer scheduled",
		},
		{
			Name:        "monday",
			Type:        "bool",
			Description: "task enabled on Monday if true",
		},
		{
			Name:        "tuesday",
			Type:        "bool",
			Description: "task enabled on Tuesday if true",
		},
		{
			Name:        "wednesday",
			Type:        "bool",
			Description: "task enabled on Wednesday if true",
		},
		{
			Name:        "thursday",
			Type:        "bool",
			Description: "task enabled on Thursday if true",
		},
		{
			Name:        "friday",
			Type:        "bool",
			Description: "task enabled on Monday if true",
		},
		{
			Name:        "saturday",
			Type:        "bool",
			Description: "task enabled on Friday if true",
		},
		{
			Name:        "sunday",
			Type:        "bool",
			Description: "task enabled on Sunday if true",
		},
		{
			Name:        "start time",
			Type:        "HHmm",
			Description: "time at which task is scheduled",
		},
		{
			Name:        "door",
			Type:        "uint8",
			Description: "door ([1..4] to which task is linked",
		},
		{
			Name:        "more cards",
			Type:        "uint8",
			Description: "number of 'more cards' for the MORE CARDS task type",
		},
	},
	Request:  requests.AddTaskRequest.Message,
	Response: responses.AddTaskResponse.Message,

	Tests: []FuncTest{
		{
			Name: "add-task",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "task",
					Type:  "task",
					Value: "2",
				},
				{
					Name:  "start date",
					Type:  "date",
					Value: "2025-01-01",
				},
				{
					Name:  "end date",
					Type:  "date",
					Value: "2025-12-31",
				},
				{
					Name:  "monday",
					Type:  "bool",
					Value: "true",
				},
				{
					Name:  "tuesday",
					Type:  "bool",
					Value: "true",
				},
				{
					Name:  "wednesday",
					Type:  "bool",
					Value: "false",
				},
				{
					Name:  "thursday",
					Type:  "bool",
					Value: "true",
				},
				{
					Name:  "friday",
					Type:  "bool",
					Value: "false",
				},
				{
					Name:  "saturday",
					Type:  "bool",
					Value: "true",
				},
				{
					Name:  "sunday",
					Type:  "bool",
					Value: "true",
				},
				{
					Name:  "start time",
					Type:  "HHmm",
					Value: "08:45",
				},
				{
					Name:  "door",
					Type:  "uint8",
					Value: "3",
				},
				{
					Name:  "more cards",
					Type:  "uint8",
					Value: "7",
				},
			},
			Request: []byte{
				0x17, 0xa8, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x20, 0x25, 0x01, 0x01, 0x20, 0x25, 0x12, 0x31,
				0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x08, 0x45, 0x03, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0xa8, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var ClearTaskList = Function{
	Name: "clear task list",
	Description: []string{
		"Removes all scheduled tasks.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.ClearTaskListRequest.Message,
	Response: responses.ClearTaskListResponse.Message,

	Tests: []FuncTest{
		{
			Name: "clear-task-list",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
			},
			Request: []byte{
				0x17, 0xa6, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x55, 0xaa, 0xaa, 0x55, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0xa6, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "uint8",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var ClearTimeProfiles = Function{
	Name: "clear time profiles",
	Description: []string{
		"Clears all access time profiles stored on a controller.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.ClearTimeProfilesRequest.Message,
	Response: responses.ClearTimeProfilesResponse.Message,

	Tests: []FuncTest{
		{
			Name: "clear-time-profiles",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
			},
			Request: []byte{
				0x17, 0x8a, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x55, 0xaa, 0xaa, 0x55, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x8a, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "uint8",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var DeleteAllCards = Function{
	Name: "delete all cards",
	Description: []string{
		"Deletes all card records stored on an access controller.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.DeleteAllCardsRequest.Message,
	Response: responses.DeleteAllCardsResponse.Message,

	Tests: []FuncTest{
		{
			Name: "delete-all-cards",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
			},
			Request: []byte{
				0x17, 0x54, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x55, 0xaa, 0xaa, 0x55, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x54, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var DeleteCard = Function{
	Name: "delete card",
	Description: []string{
		"Removes a card record stored on a controller.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "card number",
			Type:        "uint32",
			Description: "card number",
		},
	},
	Request:  requests.DeleteCardRequest.Message,
	Response: responses.DeleteCardResponse.Message,

	Tests: []FuncTest{
		{
			Name: "delete-card",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "card",
					Type:  "uint32",
					Value: 10058400,
				},
			},
			Request: []byte{
				0x17, 0x52, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0xa0, 0x7a, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x52, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var GetAntiPassback = Function{
	Description: []string{
		"Retrieves the anti-passback mode for an access controller. The anti-passback mode",
		"will be one of the following:",
		" - 0: disabled",
		" - 1: readers 1:2; 3:4 (independently)",
		" - 2: readers (1,3):(2,4)",
		" - 3: readers 1:(2,3)",
		" - 4: readers 1:(2,3,4)",
	},

	Name: "get anti-passback",
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.GetAntiPassbackRequest.Message,
	Response: responses.GetAntiPassbackResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-antipassback",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
			},
			Request: []byte{
				0x17, 0x86, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x86, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "antipassback",
							Type:  "anti-passback",
							Value: 2,
						},
					},
				},
			},
		},
	},
}
View Source
var GetCard = Function{
	Name: "get card",
	Description: []string{
		"Retrieves the card information for a given card number.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "card number",
			Type:        "uint32",
			Description: "card number",
		},
	},
	Request:  requests.GetCardRequest.Message,
	Response: responses.GetCardResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-card",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "card",
					Type:  "uint32",
					Value: 10058400,
				},
			},
			Request: []byte{
				0x17, 0x5a, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0xa0, 0x7a, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x5a, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0xa0, 0x7a, 0x99, 0x00, 0x20, 0x25, 0x01, 0x01,
						0x20, 0x25, 0x12, 0x31, 0x01, 0x00, 0x11, 0x01, 0x6b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "card",
							Type:  "uint32",
							Value: 10058400,
						},
						{
							Name:  "start-date",
							Type:  "optional date",
							Value: "2025-01-01",
						},
						{
							Name:  "end-date",
							Type:  "optional date",
							Value: "2025-12-31",
						},
						{
							Name:  "door 1",
							Type:  "uint8",
							Value: 1,
						},
						{
							Name:  "door 2",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "door 3",
							Type:  "uint8",
							Value: 17,
						},
						{
							Name:  "door 4",
							Type:  "uint8",
							Value: 1,
						},
						{
							Name:  "PIN",
							Type:  "pin",
							Value: 7531,
						},
					},
				},
			},
		},
		{
			Name: "get-card-not-found",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "card",
					Type:  "uint32",
					Value: 10058401,
				},
			},
			Request: []byte{
				0x17, 0x5a, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0xa1, 0x7a, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x5a, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "card",
							Type:  "uint32",
							Value: 0,
						},
						{
							Name:  "start-date",
							Type:  "optional date",
							Value: "0001-01-01",
						},
						{
							Name:  "end-date",
							Type:  "optional date",
							Value: "0001-01-01",
						},
						{
							Name:  "door 1",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "door 2",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "door 3",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "door 4",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "PIN",
							Type:  "pin",
							Value: 0,
						},
					},
				},
			},
		},
	},
}
View Source
var GetCardAtIndex = Function{
	Name: "get card at index",
	Description: []string{
		"Retrieves the card information stored at a given index.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "index",
			Type:        "uint32",
			Description: "card record index",
		},
	},
	Request:  requests.GetCardAtIndexRequest.Message,
	Response: responses.GetCardAtIndexResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-card-at-index",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "index",
					Type:  "uint32",
					Value: 135,
				},
			},
			Request: []byte{
				0x17, 0x5c, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x5c, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0xa0, 0x7a, 0x99, 0x00, 0x20, 0x25, 0x01, 0x01,
						0x20, 0x25, 0x12, 0x31, 0x01, 0x00, 0x11, 0x01, 0x6b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "card",
							Type:  "uint32",
							Value: 10058400,
						},
						{
							Name:  "start-date",
							Type:  "optional date",
							Value: "2025-01-01",
						},
						{
							Name:  "end-date",
							Type:  "optional date",
							Value: "2025-12-31",
						},
						{
							Name:  "door 1",
							Type:  "uint8",
							Value: 1,
						},
						{
							Name:  "door 2",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "door 3",
							Type:  "uint8",
							Value: 17,
						},
						{
							Name:  "door 4",
							Type:  "uint8",
							Value: 1,
						},
						{
							Name:  "PIN",
							Type:  "pin",
							Value: 7531,
						},
					},
				},
			},
		},
		{
			Name: "get-card-at-index-not-found",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "index",
					Type:  "uint32",
					Value: 136,
				},
			},
			Request: []byte{
				0x17, 0x5c, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x5c, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "card",
							Type:  "uint32",
							Value: 0,
						},
						{
							Name:  "start-date",
							Type:  "optional date",
							Value: "0001-01-01",
						},
						{
							Name:  "end-date",
							Type:  "optional date",
							Value: "0001-01-01",
						},
						{
							Name:  "door 1",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "door 2",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "door 3",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "door 4",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "PIN",
							Type:  "pin",
							Value: 0,
						},
					},
				},
			},
		},
		{
			Name: "get-card-at-index-deleted",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "index",
					Type:  "uint32",
					Value: 137,
				},
			},
			Request: []byte{
				0x17, 0x5c, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x5c, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "card",
							Type:  "uint32",
							Value: uint32(0xffffffff),
						},
						{
							Name:  "start-date",
							Type:  "optional date",
							Value: "0001-01-01",
						},
						{
							Name:  "end-date",
							Type:  "optional date",
							Value: "0001-01-01",
						},
						{
							Name:  "door 1",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "door 2",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "door 3",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "door 4",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "PIN",
							Type:  "pin",
							Value: 0,
						},
					},
				},
			},
		},
	},
}
View Source
var GetCards = Function{
	Name: "get cards",
	Description: []string{
		"Retrieves the number of cards stored on an access controller.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.GetCardsRequest.Message,
	Response: responses.GetCardsResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-cards",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
			},
			Request: []byte{
				0x17, 0x58, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x58, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x0b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "cards",
							Type:  "uint32",
							Value: 13579,
						},
					},
				},
			},
		},
	},
}
View Source
var GetController = Function{
	Name: "get controller",
	Description: []string{
		"Retrieves the system information for an access controller.",
	},
	Args: []Arg{
		Arg{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.GetControllerRequest.Message,
	Response: responses.GetControllerResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-controller",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
			},
			Request: []byte{
				0x17, 0x94, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x94, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0xc0, 0xa8, 0x01, 0x64, 0xff, 0xff, 0xff, 0x00,
						0xc0, 0xa8, 0x01, 0x01, 0x00, 0x12, 0x23, 0x34, 0x45, 0x56, 0x08, 0x92, 0x20, 0x18, 0x11, 0x05,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ip address",
							Type:  "IPv4",
							Value: "192.168.1.100",
						},
						{
							Name:  "subnet mask",
							Type:  "IPv4",
							Value: "255.255.255.0",
						},
						{
							Name:  "gateway",
							Type:  "IPv4",
							Value: "192.168.1.1",
						},
						{
							Name:  "MAC Address",
							Type:  "MAC",
							Value: "00:12:23:34:45:56",
						},
						{
							Name:  "version",
							Type:  "version",
							Value: "v8.92",
						},
						{
							Name:  "date",
							Type:  "date",
							Value: "2018-11-05",
						},
					},
				},
			},
		},
	},
}
View Source
var GetDoor = Function{
	Name: "get door",
	Description: []string{
		"Retrieves the control mode and unlock delay time for an access controller door.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "door",
			Type:        "uint8",
			Description: "door ID ([1..4])",
		},
	},
	Request:  requests.GetDoorRequest.Message,
	Response: responses.GetDoorResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-door",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "door",
					Type:  "uint8",
					Value: 4,
				},
			},
			Request: []byte{
				0x17, 0x82, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x82, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "door",
							Type:  "uint8",
							Value: 4,
						},
						{
							Name:  "mode",
							Type:  "mode",
							Value: 3,
						},
						{
							Name:  "delay",
							Type:  "uint8",
							Value: 7,
						},
					},
				},
			},
		},
	},
}
View Source
var GetEvent = Function{
	Name:        "get event",
	Description: []string{"Retrieves an event record stored on an access controller."},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "event index",
			Type:        "uint32",
			Description: "index of event to retrieve",
		},
	},
	Request:  requests.GetEventRequest.Message,
	Response: responses.GetEventResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-event",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "event index",
					Type:  "uint32",
					Value: 13579,
				},
			},
			Request: []byte{
				0x17, 0xb0, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x0b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0xb0, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x0b, 0x35, 0x00, 0x00, 0x02, 0x01, 0x04, 0x02,
						0xa0, 0x7a, 0x99, 0x00, 0x20, 0x25, 0x11, 0x17, 0x12, 0x34, 0x56, 0x15, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "index",
							Type:  "uint32",
							Value: 13579,
						},
						{
							Name:  "timestamp",
							Type:  "optional datetime",
							Value: "2025-11-17 12:34:56",
						},
						{
							Name:  "event type",
							Type:  "event-type",
							Value: 2,
						},
						{
							Name:  "access granted",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "door",
							Type:  "uint8",
							Value: 4,
						},
						{
							Name:  "direction",
							Type:  "direction",
							Value: 2,
						},
						{
							Name:  "card",
							Type:  "uint32",
							Value: 10058400,
						},
						{
							Name:  "reason",
							Type:  "reason",
							Value: 21,
						},
					},
				},
			},
		},
		{
			Name: "get-event-not-found",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "event index",
					Type:  "uint32",
					Value: 24680,
				},
			},
			Request: []byte{
				0x17, 0xb0, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x68, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0xb0, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x68, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "index",
							Type:  "uint32",
							Value: 24680,
						},
						{
							Name:  "timestamp",
							Type:  "optional datetime",
							Value: "0001-01-01 00:00:00",
						},
						{
							Name:  "event type",
							Type:  "event-type",
							Value: 0x00,
						},
						{
							Name:  "access granted",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "door",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "direction",
							Type:  "direction",
							Value: 0,
						},
						{
							Name:  "card",
							Type:  "uint32",
							Value: 0,
						},
						{
							Name:  "reason",
							Type:  "reason",
							Value: 0,
						},
					},
				},
			},
		},
		{
			Name: "get-event-overwritten",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "event index",
					Type:  "uint32",
					Value: 98765,
				},
			},
			Request: []byte{
				0x17, 0xb0, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0xcd, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0xb0, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0xcd, 0x81, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "index",
							Type:  "uint32",
							Value: 98765,
						},
						{
							Name:  "timestamp",
							Type:  "optional datetime",
							Value: "0001-01-01 00:00:00",
						},
						{
							Name:  "event type",
							Type:  "event-type",
							Value: 0xff,
						},
						{
							Name:  "access granted",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "door",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "direction",
							Type:  "direction",
							Value: 0,
						},
						{
							Name:  "card",
							Type:  "uint32",
							Value: 0,
						},
						{
							Name:  "reason",
							Type:  "reason",
							Value: 0,
						},
					},
				},
			},
		},
	},
}
View Source
var GetEventIndex = Function{
	Name: "get event index",
	Description: []string{
		"Retrieves the downloaded event index from an access controller.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.GetEventIndexRequest.Message,
	Response: responses.GetEventIndexResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-event-index",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
			},
			Request: []byte{
				0x17, 0xb4, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0xb4, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x0b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "index",
							Type:  "uint32",
							Value: 13579,
						},
					},
				},
			},
		},
	},
}
View Source
var GetListener = Function{
	Name: "get listener",
	Description: []string{
		"Retrieves the access controller event listener IPv4 address:port and auto-send interval.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.GetListenerRequest.Message,
	Response: responses.GetListenerResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-listener",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
			},
			Request: []byte{
				0x17, 0x92, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x92, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0xc0, 0xa8, 0x01, 0x64, 0x61, 0xea, 0x0d, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "address",
							Type:  "IPv4",
							Value: "192.168.1.100",
						},
						{
							Name:  "port",
							Type:  "uint16",
							Value: 60001,
						},
						{
							Name:  "interval",
							Type:  "uint8",
							Value: 13,
						},
					},
				},
			},
		},
	},
}
View Source
var GetListenerAddrPort = Function{
	Name: "get listener addr:port",
	Description: []string{
		"Retrieves the access controller event listener IPv4 address:port and auto-send interval.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.GetListenerAddrPortRequest.Message,
	Response: responses.GetListenerAddrPortResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-listener-addr-port",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419897,
				},
			},
			Request: []byte{
				0x17, 0x92, 0x00, 0x00, 0x79, 0x37, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x92, 0x00, 0x00, 0x79, 0x37, 0x2a, 0x18, 0xc0, 0xa8, 0x01, 0x64, 0x61, 0xea, 0x0d, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419897,
						},
						{
							Name:  "listener",
							Type:  "address:port",
							Value: netip.MustParseAddrPort("192.168.1.100:60001"),
						},
						{
							Name:  "interval",
							Type:  "uint8",
							Value: 13,
						},
					},
				},
			},
		},
	},
}
View Source
var GetStatus = Function{
	Name:        "get status",
	Description: []string{"Retrieves the system status from an access controller."},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.GetStatusRequest.Message,
	Response: responses.GetStatusResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-status",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
			},
			Request: []byte{
				0x17, 0x20, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x20, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x4e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x03, 0x01,
						0xa1, 0x98, 0x7c, 0x00, 0x20, 0x22, 0x08, 0x23, 0x09, 0x47, 0x06, 0x2c, 0x00, 0x01, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x01, 0x03, 0x09, 0x49, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x27, 0x07, 0x09, 0x22, 0x08, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "system-date",
							Type:  "shortdate",
							Value: "2022-08-23",
						},
						{
							Name:  "system-time",
							Type:  "time",
							Value: "09:49:39",
						},
						{
							Name:  "door-1-open",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "door-2-open",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "door-3-open",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "door-4-open",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "door-1-button",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "door-2-button",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "door-3-button",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "door-4-button",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "relays",
							Type:  "uint8",
							Value: 0x07,
						},
						{
							Name:  "inputs",
							Type:  "uint8",
							Value: 0x09,
						},
						{
							Name:  "system-error",
							Type:  "uint8",
							Value: 3,
						},
						{
							Name:  "special-info",
							Type:  "uint8",
							Value: 39,
						},
						{
							Name:  "event-index",
							Type:  "uint32",
							Value: 78,
						},
						{
							Name:  "event-type",
							Type:  "event-type",
							Value: 2,
						},
						{
							Name:  "event-access-granted",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "event-door",
							Type:  "uint8",
							Value: 3,
						},
						{
							Name:  "event-direction",
							Type:  "direction",
							Value: 1,
						},
						{
							Name:  "event-card",
							Type:  "uint32",
							Value: 8165537,
						},
						{
							Name:  "event-timestamp",
							Type:  "optional datetime",
							Value: "2022-08-23 09:47:06",
						},
						{
							Name:  "event-reason",
							Type:  "reason",
							Value: 44,
						},
						{
							Name:  "sequence-no",
							Type:  "uint32",
							Value: 0,
						},
					},
				},
			},
		},
		{
			Name: "get-status-no-event",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419897,
				},
			},
			Request: []byte{
				0x17, 0x20, 0x00, 0x00, 0x79, 0x37, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x20, 0x00, 0x00, 0x79, 0x37, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01,
						0x01, 0x01, 0x00, 0x01, 0x1b, 0x14, 0x37, 0x53, 0xe3, 0x55, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
						0x27, 0x07, 0x09, 0x25, 0x11, 0x23, 0x00, 0x00, 0x93, 0x26, 0x04, 0x88, 0x08, 0x92, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419897,
						},
						{
							Name:  "system-date",
							Type:  "shortdate",
							Value: "2025-11-23",
						},
						{
							Name:  "system-time",
							Type:  "time",
							Value: "14:37:53",
						},
						{
							Name:  "door-1-open",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "door-2-open",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "door-3-open",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "door-4-open",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "door-1-button",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "door-2-button",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "door-3-button",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "door-4-button",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "relays",
							Type:  "uint8",
							Value: 0x07,
						},
						{
							Name:  "inputs",
							Type:  "uint8",
							Value: 0x09,
						},
						{
							Name:  "system-error",
							Type:  "uint8",
							Value: 27,
						},
						{
							Name:  "special-info",
							Type:  "uint8",
							Value: 39,
						},
						{
							Name:  "event-index",
							Type:  "uint32",
							Value: 0,
						},
						{
							Name:  "event-type",
							Type:  "event-type",
							Value: 0,
						},
						{
							Name:  "event-access-granted",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "event-door",
							Type:  "uint8",
							Value: 0,
						},
						{
							Name:  "event-direction",
							Type:  "direction",
							Value: 0,
						},
						{
							Name:  "event-card",
							Type:  "uint32",
							Value: 0,
						},
						{
							Name:  "event-timestamp",
							Type:  "optional datetime",
							Value: "0001-01-01 00:00:00",
						},
						{
							Name:  "event-reason",
							Type:  "reason",
							Value: 0,
						},
						{
							Name:  "sequence-no",
							Type:  "uint32",
							Value: 21987,
						},
					},
				},
			},
		},
	},
}
View Source
var GetTime = Function{
	Name: "get time",
	Description: []string{
		"Retrieves the access controller system date and time.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.GetTimeRequest.Message,
	Response: responses.GetTimeResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-time",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
			},
			Request: []byte{
				0x17, 0x32, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x32, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x20, 0x25, 0x11, 0x01, 0x12, 0x34, 0x56, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "date-time",
							Type:  "datetime",
							Value: "2025-11-01 12:34:56",
						},
					},
				},
			},
		},
	},
}
View Source
var GetTimeProfile = Function{
	Name: "get time profile",
	Description: []string{
		"Retrieves the requested access time profile from a controller.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "profile",
			Type:        "uint8",
			Description: "profile ID ([2..254] to retrieve",
		},
	},
	Request:  requests.GetTimeProfileRequest.Message,
	Response: responses.GetTimeProfileResponse.Message,

	Tests: []FuncTest{
		{
			Name: "get-time-profile",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "profile",
					Type:  "uint8",
					Value: 37,
				},
			},
			Request: []byte{
				0x17, 0x98, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x98, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x25, 0x20, 0x25, 0x11, 0x26, 0x20, 0x25, 0x12,
						0x29, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x08, 0x30, 0x09, 0x45, 0x11, 0x35, 0x13, 0x15,
						0x14, 0x01, 0x17, 0x59, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "profile",
							Type:  "uint8",
							Value: 37,
						},
						{
							Name:  "start date",
							Type:  "optional date",
							Value: "2025-11-26",
						},
						{
							Name:  "end date",
							Type:  "optional date",
							Value: "2025-12-29",
						},
						{
							Name:  "monday",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "tuesday",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "wednesday",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "thursday",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "friday",
							Type:  "bool",
							Value: false,
						},
						{
							Name:  "saturday",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "sunday",
							Type:  "bool",
							Value: true,
						},
						{
							Name:  "segment 1 start",
							Type:  "HHmm",
							Value: "08:30",
						},
						{
							Name:  "segment 1 end",
							Type:  "HHmm",
							Value: "09:45",
						},
						{
							Name:  "segment 2 start",
							Type:  "HHmm",
							Value: "11:35",
						},
						{
							Name:  "segment 2 end",
							Type:  "HHmm",
							Value: "13:15",
						},
						{
							Name:  "segment 3 start",
							Type:  "HHmm",
							Value: "14:01",
						},
						{
							Name:  "segment 3 end",
							Type:  "HHmm",
							Value: "17:59",
						},
						{
							Name:  "linked profile",
							Type:  "uint8",
							Value: 19,
						},
					},
				},
			},
		},
	},
}
View Source
var OpenDoor = Function{
	Name: "open door",
	Description: []string{
		"Unlocks a door controlled by an access controller.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "door",
			Type:        "uint8",
			Description: "door ID ([1..4])",
		},
	},
	Request:  requests.OpenDoorRequest.Message,
	Response: responses.OpenDoorResponse.Message,

	Tests: []FuncTest{
		{
			Name: "open-door",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "door",
					Type:  "uint8",
					Value: 4,
				},
			},
			Request: []byte{
				0x17, 0x40, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x40, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var PutCard = Function{
	Name: "put card",
	Description: []string{
		"Creates or updates the card information stored on an access controller.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "card",
			Type:        "uint32",
			Description: "card number",
		},
		{
			Name:        "start date",
			Type:        "date",
			Description: "date from which card is valid",
		},
		{
			Name:        "end date",
			Type:        "date",
			Description: "date after which card is invalid",
		},
		{
			Name:        "door 1",
			Type:        "uint8",
			Description: "access permissions for door 1 (0: no access, 1: 24/7 access, [2..253] time profile)",
		},
		{
			Name:        "door 2",
			Type:        "uint8",
			Description: "access permissions for door 2 (0: no access, 1: 24/7 access, [2..253] time profile)",
		},
		{
			Name:        "door 3",
			Type:        "uint8",
			Description: "access permissions for door 3 (0: no access, 1: 24/7 access, [2..253] time profile)",
		},
		{
			Name:        "door 4",
			Type:        "uint8",
			Description: "access permissions for door 4 (0: no access, 1: 24/7 access, [2..253] time profile)",
		},
		{
			Name:        "PIN",
			Type:        "pin",
			Description: "optional PIN code [0..999999] (0 for none)",
		},
	},
	Request:  requests.PutCardRequest.Message,
	Response: responses.PutCardResponse.Message,

	Tests: []FuncTest{
		{
			Name: "put-card",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "card",
					Type:  "uint32",
					Value: 10058400,
				},
				{
					Name:  "start date",
					Type:  "date",
					Value: "2025-01-01",
				},
				{
					Name:  "end date",
					Type:  "date",
					Value: "2025-12-31",
				},
				{
					Name:  "door 1",
					Type:  "uint8",
					Value: 1,
				},
				{
					Name:  "door 2",
					Type:  "uint8",
					Value: 0,
				},
				{
					Name:  "door 3",
					Type:  "uint8",
					Value: 17,
				},
				{
					Name:  "door 4",
					Type:  "uint8",
					Value: 1,
				},
				{
					Name:  "PIN",
					Type:  "pin",
					Value: 999999,
				},
			},
			Request: []byte{
				0x17, 0x50, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0xa0, 0x7a, 0x99, 0x00, 0x20, 0x25, 0x01, 0x01,
				0x20, 0x25, 0x12, 0x31, 0x01, 0x00, 0x11, 0x01, 0x3f, 0x42, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x50, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var RecordSpecialEvents = Function{
	Name: "record special events",
	Description: []string{
		"Enables/disables events for door opened, door closed and door button pressed.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "enabled",
			Type:        "bool",
			Description: "enables door opened, door closed and button pressed events if true",
		},
	},
	Request:  requests.RecordSpecialEventsRequest.Message,
	Response: responses.RecordSpecialEventsResponse.Message,

	Tests: []FuncTest{
		{
			Name: "record-special-events",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "enabled",
					Type:  "bool",
					Value: true,
				},
			},
			Request: []byte{
				0x17, 0x8e, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x8e, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var RefreshTaskList = Function{
	Name: "refresh task list",
	Description: []string{
		"Updates scheduler with newly created scheduled tasks.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.RefreshTaskListRequest.Message,
	Response: responses.RefreshTaskListResponse.Message,

	Tests: []FuncTest{
		{
			Name: "refresh-task-list",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
			},
			Request: []byte{
				0x17, 0xac, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x55, 0xaa, 0xaa, 0x55, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0xac, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "uint8",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var RestoreDefaultParameters = Function{
	Name: "restore default parameters",
	Description: []string{
		"Restores the controller configuration to the manufacturer defaults.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
	},
	Request:  requests.RestoreDefaultParametersRequest.Message,
	Response: responses.RestoreDefaultParametersResponse.Message,

	Tests: []FuncTest{
		{
			Name: "restore-default-parameters",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
			},
			Request: []byte{
				0x17, 0xc8, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x55, 0xaa, 0xaa, 0x55, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0xc8, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var SetAntiPassback = Function{
	Description: []string{
		"Sets the access controller anti-passback mode.",
		"",
		"The following modes are supported:",
		" - 0: disabled",
		" - 1: doors 1&2, doors 3&4",
		" - 2: doors 1&3, doors 2&4",
		" - 3: door 1 & doors 2,3",
		" - 4: door 1 & doors 1,2,3",
	},

	Name: "set anti-passback",
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "antipassback",
			Type:        "anti-passback",
			Description: "anti-passback mode",
		},
	},
	Request:  requests.SetAntiPassbackRequest.Message,
	Response: responses.SetAntiPassbackResponse.Message,

	Tests: []FuncTest{
		{
			Name: "set-antipassback",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "antipassback",
					Type:  "anti-passback",
					Value: 2,
				},
			},
			Request: []byte{
				0x17, 0x84, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x84, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var SetDoor = Function{
	Name: "set door",
	Description: []string{
		"Sets the control mode and unlock delay time for an access controller door.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "door",
			Type:        "uint8",
			Description: "door ID ([1..4])",
		},
		{
			Name:        "mode",
			Type:        "mode",
			Description: "control mode (1:normally open, 2:normally closed. 3:controlled)",
		},
		{
			Name:        "delay",
			Type:        "uint8",
			Description: "unlock delay (seconds))",
		},
	},
	Request:  requests.SetDoorRequest.Message,
	Response: responses.SetDoorResponse.Message,

	Tests: []FuncTest{
		{
			Name: "set-door",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "door",
					Type:  "uint8",
					Value: 4,
				},
				{
					Name:  "mode",
					Type:  "mode",
					Value: 2,
				},
				{
					Name:  "delay",
					Type:  "uint8",
					Value: 17,
				},
			},
			Request: []byte{
				0x17, 0x80, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x04, 0x02, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x80, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x04, 0x02, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "door",
							Type:  "uint8",
							Value: 4,
						},
						{
							Name:  "mode",
							Type:  "mode",
							Value: 2,
						},
						{
							Name:  "delay",
							Type:  "uint8",
							Value: 17,
						},
					},
				},
			},
		},
	},
}
View Source
var SetDoorPasscodes = Function{
	Name: "set door passcodes",
	Description: []string{
		"Sets up to 4 passcodes for a controller door.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "door",
			Type:        "uint8",
			Description: "door ID ([1..4])",
		},
		{
			Name:        "passcode 1",
			Type:        "pin",
			Description: "supervisor passcode ([0..99999]), 0 for 'none'",
		},
		{
			Name:        "passcode 2",
			Type:        "pin",
			Description: "supervisor passcode ([0..99999]), 0 for 'none'",
		},
		{
			Name:        "passcode 3",
			Type:        "pin",
			Description: "supervisor passcode ([0..99999]), 0 for 'none'",
		},
		{
			Name:        "passcode 4",
			Type:        "pin",
			Description: "supervisor passcode ([0..99999]), 0 for 'none'",
		},
	},
	Request:  requests.SetDoorPasscodesRequest.Message,
	Response: responses.SetDoorPasscodesResponse.Message,

	Tests: []FuncTest{
		{
			Name: "set-door-passcodes",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "door",
					Type:  "uint8",
					Value: 4,
				},
				{
					Name:  "passcode 1",
					Type:  "uint32",
					Value: 12345,
				},
				{
					Name:  "passcode 2",
					Type:  "uint32",
					Value: 54321,
				},
				{
					Name:  "passcode 3",
					Type:  "uint32",
					Value: 999999,
				},
				{
					Name:  "passcode 4",
					Type:  "uint32",
					Value: 0,
				},
			},
			Request: []byte{
				0x17, 0x8c, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x04, 0x00, 0x00, 0x00, 0x39, 0x30, 0x00, 0x00,
				0x31, 0xd4, 0x00, 0x00, 0x3f, 0x42, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x8c, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var SetEventIndex = Function{
	Name:        "set event index",
	Description: []string{"Sets the downloaded event index on an access controller."},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "event index",
			Type:        "uint32",
			Description: "downloaded event index",
		},
	},
	Request:  requests.SetEventIndexRequest.Message,
	Response: responses.SetEventIndexResponse.Message,

	Tests: []FuncTest{
		{
			Name: "set-event-index",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "index",
					Type:  "uint32",
					Value: 13579,
				},
			},
			Request: []byte{
				0x17, 0xb2, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x0b, 0x35, 0x00, 0x00, 0x55, 0xaa, 0xaa, 0x55,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0xb2, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var SetIPv4 = Function{
	Name: "set IPv4",
	Description: []string{
		"Sets the controller IPv4 address, netmask and gateway address.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "address",
			Type:        "IPv4",
			Description: "controller IPv4 address",
		},
		{
			Name:        "netmask",
			Type:        "IPv4",
			Description: "controller IPv4 subnet mask",
		},
		{
			Name:        "gateway",
			Type:        "IPv4",
			Description: "controller gateway IPv4 address",
		},
	},
	Request:  requests.SetIPv4Request.Message,
	Response: responses.SetIPv4Response.Message,

	Tests: []FuncTest{
		{
			Name: "set-IPv4",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "address",
					Type:  "IPv4",
					Value: netip.MustParseAddr("192.168.1.125"),
				},
				{
					Name:  "netmask",
					Type:  "IPv4",
					Value: netip.MustParseAddr("255.255.255.0"),
				},
				{
					Name:  "gateway",
					Type:  "IPv4",
					Value: netip.MustParseAddr("192.168.1.1"),
				},
			},
			Request: []byte{
				0x17, 0x96, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0xc0, 0xa8, 0x01, 0x7d, 0xff, 0xff, 0xff, 0x00,
				0xc0, 0xa8, 0x01, 0x01, 0x55, 0xaa, 0xaa, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x96, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var SetInterlock = Function{
	Name: "set interlock",
	Description: []string{
		"Sets the door interlock mode on an access controller.",
		"",
		"The following interlock modes are supported:",
		" - 0: disabled",
		" - 1: doors 1&2",
		" - 2: doors 3&4",
		" - 3: doors 1&2, doors 3&4",
		" - 4: doors 1,2&3",
		" - 8: doors 1,2,3&4",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "interlock",
			Type:        "interlock",
			Description: "door interlock mode",
		},
	},
	Request:  requests.SetInterlockRequest.Message,
	Response: responses.SetInterlockResponse.Message,

	Tests: []FuncTest{
		{
			Name: "set-interlock",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "interlock",
					Type:  "interlock",
					Value: 8,
				},
			},
			Request: []byte{
				0x17, 0xa2, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0xa2, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var SetListener = Function{
	Name: "set listener",
	Description: []string{
		"Sets the access controller event listener IPv4 address:port and auto-send interval.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "address",
			Type:        "IPv4",
			Description: "IPv4 address of host to receive controller events",
		},
		{
			Name:        "port",
			Type:        "uint16",
			Description: "UDP port of host for controller events",
		},
		{
			Name:        "interval",
			Type:        "uint8",
			Description: "status auto-send interval (seconds). A '0' interval disables auto-send.",
		},
	},
	Request:  requests.SetListenerRequest.Message,
	Response: responses.SetListenerResponse.Message,

	Tests: []FuncTest{
		{
			Name: "set-listener",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "address",
					Type:  "IPv4",
					Value: netip.MustParseAddr("192.168.1.100"),
				},
				{
					Name:  "port",
					Type:  "uint16",
					Value: 60001,
				},
				{
					Name:  "interval",
					Type:  "uint8",
					Value: 17,
				},
			},
			Request: []byte{
				0x17, 0x90, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18,
				0xc0, 0xa8, 0x01, 0x64, 0x61, 0xea, 0x11, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x90, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var SetListenerAddrPort = Function{
	Name: "set listener addr:port",
	Description: []string{
		"Sets the access controller event listener IPv4 address:port and auto-send interval.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "listener",
			Type:        "address:port",
			Description: "IPv4 address:port of host to receive controller events",
		},
		{
			Name:        "interval",
			Type:        "uint8",
			Description: "status auto-send interval (seconds). A '0'interval disables auto-send.",
		},
	},
	Request:  requests.SetListenerAddrPortRequest.Message,
	Response: responses.SetListenerAddrPortResponse.Message,

	Tests: []FuncTest{
		{
			Name: "set-listener-addr-port",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419897,
				},
				{
					Name:  "listener",
					Type:  "address:port",
					Value: netip.MustParseAddrPort("192.168.1.100:60001"),
				},
				{
					Name:  "interval",
					Type:  "uint8",
					Value: 17,
				},
			},
			Request: []byte{
				0x17, 0x90, 0x00, 0x00, 0x79, 0x37, 0x2a, 0x18, 0xc0, 0xa8, 0x01, 0x64, 0x61, 0xea, 0x11, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x90, 0x00, 0x00, 0x79, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419897,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var SetPCControl = Function{
	Name: "set PC control",
	Description: []string{
		"Enables remote access control. Remote access control will remain in effect provided the controller",
		"receives a message from the host at least once every 30 seconds.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "enabled",
			Type:        "bool",
			Description: "enables/disables remote access control",
		},
	},
	Request:  requests.SetPCControlRequest.Message,
	Response: responses.SetPCControlResponse.Message,

	Tests: []FuncTest{
		{
			Name: "set-pc-control",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "enabled",
					Type:  "bool",
					Value: true,
				},
			},
			Request: []byte{
				0x17, 0xa0, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x55, 0xaa, 0xaa, 0x55, 0x01, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0xa0, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "bool",
							Value: true,
						},
					},
				},
			},
		},
	},
}
View Source
var SetTime = Function{
	Name: "set time",
	Description: []string{
		"Sets the access controller system date and time.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "date-time",
			Type:        "datetime",
			Description: "date/time to which to set controller system time",
		},
	},
	Request:  requests.SetTimeRequest.Message,
	Response: responses.SetTimeResponse.Message,

	Tests: []FuncTest{
		{
			Name: "set-time",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "date-time",
					Type:  "datetime",
					Value: "2025-11-04 12:34:56",
				},
			},
			Request: []byte{
				0x17, 0x30, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x20, 0x25, 0x11, 0x04, 0x12, 0x34, 0x56, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x30, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x20, 0x25, 0x11, 0x01, 0x12, 0x34, 0x56, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "date-time",
							Type:  "datetime",
							Value: "2025-11-01 12:34:56",
						},
					},
				},
			},
		},
	},
}
View Source
var SetTimeProfile = Function{
	Name: "set time profile",
	Description: []string{
		"Adds or updates an access time profile stored on a controller.",
	},
	Args: []Arg{
		{
			Name:        "controller",
			Type:        "controller",
			Description: "uint32|Controller controller serial number or {id, address, protocol} Controller struct",
		},
		{
			Name:        "profile",
			Type:        "uint8",
			Description: "profile Id ([2..254] to create/update",
		},
		{
			Name:        "start date",
			Type:        "date",
			Description: "date from which profile is valid (inclusive)",
		},
		{
			Name:        "end date",
			Type:        "date",
			Description: "date after which profile is invalid",
		},
		{
			Name:        "monday",
			Type:        "bool",
			Description: "profile valid on Monday if true",
		},
		{
			Name:        "tuesday",
			Type:        "bool",
			Description: "profile valid on Tuesday if true",
		},
		{
			Name:        "wednesday",
			Type:        "bool",
			Description: "profile valid on Wednesday if true",
		},
		{
			Name:        "thursday",
			Type:        "bool",
			Description: "profile valid on Thursday if true",
		},
		{
			Name:        "friday",
			Type:        "bool",
			Description: "profile valid on Friday if true",
		},
		{
			Name:        "saturday",
			Type:        "bool",
			Description: "profile valid on Saturday if true",
		},
		{
			Name:        "sunday",
			Type:        "bool",
			Description: "profile valid on Sunday if true",
		},
		{
			Name:        "segment 1 start",
			Type:        "HHmm",
			Description: "start time for first time segment",
		},
		{
			Name:        "segment 1 end",
			Type:        "HHmm",
			Description: "end time for first time segment",
		},
		{
			Name:        "segment 2 start",
			Type:        "HHmm",
			Description: "start time for second time segment",
		},
		{
			Name:        "segment 2 end",
			Type:        "HHmm",
			Description: "end time for second time segment",
		},
		{
			Name:        "segment 3 start",
			Type:        "HHmm",
			Description: "start time for third time segment",
		},
		{
			Name:        "segment 3 end",
			Type:        "HHmm",
			Description: "end time for third time segment",
		},
		{
			Name:        "linked profile id",
			Type:        "uint8",
			Description: "ID of linked profile (0 if not linked)",
		},
	},
	Request:  requests.SetTimeProfileRequest.Message,
	Response: responses.SetTimeProfileResponse.Message,

	Tests: []FuncTest{
		{
			Name: "set-time-profile",
			Args: []Arg{
				{
					Name:  "controller",
					Type:  "uint32",
					Value: 405419896,
				},
				{
					Name:  "profile",
					Type:  "uint8",
					Value: 37,
				},
				{
					Name:  "start date",
					Type:  "date",
					Value: "2025-11-26",
				},
				{
					Name:  "end date",
					Type:  "date",
					Value: "2025-12-29",
				},
				{
					Name:  "monday",
					Type:  "bool",
					Value: true,
				},
				{
					Name:  "tuesday",
					Type:  "bool",
					Value: true,
				},
				{
					Name:  "wednesday",
					Type:  "bool",
					Value: false,
				},
				{
					Name:  "thursday",
					Type:  "bool",
					Value: true,
				},
				{
					Name:  "friday",
					Type:  "bool",
					Value: false,
				},
				{
					Name:  "saturday",
					Type:  "bool",
					Value: true,
				},
				{
					Name:  "sunday",
					Type:  "bool",
					Value: true,
				},
				{
					Name:  "segment 1 start",
					Type:  "HHmm",
					Value: "8:30",
				},
				{
					Name:  "segment 1 end",
					Type:  "HHmm",
					Value: "9:45",
				},
				{
					Name:  "segment 2 start",
					Type:  "HHmm",
					Value: "11:35",
				},
				{
					Name:  "segment 2 end",
					Type:  "HHmm",
					Value: "13:15",
				},
				{
					Name:  "segment 3 start",
					Type:  "HHmm",
					Value: "14:01",
				},
				{
					Name:  "segment 3 end",
					Type:  "HHmm",
					Value: "17:59",
				},
				{
					Name:  "linked profile id",
					Type:  "uint8",
					Value: 19,
				},
			},
			Request: []byte{
				0x17, 0x88, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x25, 0x20, 0x25, 0x11, 0x26, 0x20, 0x25, 0x12,
				0x29, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x08, 0x30, 0x09, 0x45, 0x11, 0x35, 0x13, 0x15,
				0x14, 0x01, 0x17, 0x59, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
			},
			Replies: []Reply{
				{
					Message: []byte{
						0x17, 0x88, 0x00, 0x00, 0x78, 0x37, 0x2a, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
					},
					Response: []Value{
						{
							Name:  "controller",
							Type:  "uint32",
							Value: 405419896,
						},
						{
							Name:  "ok",
							Type:  "uint8",
							Value: true,
						},
					},
				},
			},
		},
	},
}

Functions

This section is empty.

Types

type Arg

type Arg = types.Arg

type FuncTest

type FuncTest = types.FuncTest

type Function

type Function = types.Function

type Reply

type Reply = types.Reply

type Value

type Value = types.Value

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL