blob: f5d4806cbcacd9e44dd63fd036bfbf427f78238e [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package cli
import (
"fmt"
"io/ioutil"
"os"
"github.com/spf13/cobra"
"mynewt.apache.org/newt/util"
"mynewt.apache.org/newtmgr/newtmgr/nmutil"
"mynewt.apache.org/newtmgr/nmxact/nmp"
"mynewt.apache.org/newtmgr/nmxact/xact"
)
func fsDownloadRunCmd(cmd *cobra.Command, args []string) {
if len(args) < 2 {
nmUsage(cmd, nil)
}
file, err := os.OpenFile(args[1], os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0660)
if err != nil {
nmUsage(cmd, util.FmtNewtError(
"Cannot open file %s - %s", args[1], err.Error()))
}
defer file.Close()
s, err := GetSesn()
if err != nil {
nmUsage(nil, err)
}
c := xact.NewFsDownloadCmd()
c.SetTxOptions(nmutil.TxOptions())
c.Name = args[0]
c.ProgressCb = func(c *xact.FsDownloadCmd, rsp *nmp.FsDownloadRsp) {
fmt.Printf("%d\n", rsp.Off)
if _, err := file.Write(rsp.Data); err != nil {
nmUsage(nil, util.ChildNewtError(err))
}
}
res, err := c.Run(s)
if err != nil {
nmUsage(nil, util.ChildNewtError(err))
}
sres := res.(*xact.FsDownloadResult)
rsp := sres.Rsps[len(sres.Rsps)-1]
if rsp.Rc != 0 {
fmt.Printf("Error: %d\n", rsp.Rc)
return
}
fmt.Printf("Done\n")
}
func fsUploadRunCmd(cmd *cobra.Command, args []string) {
if len(args) < 2 {
nmUsage(cmd, nil)
}
data, err := ioutil.ReadFile(args[0])
if err != nil {
nmUsage(cmd, util.ChildNewtError(err))
}
s, err := GetSesn()
if err != nil {
nmUsage(nil, err)
}
c := xact.NewFsUploadCmd()
c.SetTxOptions(nmutil.TxOptions())
c.Name = args[1]
c.Data = data
c.ProgressCb = func(c *xact.FsUploadCmd, rsp *nmp.FsUploadRsp) {
fmt.Printf("%d\n", rsp.Off)
}
res, err := c.Run(s)
if err != nil {
nmUsage(nil, util.ChildNewtError(err))
}
sres := res.(*xact.FsUploadResult)
rsp := sres.Rsps[len(sres.Rsps)-1]
if rsp.Rc != 0 {
fmt.Printf("Error: %d\n", rsp.Rc)
return
}
fmt.Printf("Done\n")
}
func fsCmd() *cobra.Command {
fsCmd := &cobra.Command{
Use: "fs",
Short: "Access files on a device",
Run: func(cmd *cobra.Command, args []string) {
cmd.HelpFunc()(cmd, args)
},
}
uploadEx := " " + nmutil.ToolInfo.ExeName +
" -c olimex fs upload sample.lua /sample.lua\n"
uploadCmd := &cobra.Command{
Use: "upload <src-filename> <dst-filename> -c <conn_profile>",
Short: "Upload file to a device",
Example: uploadEx,
Run: fsUploadRunCmd,
}
fsCmd.AddCommand(uploadCmd)
downloadEx := " " + nmutil.ToolInfo.ExeName +
" -c olimex image download /cfg/mfg mfg.txt\n"
downloadCmd := &cobra.Command{
Use: "download <src-filename> <dst-filename> -c <conn_profile>",
Short: "Download file from a device",
Example: downloadEx,
Run: fsDownloadRunCmd,
}
fsCmd.AddCommand(downloadCmd)
return fsCmd
}