/** * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * 2. Redistributions in binary form, except as embedded into a Nordic * Semiconductor ASA integrated circuit in a product or a software update for * such product, must reproduce the above copyright notice, this list of * conditions and the following disclaimer in the documentation and/or other * materials provided with the distribution. * * 3. Neither the name of Nordic Semiconductor ASA nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * 4. This software, with or without modification, must only be used with a * Nordic Semiconductor ASA integrated circuit. * * 5. Any software provided in binary form under this license must not be reverse * engineered, decompiled, modified and/or disassembled. * * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #include #include #include "nrf_gpio.h" #include "our_service.h" #include "ble_srv_common.h" #include "app_error.h" #include "SEGGER_RTT.h" #include "board_gpi.h" #include "nrf_log.h" #include "sysmgr.h" char SvrRxBuffer[100]; int SvrRxBufferPos; char SvrEvent; stSystemTimer SystemTimer; stSystemManager SystemManager; char SvrSendBuff[50]; void delete_all_begin(void); void USART_DataCheck() { if( SystemTimer.UART_LAST_RECV_TIMER > 10 && SystemManager.RxValild ) { SvrRxBuffer[SvrRxBufferPos] = 0; //printf("[%d]%s\r\n", SvrRxBufferPos, SvrRxBuffer); SystemManager.RxValild = 0; if( SvrRxBufferPos == 20 ) { SystemManager.RxEvent = 1; } SvrRxBufferPos = 0; } if( SystemTimer.UART_LAST_RECV_TIMER > 10 && SvrRxBufferPos ) { SystemManager.RxValild = 0; SvrRxBufferPos = 0; } } void USART_Handler(void) { char ch; //SystemTimer.UART1_LAST_RECV_TIMER = 0; uint8_t cr; if( app_uart_get(&cr) == NRF_SUCCESS ) { SystemManager.RxValild = 1; SvrRxBuffer[SvrRxBufferPos++] = cr; SvrRxBufferPos %= 100; SystemTimer.UART_LAST_RECV_TIMER = 0; } } #define COM_TYPE_SVR_NORMAL 0x02 #define COM_TYPE_SVR_TALKING 0x03 #define COM_TYPE_SVR_DISCON 0x04 #define COM_TYPE_SVR_BUSY 0x05 #define COM_TYPE_SVR_ALIVE 0x06 #define COM_TYPE_SVR_MIC 0x07 #define COM_TYPE_SVR_RECV_REG 0x08 #define COM_TYPE_SVR_RECV_INIT 0x0a #define COM_TYPE_SVR_RECV_LIST 0x0c #define COM_TYPE_SVR_VER_REQ 0x10 #define COM_TYPE_SVR_CALL_REQ 0x12 void Server_Call_Request() { NRF_LOG_INFO("Server_Call_Request"); if( SystemManager.ServerCon == 0) { SystemManager.LedBlinkRun = 1; SystemManager.LedBlinkTimer = 5000; SystemTimer.LED_TOGGLE_TIMER = 0; SystemManager.DevType = 0; SystemManager.SwitchOn = 1; PKBuzzerOn(); SendAck(COM_TYPE_SVR_CALL_REQ+1); } } void Server_Ver_Request() { NRF_LOG_INFO("Server_Ver_Request"); if( SystemManager.ServerCon == 0) { SystemManager.LedBlinkRun = COM_TYPE_SVR_VER_REQ; SystemManager.LedBlinkTimer = 1500; SystemTimer.LED_TOGGLE_TIMER = 0; SystemManager.DevType = 0; SvrSendBuff[0] = COM_STX; SvrSendBuff[1] = COM_TYPE_SVR; SvrSendBuff[2] = 0; SvrSendBuff[3] = COM_TYPE_SVR_VER_REQ+1; SvrSendBuff[4] = SystemManager.PeerAddr[3]; SvrSendBuff[5] = SystemManager.PeerAddr[4]; SvrSendBuff[6] = SystemManager.PeerAddr[5]; SvrSendBuff[7] = new_ble_addr.addr[3]; SvrSendBuff[8] = new_ble_addr.addr[4]; SvrSendBuff[9] = new_ble_addr.addr[5]; SvrSendBuff[10] = 8; SvrSendBuff[11] = 0; //ver SvrSendBuff[12] = 0x80; SvrSendBuff[13] = 0; SvrSendBuff[14] = 0; SvrSendBuff[15] = 0; SvrSendBuff[16] = 0; SvrSendBuff[17] = 0; SvrSendBuff[18] = 0; SvrSendBuff[19] = COM_ETX; NRF_LOG_INFO("SendEmergency==="); SendToEventServer(&SvrSendBuff[0], 20); SystemManager.SwitchOn = 1; PKBuzzerOn(); } } void ParseEventServer() { int i; if( SystemManager.RxEvent == 0 ) return; for( i=0; i<20; i++) { //printf("0x%02x ", SvrRxBuffer[i]); } //printf("\r\n"); SystemManager.RxEvent = 0; if(SvrRxBuffer[0] != 0x02) return; if( SvrRxBuffer[1] == COM_TYPE_SVR ) { if( SvrRxBuffer[3] == COM_TYPE_SVR_NORMAL ) { NRF_LOG_INFO("Recv : Normal"); PKLedOff(); PKBuzzerOff(); PKMicOff(); SystemManager.SwitchOn = 0; }else if( SvrRxBuffer[3] == COM_TYPE_SVR_TALKING ) { NRF_LOG_INFO("Recv : Talking"); PKLedOn(); PKBuzzerOff(); SystemManager.SwitchOn = 0; }else if( SvrRxBuffer[3] == COM_TYPE_SVR_DISCON ) { NRF_LOG_INFO("Recv : Disconnect"); SystemManager.SwitchOn = 0; //bsp_board_leds_off(); }else if( SvrRxBuffer[3] == COM_TYPE_SVR_BUSY ) { NRF_LOG_INFO("Recv : Busy"); }else if( SvrRxBuffer[3] == COM_TYPE_SVR_ALIVE ) { NRF_LOG_INFO("Recv : Keep Alive"); }else if( SvrRxBuffer[3] == COM_TYPE_SVR_MIC ) { NRF_LOG_INFO("Recv : mic on/off"); if( SvrRxBuffer[11] == 0 ) { NRF_LOG_INFO("mic off"); NRF_LOG_INFO("speaker off"); PKSpeakerOff(); PKMicOn(); PKBuzzerOff(); PKLedOn(); SystemManager.SwitchOn = 0; }else{ NRF_LOG_INFO("mic on"); NRF_LOG_INFO("speaker on"); PKMicOff(); PKSpeakerOn(); PKLedOn(); } } else if( SvrRxBuffer[3] == COM_TYPE_SVR_RECV_REG ) { NRF_LOG_INFO("Recv : COM_TYPE_SVR_RECV_REG"); SystemManager.LedBlinkRun = COM_TYPE_SVR_RECV_REG; SystemManager.RegRequst = 1; SendAck(COM_TYPE_SVR_RECV_REG+1); SystemTimer.DEV_REG_TIMER = 0; }else if( SvrRxBuffer[3] == COM_TYPE_SVR_RECV_INIT ) { SystemManager.SwitchOn = 1; //PKBuzzerOn(); SystemManager.LedBlinkRun = COM_TYPE_SVR_RECV_INIT; SystemManager.LedBlinkTimer = 2500; SystemTimer.LED_TOGGLE_TIMER = 0; NRF_LOG_INFO("Recv : COM_TYPE_SVR_RECV_INIT"); SendAck(COM_TYPE_SVR_RECV_INIT+1); //for( i=0; i "); for( i=0; i= 60000 ) { SystemManager.RegRequst = 0; PKLedOff(); SystemManager.LedBlinkRun = 0; } } if( SystemManager.LedBlinkRun == COM_TYPE_SVR_RECV_REG ) { PKLedOn(); return; } if( SystemManager.LedBlinkRun == COM_TYPE_SVR_RECV_REG+1 ) { if( SystemManager.RegRequst == 1 ) { if( SystemManager.LedBlinkTimer < 0 ) { SystemManager.LedBlinkRun = COM_TYPE_SVR_RECV_REG; PKLedOn(); return; } } if( SystemTimer.LED_TOGGLE_TIMER < 500 ) return; SystemTimer.LED_TOGGLE_TIMER = 0; if( toggle++&0x01) { PKLedOn(); }else{ PKLedOff(); } } if( SystemManager.LedBlinkRun == COM_TYPE_SVR_PARKING ) { if( SystemManager.LedBlinkTimer < 0 ) { SystemManager.LedBlinkRun = 0; PKLedOff(); return; } if( SystemTimer.LED_TOGGLE_TIMER < 500 ) return; SystemTimer.LED_TOGGLE_TIMER = 0; if( toggle++&0x01) { PKLedOn(); }else{ PKLedOff(); } } if( SystemManager.LedBlinkRun == COM_TYPE_SVR_RECV_INIT ) { if( SystemManager.LedBlinkTimer < 0 ) { SystemManager.LedBlinkRun = 0; PKLedOff(); return; } if( SystemTimer.LED_TOGGLE_TIMER < 500 ) return; SystemTimer.LED_TOGGLE_TIMER = 0; if( toggle++&0x01) { PKLedOn(); }else{ PKLedOff(); } } if( SystemManager.LedBlinkRun == COM_TYPE_SVR_RECV_LIST || SystemManager.LedBlinkRun == COM_TYPE_SVR_VER_REQ) { if( SystemManager.LedBlinkTimer < 0 ) { SystemManager.LedBlinkRun = 0; PKLedOff(); return; } if( SystemTimer.LED_TOGGLE_TIMER < 500 ) return; SystemTimer.LED_TOGGLE_TIMER = 0; if( toggle++&0x01) { PKLedOn(); }else{ PKLedOff(); } } if( SystemManager.LedBlinkRun == COM_TYPE_SVR_ALIVE ) { if( SystemManager.LedBlinkTimer < 0 ) { SystemManager.LedBlinkRun = 0; PKLedOff(); PKBuzzerOff(); return; } if( SystemTimer.LED_TOGGLE_TIMER < 500 ) return; SystemTimer.LED_TOGGLE_TIMER = 0; if( toggle++&0x01) { PKLedOn(); }else{ PKLedOff(); } } if( SystemManager.SwitchOn == 0 ) return; if( SystemManager.LedBlinkRun == 0 ) return; #if 0 if( SystemManager.LedBlinkTimer < 0 ) { SystemManager.LedBlinkRun = 0; PKLedOff(); return; } #endif if( SystemTimer.LED_TOGGLE_TIMER < 500 ) return; SystemTimer.LED_TOGGLE_TIMER = 0; if( toggle++&0x01) { PKLedOn(); }else{ PKLedOff(); } }