SBTUpateDeviceNameVCtr.swift 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. //
  2. // SBTUpateDeviceNameVCtr.swift
  3. // SolarBT
  4. //
  5. // Created by weclouds on 2019/5/8.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. import SwiftPopup
  10. import PKHUD
  11. let KNotificationUpadateNameChange = "KNotificationUpadateNameChange"
  12. class SBTUpateDeviceNameVCtr: SwiftPopup,UITextFieldDelegate {
  13. var updateCallback:((String)->Void)?
  14. var deviceName :String?
  15. var isDemo :Bool?
  16. @IBOutlet weak var box: UIView!
  17. @IBOutlet weak var saveBtn: UIButton!
  18. @IBOutlet weak var textBox: UIView!
  19. @IBOutlet weak var backLabel: UILabel!
  20. @IBOutlet weak var devicenameTextfield: UITextField!
  21. @IBOutlet weak var DeviceNameLabel: UILabel!
  22. @IBOutlet weak var placeHolder: UILabel!
  23. override func viewWillAppear(_ animated: Bool) {
  24. super.viewWillAppear(animated)
  25. BabyBluetoothSwift.shareInstance()?.updateNameBlock = {[weak self](deviceData) in
  26. let a = deviceData?.value(forKey: ReceiveData) as! String
  27. let str0 = a.subString(start: 0, length: 6)
  28. log.debug("更新名称 --- 返回的数据 -- \(a)")
  29. if str0.subString(start: 1, length: 4) == "ff03" {
  30. let dataTagValue : String = deviceData?.value(forKey: DataTag) as! String
  31. if dataTagValue == "FF0300490020"{
  32. let str0 = a.replacingOccurrences(of: " ", with: "")
  33. log.debug("处理真实数据 - \(str0)")
  34. var productName : String = ""
  35. var num5 = UUUtils.string(fromHexString: str0.subString(start: 7 , length: 64))
  36. log.debug("要解析的十六进制 \( str0.subString(start: 7 , length: 64))")
  37. num5 = num5?.trimmingCharacters(in: .whitespaces) //过滤开头结尾空白
  38. log.debug("设备名称 \(num5)")
  39. //f16d33 575578 e565b 065fd8 0906ed179
  40. if num5 == nil || num5 == "" {
  41. let ChineseString = UUUtils.deUnicodeString(fromHexString: str0.subString(start: 7 , length: 64))
  42. log.debug("设备中文名称 \(ChineseString!)")
  43. productName = ChineseString!
  44. }else{
  45. productName = "\(num5!)"
  46. }
  47. let dict = ["productName":productName]
  48. NotificationCenter.default.post(name: NSNotification.Name(KNotificationUpadateNameChange), object: nil, userInfo: dict)
  49. }}
  50. }
  51. }
  52. override func viewDidLoad() {
  53. super.viewDidLoad()
  54. self.devicenameTextfield.text = self.deviceName ?? ""
  55. // Do any additional setup after loading the view.
  56. createUI()
  57. }
  58. @IBAction func saveAction(_ sender: Any) {
  59. let devicename = self.devicenameTextfield.text
  60. if self.isDemo == true {
  61. g_showHUD("Current_demo_data".da_localizedStr())
  62. self.dismiss()
  63. return
  64. }
  65. if devicename == ""{
  66. // self.view.makeToast("清输入设备名称")
  67. g_toast("Please_enter_a_device_name".da_localizedStr())
  68. return;
  69. }
  70. //6e 6a 67 74 6d 78 00 00 00 00 00 00 00 00 00 00 16 * 4
  71. //处理数据
  72. var hexStr = UUUtils.hexString(from: devicename)
  73. if devicename?.isIncludeChinese() == true{ // 包含汉字
  74. hexStr = UUUtils.utf8(toUnicode: devicename!)
  75. //字母/数字 32ge个
  76. // g_toast("不能输入超过16个汉字")
  77. if hexStr!.count < 64 {
  78. //补空格
  79. let completion = 64 - hexStr!.count
  80. let blankCont = completion
  81. for _ in 0..<blankCont {
  82. hexStr?.append("0")
  83. }
  84. }
  85. }else{
  86. if hexStr!.count < 64 {
  87. //补空格
  88. let completion = 64 - hexStr!.count
  89. let blankCont = completion / 2
  90. for _ in 0..<blankCont {
  91. hexStr?.append("00")
  92. }
  93. }
  94. }
  95. //32
  96. log.debug("g更新名字发送的数据 -- \(hexStr!)")
  97. let strCount = String(format: "%04X", hexStr!.count)
  98. let byteCount = String(format: "%02X", hexStr!.count * 2)
  99. // let cmd = "FF100049" + "0020" + "40" + hexStr!
  100. var arr = [String]()
  101. for i in 0..<8 {
  102. let subHexStr = hexStr?.subString(start: i * 8, length: 8)
  103. let cmd = "FF1000" + String(format: "%02X", 73 + 4 * i ) + "0004" + "08" + subHexStr!
  104. log.debug("指令集 - \(cmd)")
  105. arr.append(cmd)
  106. }
  107. //updateDeviceName(hexStr!)
  108. BabyBluetoothSwift.shareInstance()?.writeData2222(arr, completionHandler: { (result) in
  109. self.dismiss()
  110. HUD.flash(.progress)
  111. })
  112. // self.perform(#selector(read_DeviceName), with: nil, afterDelay: 2)
  113. }
  114. @objc func read_DeviceName() {
  115. BabyBluetoothSwift.shareInstance()?.writeData2222(["FF0300490020"], completionHandler: { (result) in
  116. self.readdata_0049(result!["FF0300490020"] as! String)
  117. HUD.flash(.success, delay: 1)
  118. UIView.animate(withDuration: 0.25) {
  119. if self.updateCallback != nil{
  120. self.updateCallback!(self.devicenameTextfield.text!)
  121. }
  122. }
  123. })
  124. }
  125. //允许大小写或数字(限字数)
  126. func inputNumberOrLetters(_ name: String) -> Bool {
  127. let userNameRegex = "^[A-Za-z0-9]{6,16}+$"
  128. let userNamePredicate = NSPredicate(format: "SELF MATCHES %@", userNameRegex)
  129. let inputString = userNamePredicate.evaluate(with: name)
  130. return inputString
  131. }
  132. override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
  133. // dismiss()
  134. }
  135. }
  136. extension SBTUpateDeviceNameVCtr{
  137. func readdata_0049(_ reciveData : String){
  138. let str0 = reciveData
  139. log.debug("处理真实数据 - \(str0)")
  140. var productName : String = ""
  141. var num5 = UUUtils.string(fromHexString: str0.subString(start: 7 , length: str0.count - 12))
  142. log.debug("要解析的十六进制 \( str0.subString(start: 7 , length: str0.count - 12))")
  143. num5 = num5?.trimmingCharacters(in: .whitespaces) //过滤开头结尾空白
  144. log.debug("设备名称 \(num5)")
  145. //f16d33 575578 e565b 065fd8 0906ed179
  146. if num5 == nil || num5 == "" {
  147. let ChineseString = UUUtils.deUnicodeString(fromHexString: str0.subString(start: 7 , length: str0.count - 12))
  148. log.debug("设备中文名称 \(ChineseString!)")
  149. productName = ChineseString!
  150. }else{
  151. productName = "\(num5!)"
  152. }
  153. let dict = ["productName":productName]
  154. NotificationCenter.default.post(name: NSNotification.Name(KNotificationUpadateNameChange), object: nil, userInfo: dict)
  155. }
  156. func createUI() {
  157. DeviceNameLabel.text = "Device_name".da_localizedStr()
  158. placeHolder.text = "Please_enter_a_device_name".da_localizedStr()
  159. backLabel.text = "Back".da_localizedStr()
  160. saveBtn.setTitle("Save".da_localizedStr(), for: .normal)
  161. self.textBox.layer.masksToBounds = true
  162. self.textBox.layer.cornerRadius = 5
  163. self.textBox.layer.borderColor = UIColor(hexString: "#C6C6C6")?.cgColor
  164. self.textBox.layer.borderWidth = 1
  165. devicenameTextfield.clearButtonMode = .always
  166. devicenameTextfield.delegate = self;
  167. self.box.layer.masksToBounds = true
  168. self.box.layer.cornerRadius = 5
  169. self.saveBtn.layer.masksToBounds = true
  170. self.saveBtn.layer.cornerRadius = 20
  171. let bgLayer1 = CAGradientLayer()
  172. 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]
  173. bgLayer1.locations = [0, 1]
  174. bgLayer1.frame = self.saveBtn.bounds
  175. bgLayer1.startPoint = CGPoint(x: 1, y: 1)
  176. bgLayer1.endPoint = CGPoint(x: 0, y: 0)
  177. self.saveBtn.layer.addSublayer(bgLayer1)
  178. self.backLabel.isUserInteractionEnabled = true
  179. let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction))
  180. self.backLabel.addGestureRecognizer(tap)
  181. }
  182. @objc func tapAction() {
  183. dismiss()
  184. }
  185. func textFieldDidEndEditing(_ textField: UITextField) {
  186. }
  187. func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
  188. if let text = textField.text,
  189. let textRange = Range(range, in: text) {
  190. let updatedText = text.replacingCharacters(in: textRange,
  191. with: string)
  192. log.debug("更新的输入 ---\(updatedText)")
  193. if updatedText.count > 32{
  194. g_toast("The_maximum_length_of_the_name_is_16_words.".da_localizedStr())
  195. return false
  196. }
  197. }
  198. return true
  199. }
  200. }