pinebuds/config/_default_cfg_src_/app_status_ind.c
2023-02-20 11:30:10 +01:00

305 lines
7.8 KiB
C

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#include "app_status_ind.h"
#include "app_pwl.h"
#include "cmsis_os.h"
#include "hal_trace.h"
#include "stdbool.h"
#include "string.h"
static APP_STATUS_INDICATION_T app_status = APP_STATUS_INDICATION_NUM;
static APP_STATUS_INDICATION_T app_status_ind_filter =
APP_STATUS_INDICATION_NUM;
const char *app_status_indication_str[] = {
"[POWERON]",
"[INITIAL]",
"[PAGESCAN]",
"[POWEROFF]",
"[CHARGENEED]",
"[CHARGING]",
"[FULLCHARGE]",
/* repeatable status: */
"[BOTHSCAN]",
"[CONNECTING]",
"[CONNECTED]",
"[DISCONNECTED]",
"[CALLNUMBER]",
"[INCOMINGCALL]",
"[PAIRSUCCEED]",
"[PAIRFAIL]",
"[HANGUPCALL]",
"[REFUSECALL]",
"[ANSWERCALL]",
"[CLEARSUCCEED]",
"[CLEARFAIL]",
"[WARNING]",
"[ALEXA_START]",
"[ALEXA_STOP]",
"[GSOUND_MIC_OPEN]",
"[GSOUND_MIC_CLOSE]",
"[GSOUND_NC]",
"[INVALID]",
"[MUTE]",
"[TESTMODE]",
"[TESTMODE1]",
"[RING_WARNING]",
#ifdef __INTERACTION__
"[FINDME]",
#endif
"[MY_BUDS_FIND]",
"[TILE_FIND]",
};
const char *status2str(uint16_t status) {
const char *str = NULL;
if (status >= 0 && status < APP_STATUS_INDICATION_NUM) {
str = app_status_indication_str[status];
} else {
str = "[UNKNOWN]";
}
return str;
}
int app_status_indication_filter_set(APP_STATUS_INDICATION_T status) {
app_status_ind_filter = status;
return 0;
}
APP_STATUS_INDICATION_T app_status_indication_get(void) { return app_status; }
int app_status_indication_set(APP_STATUS_INDICATION_T status) {
struct APP_PWL_CFG_T cfg0;
struct APP_PWL_CFG_T cfg1;
if (app_status == status)
return 0;
if (app_status_ind_filter == status)
return 0;
TRACE(2, "%s %d", __func__, status);
app_status = status;
memset(&cfg0, 0, sizeof(struct APP_PWL_CFG_T));
memset(&cfg1, 0, sizeof(struct APP_PWL_CFG_T));
app_pwl_stop(APP_PWL_ID_0);
app_pwl_stop(APP_PWL_ID_1);
switch (status) {
case APP_STATUS_INDICATION_POWERON:
cfg0.part[0].level = 1;
cfg0.part[0].time = (3000);
cfg0.part[1].level = 0;
cfg0.part[1].time = (200);
cfg0.parttotal = 2;
cfg0.startlevel = 1;
cfg0.periodic = false;
app_pwl_setup(APP_PWL_ID_0, &cfg0);
app_pwl_start(APP_PWL_ID_0);
break;
case APP_STATUS_INDICATION_INITIAL:
break;
case APP_STATUS_INDICATION_PAGESCAN:
cfg0.part[0].level = 1;
cfg0.part[0].time = (300);
cfg0.part[1].level = 0;
cfg0.part[1].time = (8000);
cfg0.parttotal = 2;
cfg0.startlevel = 1;
cfg0.periodic = true;
app_pwl_setup(APP_PWL_ID_0, &cfg0);
app_pwl_start(APP_PWL_ID_0);
break;
case APP_STATUS_INDICATION_BOTHSCAN:
cfg0.part[0].level = 0;
cfg0.part[0].time = (300);
cfg0.part[1].level = 1;
cfg0.part[1].time = (300);
cfg0.parttotal = 2;
cfg0.startlevel = 0;
cfg0.periodic = true;
cfg1.part[0].level = 1;
cfg1.part[0].time = (300);
cfg1.part[1].level = 0;
cfg1.part[1].time = (300);
cfg1.parttotal = 2;
cfg1.startlevel = 1;
cfg1.periodic = true;
app_pwl_setup(APP_PWL_ID_0, &cfg0);
app_pwl_start(APP_PWL_ID_0);
app_pwl_setup(APP_PWL_ID_1, &cfg1);
app_pwl_start(APP_PWL_ID_1);
break;
case APP_STATUS_INDICATION_CONNECTING:
// LED's alternating Red/Blue
cfg0.part[0].level = 1;
cfg0.part[0].time = (300);
cfg0.part[1].level = 0;
cfg0.part[1].time = (300);
cfg0.parttotal = 2;
cfg0.startlevel = 0;
cfg0.periodic = true;
cfg1.part[0].level = 1;
cfg1.part[0].time = (300);
cfg1.part[1].level = 0;
cfg1.part[1].time = (300);
cfg1.parttotal = 2;
cfg1.startlevel = 1;
cfg1.periodic = true;
app_pwl_setup(APP_PWL_ID_0, &cfg0);
app_pwl_start(APP_PWL_ID_0);
app_pwl_setup(APP_PWL_ID_1, &cfg1);
app_pwl_start(APP_PWL_ID_1);
break;
case APP_STATUS_INDICATION_CONNECTED:
#ifdef DISABLE_CONNECTED_BLUE_LIGHT
cfg0.part[0].level = 0;
cfg0.part[0].time = (500);
cfg0.parttotal = 1;
cfg0.startlevel = 0;
cfg0.periodic = false;
app_pwl_setup(APP_PWL_ID_0, &cfg0);
app_pwl_start(APP_PWL_ID_0);
app_pwl_setup(APP_PWL_ID_1, &cfg0);
app_pwl_start(APP_PWL_ID_1);
#else
cfg0.part[0].level = 1;
cfg0.part[0].time = (500);
cfg0.part[1].level = 0;
cfg0.part[1].time = (3000);
cfg0.parttotal = 2;
cfg0.startlevel = 1;
cfg0.periodic = true;
cfg1.part[0].level = 0;
cfg1.part[0].time = (500);
cfg1.part[1].level = 0;
cfg1.part[1].time = (3000);
cfg1.parttotal = 2;
cfg1.startlevel = 0;
cfg1.periodic = true;
app_pwl_setup(APP_PWL_ID_0, &cfg0);
app_pwl_start(APP_PWL_ID_0);
app_pwl_setup(APP_PWL_ID_1, &cfg1);
app_pwl_start(APP_PWL_ID_1);
#endif
break;
case APP_STATUS_INDICATION_CHARGING:
cfg1.part[0].level = 1;
cfg1.part[0].time = (5000);
cfg1.parttotal = 1;
cfg1.startlevel = 1;
cfg1.periodic = true;
app_pwl_setup(APP_PWL_ID_1, &cfg1);
app_pwl_start(APP_PWL_ID_1);
break;
case APP_STATUS_INDICATION_FULLCHARGE:
cfg0.part[0].level = 0;
cfg0.part[0].time = (5000);
cfg0.parttotal = 1;
cfg0.startlevel = 1;
cfg0.periodic = false;
app_pwl_setup(APP_PWL_ID_0, &cfg0);
app_pwl_start(APP_PWL_ID_0);
app_pwl_setup(APP_PWL_ID_1, &cfg0);
app_pwl_start(APP_PWL_ID_1);
break;
case APP_STATUS_INDICATION_POWEROFF:
cfg1.part[0].level = 0;
cfg1.part[0].time = (100);
cfg1.parttotal = 1;
cfg1.startlevel = 1;
cfg1.periodic = false;
cfg0.part[0].level = 0;
cfg0.part[0].time = (100);
cfg0.parttotal = 1;
cfg0.startlevel = 1;
cfg0.periodic = false;
app_pwl_setup(APP_PWL_ID_1, &cfg1);
app_pwl_start(APP_PWL_ID_1);
app_pwl_setup(APP_PWL_ID_0, &cfg0);
app_pwl_start(APP_PWL_ID_0);
break;
case APP_STATUS_INDICATION_CHARGENEED:
cfg1.part[0].level = 1;
cfg1.part[0].time = (500);
cfg1.part[1].level = 0;
cfg1.part[1].time = (2000);
cfg1.parttotal = 2;
cfg1.startlevel = 1;
cfg1.periodic = true;
app_pwl_setup(APP_PWL_ID_1, &cfg1);
app_pwl_start(APP_PWL_ID_1);
break;
case APP_STATUS_INDICATION_TESTMODE:
cfg0.part[0].level = 0;
cfg0.part[0].time = (300);
cfg0.part[1].level = 1;
cfg0.part[1].time = (300);
cfg0.parttotal = 2;
cfg0.startlevel = 0;
cfg0.periodic = true;
cfg1.part[0].level = 0;
cfg1.part[0].time = (300);
cfg1.part[1].level = 1;
cfg1.part[1].time = (300);
cfg1.parttotal = 2;
cfg1.startlevel = 1;
cfg1.periodic = true;
app_pwl_setup(APP_PWL_ID_0, &cfg0);
app_pwl_start(APP_PWL_ID_0);
app_pwl_setup(APP_PWL_ID_1, &cfg1);
app_pwl_start(APP_PWL_ID_1);
break;
case APP_STATUS_INDICATION_TESTMODE1:
cfg0.part[0].level = 0;
cfg0.part[0].time = (1000);
cfg0.part[1].level = 1;
cfg0.part[1].time = (1000);
cfg0.parttotal = 2;
cfg0.startlevel = 0;
cfg0.periodic = true;
cfg1.part[0].level = 0;
cfg1.part[0].time = (1000);
cfg1.part[1].level = 1;
cfg1.part[1].time = (1000);
cfg1.parttotal = 2;
cfg1.startlevel = 1;
cfg1.periodic = true;
app_pwl_setup(APP_PWL_ID_0, &cfg0);
app_pwl_start(APP_PWL_ID_0);
app_pwl_setup(APP_PWL_ID_1, &cfg1);
app_pwl_start(APP_PWL_ID_1);
break;
default:
break;
}
return 0;
}