package api import ( "confrontation-training/common" "confrontation-training/constant" errmsg "confrontation-training/err" "confrontation-training/global" "confrontation-training/http" "confrontation-training/models" "confrontation-training/response" "encoding/hex" "encoding/json" "fmt" "github.com/gin-gonic/gin" "io/ioutil" "strings" ) // ScanDevice // PingExample confrontation-training // @Summary 扫描设备 // @Schemes // @Description 扫描设备 // @Tags 设备管理 // @Param device body string true "chip:芯片编号,1或1;filterName:0 脑电 1 心电;filterRssi:信号强度,小于0的整数,字符串格式传输;filterMac:过滤Mac地址,以","分割,如 61-Dg-89-22-39-3b,80-kD-0E-40-57-8A" // @Accept json // @Produce json // @Success 200 {string} string "ok" // @Router /v1/device/scan [get] func ScanDevice(c *gin.Context) { var param models.DeviceScanParam err := c.ShouldBindJSON(¶m) if err != nil { fmt.Printf("参数格式化异常:%s", err.Error()) response.Failed(errmsg.ParamInvalid, c) return } paramMap := make(map[string]string) if param.Chip != "" { paramMap["chip"] = param.Chip } if param.FilterName != "" { if param.FilterName == "0" { paramMap["filter_name"] = constant.FilterNameEEG } else if param.FilterName == "1" { paramMap["filter_name"] = constant.FilterNameECG } else { response.Failed(errmsg.ParamInvalid+":过滤类型-"+param.FilterName+"无效", c) return } } else { paramMap["filter_name"] = constant.FilterNameALL } if param.FilterRssi != "" { paramMap["filter_rssi"] = param.FilterRssi } if param.FilterMac != "" { paramMap["filter_mac"] = param.FilterMac } paramMap["active"] = "1" paramMap["event"] = "1" result := SseScanDevice(paramMap) response.Success("扫描完成", result, c) return } // ConnectDevice // PingExample confrontation-training // @Summary 连接设备 // @Schemes // @Description 连接设备 // @Tags 设备管理 // @Param device body string true "chip:芯片编号,0或1;mac:Mac地址;addrType:地址类型 public/random " // @Accept json // @Produce json // @Success 200 {string} string "ok" // @Router /v1/device/connection [get] func ConnectDevice(c *gin.Context) { var param models.DeviceConnParam err := c.ShouldBindJSON(¶m) if err != nil { fmt.Printf("参数格式化异常:%s", err.Error()) response.Failed(errmsg.ParamInvalid, c) return } jsonParam, err := json.Marshal(param) if err != nil { fmt.Printf("参数转换异常:%s", err.Error()) response.Failed("参数转换异常:%s"+err.Error(), c) return } url := global.Config.Gateway.BaseUrl + global.Config.Gateway.ConnUrl url = strings.Replace(url, "MAC", param.Mac, -1) url = strings.Replace(url, "chip", "chip="+param.Chip, -1) httpResponse := http.PostReqJson(url, jsonParam) status := httpResponse.StatusCode fmt.Println("status", status) fmt.Println("response:", httpResponse.Header) body, _ := ioutil.ReadAll(httpResponse.Body) fmt.Println("response Body:", string(body)) if status == 200 { //成功 response.Success(errmsg.DeviceConnectSuccess, nil, c) } else { //失败 response.Failed(errmsg.DeviceConnectError+string(body), c) } } // WriteData // PingExample confrontation-training // @Summary 写入数据——发送指令 // @Schemes // @Description 写入数据——发送指令 ,ECG设备开启测试功能 // @Tags 设备管理 // @Param mac body string true "mac:设备MAC地址 userName:用户姓名 gender:性别 age:年龄 height:身高 weight:体重" // @Accept json // @Produce json // @Success 200 {string} string "ok" // @Router /v1/device/write/data/ [post] func WriteData(c *gin.Context) { var param models.WriteData err := c.ShouldBindJSON(¶m) if err != nil { fmt.Printf("参数格式化异常:%s", err.Error()) response.Failed(errmsg.ParamInvalid, c) return } userNameHex := hex.EncodeToString([]byte(param.UserName)) //1 绑定用户指令 //指令头(E841) + user信息前缀(AA)+姓名(姓名字节长度+姓名+姓名不足12字节占位符)+性别+年龄+身高+体重 var stringBuild strings.Builder stringBuild.WriteString(constant.BindUserInfoCmdPrefix) length := len(userNameHex) / 2 bytes := common.Int2Bytes(length) result := common.Bytes2HexStr(bytes) result = common.Int2Byte(int64(length)) if result == "" { response.Failed("用户名处理异常", c) return } result = result[len(result)-2:] stringBuild.WriteString(result) stringBuild.WriteString(userNameHex) placeHolder := common.GenerateHexStringCmdPlaceHolder(constant.MaxNameByteLength - length) stringBuild.WriteString(placeHolder) hexGender := common.Int2Byte(param.Gender) stringBuild.WriteString(hexGender[len(hexGender)-2:]) if param.Age == 0 { param.Age = constant.EcgDefaultAge } hexAge := common.Int2Byte(param.Age) stringBuild.WriteString(hexAge[len(hexAge)-2:]) if param.Height == 0 { param.Height = constant.EcgDefaultHeight } hexHeight := common.Int2Byte(param.Height) stringBuild.WriteString(hexHeight[len(hexHeight)-2:]) if param.Weight == 0 { param.Weight = constant.EcgDefaultWeight } hexWeight := common.Int2Byte(param.Weight) stringBuild.WriteString(hexWeight[len(hexWeight)-2:]) bindUserCmdByte := []byte(stringBuild.String()) bindUserCmd := string(bindUserCmdByte) fmt.Println(bindUserCmd) //2.授时指令 //timeCmd := common.GetTimeCmd() timeCmd := common.GetHexTimeStr() //timeCmd = fmt.Sprintf("%s%s", "0x", timeCmd) setTimeCmd := fmt.Sprintf("%s%s", constant.SetTimeCmdPrefix, timeCmd) fmt.Println(setTimeCmd) //3.开始收集指令 startCollectCmd := fmt.Sprintf("%s%s", constant.StartCollectCmdPrefix, timeCmd) fmt.Println(startCollectCmd) //发送指令 //绑定用户 bindUserUrl := fmt.Sprintf("%s%s", global.Config.Gateway.BaseUrl, global.Config.Gateway.WriteDataUrl) bindUserUrl = strings.Replace(bindUserUrl, "MAC", param.Mac, -1) bindUserUrl = strings.Replace(bindUserUrl, "DATA", bindUserCmd, -1) fmt.Println("bindUserUrl====" + bindUserUrl) http.GetReq(bindUserUrl) //授时 setTimeUrl := fmt.Sprintf("%s%s", global.Config.Gateway.BaseUrl, global.Config.Gateway.WriteDataUrl) setTimeUrl = strings.Replace(setTimeUrl, "MAC", param.Mac, -1) setTimeUrl = strings.Replace(setTimeUrl, "DATA", setTimeCmd, -1) http.GetReq(setTimeUrl) fmt.Println("setTimeUrl=====" + setTimeUrl) //开始收集 startCollectUrl := fmt.Sprintf("%s%s", global.Config.Gateway.BaseUrl, global.Config.Gateway.WriteDataUrl) startCollectUrl = strings.Replace(startCollectUrl, "MAC", param.Mac, -1) startCollectUrl = strings.Replace(startCollectUrl, "DATA", startCollectCmd, -1) fmt.Println("startCollectUrl=====" + startCollectUrl) http.GetReq(startCollectUrl) //开始收集指令 startTransUrl := fmt.Sprintf("%s%s", global.Config.Gateway.BaseUrl, global.Config.Gateway.WriteDataUrl) startTransUrl = strings.Replace(startTransUrl, "MAC", param.Mac, -1) startTransUrl = strings.Replace(startTransUrl, "DATA", constant.StartTransCmd, -1) fmt.Println("startTransUrl====" + startTransUrl) http.GetReq(startTransUrl) response.Success(errmsg.WriteDataSuccess, nil, c) }