mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-16 18:53:29 +00:00
esp32s3-usbserial: common usbserial for both esp32c3 & esp32s3
This commit is contained in:
@@ -1,45 +0,0 @@
|
|||||||
//go:build esp32s3 || esp32c3
|
|
||||||
|
|
||||||
package machine
|
|
||||||
|
|
||||||
import (
|
|
||||||
"device/esp"
|
|
||||||
)
|
|
||||||
|
|
||||||
type USB_DEVICE struct {
|
|
||||||
Bus *esp.USB_DEVICE_Type
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
_USBCDC = &USB_DEVICE{
|
|
||||||
Bus: esp.USB_DEVICE,
|
|
||||||
}
|
|
||||||
|
|
||||||
USBCDC Serialer = _USBCDC
|
|
||||||
)
|
|
||||||
|
|
||||||
type Serialer interface {
|
|
||||||
WriteByte(c byte) error
|
|
||||||
Write(data []byte) (n int, err error)
|
|
||||||
Configure(config UARTConfig) error
|
|
||||||
Buffered() int
|
|
||||||
ReadByte() (byte, error)
|
|
||||||
DTR() bool
|
|
||||||
RTS() bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func (usbdev *USB_DEVICE) Configure(config UARTConfig) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (usbdev *USB_DEVICE) Buffered() int {
|
|
||||||
return int(usbdev.Bus.GetEP1_CONF_SERIAL_OUT_EP_DATA_AVAIL())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (usbdev *USB_DEVICE) DTR() bool {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (usbdev *USB_DEVICE) RTS() bool {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
//go:build esp32s3
|
|
||||||
|
|
||||||
package machine
|
|
||||||
|
|
||||||
import "errors"
|
|
||||||
|
|
||||||
func initUSB() {
|
|
||||||
USBCDC.Configure(UARTConfig{BaudRate: 115200})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (usbdev *USB_DEVICE) WriteByte(c byte) error {
|
|
||||||
timeout := 10000
|
|
||||||
for usbdev.Bus.GetEP1_CONF_SERIAL_IN_EP_DATA_FREE() == 0 && timeout > 0 {
|
|
||||||
timeout--
|
|
||||||
}
|
|
||||||
if timeout == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
usbdev.Bus.SetEP1_RDWR_BYTE(uint32(c))
|
|
||||||
usbdev.Bus.SetEP1_CONF_WR_DONE(1)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (usbdev *USB_DEVICE) Write(data []byte) (n int, err error) {
|
|
||||||
for _, c := range data {
|
|
||||||
err = usbdev.WriteByte(c)
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
n++
|
|
||||||
}
|
|
||||||
return n, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (usbdev *USB_DEVICE) ReadByte() (byte, error) {
|
|
||||||
return 0, errors.New("ReadByte not implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (usbdev *USB_DEVICE) flush() {
|
|
||||||
usbdev.Bus.SetEP1_CONF_WR_DONE(1)
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,26 @@
|
|||||||
//go:build esp32c3
|
//go:build esp32s3 || esp32c3
|
||||||
|
|
||||||
package machine
|
package machine
|
||||||
|
|
||||||
import "errors"
|
import (
|
||||||
|
"device/esp"
|
||||||
|
"errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
// USB Serial/JTAG Controller
|
||||||
|
// See esp32-c3_technical_reference_manual_en.pdf
|
||||||
|
// pg. 736
|
||||||
|
type USB_DEVICE struct {
|
||||||
|
Bus *esp.USB_DEVICE_Type
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
_USBCDC = &USB_DEVICE{
|
||||||
|
Bus: esp.USB_DEVICE,
|
||||||
|
}
|
||||||
|
|
||||||
|
USBCDC Serialer = _USBCDC
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
errUSBWrongSize = errors.New("USB: invalid write size")
|
errUSBWrongSize = errors.New("USB: invalid write size")
|
||||||
@@ -10,14 +28,30 @@ var (
|
|||||||
errUSBBufferEmpty = errors.New("USB: read buffer empty")
|
errUSBBufferEmpty = errors.New("USB: read buffer empty")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Serialer interface {
|
||||||
|
WriteByte(c byte) error
|
||||||
|
Write(data []byte) (n int, err error)
|
||||||
|
Configure(config UARTConfig) error
|
||||||
|
Buffered() int
|
||||||
|
ReadByte() (byte, error)
|
||||||
|
DTR() bool
|
||||||
|
RTS() bool
|
||||||
|
}
|
||||||
|
|
||||||
func initUSB() {}
|
func initUSB() {}
|
||||||
|
|
||||||
|
func (usbdev *USB_DEVICE) Configure(config UARTConfig) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (usbdev *USB_DEVICE) WriteByte(c byte) error {
|
func (usbdev *USB_DEVICE) WriteByte(c byte) error {
|
||||||
if usbdev.Bus.GetEP1_CONF_SERIAL_IN_EP_DATA_FREE() == 0 {
|
if usbdev.Bus.GetEP1_CONF_SERIAL_IN_EP_DATA_FREE() == 0 {
|
||||||
return errUSBCouldNotWriteAllData
|
return errUSBCouldNotWriteAllData
|
||||||
}
|
}
|
||||||
|
|
||||||
usbdev.Bus.SetEP1_RDWR_BYTE(uint32(c))
|
usbdev.Bus.SetEP1_RDWR_BYTE(uint32(c))
|
||||||
usbdev.flush()
|
usbdev.flush()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,26 +59,42 @@ func (usbdev *USB_DEVICE) Write(data []byte) (n int, err error) {
|
|||||||
if len(data) == 0 || len(data) > 64 {
|
if len(data) == 0 || len(data) > 64 {
|
||||||
return 0, errUSBWrongSize
|
return 0, errUSBWrongSize
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, c := range data {
|
for i, c := range data {
|
||||||
if usbdev.Bus.GetEP1_CONF_SERIAL_IN_EP_DATA_FREE() == 0 {
|
if usbdev.Bus.GetEP1_CONF_SERIAL_IN_EP_DATA_FREE() == 0 {
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
usbdev.flush()
|
usbdev.flush()
|
||||||
}
|
}
|
||||||
|
|
||||||
return i, errUSBCouldNotWriteAllData
|
return i, errUSBCouldNotWriteAllData
|
||||||
}
|
}
|
||||||
usbdev.Bus.SetEP1_RDWR_BYTE(uint32(c))
|
usbdev.Bus.SetEP1_RDWR_BYTE(uint32(c))
|
||||||
}
|
}
|
||||||
|
|
||||||
usbdev.flush()
|
usbdev.flush()
|
||||||
return len(data), nil
|
return len(data), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (usbdev *USB_DEVICE) Buffered() int {
|
||||||
|
return int(usbdev.Bus.GetEP1_CONF_SERIAL_OUT_EP_DATA_AVAIL())
|
||||||
|
}
|
||||||
|
|
||||||
func (usbdev *USB_DEVICE) ReadByte() (byte, error) {
|
func (usbdev *USB_DEVICE) ReadByte() (byte, error) {
|
||||||
if usbdev.Bus.GetEP1_CONF_SERIAL_OUT_EP_DATA_AVAIL() != 0 {
|
if usbdev.Bus.GetEP1_CONF_SERIAL_OUT_EP_DATA_AVAIL() != 0 {
|
||||||
return byte(usbdev.Bus.GetEP1_RDWR_BYTE()), nil
|
return byte(usbdev.Bus.GetEP1_RDWR_BYTE()), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (usbdev *USB_DEVICE) DTR() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (usbdev *USB_DEVICE) RTS() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (usbdev *USB_DEVICE) flush() {
|
func (usbdev *USB_DEVICE) flush() {
|
||||||
usbdev.Bus.SetEP1_CONF_WR_DONE(1)
|
usbdev.Bus.SetEP1_CONF_WR_DONE(1)
|
||||||
for usbdev.Bus.GetEP1_CONF_SERIAL_IN_EP_DATA_FREE() == 0 {
|
for usbdev.Bus.GetEP1_CONF_SERIAL_IN_EP_DATA_FREE() == 0 {
|
||||||
Reference in New Issue
Block a user