123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- //
- // SBTUpateDeviceNameVCtr.swift
- // SolarBT
- //
- // Created by weclouds on 2019/5/8.
- // Copyright © 2019 weclouds. All rights reserved.
- //
- import UIKit
- import SwiftPopup
- import PKHUD
- let KNotificationUpadateNameChange = "KNotificationUpadateNameChange"
- class SBTUpateDeviceNameVCtr: SwiftPopup,UITextFieldDelegate {
- var updateCallback:((String)->Void)?
- var deviceName :String?
- var isDemo :Bool?
-
- @IBOutlet weak var box: UIView!
- @IBOutlet weak var saveBtn: UIButton!
- @IBOutlet weak var textBox: UIView!
-
- @IBOutlet weak var backLabel: UILabel!
- @IBOutlet weak var devicenameTextfield: UITextField!
-
- @IBOutlet weak var DeviceNameLabel: UILabel!
-
- @IBOutlet weak var placeHolder: UILabel!
-
-
- override func viewWillAppear(_ animated: Bool) {
- super.viewWillAppear(animated)
- BabyBluetoothSwift.shareInstance()?.updateNameBlock = {[weak self](deviceData) in
-
- let a = deviceData?.value(forKey: ReceiveData) as! String
-
- let str0 = a.subString(start: 0, length: 6)
-
- log.debug("更新名称 --- 返回的数据 -- \(a)")
- if str0.subString(start: 1, length: 4) == "ff03" {
-
- let dataTagValue : String = deviceData?.value(forKey: DataTag) as! String
- if dataTagValue == "FF0300490020"{
-
- let str0 = a.replacingOccurrences(of: " ", with: "")
- log.debug("处理真实数据 - \(str0)")
-
- var productName : String = ""
- var num5 = UUUtils.string(fromHexString: str0.subString(start: 7 , length: 64))
- log.debug("要解析的十六进制 \( str0.subString(start: 7 , length: 64))")
- num5 = num5?.trimmingCharacters(in: .whitespaces) //过滤开头结尾空白
- log.debug("设备名称 \(num5)")
- //f16d33 575578 e565b 065fd8 0906ed179
- if num5 == nil || num5 == "" {
- let ChineseString = UUUtils.deUnicodeString(fromHexString: str0.subString(start: 7 , length: 64))
- log.debug("设备中文名称 \(ChineseString!)")
- productName = ChineseString!
- }else{
- productName = "\(num5!)"
- }
- let dict = ["productName":productName]
- NotificationCenter.default.post(name: NSNotification.Name(KNotificationUpadateNameChange), object: nil, userInfo: dict)
- }}
- }
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
- self.devicenameTextfield.text = self.deviceName ?? ""
- // Do any additional setup after loading the view.
- createUI()
- }
- @IBAction func saveAction(_ sender: Any) {
- let devicename = self.devicenameTextfield.text
- if self.isDemo == true {
- g_showHUD("Current_demo_data".da_localizedStr())
- self.dismiss()
- return
- }
- if devicename == ""{
- // self.view.makeToast("清输入设备名称")
- g_toast("Please_enter_a_device_name".da_localizedStr())
- return;
- }
-
- //6e 6a 67 74 6d 78 00 00 00 00 00 00 00 00 00 00 16 * 4
- //处理数据
- var hexStr = UUUtils.hexString(from: devicename)
-
- if devicename?.isIncludeChinese() == true{ // 包含汉字
- hexStr = UUUtils.utf8(toUnicode: devicename!)
- //字母/数字 32ge个
- // g_toast("不能输入超过16个汉字")
- if hexStr!.count < 64 {
- //补空格
- let completion = 64 - hexStr!.count
- let blankCont = completion
- for _ in 0..<blankCont {
- hexStr?.append("0")
- }
-
- }
- }else{
- if hexStr!.count < 64 {
- //补空格
- let completion = 64 - hexStr!.count
- let blankCont = completion / 2
- for _ in 0..<blankCont {
- hexStr?.append("00")
- }
- }
- }
-
- //32
- log.debug("g更新名字发送的数据 -- \(hexStr!)")
- let strCount = String(format: "%04X", hexStr!.count)
- let byteCount = String(format: "%02X", hexStr!.count * 2)
-
- // let cmd = "FF100049" + "0020" + "40" + hexStr!
- var arr = [String]()
- for i in 0..<8 {
- let subHexStr = hexStr?.subString(start: i * 8, length: 8)
- let cmd = "FF1000" + String(format: "%02X", 73 + 4 * i ) + "0004" + "08" + subHexStr!
- log.debug("指令集 - \(cmd)")
- arr.append(cmd)
- }
-
-
- //updateDeviceName(hexStr!)
-
- BabyBluetoothSwift.shareInstance()?.writeData2222(arr, completionHandler: { (result) in
- self.dismiss()
- HUD.flash(.progress)
- })
-
-
- // self.perform(#selector(read_DeviceName), with: nil, afterDelay: 2)
- }
-
- @objc func read_DeviceName() {
- BabyBluetoothSwift.shareInstance()?.writeData2222(["FF0300490020"], completionHandler: { (result) in
- self.readdata_0049(result!["FF0300490020"] as! String)
- HUD.flash(.success, delay: 1)
- UIView.animate(withDuration: 0.25) {
- if self.updateCallback != nil{
- self.updateCallback!(self.devicenameTextfield.text!)
- }
-
- }
- })
- }
-
- //允许大小写或数字(限字数)
- func inputNumberOrLetters(_ name: String) -> Bool {
- let userNameRegex = "^[A-Za-z0-9]{6,16}+$"
- let userNamePredicate = NSPredicate(format: "SELF MATCHES %@", userNameRegex)
- let inputString = userNamePredicate.evaluate(with: name)
- return inputString
- }
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
- // dismiss()
- }
-
-
-
- }
- extension SBTUpateDeviceNameVCtr{
-
- func readdata_0049(_ reciveData : String){
- let str0 = reciveData
- log.debug("处理真实数据 - \(str0)")
-
- var productName : String = ""
- var num5 = UUUtils.string(fromHexString: str0.subString(start: 7 , length: str0.count - 12))
- log.debug("要解析的十六进制 \( str0.subString(start: 7 , length: str0.count - 12))")
- num5 = num5?.trimmingCharacters(in: .whitespaces) //过滤开头结尾空白
- log.debug("设备名称 \(num5)")
- //f16d33 575578 e565b 065fd8 0906ed179
- if num5 == nil || num5 == "" {
- let ChineseString = UUUtils.deUnicodeString(fromHexString: str0.subString(start: 7 , length: str0.count - 12))
- log.debug("设备中文名称 \(ChineseString!)")
- productName = ChineseString!
- }else{
- productName = "\(num5!)"
- }
- let dict = ["productName":productName]
- NotificationCenter.default.post(name: NSNotification.Name(KNotificationUpadateNameChange), object: nil, userInfo: dict)
- }
-
- func createUI() {
- DeviceNameLabel.text = "Device_name".da_localizedStr()
- placeHolder.text = "Please_enter_a_device_name".da_localizedStr()
- backLabel.text = "Back".da_localizedStr()
- saveBtn.setTitle("Save".da_localizedStr(), for: .normal)
-
- self.textBox.layer.masksToBounds = true
- self.textBox.layer.cornerRadius = 5
- self.textBox.layer.borderColor = UIColor(hexString: "#C6C6C6")?.cgColor
- self.textBox.layer.borderWidth = 1
-
- devicenameTextfield.clearButtonMode = .always
- devicenameTextfield.delegate = self;
- self.box.layer.masksToBounds = true
- self.box.layer.cornerRadius = 5
- self.saveBtn.layer.masksToBounds = true
- self.saveBtn.layer.cornerRadius = 20
- let bgLayer1 = CAGradientLayer()
- bgLayer1.colors = [UIColor(red: 1, green: 0.52, blue: 0.07, alpha: 1).cgColor, UIColor(red: 1, green: 0.67, blue: 0, alpha: 1).cgColor]
- bgLayer1.locations = [0, 1]
- bgLayer1.frame = self.saveBtn.bounds
- bgLayer1.startPoint = CGPoint(x: 1, y: 1)
- bgLayer1.endPoint = CGPoint(x: 0, y: 0)
- self.saveBtn.layer.addSublayer(bgLayer1)
-
-
-
-
-
- self.backLabel.isUserInteractionEnabled = true
- let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction))
- self.backLabel.addGestureRecognizer(tap)
- }
-
- @objc func tapAction() {
- dismiss()
- }
-
- func textFieldDidEndEditing(_ textField: UITextField) {
-
- }
-
- func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
- if let text = textField.text,
- let textRange = Range(range, in: text) {
- let updatedText = text.replacingCharacters(in: textRange,
- with: string)
- log.debug("更新的输入 ---\(updatedText)")
- if updatedText.count > 32{
- g_toast("The_maximum_length_of_the_name_is_16_words.".da_localizedStr())
- return false
- }
-
- }
- return true
- }
-
-
- }
|