Skip to content

Commit

Permalink
- fix name of the upload file on windows
Browse files Browse the repository at this point in the history
- fix some bugs
  • Loading branch information
macdylan committed Apr 25, 2023
1 parent 4c4cd96 commit 30e6746
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 27 deletions.
8 changes: 6 additions & 2 deletions connector_sacp.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,17 @@ func (sc *SACPConnector) Ping(p *Printer) bool {
}

func (sc *SACPConnector) Connect() (err error) {
if conn, err := SACP_connect(sc.printer.IP, SACPTimeout*time.Second); err == nil {
conn, err := SACP_connect(sc.printer.IP, SACPTimeout*time.Second)
if conn != nil {
sc.conn = conn
}
return
return err
}

func (sc *SACPConnector) Disconnect() error {
if sc.conn != nil {
sc.conn.Close()
}
return nil
}

Expand Down
11 changes: 5 additions & 6 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"log"
"os"
"os/signal"
"path"
"path/filepath"
"syscall"
"time"
Expand Down Expand Up @@ -144,17 +143,17 @@ func main() {
envFilename := os.Getenv("SLIC3R_PP_OUTPUT_NAME")

// Upload files to host
for _, filepath := range _Payloads {
content, err := os.ReadFile(filepath)
for _, fpath := range _Payloads {
content, err := os.ReadFile(fpath)
if err != nil {
log.Panicln(err)
}
st, _ := os.Stat(filepath)
st, _ := os.Stat(fpath)
var fname string
if envFilename == "" {
fname = normalizedFilename(path.Base(filepath))
fname = normalizedFilename(filepath.Base(fpath))
} else {
fname = normalizedFilename(path.Base(envFilename))
fname = normalizedFilename(filepath.Base(envFilename))
}
log.Printf("Uploading file '%s' [%s]...", fname, humanReadableSize(st.Size()))
if err := Connector.Upload(printer, fname, content); err != nil {
Expand Down
3 changes: 3 additions & 0 deletions octoprint.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,15 @@ func startOctoPrintServer(listenAddr string, printer *Printer) error {
mux.HandleFunc("/api/files/local", func(w http.ResponseWriter, r *http.Request) {
// Check if request is a POST request
if r.Method != http.MethodPost {
log.Print("Method not allowed: ", r.Method)
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}

// Retrieve the uploaded file
file, fd, err := r.FormFile("file")
if err != nil {
log.Print("Error retrieving file: ", err.Error())
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
Expand All @@ -43,6 +45,7 @@ func startOctoPrintServer(listenAddr string, printer *Printer) error {
// Send the stream to the printer
content, _ := io.ReadAll(file)
if err := Connector.Upload(printer, fd.Filename, content); err != nil {
log.Print("Error uploading file: ", err.Error())
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
Expand Down
43 changes: 24 additions & 19 deletions sacp.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ func (sacp SACP_pack) Encode() []byte {
copy(result[13:], sacp.Data)
}

binary.LittleEndian.PutUint16(result[len(result)-2:], sacp.U16Chksum(result[7:], len(sacp.Data)+6))
binary.LittleEndian.PutUint16(result[len(result)-2:], sacp.U16Chksum(result[7:], uint16(len(sacp.Data))+6))

return result[:]
}
Expand All @@ -71,11 +71,11 @@ func (sacp *SACP_pack) Decode(data []byte) error {
if len(data) < 13 {
return errInvalidSize
}
if data[0] != 0xAA || data[1] != 0x55 {
if data[0] != 0xAA && data[1] != 0x55 {
return errInvalidSACP
}
dataLen := binary.LittleEndian.Uint16(data[2:4])
if int(dataLen) != (len(data) - 7) {
if dataLen != uint16(len(data)-7) {
return errInvalidSize
}
if data[4] != 0x01 {
Expand All @@ -84,7 +84,7 @@ func (sacp *SACP_pack) Decode(data []byte) error {
if sacp.headChksum(data[:6]) != data[6] {
return errInvalidChksum
}
if binary.LittleEndian.Uint16(data[len(data)-2:]) != sacp.U16Chksum(data[7:], int(dataLen)-2) {
if binary.LittleEndian.Uint16(data[len(data)-2:]) != sacp.U16Chksum(data[7:], dataLen-2) {
return errInvalidChksum
}

Expand All @@ -100,31 +100,31 @@ func (sacp *SACP_pack) Decode(data []byte) error {
}

func (sacp *SACP_pack) headChksum(data []byte) byte {
crc := 0
poly := 7
crc := byte(0)
poly := byte(7)
for i := 0; i < len(data); i++ {
for j := 0; j < 8; j++ {
bit := data[i]&255>>(7-j)&1 == 1
c07 := crc>>7&1 == 1
bit := ((data[i] & 0xff) >> (7 - j) & 0x01) == 1
c07 := (crc >> 7 & 0x01) == 1
crc = crc << 1
if (!c07 && bit) || (c07 && !bit) {
crc ^= poly
}
}
}
crc = crc & 255
return byte(crc)
crc = crc & 0xff
return crc
}

func (sacp *SACP_pack) U16Chksum(package_data []byte, length int) uint16 {
check_num := uint64(0)
func (sacp *SACP_pack) U16Chksum(package_data []byte, length uint16) uint16 {
check_num := uint32(0)
if length > 0 {
for i := 0; i < length-1; i += 2 {
check_num += uint64(package_data[i])<<8 | uint64(package_data[i+1])
check_num &= 0xffffffff // TODO: maybe just use uint32?
for i := 0; i < int(length-1); i += 2 {
check_num += uint32((uint32(package_data[i])&0xff)<<8 | uint32(package_data[i+1])&0xff)
check_num &= 0xffffffff
}
if length%2 != 0 {
check_num += uint64(package_data[length-1])
check_num += uint32(package_data[length-1])
}
}
for check_num > 0xFFFF {
Expand Down Expand Up @@ -196,22 +196,27 @@ func SACP_connect(ip string, timeout time.Duration) (net.Conn, error) {
}

func SACP_read(conn net.Conn, timeout time.Duration) (*SACP_pack, error) {

var buf [SACP_data_len + 15]byte

deadline := time.Now().Add(timeout)
conn.SetReadDeadline(deadline)

n, err := conn.Read(buf[:4])
if err != nil || n != 4 {
if err != nil {
return nil, err
}
if n != 4 {
return nil, errInvalidSize
}

dataLen := binary.LittleEndian.Uint16(buf[2:4])
n, err = conn.Read(buf[4 : dataLen+7])
if err != nil || n != int(dataLen+3) {
if err != nil {
return nil, err
}
if n != int(dataLen+3) {
return nil, errInvalidSize
}

var sacp SACP_pack
err = sacp.Decode(buf[:dataLen+7])
Expand Down

0 comments on commit 30e6746

Please sign in to comment.