Compare commits

...

3 Commits

Author SHA1 Message Date
YiChin 3201dada39 TODO: use new workMode as a struct 2020-09-01 18:03:38 +08:00
weiting2 c37b2157d6 attempt to use (void *active_mode) instead of macro CURRENT_MODE 2020-09-01 16:35:06 +08:00
weiting2 595396f7a9 elite with event handle structure 2020-08-31 18:34:19 +08:00
7 changed files with 187 additions and 11 deletions
@@ -0,0 +1,62 @@
#ifndef ELITE_MACRO_MODE
#define ELITE_MACRO_MODE
static void define_mode_macro(){
#ifndef CURRENT_MODE
switch (INSTRUCTION.eliteFxn) {
case IT_CURVE:{
#define CURRENT_MODE WorkModeData->IT
break;
}
case VT_CURVE:{
#define CURRENT_MODE WorkModeData->VT
break;
}
case ZT_CURVE:{
#define CURRENT_MODE WorkModeData->RT
break;
}
case IV_CURVE:{
#define CURRENT_MODE WorkModeData->IV
break;
}
case CV_CURVE:{
#define CURRENT_MODE WorkModeData->CV
break;
}
case CONSTANT_CURRENT:{
#define CURRENT_MODE WorkModeData->CC
break;
}
case CYCLIC_VOLTAMMETRY:{
#define CURRENT_MODE WorkModeData->CV3
break;
}
case LINEAR_SWEEP_VOLTAMMETRY:{
#define CURRENT_MODE WorkModeData->LSV
break;
}
case CONSTANT_VSCAN:{
#define CURRENT_MODE WorkModeData->CVSCAN
break;
}
default: {
#define CURRENT_MODE NULL
break;
}
}
#else
#error "CURRENT_MODE has already been defined"
#endif
}
static void undefine_mode_macro(){
#ifndef CURRENT_MODE
#error "CURRENT_MODE has NOT been defined"
#else
#undef CURRENT_MODE
#endif
}
#endif
@@ -0,0 +1,52 @@
#ifndef ELITE_EVENT_H
#define ELITE_EVENT_H
/** event */
#define EVT_KEY_DETECT 0x0001
#define EVT_LED_CHANGE 0x0002
#define EVT_CREATE_MODE 0x0004
#define EVT_FREE_MODE 0x0008
#define EVT_MODE_ACTIVE 0x0010
#define EVT_RESERVED0 0x0020
#define EVT_RESERVED1 0x0040
static uint16_t elite_event = 0x0000;
/**
* test event [flag] has been enabled.
*/
#define flag_mask(flag) ((elite_event & (flag)) != 0)
/**
* enable event [flag].
*/
#define flag_enable(flag) \
do { \
uint8 __key = Hwi_disable(); \
elite_event |= (uint16_t)(flag); \
Hwi_restore(__key); \
} while (0)
/**
* disable event [flag].
*/
#define flag_disable(flag) \
do { \
uint8 __key = Hwi_disable(); \
elite_event &= ~((uint16_t)(flag)); \
Hwi_restore(__key); \
} while (0)
/**
* fire a event with [flag].
*/
#define flag_notify(flag) \
do { \
uint8 __key = Hwi_disable(); \
elite_event |= (uint16_t)(flag); \
Hwi_restore(__key); \
Semaphore_post(semaphore); \
} while (0)
#endif
@@ -0,0 +1,44 @@
#ifndef ELITE_EVENT_HANDLE_H
#define ELITE_EVENT_HANDLE_H
#include "Elite_event.h"
#include "EliteKeyDetect.h"
static void elite_event_handle(WorkMode *WorkModeData){
if (flag_mask(EVT_KEY_DETECT)) {
flag_disable(EVT_KEY_DETECT);
uint8_t key = PIN_getInputValue(switch_on);
// elite_key_handle(key);
}
if (flag_mask(EVT_LED_CHANGE)) {
flag_disable(EVT_LED_CHANGE);
// elite_led_handle();
}
if(flag_mask(EVT_CREATE_MODE)){
flag_disable(EVT_CREATE_MODE);
InitWorkMode(WorkModeData);
}
if(flag_mask(EVT_FREE_MODE)){
flag_disable(EVT_FREE_MODE);
FreeWorkMode(WorkModeData);
InitEliteInstruction();
IinADCGainControl(INSTRUCTION.ADCGainLevel);
DAC_outputV(Usercode_Correction_to_DAC(INSTRUCTION.VoutGainLevel, INSTRUCTION.VoltConstant));
}
if (flag_mask(EVT_MODE_ACTIVE)) {
flag_disable(EVT_MODE_ACTIVE);
SimpleBLEPeripheral_performPeriodicTask(WorkModeData);
}
if (flag_mask(EVT_UPDATE_WORK_MODE)) {
flag_disable(EVT_UPDATE_WORK_MODE);
update_work_mode_handle(WorkModeData);
}
}
#endif
@@ -105,41 +105,52 @@ static void DACenable(WorkMode *WorkModeData, int32_t VoltData ,uint8_t afterRea
}
static void CC_Plot(WorkMode *WorkModeData){
void *active_mode;
switch (INSTRUCTION.eliteFxn) {
case IT_CURVE:{
#define CURRENT_MODE WorkModeData->IT
active_mode = WorkModeData->IT;
break;
}
case VT_CURVE:{
#define CURRENT_MODE WorkModeData->VT
active_mode = WorkModeData->VT;
break;
}
case ZT_CURVE:{
#define CURRENT_MODE WorkModeData->RT
active_mode = WorkModeData->RT;
break;
}
case IV_CURVE:{
#define CURRENT_MODE WorkModeData->IV
active_mode = WorkModeData->IV;
break;
}
case CV_CURVE:{
#define CURRENT_MODE WorkModeData->CV
active_mode = WorkModeData->CV;
break;
}
case CONSTANT_CURRENT:{
#define CURRENT_MODE WorkModeData->CC
active_mode = WorkModeData->CC;
break;
}
case CYCLIC_VOLTAMMETRY:{
#define CURRENT_MODE WorkModeData->CV3
active_mode = WorkModeData->CV3;
break;
}
case LINEAR_SWEEP_VOLTAMMETRY:{
#define CURRENT_MODE WorkModeData->LSV
active_mode = WorkModeData->LSV;
break;
}
case CONSTANT_VSCAN:{
#define CURRENT_MODE WorkModeData->CVSCAN
active_mode = NULL;
break;
}
default: {
@@ -147,6 +158,8 @@ static void CC_Plot(WorkMode *WorkModeData){
}
}
static uint8_t ADCSwitch = 0;
static uint8_t BatSwitch = 0;
static int32_t VoltData = 0;
@@ -163,7 +176,7 @@ static void CC_Plot(WorkMode *WorkModeData){
recordCount = 0;
}
}else{
InputNotify(NOTIFY_CURRENT, CURRENT_MODE->_measureCurrent);
InputNotify(NOTIFY_CURRENT, ()active_mode->_measureCurrent);
}
DACenable(WorkModeData, VoltData, AFTER_READ_I);
@@ -3,13 +3,13 @@
#define VERSION_DATE
#define VERSION_DATE_YEAR 20
#define VERSION_DATE_MONTH 8
#define VERSION_DATE_DAY 28
#define VERSION_DATE_HOUR 13
#define VERSION_DATE_MINUTE 30
#define VERSION_DATE_MONTH 9
#define VERSION_DATE_DAY 1
#define VERSION_DATE_HOUR 16
#define VERSION_DATE_MINUTE 34
// this is NOT the version hash !!
// it's the last version hash
#define VERSION_HASH 8808490caa465cc94d14896de28763a5e5c4672b
#define VERSION_GIT_BRANCH Elite_OBJ_0.2mv
#define VERSION_HASH 595396f7a92da182e8bcfd3ab0b59693f7590e04
#define VERSION_GIT_BRANCH Elite1.5_developement_EventHandle
#endif
@@ -33,7 +33,8 @@ static void SimpleBLEPeripheral_clockHandler(UArg arg) {
}
static void elite_gptimer_callback(GPTimerCC26XX_Handle handle, GPTimerCC26XX_IntMask interruptMask) {
events |= SBP_PERIODIC_EVT;
// events |= SBP_PERIODIC_EVT;
// events |= EVT_KEY_DETECT;
Semaphore_post(semaphore);
GPT.GptimerCounter++;
}
@@ -174,10 +174,10 @@
#ifndef RTOSPARA
#define RTOSPARA
#define SBP_STATE_CHANGE_EVT 0x0001
#define SBP_CHAR_CHANGE_EVT 0x0002
#define SBP_PERIODIC_EVT 0x0004
#define SBP_CHAR_CHANGE_EVT 0x0002
#define SBP_PERIODIC_EVT 0x0004
#define SBP_CONN_EVT_END_EVT 0x0008
#define SBP_KEY_CHANGE_EVT 0x0010
#define SBP_KEY_CHANGE_EVT 0x0010
#endif
// data length extension parameter
@@ -652,6 +652,10 @@ static void SimpleBLEPeripheral_taskFxn(UArg a0, UArg a1) {
}
}
// if(elite_event > 0){
// elite_event_handle(WorkModeData);
// }
#ifdef FEATURE_OAD
while (!Queue_empty(hOadQ)) {
oadTargetWrite_t *oadWriteEvt = Queue_get(hOadQ);