You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
4.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package Adl400Impl
import (
"encoding/binary"
"tgk-touch/internal/library/ADL400"
"time"
)
func (a *Adl400Impl) WriteYear(commUid string, addr byte, year int) error {
// 1. 先读取当前月份(假设月份在低字节,年份在高字节)
result, err := ADL400.H003E.Read(commUid, addr)
if err != nil {
return err
}
value := result[0] // 低字节为月份
bytes := []byte{byte(value >> 8), byte(value)}
month, yearRead := int(bytes[0]), int(bytes[1])
yearRead = year
data := uint16(month)<<8 | uint16(yearRead)
// 3. 写入合并后的数据
return ADL400.H003E.Write(commUid, addr, []uint16{data})
}
func (a *Adl400Impl) WriteMonth(commUid string, addr byte, month int) error {
// 1. 先读取当前月份(假设月份在低字节,年份在高字节)
result, err := ADL400.H003E.Read(commUid, addr)
if err != nil {
return err
}
value := result[0] // 低字节为月份
bytes := []byte{byte(value >> 8), byte(value)}
monthRead, year := int(bytes[0]), int(bytes[1])
monthRead = month
data := uint16(monthRead)<<8 | uint16(year)
// 3. 写入合并后的数据
return ADL400.H003E.Write(commUid, addr, []uint16{data})
}
func (a *Adl400Impl) WriteDay(commUid string, addr byte, day int) error {
read, err := ADL400.H003D.Read(commUid, addr)
if err != nil {
return err
}
value := read[0]
hour := int(value >> 8) // 高字节=小时9
data := make([]byte, 2)
data[0] = byte(hour) // 高字节 = 时
data[1] = byte(day) // 低字节 = 日
writeData := binary.BigEndian.Uint16(data)
err = ADL400.H003D.Write(commUid, addr, []uint16{writeData})
if err != nil {
return err
}
return nil
}
func (a *Adl400Impl) WriteHour(commUid string, addr byte, hour int) error {
read, err := ADL400.H003D.Read(commUid, addr)
if err != nil {
return err
}
value := read[0]
day := value & 0xFF // 高字节=小时9
data := make([]byte, 2)
data[0] = byte(hour) // 高字节 = 时
data[1] = byte(day) // 低字节 = 日
writeData := binary.BigEndian.Uint16(data)
err = ADL400.H003D.Write(commUid, addr, []uint16{writeData})
if err != nil {
return err
}
return nil
}
func (a *Adl400Impl) WriteMinute(commUid string, addr byte, minute int) error {
read, err := ADL400.H003C.Read(commUid, addr)
if err != nil {
return err
}
value := read[0]
//log.Printf("value = %04X", value)
second := value >> 8 // 高字节=小时9
//minuteRead := value & 0xFF // 低字节=日27
data := make([]byte, 2)
data[0] = byte(second) // 高字节 = 时
data[1] = byte(minute) // 低字节 = 日
writeData := binary.BigEndian.Uint16(data)
//log.Printf("writeData = %04X", writeData)
return ADL400.H003C.Write(commUid, addr, []uint16{writeData})
}
func (a *Adl400Impl) WriteSecond(commUid string, addr byte, second int) error {
read, err := ADL400.H003C.Read(commUid, addr)
if err != nil {
return err
}
value := read[0]
//second := value >> 8 // 高字节=小时9
minute := value & 0xFF // 低字节=日27
data := make([]byte, 2)
data[0] = byte(second) // 高字节 = 时
data[1] = byte(minute) // 低字节 = 日
writeData := binary.BigEndian.Uint16(data)
err = ADL400.H003C.Write(commUid, addr, []uint16{writeData})
if err != nil {
return err
}
return nil
}
func (a *Adl400Impl) WriteTime(commUid string, addr byte, t time.Time) error {
err := a.WriteYear(commUid, addr, t.Year()-2000)
if err != nil {
return err
}
err = a.WriteMonth(commUid, addr, int(t.Month()))
if err != nil {
return err
}
err = a.WriteHour(commUid, addr, t.Hour())
if err != nil {
return err
}
err = a.WriteMinute(commUid, addr, t.Minute())
if err != nil {
return err
}
err = a.WriteSecond(commUid, addr, t.Second())
if err != nil {
return err
}
return nil
}
func (a *Adl400Impl) WriteMsgAddr(commUid string, addr byte, newAddr byte) error {
// 1. 先读取当前003FH寄存器的完整值
read, err := ADL400.H003F.Read(commUid, addr)
if err != nil {
return err
}
// 2. 解析当前值假设返回uint16
currentValue := read[0]
currentBaud := byte(currentValue & 0xFF) // 低字节=波特率
// 3. 构建新值:新地址(高8位) + 原波特率(低8位)
newValue := uint16(newAddr)<<8 | uint16(currentBaud)
// 4. 写入新值
writeData := []uint16{newValue}
return ADL400.H003F.Write(commUid, addr, writeData)
}