|
|
@ -16,6 +16,21 @@ |
|
|
|
#define TAG "main"
|
|
|
|
using namespace iflytop; |
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief |
|
|
|
* |
|
|
|
* |
|
|
|
* |
|
|
|
*/ |
|
|
|
|
|
|
|
// #define TEST_ID
|
|
|
|
// #define TEST_CAN
|
|
|
|
// #define TEST_TMC_MOTOR
|
|
|
|
// #define TEST_TMC_MOTOR_REF
|
|
|
|
// #define TEST_BLE_IF
|
|
|
|
// #define TEST_EEPROM
|
|
|
|
// #define TEST_TJC_SCREEN
|
|
|
|
|
|
|
|
static const char* zhex2str(uint8_t* data, size_t len) { |
|
|
|
static char buf[256]; |
|
|
|
memset(buf, 0, sizeof(buf)); |
|
|
@ -28,29 +43,8 @@ static const char* zhex2str(uint8_t* data, size_t len) { |
|
|
|
extern "C" { |
|
|
|
void umain() { AppCore::ins()->initialize(); } |
|
|
|
} |
|
|
|
static iflytop::ZGPIO debuglight; |
|
|
|
static bool errorFlag; |
|
|
|
|
|
|
|
void AppCore::debugLightLoop() { |
|
|
|
static bool light = false; |
|
|
|
static uint32_t lastcall = 0; |
|
|
|
|
|
|
|
if (errorFlag) { |
|
|
|
if (zos_haspassedms(lastcall) > 30) { |
|
|
|
light = !light; |
|
|
|
debuglight.write(light); |
|
|
|
lastcall = zos_get_tick(); |
|
|
|
} |
|
|
|
} else { |
|
|
|
if (zos_haspassedms(lastcall) > 300) { |
|
|
|
light = !light; |
|
|
|
debuglight.write(light); |
|
|
|
lastcall = zos_get_tick(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void AppCore::appsetup() { |
|
|
|
void AppCore::test() { |
|
|
|
osDelay(1000); |
|
|
|
/***********************************************************************************************************************
|
|
|
|
* INIT * |
|
|
@ -60,93 +54,235 @@ void AppCore::appsetup() { |
|
|
|
AppEventBus::ins()->initialize(); |
|
|
|
|
|
|
|
// 硬件初始化
|
|
|
|
ZCAN1::ins()->init(); |
|
|
|
ZCAN1::ins()->zcaninit(); |
|
|
|
AppHardware::ins()->initialize(); // 基础硬件初始化
|
|
|
|
|
|
|
|
// 配置初始化
|
|
|
|
ConfigService::ins()->initialize(); |
|
|
|
#ifdef TEST_ID
|
|
|
|
|
|
|
|
if (!AppHardware::ins()->isHardInitOk()) { |
|
|
|
FrontEndControler::ins()->initialize(); // 前端控制器,对屏幕的消息进行解析,发送消息给屏幕
|
|
|
|
FrontEndControler::ins()->startSchedule(); |
|
|
|
FrontEndControler::ins()->alertNoConfirm("设备异常:\r\n 存储异常,请尝试重新上电"); |
|
|
|
while (true) { |
|
|
|
osDelay(1); |
|
|
|
} |
|
|
|
while (true) { |
|
|
|
ID* id = &AppHardware::ins()->id; |
|
|
|
ZLOGI(TAG, "ID0:%d ID1:%d ID2:%d ID3:%d ID4:%d", //
|
|
|
|
id->ID0.read(), id->ID1.read(), id->ID2.read(), id->ID3.read(), id->ID4.read()); |
|
|
|
osDelay(1000); |
|
|
|
} |
|
|
|
|
|
|
|
// hardInit
|
|
|
|
AppHardware::ins()->initialize(); // 基础硬件初始化
|
|
|
|
RemoteControlerUpper::ins()->initialize(); // 遥控器初始化
|
|
|
|
FrontEndControler::ins()->initialize(); // 前端控制器,对屏幕的消息进行解析,发送消息给屏幕
|
|
|
|
ValveStateSyncService::ins()->initialize(ZCAN1::ins()); |
|
|
|
|
|
|
|
// BaseServiceInit
|
|
|
|
PUMPCS->initialize(); |
|
|
|
RemoteControlerStateSyncService::ins()->initialize(); |
|
|
|
|
|
|
|
// Page
|
|
|
|
Page_login::ins()->initialize(); //
|
|
|
|
Page_main::ins()->initialize(); //
|
|
|
|
Page_keybAcidCh::ins()->initialize(); |
|
|
|
Page_muAcidType::ins()->initialize(); |
|
|
|
Page_menu::ins()->initialize(); |
|
|
|
Page_muInterval::ins()->initialize(); |
|
|
|
Page_changePasswd::ins()->initialize(); |
|
|
|
Page_muSettings::ins()->initialize(); |
|
|
|
Page_muUsrMgr::ins()->initialize(); |
|
|
|
Page_muDeviceInfo::ins()->initialize(); |
|
|
|
// Page_muAudit::ins()->initialize();
|
|
|
|
Page_muPumpTest::ins()->initialize(); |
|
|
|
// EventProcesser
|
|
|
|
Page_muPumpSett::ins()->initialize(); |
|
|
|
Page_muBleHandSett::ins()->initialize(); |
|
|
|
Page_muMotorSett::ins()->initialize(); |
|
|
|
|
|
|
|
RemoteControlerEventProcesser::ins()->initialize(); |
|
|
|
/***********************************************************************************************************************
|
|
|
|
* REG_EVENT_HANDLER * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef TEST_CAN
|
|
|
|
//
|
|
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* START * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
FrontEndControler::ins()->startSchedule(); |
|
|
|
RCTRL->startSchedule(); |
|
|
|
RemoteControlerStateSyncService::ins()->startSync(); |
|
|
|
ValveStateSyncService::ins()->startSync(); |
|
|
|
ZCAN1::ins()->regOnCanMessage([this](zcanrx_t* rx) { //
|
|
|
|
ZLOGI(TAG, "zcanrx 0x%08x:%s", rx->extid, zhex2str(rx->rxpacket, rx->rkpacketlen)); |
|
|
|
}); |
|
|
|
|
|
|
|
while (true) { |
|
|
|
static uint8_t txdata[] = {0x12, 0x34, 0x56, 0x78, 0x12, 0x34, 0x56, 0x78}; |
|
|
|
ZCAN1::ins()->txMsg(0x33333333, (uint8_t*)txdata, 8, 1000); |
|
|
|
osDelay(1000); |
|
|
|
} |
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// dim
|
|
|
|
UIS->chpage(pg_login); |
|
|
|
#ifdef TEST_TMC_MOTOR
|
|
|
|
|
|
|
|
while (true) { |
|
|
|
AppHardware::ins()->MOTO1.rotate(800); |
|
|
|
osDelay(3000); |
|
|
|
AppHardware::ins()->MOTO2.rotate(800); |
|
|
|
osDelay(3000); |
|
|
|
AppHardware::ins()->MOTO3.rotate(800); |
|
|
|
osDelay(3000); |
|
|
|
AppHardware::ins()->MOTO4.rotate(800); |
|
|
|
osDelay(3000); |
|
|
|
AppHardware::ins()->MOTO1.rotate(0); |
|
|
|
AppHardware::ins()->MOTO2.rotate(0); |
|
|
|
AppHardware::ins()->MOTO3.rotate(0); |
|
|
|
AppHardware::ins()->MOTO4.rotate(0); |
|
|
|
osDelay(3000); |
|
|
|
} |
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef TEST_TMC_MOTOR_REF
|
|
|
|
|
|
|
|
auto* m1_ref_l = &AppHardware::ins()->MOTOR1_REF_L; |
|
|
|
auto* m1_ref_r = &AppHardware::ins()->MOTOR1_REF_R; |
|
|
|
auto* m2_ref_l = &AppHardware::ins()->MOTOR2_REF_L; |
|
|
|
auto* m2_ref_r = &AppHardware::ins()->MOTOR2_REF_R; |
|
|
|
auto* m3_ref_l = &AppHardware::ins()->MOTOR3_REF_L; |
|
|
|
auto* m3_ref_r = &AppHardware::ins()->MOTOR3_REF_R; |
|
|
|
auto* m4_ref_l = &AppHardware::ins()->MOTOR4_REF_L; |
|
|
|
auto* m4_ref_r = &AppHardware::ins()->MOTOR4_REF_R; |
|
|
|
|
|
|
|
while (true) { |
|
|
|
ZLOGI(TAG, "m1 r:%d l:%d , m2 r:%d l:%d , m3 r:%d l:%d , m4 r:%d l:%d", //
|
|
|
|
m1_ref_r->read(), m1_ref_l->read(), m2_ref_r->read(), m2_ref_l->read(), m3_ref_r->read(), m3_ref_l->read(), m4_ref_r->read(), m4_ref_l->read()); |
|
|
|
osDelay(1000); |
|
|
|
} |
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef TEST_BLE_IF
|
|
|
|
RCTRL->initialize(); |
|
|
|
RCTRL->startSchedule(); |
|
|
|
|
|
|
|
osDelay(100); |
|
|
|
CfgItermCache bleNameCache; |
|
|
|
const char* bleName = CS->getStr(kcfg_bleClientName, &bleNameCache); |
|
|
|
if (strlen(bleName) != 0) { |
|
|
|
ZLOGI(TAG, "start scan :%s", bleName); |
|
|
|
for (size_t i = 0;; i++) { |
|
|
|
if (i != 0) ZLOGI(TAG, "re start scan %s %d", bleName, i); |
|
|
|
bool suc = RCTRL->startScan(bleName, true); |
|
|
|
if (suc) break; |
|
|
|
} |
|
|
|
} else { |
|
|
|
ZLOGI(TAG, "start scan %s", "XXXXXXXXX"); |
|
|
|
for (size_t i = 0;; i++) { |
|
|
|
if (i != 0) ZLOGI(TAG, "re start scan %s %d", "XXXXXXXX", i); |
|
|
|
bool suc = RCTRL->startScan("XXXXXXXXX", false); // 输入一个错误的设备名,当作不扫描
|
|
|
|
if (suc) break; |
|
|
|
ZLOGI(TAG, "start scan :%s", BLENAME); |
|
|
|
for (size_t i = 0;; i++) { |
|
|
|
if (i != 0) ZLOGI(TAG, "re start scan %s %d", BLENAME, i); |
|
|
|
bool suc = RCTRL->startScan(BLENAME, true); |
|
|
|
if (suc) break; |
|
|
|
} |
|
|
|
RCTRL->regOnReport([this](uint8_t* rx, int32_t len) { |
|
|
|
zble_proto_packet_t* packet = (zble_proto_packet_t*)rx; |
|
|
|
if (packet->cmd == kzble_app_report_key_event) { |
|
|
|
int32_t keyEvent = *(int32_t*)packet->data; |
|
|
|
if (keyEvent == hand_acid_remoter_kevent_add_liquid) ZLOGI(TAG, "OnKey --> add_liquid"); |
|
|
|
if (keyEvent == hand_acid_remoter_kevent_change_next_mode) ZLOGI(TAG, "OnKey --> change_next_mode"); |
|
|
|
if (keyEvent == hand_acid_remoter_kevent_reflux) ZLOGI(TAG, "OnKey --> reflux"); |
|
|
|
if (keyEvent == hand_acid_remoter_kevent_preFilling) ZLOGI(TAG, "OnKey --> preFilling"); |
|
|
|
return; |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
while (true) { |
|
|
|
ZLOGI(TAG, "ble connect state %d", RCTRL->isConnected()); |
|
|
|
osDelay(1000); |
|
|
|
} |
|
|
|
|
|
|
|
#endif
|
|
|
|
#ifdef TEST_EEPROM
|
|
|
|
while (true) { |
|
|
|
// 扫描到 0x50 说明EEPROM在线
|
|
|
|
AppHardware::ins()->eeprom.scan_i2c(); |
|
|
|
osDelay(3000); |
|
|
|
} |
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef TEST_TJC_SCREEN_DOWNLOAD_MODE
|
|
|
|
AppHardware::ins()->setTJCScreenInDownloadMode(); |
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef TEST_TJC_SCREEN
|
|
|
|
while (true) { |
|
|
|
// 扫描到 0x50 说明EEPROM在线
|
|
|
|
uint8_t tx = 0x73; |
|
|
|
uint8_t rx = 0; |
|
|
|
bool suc = FrontEndControler::ins()->echo(tx, &rx); |
|
|
|
ZLOGI(TAG, "echo suc:%d tx:%x rx:%x", suc, tx, rx); |
|
|
|
|
|
|
|
osDelay(3000); |
|
|
|
} |
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
while (true) { |
|
|
|
// 测试陶晶驰屏幕串口,通信通道是否工作正常
|
|
|
|
// 1. 下发指令(准备一个专门的测试UI),每接收到一条指令,上报一条指令
|
|
|
|
//
|
|
|
|
|
|
|
|
// 测试陶晶驰屏幕串口,烧录通道是否工作正常(单独提供一个镜像)
|
|
|
|
// 1. 切换到烧录模式
|
|
|
|
// 2.
|
|
|
|
|
|
|
|
// RTC是否工作正常(测试掉电时间是否丢失)
|
|
|
|
// 读取RTC时间,并显示
|
|
|
|
|
|
|
|
// USB功能(是否能够识别到U盘),识别到U盘并触发事件,然后打印消息
|
|
|
|
// ?
|
|
|
|
//
|
|
|
|
|
|
|
|
// WIFI,功能模块,WIFI串口接收到数据,WIFI串口上报数据
|
|
|
|
// ?
|
|
|
|
//
|
|
|
|
} |
|
|
|
|
|
|
|
// // 配置初始化
|
|
|
|
// ConfigService::ins()->initialize();
|
|
|
|
|
|
|
|
// if (!AppHardware::ins()->isHardInitOk()) {
|
|
|
|
// FrontEndControler::ins()->initialize(); // 前端控制器,对屏幕的消息进行解析,发送消息给屏幕
|
|
|
|
// FrontEndControler::ins()->startSchedule();
|
|
|
|
// FrontEndControler::ins()->alertNoConfirm("设备异常:\r\n 存储异常,请尝试重新上电");
|
|
|
|
// while (true) {
|
|
|
|
// osDelay(1);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// // hardInit
|
|
|
|
// AppHardware::ins()->initialize(); // 基础硬件初始化
|
|
|
|
// RemoteControlerUpper::ins()->initialize(); // 遥控器初始化
|
|
|
|
// FrontEndControler::ins()->initialize(); // 前端控制器,对屏幕的消息进行解析,发送消息给屏幕
|
|
|
|
// ValveStateSyncService::ins()->initialize(ZCAN1::ins());
|
|
|
|
|
|
|
|
// // BaseServiceInit
|
|
|
|
// PUMPCS->initialize();
|
|
|
|
// RemoteControlerStateSyncService::ins()->initialize();
|
|
|
|
|
|
|
|
// // Page
|
|
|
|
// Page_login::ins()->initialize(); //
|
|
|
|
// Page_main::ins()->initialize(); //
|
|
|
|
// Page_keybAcidCh::ins()->initialize();
|
|
|
|
// Page_muAcidType::ins()->initialize();
|
|
|
|
// Page_menu::ins()->initialize();
|
|
|
|
// Page_muInterval::ins()->initialize();
|
|
|
|
// Page_changePasswd::ins()->initialize();
|
|
|
|
// Page_muSettings::ins()->initialize();
|
|
|
|
// Page_muUsrMgr::ins()->initialize();
|
|
|
|
// Page_muDeviceInfo::ins()->initialize();
|
|
|
|
// // Page_muAudit::ins()->initialize();
|
|
|
|
// Page_muPumpTest::ins()->initialize();
|
|
|
|
// // EventProcesser
|
|
|
|
// Page_muPumpSett::ins()->initialize();
|
|
|
|
// Page_muBleHandSett::ins()->initialize();
|
|
|
|
// Page_muMotorSett::ins()->initialize();
|
|
|
|
|
|
|
|
// RemoteControlerEventProcesser::ins()->initialize();
|
|
|
|
// /***********************************************************************************************************************
|
|
|
|
// * REG_EVENT_HANDLER *
|
|
|
|
// ***********************************************************************************************************************/
|
|
|
|
|
|
|
|
// //
|
|
|
|
|
|
|
|
// /***********************************************************************************************************************
|
|
|
|
// * START *
|
|
|
|
// ***********************************************************************************************************************/
|
|
|
|
// FrontEndControler::ins()->startSchedule();
|
|
|
|
// RCTRL->startSchedule();
|
|
|
|
// RemoteControlerStateSyncService::ins()->startSync();
|
|
|
|
// ValveStateSyncService::ins()->startSync();
|
|
|
|
|
|
|
|
// // dim
|
|
|
|
// UIS->chpage(pg_login);
|
|
|
|
|
|
|
|
// osDelay(100);
|
|
|
|
// CfgItermCache bleNameCache;
|
|
|
|
// const char* bleName = CS->getStr(kcfg_bleClientName, &bleNameCache);
|
|
|
|
// if (strlen(bleName) != 0) {
|
|
|
|
// ZLOGI(TAG, "start scan :%s", bleName);
|
|
|
|
// for (size_t i = 0;; i++) {
|
|
|
|
// if (i != 0) ZLOGI(TAG, "re start scan %s %d", bleName, i);
|
|
|
|
// bool suc = RCTRL->startScan(bleName, true);
|
|
|
|
// if (suc) break;
|
|
|
|
// }
|
|
|
|
// } else {
|
|
|
|
// ZLOGI(TAG, "start scan %s", "XXXXXXXXX");
|
|
|
|
// for (size_t i = 0;; i++) {
|
|
|
|
// if (i != 0) ZLOGI(TAG, "re start scan %s %d", "XXXXXXXX", i);
|
|
|
|
// bool suc = RCTRL->startScan("XXXXXXXXX", false); // 输入一个错误的设备名,当作不扫描
|
|
|
|
// if (suc) break;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
} |
|
|
|
#define DEBUG_LIGHT_IO PE2
|
|
|
|
|
|
|
|
static ZThread ledthread; |
|
|
|
|
|
|
|
void AppCore::initialize() { |
|
|
|
AppHal::MX_TIM6_Init(); |
|
|
|
AppHal::MX_TIM7_Init(); |
|
|
|
AppHal::DEBUG_UART_INIT(PA9, PA10, 460800); |
|
|
|
debuglight.initAsOutput(DEBUG_LIGHT_IO, kxs_gpio_nopull, false, false); |
|
|
|
|
|
|
|
AppHal::DEBUG_UART_INIT(DEBUG_TX_PIN, DEBUG_RX_PIN, DEBUG_UART_BAUDRATE); |
|
|
|
zlog_init(&DEBUG_UART_INS); |
|
|
|
|
|
|
|
ZLOGI(TAG, "======================= boardinfo ==================== "); |
|
|
|
ZLOGI(TAG, "project : %s ", PROJECT); |
|
|
@ -157,14 +293,35 @@ void AppCore::initialize() { |
|
|
|
SysMgr::ins()->initedFinished(); |
|
|
|
SysMgr::ins()->dumpSysInfo(); |
|
|
|
|
|
|
|
appsetup(); |
|
|
|
// AppHal::MX_IWDG_Init();
|
|
|
|
// 启动调试指示灯功能
|
|
|
|
ledthread.init("led", 1024, osPriorityNormal); |
|
|
|
ledthread.start([this]() { |
|
|
|
static iflytop::ZGPIO debuglight; |
|
|
|
debuglight.initAsOutput(DEBUG_LIGHT_IO, kxs_gpio_nopull, false, false); |
|
|
|
while (true) { |
|
|
|
static bool light = false; |
|
|
|
static uint32_t lastcall = 0; |
|
|
|
|
|
|
|
while (true) { |
|
|
|
osDelay(1); |
|
|
|
osDelay(30); |
|
|
|
if (zbase_gstate_get()->fatalFlag) { |
|
|
|
if (zos_haspassedms(lastcall) > 30) { |
|
|
|
light = !light; |
|
|
|
debuglight.write(light); |
|
|
|
lastcall = zos_get_tick(); |
|
|
|
} |
|
|
|
} else { |
|
|
|
if (zos_haspassedms(lastcall) > 300) { |
|
|
|
light = !light; |
|
|
|
debuglight.write(light); |
|
|
|
lastcall = zos_get_tick(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
debugLightLoop(); |
|
|
|
// HAL_IWDG_Refresh(&hiwdg);
|
|
|
|
} |
|
|
|
osDelay(30); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
test(); |
|
|
|
// AppHal::MX_IWDG_Init();
|
|
|
|
|
|
|
|
while (true) osDelay(30); |
|
|
|
} |