mirror of
https://github.com/BertoldVdb/ms-tools.git
synced 2026-01-28 01:07:20 +01:00
35 lines
823 B
Go
35 lines
823 B
Go
package mshal
|
|
|
|
import "encoding/binary"
|
|
|
|
func (h *HAL) UARTTransmit(baud int, data []byte, invert bool) error {
|
|
if _, _, err := h.GPIOUpdate(0, 0, 1>>4, 0); err != nil {
|
|
return err
|
|
}
|
|
|
|
region := h.MemoryRegionGet(MemoryRegionUserRAM)
|
|
parent, addr := region.GetParent()
|
|
|
|
params := make([]byte, 2+len(data))
|
|
addr += region.GetLength() - len(params)
|
|
|
|
binary.LittleEndian.PutUint16(params[:], uint16((1.0/float64(baud))/108.125e-9))
|
|
params[0] += 1
|
|
params[1] += 1
|
|
|
|
copy(params[2:], data)
|
|
ssbit := byte(0x80)
|
|
if invert {
|
|
ssbit = 0x01
|
|
for i := range data {
|
|
params[2+i] ^= 0xFF
|
|
}
|
|
}
|
|
|
|
if _, err := parent.Access(true, addr, params); err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err := h.PatchExecFunc(false, h.patchCallAddrs[4], PatchExecFuncRequest{DPTR: uint16(addr), R6: ssbit, R7_A: uint8(len(data))})
|
|
return err
|
|
}
|