|
@@ -0,0 +1,348 @@
|
|
|
+#include "usr_config.h"
|
|
|
+#include "bsp_time.h"
|
|
|
+#include "selfcheck.h"
|
|
|
+#include "system.h"
|
|
|
+#include "nrf_gpio.h"
|
|
|
+#include "app_charge.h"
|
|
|
+#include "app_flash.h"
|
|
|
+#include "ble_comm.h"
|
|
|
+#include "bsp_adc.h"
|
|
|
+#include "app_pair_chargerpin.h"
|
|
|
+#include "app_chargerpin_conn_detect.h"
|
|
|
+#include "hal_led.h"
|
|
|
+#include "hal_charge.h"
|
|
|
+#include "hal_mt.h"
|
|
|
+#include "app_one_wire.h"
|
|
|
+//==========================================================================
|
|
|
+char open=0;
|
|
|
+static uint8_t leddisplay_count = 0;
|
|
|
+void pair_led_pcs(void)
|
|
|
+{
|
|
|
+ leddisplay_count++;
|
|
|
+ if (leddisplay_count % 2 == 0)
|
|
|
+ {
|
|
|
+ LED_Start(LED_PAIR, COLOR_BLACK);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LED_Start(LED_PAIR, COLOR_WHITE);
|
|
|
+ }
|
|
|
+ if (leddisplay_count > 20)
|
|
|
+ {
|
|
|
+ leddisplay_count = 0;
|
|
|
+ LED_Stop(LED_PAIR);
|
|
|
+ Process_SetHoldOn(pair_led_pcs, 0);
|
|
|
+ Process_Stop(pair_led_pcs);
|
|
|
+ }
|
|
|
+}
|
|
|
+extern void close_white(void);
|
|
|
+void start_pair_led(void)
|
|
|
+{
|
|
|
+ close_white();
|
|
|
+ leddisplay_count = 0;
|
|
|
+ Process_Start(500, "pair_led_pcs", pair_led_pcs);
|
|
|
+ Process_SetHoldOn(pair_led_pcs, 1);
|
|
|
+}
|
|
|
+void stop_pair_led(void)
|
|
|
+{
|
|
|
+ if (leddisplay_count == 0)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Process_Stop(pair_led_pcs);
|
|
|
+ leddisplay_count = 0;
|
|
|
+ LED_Stop(LED_PAIR);
|
|
|
+}
|
|
|
+void open_white(void)
|
|
|
+{
|
|
|
+ LED_Start(LED_PAIR, COLOR_WHITE);
|
|
|
+
|
|
|
+ PAIR_CHARGERPIN_PRINT(" ======================open_white open_white============================= \n");
|
|
|
+ open=1;
|
|
|
+}
|
|
|
+
|
|
|
+void close_white(void)
|
|
|
+{
|
|
|
+ open=0;
|
|
|
+ LED_Stop(LED_PAIR);
|
|
|
+}
|
|
|
+char white_isopen(void)
|
|
|
+{
|
|
|
+ return open;
|
|
|
+}
|
|
|
+
|
|
|
+void r_led_start(void)
|
|
|
+{
|
|
|
+ stop_pair_led();
|
|
|
+ open_white();
|
|
|
+}
|
|
|
+PAIR_START_REGISTER(r_led_start);
|
|
|
+
|
|
|
+void r_led_done(void)
|
|
|
+{
|
|
|
+ if(leddisplay_count!=0)open=0;
|
|
|
+ else close_white();
|
|
|
+}
|
|
|
+PAIR_DONE_REGISTER(r_led_done);
|
|
|
+//===========================================================================================
|
|
|
+
|
|
|
+//写配对相关的flish
|
|
|
+static int pair_writeflish(unsigned char *macAddr_L, unsigned char *macAddr_R)
|
|
|
+{
|
|
|
+ uint8_t offest = 0;
|
|
|
+ if (mFlash.isHost)
|
|
|
+ {
|
|
|
+ offest = 3;
|
|
|
+ }
|
|
|
+ if (memcmp(macAddr_R, mFlash.mClient.macAddr + offest, 3) != 0)
|
|
|
+ {
|
|
|
+ goto writein;
|
|
|
+ }
|
|
|
+ if (mFlash.mClient.isConfig != 'C')
|
|
|
+ {
|
|
|
+ goto writein;
|
|
|
+ }
|
|
|
+ PAIR_CHARGERPIN_PRINT("mFlash.mClient.isConfig:%X\n", mFlash.mClient.isConfig);
|
|
|
+ PAIR_CHARGERPIN_PRINT("mFlash.mClient.macAddr:%02X %02X %02X\n", mFlash.mClient.macAddr[0], mFlash.mClient.macAddr[1], mFlash.mClient.macAddr[2]);
|
|
|
+ PAIR_CHARGERPIN_PRINT("mFlash.macHost:%02X %02X %02X\n", mFlash.macHost[0], mFlash.macHost[1], mFlash.macHost[2]);
|
|
|
+ return 0;
|
|
|
+writein:
|
|
|
+ mFlash.mClient.isConfig = 'C';
|
|
|
+ uint8_t i = 0;
|
|
|
+ for (i = 0; i < 6; i++)
|
|
|
+ {
|
|
|
+ mFlash.macHost[i] = macAddr_L[i];
|
|
|
+ }
|
|
|
+ for (i = 0; i < 3; i++)
|
|
|
+ {
|
|
|
+ mFlash.mClient.macAddr[i + offest] = macAddr_R[i]; //从机自身mac地址
|
|
|
+ }
|
|
|
+ //保存数据到备份区域里面
|
|
|
+ for (i = 0; i < RecordMacAddrL; i++)
|
|
|
+ {
|
|
|
+ mBackup.macAddr_L[i] = mFlash.macHost[i]; //主机地址
|
|
|
+ mBackup.macAddr_R[i] = mFlash.mClient.macAddr[i]; //从机地址
|
|
|
+ }
|
|
|
+ mBackup.hardVersion = mFlash.mClient.hardVersion;
|
|
|
+ mBackup.sotfVersion = mFlash.mClient.sotfVersion;
|
|
|
+ mBackup.isConfig = mFlash.mClient.isConfig;
|
|
|
+ if (Flash_SaveBackup() != ZONE_OP_SUCCESS)
|
|
|
+ {
|
|
|
+ Except_TxError(EXCEPT_Pair, "pair save backup fail");
|
|
|
+ }
|
|
|
+ DEBUG_LOG("mFlash.mClient.isConfig:%X\n", mFlash.mClient.isConfig);
|
|
|
+ DEBUG_LOG("mFlash.mClient.macAddr:%02X %02X %02X\n", mFlash.mClient.macAddr[0], mFlash.mClient.macAddr[1], mFlash.mClient.macAddr[2]);
|
|
|
+ DEBUG_LOG("mFlash.macHost:%02X %02X %02X \n", mFlash.macHost[0], mFlash.macHost[1], mFlash.macHost[2]);
|
|
|
+ if (Flash_DeleteAllStep() != ZONE_OP_SUCCESS)
|
|
|
+ {
|
|
|
+ Except_TxError(EXCEPT_Pair, "pair clear step fail");
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ memset(&mFlash.mStep, 0, sizeof(FlashStep_t));
|
|
|
+ if (Flash_SaveInfomation() != ZONE_OP_SUCCESS)
|
|
|
+ {
|
|
|
+ Except_TxError(EXCEPT_Pair, "Flash_SaveInfomation fail");
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+static void load_adv_name_from_flish(void)
|
|
|
+{
|
|
|
+ char buf[16];
|
|
|
+ memset(buf, 0, sizeof(buf));
|
|
|
+ advertising_stop();
|
|
|
+ sprintf(buf, "%02X%02X%02X%02X%02X%02X", mFlash.mClient.macAddr[0], mFlash.mClient.macAddr[1], mFlash.mClient.macAddr[2], mFlash.macHost[3], mFlash.macHost[4], mFlash.macHost[5]);
|
|
|
+ DEBUG_LOG("advName(%d):%s\n", strlen(buf), buf);
|
|
|
+ slave_set_adv_name(buf, strlen(buf));
|
|
|
+ slave_adv_init();
|
|
|
+}
|
|
|
+
|
|
|
+static void load_scan_name_from_flish(void)
|
|
|
+{
|
|
|
+ char buf[16];
|
|
|
+ memset(buf, 0, sizeof(buf));
|
|
|
+ sprintf(buf, "%02X%02X%02X%02X%02X%02X", mFlash.macHost[0], mFlash.macHost[1], mFlash.macHost[2], mFlash.mClient.macAddr[3], mFlash.mClient.macAddr[4], mFlash.mClient.macAddr[5]);
|
|
|
+ DEBUG_LOG("scanName1(%d):%s\n", strlen(buf), buf);
|
|
|
+ host_set_scan_name(buf, strlen(buf));
|
|
|
+}
|
|
|
+static unsigned char reconnect_pcs_status = 0;
|
|
|
+static void reconnect_pcs(void)
|
|
|
+{
|
|
|
+ switch (reconnect_pcs_status)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ if (mFlash.isHost)
|
|
|
+ {
|
|
|
+ reconnect_pcs_status = 1;
|
|
|
+ if (host_isconnect() == 1)
|
|
|
+ {
|
|
|
+ host_disconnect();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ reconnect_pcs_status = 2;
|
|
|
+ if (slave_isconnect() == 1)
|
|
|
+ {
|
|
|
+ slave_disconnect();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ if (host_isconnect() == 0)
|
|
|
+ {
|
|
|
+ load_scan_name_from_flish();
|
|
|
+ scan_start();
|
|
|
+ reconnect_pcs_status = 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ if (slave_isconnect() == 0)
|
|
|
+ {
|
|
|
+ load_adv_name_from_flish();
|
|
|
+ advertising_start();
|
|
|
+ reconnect_pcs_status = 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ Process_SetHoldOn(reconnect_pcs, 0);
|
|
|
+ Process_Stop(reconnect_pcs);
|
|
|
+ reconnect_pcs_status = 5;
|
|
|
+
|
|
|
+ start_pair_led();
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|
|
|
+//===========================================================================================================
|
|
|
+extern void app_pair_chargerpin_pcs(void);
|
|
|
+void delsiflash(void)
|
|
|
+{
|
|
|
+ app_pair_chargerpin_pcs();
|
|
|
+ Process_Stop(delsiflash);
|
|
|
+}
|
|
|
+__IO static char writefig=0;
|
|
|
+unsigned char *savebuf;
|
|
|
+void sucess_ev_cb(unsigned char *buf,int len)
|
|
|
+{
|
|
|
+ writefig=1;
|
|
|
+ savebuf=buf;
|
|
|
+ PAIR_CHARGERPIN_PRINT(" ======================PAIR SUCCESS============================= \n");
|
|
|
+ Process_Start(10, "delsiflash", delsiflash);
|
|
|
+}
|
|
|
+void app_pair_chargerpin_pcs(void)
|
|
|
+{
|
|
|
+ int rev = 0;
|
|
|
+ if (writefig == 1)
|
|
|
+ {
|
|
|
+ unsigned char Lbuff[6];
|
|
|
+ unsigned char Rbuff[3];
|
|
|
+ Get_MACaddr(Lbuff);
|
|
|
+ Rbuff[0] = savebuf[0];
|
|
|
+ Rbuff[1] = savebuf[1];
|
|
|
+ Rbuff[2] = savebuf[2];
|
|
|
+ rev = pair_writeflish(Lbuff, Rbuff);
|
|
|
+ if (rev)
|
|
|
+ {
|
|
|
+ Process_Start(10, "reconnect_pcs", reconnect_pcs);
|
|
|
+ Process_SetHoldOn(reconnect_pcs, 1);
|
|
|
+ reconnect_pcs_status = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ start_pair_led();
|
|
|
+ }
|
|
|
+ writefig = 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+//======================================================================
|
|
|
+void pair_start_pcs(void)
|
|
|
+{
|
|
|
+ extern void *pair_start$$Base;
|
|
|
+ extern void *pair_start$$Limit;
|
|
|
+ typedef void (*main_init_t)(void);
|
|
|
+ for (int p = (unsigned int)&pair_start$$Base; p < (unsigned int)&pair_start$$Limit; p += 4)
|
|
|
+ {
|
|
|
+ (*(main_init_t *)p)();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void pair_done_pcs(void)
|
|
|
+{
|
|
|
+ extern void *pair_done$$Base;
|
|
|
+ extern void *pair_done$$Limit;
|
|
|
+ typedef void (*main_init_t)(void);
|
|
|
+ for (int p = (unsigned int)&pair_done$$Base; p < (unsigned int)&pair_done$$Limit; p += 4)
|
|
|
+ {
|
|
|
+ (*(main_init_t *)p)();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//=================================================================================================
|
|
|
+void send_start(void)
|
|
|
+{
|
|
|
+#define DELAY_PAIR_COUNT 100
|
|
|
+ static unsigned int delay_pair_count=0;
|
|
|
+ static char status=0;
|
|
|
+ switch(status)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ delay_pair_count=TIME_GetTicks();
|
|
|
+ Process_Start(1, "send_start", send_start);
|
|
|
+ Process_SetHoldOn(send_start, 1);
|
|
|
+ status=2;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ if(nrf_gpio_pin_read(PIN_CHARGING)==0)
|
|
|
+ {
|
|
|
+ PAIR_CHARGERPIN_PRINT(" ==============================nrf_gpio_pin_read(PIN_CHARGING)==0 \n");
|
|
|
+ status=3;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ if (TIME_GetTicks() - delay_pair_count > DELAY_PAIR_COUNT)
|
|
|
+ {
|
|
|
+ delay_pair_count = TIME_GetTicks();
|
|
|
+ nrf_gpio_pin_set(PIN_CHARGING);
|
|
|
+ PAIR_CHARGERPIN_PRINT(" SEND PAIR TAG HIG; %d \n", TIME_GetTicks());
|
|
|
+ status = 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ if (TIME_GetTicks() - delay_pair_count > (DELAY_PAIR_COUNT + 100))
|
|
|
+ {
|
|
|
+ nrf_gpio_pin_clear(PIN_CHARGING);
|
|
|
+ PAIR_CHARGERPIN_PRINT(" SEND PAIR TAG LOW; %d \n", TIME_GetTicks());
|
|
|
+ status = 0;
|
|
|
+ Process_Stop(send_start);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void into_event(void)
|
|
|
+{
|
|
|
+ chargerpin_one_ms_init(sucess_ev_cb);
|
|
|
+ pair_start_pcs();
|
|
|
+ if(mFlash.isHost==1)
|
|
|
+ {
|
|
|
+ send_start();
|
|
|
+ }
|
|
|
+}
|
|
|
+void over_event(void)
|
|
|
+{
|
|
|
+ chargerpin_one_ms_uninit();
|
|
|
+ pair_done_pcs();
|
|
|
+}
|
|
|
+
|
|
|
+void app_pair_chargerpin_Init(void)
|
|
|
+{
|
|
|
+ check_callback_regist(selfcheck_trigger_callback);
|
|
|
+// mFlash.isHost=0;
|
|
|
+ if(mFlash.isHost!=HOST_SHOSE)
|
|
|
+ app_pair_client_init(into_event,over_event);
|
|
|
+ if(mFlash.isHost==HOST_SHOSE)
|
|
|
+ app_pair_host_init(into_event,over_event);
|
|
|
+}
|