๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ก work work work/ios app development

demo - 13.2 : Control ๋ถ€๋ถ„ (์ฝ”๋”ฉ)

by hanwitjus 2022. 3. 22.

์–ด์ œ๋Š” UI ๋งŒ๋“ค์–ด๋†“๊ณ  ์˜ค๋Š˜์€ ์•ˆ๋“œ๋กœ์ด๋“œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  

ํ•จ์ˆ˜๋ถ€ํ„ฐ ์–ด๋А์ •๋„ ์ข€ ๊ตฌํ˜„์„ ํ•ด๋†จ๋‹ค.

 

์ž˜ ๋Œ์•„๊ฐ€๋Š”์ง€๋Š” ํ™•์ธ์„ ํ•ด๋ด์•ผํ•˜๋Š”๋ฐ

์ด์   ์ฌ๋”๋ณผํŠธ ํ—ˆ๋ธŒ๊นŒ์ง€ ๊ณ ์žฅ๋‚˜์„œ...ใ…‹ใ…‹ใ…‹ 

๊ฑฐ์˜ 99.9%์˜ ํ™•๋ฅ ๋กœ ์•ˆ๋Œ์•„๊ฐˆ๊ฒƒ ๊ฐ™์ง€๋งŒ ๊ตฌํ˜„์€ ํ•ด๋†”์„œ ๊ธฐ๋กํ•œ๋‹ค..

 

 /*
     Click Action ํ•จ์ˆ˜๋“ค
     */
    @IBAction func doorOpen(_ sender: Any) {
        let cmd = CConfig().REQUEST_DOOR_OPEN_CMD
        let data = CConfig().REQUEST_DOOR_OPEN
        
        open_push = true
        sendRequestData(cmd: cmd, data: data)
    }
    
    @IBAction func doorClose(_ sender: Any) {
        let cmd = CConfig().REQUEST_DOOR_CLOSE_CMD
        let data = CConfig().REQUEST_DOOR_CLOSE
        
        close_push = true
        sendRequestData(cmd: cmd, data: data)
        
    }
    
    @IBAction func carHorn(_ sender: Any) {
        let cmd = CConfig().REQUEST_PANIC_CMD
        let data = CConfig().REQUEST_PANIC
        
        horn_push = true
        sendRequestData(cmd: cmd, data: data)
    }
    
    @IBAction func disconnect(_ sender: Any) {
        serial.manager.cancelPeripheralConnection(connectedPeripheral)
    }
    
    @IBAction func masterDelete(_ sender: Any) {
        
        let cmd = CConfig().REQUEST_MASTER_INIT_CMD
        let data = CConfig().REQUEST_MASTER_INIT
        
        sendRequestData(cmd: cmd, data: data)
    }

 

์ผ๋‹จ ์–ด์ œ ๋งŒ๋“ค์–ด๋†จ๋˜ ๋ฒ„ํŠผ๋“ค์ด๋ž‘ ์—ฐ๊ฒฐํ•ด๋†“๊ณ  sendRequestData ํ•จ์ˆ˜๋กœ cmd ํŒจํ‚ท์ด๋ž‘ data ํŒจํ‚ท์„ ๋ณด๋‚ธ๋‹ค.

 

 

//์•”ํ˜ธํ™”ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ํ•จ์ˆ˜
    func sendRequestData(cmd: String, data: String){
        var sendDataByte: [UInt8] = []
        
        let encryptData = AESUtil.setAES128Encrypt(string: data)
        
        sendDataByte += cmd.bytes
        sendDataByte += encryptData.bytes
        
        serial.sendBytesToDevice(sendDataByte)
        
    }

ํ•จ์ˆ˜๋Š” ์ด๋ ‡๊ฒŒ ๋˜์–ด์žˆ๋‹ค. cmd๋Š” ์•”ํ˜ธํ™”๋ฅผ ์•ˆํ•˜๊ณ  data๋งŒ ์•”ํ˜ธํ™”๋ฅผ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ „๋‹ฌ๋ฐ›์•„์„œ

data๋งŒ ์•”ํ˜ธํ™”๋ฅผ ์‹œ์ผœ์„œ ์ตœ์ข… ๋ฐฐ์—ด์— ํ•ฉ์ณ์„œ ์ „๋‹ฌํ•œ๋‹ค.

 

 

์ „๋‹ฌํ•˜๊ณ  ๋‚˜์„œ ๊ธฐ๊ธฐ๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›์œผ๋ฉด ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์—์„œ ์•„๋ž˜์˜ ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ํ•˜๊ณ  

์•„๋ž˜์˜ ํ•จ์ˆ˜๋Š” response๋ฅผ ํ™•์ธํ•ด์„œ ์„ฑ๊ณต๊ณผ ์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค.

// ์‘๋‹ต์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„
    func decryptDataAndAction(response: [UInt8]){
        let decryptData = AESUtil.getAES128Decrypt(encoded: response.toBase64()).bytes
        
        if decryptData[0] == 0x21 && horn_push {
            if decryptData[1] == 0x01 { //success
                print("์„ฑ๊ณต")
            }
            else{ //fail
                print("์‹คํŒจ")
            }
            horn_push = false
            
        } else if decryptData[0] == 0x22 && open_push {
            if decryptData[1] == 0x01 { //success
                print("์„ฑ๊ณต")
            } else { //fail
                print("์‹คํŒจ")
            }
            
        } else if decryptData[0] == 0x23 && close_push {
            if decryptData[1] == 0x01 { //success
                print("์„ฑ๊ณต")
            }else{ //fail
                print("์‹คํŒจ")
            }
            close_push = false
        } else if decryptData[0] == 0x24 { //master init
            if decryptData[1] == 0x01 && decryptData[2] == 0x0F {
                print("๋งˆ์Šคํ„ฐ ๋“ฑ๋กํ•ด์ œ๋ฅผ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.")
            } else if decryptData[1] == 0x02 && decryptData[2] == 0x0F {
                print("๋งˆ์Šคํ„ฐ ๋“ฑ๋กํ•ด์ œ๋ฅผ ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค.")
            }
        }
    }

 

์ง€๊ธˆ์€ ๊ทธ๋ƒฅ ํ”„๋ฆฐํŠธ๋ฌธ์œผ๋กœ ํ•ด๋†จ๋Š”๋ฐ alert์œผ๋กœ ๋ฐ”๊พธ๋“ ์ง€ ํ•ด์•ผ๊ฒ ๋‹ค.

 

 

 

 

LIST

๋Œ“๊ธ€