package m9z

type M9zCtrl byte

const (
	// 手动控制
	manual M9zCtrl = 0x01
	//	 日期时间
	deviceTime M9zCtrl = 0x02
	//	获取设备输出状态参数
	deviceOutStatus M9zCtrl = 0x04
	//经纬度参数
	lgnLat M9zCtrl = 0x05
	//	 日出日落时间偏差调节
	sunRiseSet M9zCtrl = 0x06
	//	 模式选择
	mode M9zCtrl = 0x0B
	//	 获取设备的状态
	deviceStatus M9zCtrl = 0x10
	// 获取或设置设备的配置 CMD = 0x11 ，IDX = 0x00
	deviceConfig M9zCtrl = 0x11
	//	 (9)获取日出日落时间 CMD = 0x12 ，IDX = 0x00
	sunRiseTime M9zCtrl = 0x12
	//	 (10)获取回路分控器的参数CMD = 0x17 ，IDX = 0x00~0x09
	subLoopParameters M9zCtrl = 0x17
	//(12)保存配置参数 CMD = 0x7F ，IDX = 0x00
	save M9zCtrl = 0x7F

	// 重启设备 CMD = 0x7E ，IDX = 0x00
	restart M9zCtrl = 0x7E

	//  (16)优化任务开始数据 CMD = 0x13 ，IDX = 0x00~0x02
	startTask M9zCtrl = 0x13
	//	(17)优化中间任务数据 CMD = 0x14 ，IDX = 0x00~0x02
	middleTask M9zCtrl = 0x14
	//  (18)优化任务结束数据 CMD = 0x15 ，IDX = 0x00~0x02
	stopTask M9zCtrl = 0x15
	// 蓝牙配置协议
	bluetooth    M9zCtrl = 0x16
	eraseSector  M9zCtrl = 0x0D // 擦除扇区
	firmwareData M9zCtrl = 0x0E // 下发固件数据
	lockFirmware M9zCtrl = 0x0F // 固件加锁
	versionCmd   M9zCtrl = 0x0E
	// (20) 实际通断情况查询 CMD = 0x19
	relayStatus M9zCtrl = 0x19
)

type IReadError interface {
	Error() string
}
type ReadError struct {
	msg string
}

func (e *ReadError) Error() string {
	return e.msg
}
func NewReadError(msg string) *ReadError {
	return &ReadError{
		msg: msg,
	}
}

func GetRestartCmd() []byte {
	wIdx := byte(0x00)

	writeCmd := WriteCommand{
		Instruction: byte(restart),
		Index:       wIdx,
		Data:        nil,
	}
	return BuildWriteCommand(writeCmd)

}
