Browse Source

update

board_v2_hardtest
zhaohe 9 months ago
parent
commit
2ce07733d7
  1. BIN
      doc/stm32f407ve.pdf
  2. 2
      stm32basic
  3. 88
      uappbase/appcfg/appcfg.hpp
  4. 56
      uappbase/apphal/apphal.cpp
  5. 2
      uappbase/apphal/apphal.hpp
  6. 2
      ucomponents/zcan/zcan.cpp
  7. 2
      ucomponents/zcan/zcan.hpp
  8. 40
      usrc/apphardware/apphardware.cpp
  9. 47
      usrc/apphardware/apphardware.hpp
  10. 2
      usrc/project_configs.h
  11. 355
      usrc/service/app_core.cpp
  12. 6
      usrc/service/app_core.hpp
  13. 27
      usrc/service/front_end_controler.cpp
  14. 3
      usrc/service/front_end_controler.hpp
  15. 2
      usrc/service/remote_controler.cpp
  16. 2
      usrc/service/remote_controler_event_processer.cpp
  17. 2
      usrc/service/valve_state_ctrl_service.cpp

BIN
doc/stm32f407ve.pdf

2
stm32basic

@ -1 +1 @@
Subproject commit ea11d9f77beed2bf8145bbe490283c0830fa8a77
Subproject commit 7fb0eb24a401679b66c7b4b7c3cf6c379635137c

88
uappbase/appcfg/appcfg.hpp

@ -3,24 +3,67 @@
#define MAX_USR_NAME_SIZE 10
#define MOTO_POWER_EN_IO PC2
#define MOTO4_CSN_IO PB3
#define MOTO3_CSN_IO PB4
#define MOTO2_CSN_IO PB5
#define MOTO1_CSN_IO PB6
#define MOTO4_DRV_ENN_IO PD0
#define MOTO3_DRV_ENN_IO PD1
#define MOTO2_DRV_ENN_IO PD2
#define MOTO1_DRV_ENN_IO PD3
#define ID1_IO PE0
#define ID2_IO PE1
#define ID3_IO PD7
#define ID4_IO PD9
#define ID5_IO PD8
#define IO_OUT1_IO PC0
#define IO_OUT2_IO PC1
#define MOTOR_SPI_INS hspi1
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
#define DEBUG_LIGHT_IO PE2
#define DEBUG_UART_INDEX 1
#define DEBUG_UART_INS huart1
#define DEBUG_UART_BAUDRATE 460800
#define DEBUG_TX_PIN PA9
#define DEBUG_RX_PIN PA10
/***********************************************************************************************************************
* ID配置 *
***********************************************************************************************************************/
#define ID0_IO PE1
#define ID1_IO PE3
#define ID2_IO PE4
#define ID3_IO PE5
#define ID4_IO PE6
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
// SPI
#define MOTOR_SPI_INS hspi1
#define MOTOR_SPI_INDEX 1
#define MOTOR_SPI_SCK PA5
#define MOTOR_SPI_SDO PA6
#define MOTOR_SPI_SDI PA7
// POWER EN
#define MOTO_POWER_EN_IO PE7
// CSN
#define MOTO1_CSN_IO PB8
#define MOTO2_CSN_IO PB9
#define MOTO3_CSN_IO PB10
#define MOTO4_CSN_IO PB11
// ENN
#define MOTO1_DRV_ENN_IO PD12
#define MOTO2_DRV_ENN_IO PD13
#define MOTO3_DRV_ENN_IO PD14
#define MOTO4_DRV_ENN_IO PD15
// REF
#define MOTOR1_REF_L_IO PD6
#define MOTOR1_REF_R_IO PD7
#define MOTOR2_REF_L_IO PD10
#define MOTOR2_REF_R_IO PD11
#define MOTOR3_REF_L_IO PD12
#define MOTOR3_REF_R_IO PD13
#define MOTOR4_REF_L_IO PD14
#define MOTOR4_REF_R_IO PD15
#define IO_OUT1_IO PC0
#define IO_OUT2_IO PC1
/***********************************************************************************************************************
* BLE_REMOTER *
***********************************************************************************************************************/
// PE6
#define BLE_CONNECTED_STATE_IO PE6
/***********************************************************************************************************************
* MOTOR_CFG *
***********************************************************************************************************************/
@ -38,6 +81,15 @@
#define PUMP_TEST_RPM 500 // 泵机测试时转速
/***********************************************************************************************************************
* TJC *
***********************************************************************************************************************/
#define TJC_UART_CH_SEL_PIN PB12
#define TJC_UART_CH_EN_PIN PB13
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
#define USER0_DEFAULT_NAME "管理员"

56
uappbase/apphal/apphal.cpp

@ -1,4 +1,6 @@
#include "apphal.hpp"
#include "uappbase\appcfg\appcfg.hpp"
using namespace iflytop;
void AppHal::MX_TIM6_Init(void) {
@ -54,24 +56,30 @@ void AppHal::MX_TIM7_Init(void) {
}
void AppHal::DEBUG_UART_INIT(Pin_t tx, Pin_t rx, int32_t baudrate) {
#if (DEBUG_UART_INDEX == 1)
GPIO_InitTypeDef GPIO_InitStruct = {0};
EARLY_ASSERT(PA9 == tx);
EARLY_ASSERT(PA10 == rx);
/***********************************************************************************************************************
* IOåˆå?åŒ *
***********************************************************************************************************************/
__HAL_RCC_USART1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_DMA2_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
if (tx == PA9 && rx == PA10) {
GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
} else if (tx == PB6 && rx == PB7) {
GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
} else {
EARLY_ASSERT(false);
}
huart1.Instance = USART1;
huart1.Init.BaudRate = baudrate;
@ -85,9 +93,6 @@ void AppHal::DEBUG_UART_INIT(Pin_t tx, Pin_t rx, int32_t baudrate) {
Error_Handler();
}
/***********************************************************************************************************************
* DMAåˆå?åŒ *
***********************************************************************************************************************/
HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
hdma2_stream2.Instance = DMA2_Stream2;
@ -107,6 +112,10 @@ void AppHal::DEBUG_UART_INIT(Pin_t tx, Pin_t rx, int32_t baudrate) {
__HAL_LINKDMA(&huart1, hdmarx, hdma2_stream2);
HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
#else
#error "DEBUG_UART_INDEX not supported"
#endif
}
void AppHal::MX_IWDG_Init(void) {
@ -291,12 +300,13 @@ void AppHal::MX_I2C1_Init(void) {
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void AppHal::MX_HSPI1_Init() {
void AppHal::tmc_spi_init() {
#if (MOTOR_SPI_INDEX == 1)
__HAL_RCC_SPI1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
// static_assert(MOTOR_SPI == SPI1);
// static_assert(&MOTOR_SPI_INS == &hspi1);
static_assert(&MOTOR_SPI_INS == &hspi1);
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
@ -314,9 +324,9 @@ void AppHal::MX_HSPI1_Init() {
Error_Handler();
}
// static_assert(MOTOR_SPI_SCK == PA5);
// static_assert(MOTOR_SPI_SDO == PA6);
// static_assert(MOTOR_SPI_SDI == PA7);
static_assert(MOTOR_SPI_SCK == PA5);
static_assert(MOTOR_SPI_SDO == PA6);
static_assert(MOTOR_SPI_SDI == PA7);
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
@ -325,4 +335,8 @@ void AppHal::MX_HSPI1_Init() {
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
#else
#error "MOTOR_SPI_INDEX not supported"
#endif
}

2
uappbase/apphal/apphal.hpp

@ -14,7 +14,7 @@ class AppHal {
static void UART4_Init();
static void MX_I2C1_Init(void) ;
static void MX_HSPI1_Init();
static void tmc_spi_init();
};

2
ucomponents/zcan/zcan.cpp

@ -124,7 +124,7 @@ HAL_StatusTypeDef ZCAN1::activateRxIT() {
return hal_status;
}
void ZCAN1::init() {
void ZCAN1::zcaninit() {
if (inited) return;
inited = true;

2
ucomponents/zcan/zcan.hpp

@ -31,7 +31,7 @@ class ZCAN1 {
return &instance;
}
void init();
void zcaninit();
bool txMsg(const uint32_t extid, const uint8_t txdata[], uint32_t txdatalen, int32_t overtime);
bool txMsgNoError(const uint32_t extid, const uint8_t txdata[], uint32_t txdatalen, int32_t overtime);
bool getRxMsg(zcanrx_t *rx);

40
usrc/apphardware/apphardware.cpp

@ -3,13 +3,21 @@ using namespace iflytop;
#define TAG "AppHardware"
void AppHardware::setTJCScreenInDownloadMode() {
TJC_UART_CH_SEL_PIN.setState(true);
TJC_UART_CH_EN_PIN.setState(false);
}
void AppHardware::initialize() {
AppHal::UART3_Init();
AppHal::UART4_Init();
AppHal::MX_I2C1_Init();
AppHal::MX_HSPI1_Init();
AppHal::tmc_spi_init();
TJC_UART_CH_SEL_PIN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, false);
TJC_UART_CH_EN_PIN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, false);
tjcUart = &huart4;
tjcUart = &huart4;
remoteContolerUart = &huart3;
MOTO_POWER_EN.initAsOutput(MOTO_POWER_EN_IO, kxs_gpio_nopull, false, true);
@ -21,15 +29,31 @@ void AppHardware::initialize() {
MOTO2_DRV_ENN.initAsOutput(MOTO2_DRV_ENN_IO, kxs_gpio_nopull, false, true);
MOTO3_DRV_ENN.initAsOutput(MOTO3_DRV_ENN_IO, kxs_gpio_nopull, false, true);
MOTO4_DRV_ENN.initAsOutput(MOTO4_DRV_ENN_IO, kxs_gpio_nopull, false, true);
ID1.initAsInput(ID1_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
ID2.initAsInput(ID2_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
ID3.initAsInput(ID3_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
ID4.initAsInput(ID4_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
ID5.initAsInput(ID5_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true);
MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true);
MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true);
MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true);
MOTOR1_REF_L.initAsInput(MOTOR1_REF_L_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
MOTOR1_REF_R.initAsInput(MOTOR1_REF_R_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
MOTOR2_REF_L.initAsInput(MOTOR2_REF_L_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
MOTOR2_REF_R.initAsInput(MOTOR2_REF_R_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
MOTOR3_REF_L.initAsInput(MOTOR3_REF_L_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
MOTOR3_REF_R.initAsInput(MOTOR3_REF_R_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
MOTOR4_REF_L.initAsInput(MOTOR4_REF_L_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
MOTOR4_REF_R.initAsInput(MOTOR4_REF_R_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
id.ID0.initAsInput(ID0_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
id.ID1.initAsInput(ID1_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
id.ID2.initAsInput(ID2_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
id.ID3.initAsInput(ID3_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
id.ID4.initAsInput(ID4_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
IO_OUT1.initAsOutput(IO_OUT1_IO, kxs_gpio_nopull, true, false);
IO_OUT2.initAsOutput(IO_OUT2_IO, kxs_gpio_nopull, true, false);
BLE_CONNECTED_STATE_IO_PE6.initAsInput(PE6, kxs_gpio_nopull, kxs_gpio_no_irq, false);
BLE_CONNECTED_STATE.initAsInput(BLE_CONNECTED_STATE_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
osDelay(10);
MOTO_POWER_EN.setState(false);

47
usrc/apphardware/apphardware.hpp

@ -3,15 +3,20 @@
#include "ucomponents/eeprom/m24m02_i2c_eeprom.hpp"
namespace iflytop {
class ID {
public:
ZGPIO ID0;
ZGPIO ID1;
ZGPIO ID2;
ZGPIO ID3;
ZGPIO ID4;
};
class AppHardware {
private:
/* data */
public:
TMC51X0 MOTO1;
TMC51X0 MOTO2;
TMC51X0 MOTO3;
TMC51X0 MOTO4;
ZGPIO MOTO_POWER_EN;
ZGPIO MOTO1_CSN;
ZGPIO MOTO2_CSN;
@ -21,22 +26,38 @@ class AppHardware {
ZGPIO MOTO2_DRV_ENN;
ZGPIO MOTO3_DRV_ENN;
ZGPIO MOTO4_DRV_ENN;
ZGPIO ID1;
ZGPIO ID2;
ZGPIO ID3;
ZGPIO ID4;
ZGPIO ID5;
ZGPIO MOTOR1_REF_L;
ZGPIO MOTOR1_REF_R;
ZGPIO MOTOR2_REF_L;
ZGPIO MOTOR2_REF_R;
ZGPIO MOTOR3_REF_L;
ZGPIO MOTOR3_REF_R;
ZGPIO MOTOR4_REF_L;
ZGPIO MOTOR4_REF_R;
TMC51X0 MOTO1;
TMC51X0 MOTO2;
TMC51X0 MOTO3;
TMC51X0 MOTO4;
ID id;
ZGPIO IO_OUT1;
ZGPIO IO_OUT2;
ZGPIO BLE_CONNECTED_STATE_IO_PE6;
ZGPIO BLE_CONNECTED_STATE;
UART_HandleTypeDef* tjcUart;
ZGPIO TJC_UART_CH_SEL_PIN;
ZGPIO TJC_UART_CH_EN_PIN;
UART_HandleTypeDef* remoteContolerUart;
M24M02_I2C_EEPROM eeprom;
bool hardwareInitedOK = false;;
bool hardwareInitedOK = false;
;
static AppHardware* ins() {
static AppHardware instance;
@ -54,6 +75,8 @@ class AppHardware {
}
bool isHardInitOk();
void setTJCScreenInDownloadMode();
};
} // namespace iflytop

2
usrc/project_configs.h

@ -9,7 +9,7 @@
#define SDK_CFG__SN_FLASH_ADDR 0x080E0004 //
#define SDK_MAX_TASK 10 // 最大任务数量
#define DEBUG_UART huart1 // 调试串口
/***********************************************************************************************************************
* FLASH分区 *

355
usrc/service/app_core.cpp

@ -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);
}

6
usrc/service/app_core.hpp

@ -1,16 +1,14 @@
#pragma once
#include "apphardware/apphardware.hpp"
#include "uappbase/base.hpp"
#include "config/config.hpp"
#include "uappbase/base.hpp"
namespace iflytop {
class AppCore {
private:
/* data */
AppCore(/* args */) {}
public:
static AppCore* ins() {
static AppCore ins;
@ -18,9 +16,9 @@ class AppCore {
}
void initialize();
void appsetup();
void debugLightLoop();
public:
void test();
};
} // namespace iflytop

27
usrc/service/front_end_controler.cpp

@ -381,6 +381,33 @@ bool FrontEndControler::readInt(uint8_t pid, uint8_t cId, int32_t* val) {
return true;
}
bool FrontEndControler::echo(uint8_t tx, uint8_t* rx) {
zlock_guard lg(m_cmdlock);
startReceiveAck();
sendcmd("com_stop");
sendcmd("printh AA");
sendcmd("printh %02X", tx);
sendcmd("printh FF FF FF");
sendcmd("com_start");
bool suc = ackQueue.receive(&ackcache, CMD_OVERTIME);
if (!suc) {
ZLOGI(TAG, "readTxt failed");
return false;
}
uint8_t int32val = 0;
memcpy(&int32val, &ackcache.data[1], 1);
*rx = int32val;
if (tx != int32val) {
return false;
}
return true;
}
bool FrontEndControler::setTxt(uint8_t pid, uint8_t bid, const char* txt, ...) {
zlock_guard lg(m_cmdlock);

3
usrc/service/front_end_controler.hpp

@ -1,7 +1,7 @@
#pragma once
#include "apphardware/apphardware.hpp"
#include "uappbase/base.hpp"
#include "config/config.hpp"
#include "uappbase/base.hpp"
//
#include "tjc/tjc.hpp"
@ -57,6 +57,7 @@ class FrontEndControler {
// cmd list
bool readTxt(uint8_t pid, uint8_t bid, char* txt, int32_t txtbuflen);
bool readInt(uint8_t pid, uint8_t bid, int32_t* val);
bool echo(uint8_t tx, uint8_t* rx);
bool setTxt(uint8_t pid, uint8_t bid, const char* txt, ...);
bool setTxt(uint8_t bid, const char* txt) { return setTxt(m_nowPage, bid, txt); }

2
usrc/service/remote_controler.cpp

@ -43,7 +43,7 @@ void RemoteControlerUpper::regOnReport(on_report_cb_t on_report) {
m_ncb++;
}
bool RemoteControlerUpper::isConnected() { return AppHardware::ins()->BLE_CONNECTED_STATE_IO_PE6.getState(); }
bool RemoteControlerUpper::isConnected() { return AppHardware::ins()->BLE_CONNECTED_STATE.getState(); }
void RemoteControlerUpper::callOnReport(uint8_t* rx, int32_t len) {
for (int32_t i = 0; i < m_ncb; i++) {
m_cb[i](rx, len);

2
usrc/service/remote_controler_event_processer.cpp

@ -38,6 +38,8 @@ void RemoteControlerEventProcesser::initialize() {
AppEvent_t appevent;
appevent.type = kAppEvent_BleConnectEvent;
strncpy(appevent.d.bleName, event->blename, sizeof(appevent.d.bleName));
ZLOGI(TAG, "on ble connect -> client name:%s", event->blename);
AppEventBus::ins()->pushEvent(appevent);
} else if (packet->cmd == kzble_report_disconnect_event) {
GSM->setRemoterS(false);

2
usrc/service/valve_state_ctrl_service.cpp

@ -7,7 +7,7 @@ using namespace iflytop;
void ValveStateSyncService::initialize(ZCAN1* can) {
m_thread.init("ValveStateSyncService-Thread");
this->can = can;
ZCAN1::ins()->init();
ZCAN1::ins()->zcaninit();
lock.init();
}

Loading…
Cancel
Save