Browse Source

update

master
zhaohe 1 year ago
parent
commit
7e889a850f
  1. 23
      app/app.uvoptx
  2. 21
      app/src/app_ble_service.c
  3. 14
      app/src/board/board.h
  4. 2
      app/src/board/board_sdcard_driver.c
  5. 28
      app/src/device_ctrl_service.c
  6. 71
      app/src/heart_wave_sample_service.c
  7. 2
      sdk

23
app/app.uvoptx

@ -119,6 +119,10 @@
<TargetDriverDllRegistry> <TargetDriverDllRegistry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>DLGUARM</Key>
<Name> </Name> </SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key> <Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name> <Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry> </SetRegEntry>
@ -143,24 +147,7 @@
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx -FS00 -FL0200000 -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP0($$Device:nRF52833_xxAA$Flash\nrf52xxx.flm) -FP1($$Device:nRF52833_xxAA$Flash\nrf52xxx_uicr.flm))</Name> <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx -FS00 -FL0200000 -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP0($$Device:nRF52833_xxAA$Flash\nrf52xxx.flm) -FP1($$Device:nRF52833_xxAA$Flash\nrf52xxx_uicr.flm))</Name>
</SetRegEntry> </SetRegEntry>
</TargetDriverDllRegistry> </TargetDriverDllRegistry>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>125</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>207178</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\src\device_ctrl_service.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\nrf52833_xxaa\src/device_ctrl_service.c\125</Expression>
</Bp>
</Breakpoint>
<Breakpoint/>
<Tracepoint> <Tracepoint>
<THDelay>0</THDelay> <THDelay>0</THDelay>
</Tracepoint> </Tracepoint>

21
app/src/app_ble_service.c

@ -329,7 +329,16 @@ static void prvf_process_ble_rx_data(void* p_event_data, uint16_t len) {
send_error_receipt(rxheader, kifyhrs_ecode_cmd_not_support); send_error_receipt(rxheader, kifyhrs_ecode_cmd_not_support);
} }
} }
static const char* dropstate(uint8_t drop0, uint8_t drop1) {
static char state[128];
sprintf(state, "drop0:%d%d%d%d-%d%d%d%d drop1:%d%d%d%d-%d%d%d%d", //
drop0 & 0x80 ? 1 : 0, drop0 & 0x40 ? 1 : 0, drop0 & 0x20 ? 1 : 0, drop0 & 0x10 ? 1 : 0, //
drop0 & 0x08 ? 1 : 0, drop0 & 0x04 ? 1 : 0, drop0 & 0x02 ? 1 : 0, drop0 & 0x01 ? 1 : 0, //
drop1 & 0x80 ? 1 : 0, drop1 & 0x40 ? 1 : 0, drop1 & 0x20 ? 1 : 0, drop1 & 0x10 ? 1 : 0, //
drop1 & 0x08 ? 1 : 0, drop1 & 0x04 ? 1 : 0, drop1 & 0x02 ? 1 : 0, drop1 & 0x01 ? 1 : 0 //
);
return state;
}
void AppBleService_onServiceInitCB() { void AppBleService_onServiceInitCB() {
ZLOGI("init zdatachannel service"); ZLOGI("init zdatachannel service");
static zdatachannel_init_t zdatachannle_init; static zdatachannel_init_t zdatachannle_init;
@ -342,6 +351,16 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { //
app_event_t* event = (app_event_t*)p_event_data; app_event_t* event = (app_event_t*)p_event_data;
if (event->eventType == kevent_sensor_drop) { if (event->eventType == kevent_sensor_drop) {
prvf_try_report_sensor_drop_event(event->val.sensor_drop.drop0, event->val.sensor_drop.drop1); prvf_try_report_sensor_drop_event(event->val.sensor_drop.drop0, event->val.sensor_drop.drop1);
} else if (event->eventType == kevent_tmr_scheduler) {
static int cnt = 0;
cnt++;
if (DeviceCtrl_now_state() == kdevice_state_sampling && cnt % 10 == 0) {
uint8_t drop0 = hwss_get_drop_state0();
uint8_t drop1 = hwss_get_drop_state1();
ZLOGI("[%d] drop %s", znordic_getpower_on_ms(), dropstate(drop0, drop1));
prvf_try_report_sensor_drop_event(drop0,drop1);
}
} else if (event->eventType == kevent_sample_stop_event) { } else if (event->eventType == kevent_sample_stop_event) {
prvf_try_report_sample_end_event(); prvf_try_report_sample_end_event();
} else if (event->eventType == kevent_capture_little_data_block_event) { } else if (event->eventType == kevent_capture_little_data_block_event) {

14
app/src/board/board.h

@ -15,10 +15,10 @@
/** /**
* @brief SDCARD * @brief SDCARD
*/ */
#define SDCARD_SPI_SCK_PIN 4 // SDCARD SCK
#define SDCARD_SPI_CS_PIN 5 // SDCARD CS
#define SDCARD_SPI_MISO_PIN 11 // SDCARD MISO
#define SDCARD_SPI_MOSI_PIN 17 // SDCARD MOSI
#define SDCARD_SPI_SCK_PIN 4 // SDCARD SCK CLK
#define SDCARD_SPI_CS_PIN 5 // SDCARD CS DATA3
#define SDCARD_SPI_MISO_PIN 11 // SDCARD MISO DATA0
#define SDCARD_SPI_MOSI_PIN 17 // SDCARD MOSI CMD
#define SDCARD_USBDRIVER_IC_JUNCTION_CTRL_NOE_PIN 1 // flash连接控制引脚 #define SDCARD_USBDRIVER_IC_JUNCTION_CTRL_NOE_PIN 1 // flash连接控制引脚
#define SDCARD_USBDRIVER_IC_RESET_PIN 28 // flash复位引脚 #define SDCARD_USBDRIVER_IC_RESET_PIN 28 // flash复位引脚
@ -40,12 +40,12 @@
/******************************************************************************* /*******************************************************************************
* * * *
*******************************************************************************/ *******************************************************************************/
#define BUTTON_PIN 0
#define BUTTON_PIN 18
/******************************************************************************* /*******************************************************************************
* * * *
*******************************************************************************/ *******************************************************************************/
#define BEEP_PIN 18
#define BEEP_PIN 0
/******************************************************************************* /*******************************************************************************
* * * *
@ -64,7 +64,7 @@
#define SAMPLE_PRECISION 24 #define SAMPLE_PRECISION 24
#define APP_MAX_EVEN_SIZE MAX(APP_TIMER_SCHED_EVENT_DATA_SIZE, sizeof(app_event_t)) #define APP_MAX_EVEN_SIZE MAX(APP_TIMER_SCHED_EVENT_DATA_SIZE, sizeof(app_event_t))
#define APP_EVENT_QUEUE_SIZE 20
#define APP_EVENT_QUEUE_SIZE 100
#define APP_AUTO_SLEEP_TIMEOUT_MS (10 * 1000) #define APP_AUTO_SLEEP_TIMEOUT_MS (10 * 1000)
#define APP_BYTE_EACH_FRAME 9 #define APP_BYTE_EACH_FRAME 9

2
app/src/board/board_sdcard_driver.c

@ -146,7 +146,7 @@ void Board_sdcardConnectToInternal() {
* @brief ¹ÒÔØSD¿¨ * @brief ¹ÒÔØSD¿¨
*/ */
DSTATUS disk_state = STA_NOINIT; DSTATUS disk_state = STA_NOINIT;
for (uint32_t retries = 3; retries && disk_state; --retries) {
for (uint32_t retries = 10; retries && disk_state; --retries) {
disk_state = disk_initialize(0); disk_state = disk_initialize(0);
} }
if (disk_state != 0) { if (disk_state != 0) {

28
app/src/device_ctrl_service.c

@ -57,7 +57,7 @@ static void zble_event_listener(zble_event_t* ble_event) { //
* * * *
*******************************************************************************/ *******************************************************************************/
static bool m_ispoweron = false; static bool m_ispoweron = false;
static bool m_drop_state_triggered = false;
//static bool m_drop_state_triggered = false;
static void poweroff() { static void poweroff() {
if (!m_ispoweron) return; if (!m_ispoweron) return;
BoardBeepCtrl_unload(); BoardBeepCtrl_unload();
@ -65,7 +65,7 @@ static void poweroff() {
BoardBattery_unload(); BoardBattery_unload();
BoardButton_unload(); BoardButton_unload();
SampleDataMgr_unloadDriver(); SampleDataMgr_unloadDriver();
hwss_unload();
// hwss_unload();
DeviceCtrl_change_to_state(kdevice_state_standby); DeviceCtrl_change_to_state(kdevice_state_standby);
zble_module_stop_adv(); zble_module_stop_adv();
BoardLight_setGreenLightEffect(kLightEffect_close); BoardLight_setGreenLightEffect(kLightEffect_close);
@ -88,7 +88,6 @@ static void poweron() {
BoardBattery_load(); BoardBattery_load();
BoardButton_load(); BoardButton_load();
SampleDataMgr_loadDriver(); SampleDataMgr_loadDriver();
hwss_load();
DeviceCtrl_change_to_state(kdevice_state_ready); DeviceCtrl_change_to_state(kdevice_state_ready);
zble_module_start_adv(); zble_module_start_adv();
BoardLight_setGreenLightEffect(kLightEffect_slowFlash); BoardLight_setGreenLightEffect(kLightEffect_slowFlash);
@ -119,6 +118,7 @@ static void prvf_change_to_ready_state() {
DeviceCtrl_change_to_state(kdevice_state_ready); DeviceCtrl_change_to_state(kdevice_state_ready);
BoardBeepCtrl_setEffect(kBoardBeepEffect_oneShortBeep); BoardBeepCtrl_setEffect(kBoardBeepEffect_oneShortBeep);
} }
#if 0
static const char* dropstate(uint8_t drop0, uint8_t drop1) { static const char* dropstate(uint8_t drop0, uint8_t drop1) {
static char state[128]; static char state[128];
sprintf(state, "drop0:%d%d%d%d-%d%d%d%d drop1:%d%d%d%d-%d%d%d%d", // sprintf(state, "drop0:%d%d%d%d-%d%d%d%d drop1:%d%d%d%d-%d%d%d%d", //
@ -129,6 +129,7 @@ static const char* dropstate(uint8_t drop0, uint8_t drop1) {
); );
return state; return state;
} }
#endif
static void prvf_change_to_sample_state() { // static void prvf_change_to_sample_state() { //
if (m_device_state == kdevice_state_sampling) { if (m_device_state == kdevice_state_sampling) {
return; return;
@ -138,12 +139,12 @@ static void prvf_change_to_sample_state() { //
static void app_event_listener(void* p_event_data, uint16_t event_size) { // static void app_event_listener(void* p_event_data, uint16_t event_size) { //
app_event_t* event = (app_event_t*)p_event_data; app_event_t* event = (app_event_t*)p_event_data;
static bool inited;
if (!inited) {
nrf_gpio_cfg_input(BUTTON_PIN, NRF_GPIO_PIN_NOPULL);
inited = true;
}
ZLOGI("button %d", nrf_gpio_pin_read(BUTTON_PIN));
//static bool inited;
// if (!inited) {
// nrf_gpio_cfg_input(BUTTON_PIN, NRF_GPIO_PIN_NOPULL);
// inited = true;
// }
// ZLOGI("button %d", nrf_gpio_pin_read(BUTTON_PIN));
/******************************************************************************* /*******************************************************************************
* * * *
@ -175,6 +176,7 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { //
ZLOGI("start sample"); ZLOGI("start sample");
// SD卡连接到单片机 // SD卡连接到单片机
SampleDataMgr_changeToLocalMode(); SampleDataMgr_changeToLocalMode();
hwss_load();
// //
m_sample_data_fd = SampleDataMgr_open(cratefilename(), kwrflag_write_only); m_sample_data_fd = SampleDataMgr_open(cratefilename(), kwrflag_write_only);
ZASSERT(m_sample_data_fd > 0); ZASSERT(m_sample_data_fd > 0);
@ -204,7 +206,7 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { //
uint8_t drop1 = hwss_get_drop_state1(); uint8_t drop1 = hwss_get_drop_state1();
if ((drop0 || drop1) && event->eventType == kevent_tmr_scheduler) { if ((drop0 || drop1) && event->eventType == kevent_tmr_scheduler) {
ZLOGI("[%d] drop %s", znordic_getpower_on_ms(), dropstate(drop0, drop1));
// ZLOGI("[%d] drop %s", znordic_getpower_on_ms(), dropstate(drop0, drop1));
} }
bool stopcapture = false; bool stopcapture = false;
@ -223,6 +225,8 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { //
SampleDataMgr_changeToExtMode(); SampleDataMgr_changeToExtMode();
// //
hwss_stop_capture(); hwss_stop_capture();
//
hwss_unload();
// //
prvf_change_to_ready_state(); prvf_change_to_ready_state();
@ -272,6 +276,10 @@ void DeviceCtrl_init() {
// //
prvf_change_to_ready_state(); prvf_change_to_ready_state();
// BoardBeepCtrl_init();
// BoardBeepCtrl_load();
// BoardBeepCtrl_setEffect(kBoardBeepEffect_continuousShortBeep);
ZERROR_CHECK(app_timer_create(&m_state_machine_driver_tmr, APP_TIMER_MODE_REPEATED, state_machine_driver_tmr_cb)); ZERROR_CHECK(app_timer_create(&m_state_machine_driver_tmr, APP_TIMER_MODE_REPEATED, state_machine_driver_tmr_cb));
ZERROR_CHECK(app_timer_start(m_state_machine_driver_tmr, APP_TIMER_TICKS(100), NULL)); // 200HZ采样 ZERROR_CHECK(app_timer_start(m_state_machine_driver_tmr, APP_TIMER_TICKS(100), NULL)); // 200HZ采样
} }

71
app/src/heart_wave_sample_service.c

@ -41,6 +41,9 @@ static adscfg_t m_prvads1cfg[] = //
{0x25, 0x00}, {0x26, 0x00}, {0x27, 0x08}, {0x28, 0x40}, {0x29, 0x00}, {0x2a, 0x00}, {0x2b, 0x00}, {0x2c, 0x00}, {0x2d, 0x00}, {0x2e, 0x33}, {0x2f, 0x30}, {0x30, 0x00}, {0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x00}, {0x35, 0x00}, {0x25, 0x00}, {0x26, 0x00}, {0x27, 0x08}, {0x28, 0x40}, {0x29, 0x00}, {0x2a, 0x00}, {0x2b, 0x00}, {0x2c, 0x00}, {0x2d, 0x00}, {0x2e, 0x33}, {0x2f, 0x30}, {0x30, 0x00}, {0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x00}, {0x35, 0x00},
{0x36, 0x00}, {0x37, 0x00}, {0x38, 0x00}, {0x39, 0x00}, {0x3a, 0x00}, {0x3b, 0x00}, {0x3c, 0x00}, {0x3d, 0x00}, {0x3e, 0x00}, {0x3f, 0x00}, {0x40, 0xff}, {0x50, 0x00}, {0x60, 0x00}, {0x62, 0x00}, {0x36, 0x00}, {0x37, 0x00}, {0x38, 0x00}, {0x39, 0x00}, {0x3a, 0x00}, {0x3b, 0x00}, {0x3c, 0x00}, {0x3d, 0x00}, {0x3e, 0x00}, {0x3f, 0x00}, {0x40, 0xff}, {0x50, 0x00}, {0x60, 0x00}, {0x62, 0x00},
}; };
static adscfg_t m_prvads0cfg_cache[65];
static adscfg_t m_prvads1cfg_cache[65];
/******************************************************************************* /*******************************************************************************
* VARIABLE * * VARIABLE *
*******************************************************************************/ *******************************************************************************/
@ -72,7 +75,7 @@ volatile static bool m_drop_state_triggered = false;
*******************************************************************************/ *******************************************************************************/
// READY_PIN // READY_PIN
static void ads1293_ready_pin_irq(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action);
//static void ads1293_ready_pin_irq(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action);
// BUFFER // BUFFER
static void prvf_buffer_switch(void); static void prvf_buffer_switch(void);
@ -196,6 +199,38 @@ static void ads1293_spi_writereg_and_check(ads1293_t* ads, uint8_t addr, uint8_t
} }
} }
static void tryloadcfg_from_fatfs(const char* file, adscfg_t* cfg, uint16_t cfgsize, uint16_t* cfg_ret_size) {
//
*cfg_ret_size = 0;
static FIL fd;
FRESULT ff_result = f_open(&fd, (const TCHAR*)file, FA_READ);
if (ff_result != FR_OK) {
ZLOGE("open %s failed\n", file);
return;
}
char line[128];
int niterm = 0;
f_gets(line, 128, &fd);
while (f_gets(line, 128, &fd)) {
uint32_t addr;
uint32_t value;
sscanf(line, "%x,%x", &addr, &value);
cfg[niterm].add = addr;
cfg[niterm].data = value;
niterm++;
if (niterm >= cfgsize) {
break;
}
}
*cfg_ret_size = niterm;
ZLOGI("load %s cfg size:%d\n", file, niterm);
f_close(&fd);
}
static void ads1293_init() { static void ads1293_init() {
/******************************************************************************* /*******************************************************************************
* SPI初始化 * * SPI初始化 *
@ -232,12 +267,44 @@ static void ads1293_init() {
ads1293_spi_writereg(&m_ads1293_0, TI_ADS1293_CONFIG_REG, 0); ads1293_spi_writereg(&m_ads1293_0, TI_ADS1293_CONFIG_REG, 0);
uint16_t cfgsize = 0;
tryloadcfg_from_fatfs("0.cfg", m_prvads0cfg_cache, ZARRAY_SIZE(m_prvads0cfg_cache), &cfgsize);
if (cfgsize > 0) {
ZLOGI("load 0.cfg from fatfs\n");
if (memcmp(m_prvads0cfg_cache, m_prvads0cfg, sizeof(m_prvads0cfg)) != 0) {
ZLOGI("0.cfg is different from default\n");
} else {
ZLOGI("0.cfg is same as default\n");
}
for (uint16_t i = 0; i < cfgsize; i++) {
ads1293_spi_writereg_and_check(&m_ads1293_0, m_prvads0cfg_cache[i].add, m_prvads0cfg_cache[i].data);
}
} else {
for (uint16_t i = 0; i < ZARRAY_SIZE(m_prvads0cfg); i++) { for (uint16_t i = 0; i < ZARRAY_SIZE(m_prvads0cfg); i++) {
ads1293_spi_writereg_and_check(&m_ads1293_0, m_prvads0cfg[i].add, m_prvads0cfg[i].data); ads1293_spi_writereg_and_check(&m_ads1293_0, m_prvads0cfg[i].add, m_prvads0cfg[i].data);
} }
}
tryloadcfg_from_fatfs("1.cfg", m_prvads1cfg_cache, ZARRAY_SIZE(m_prvads1cfg_cache), &cfgsize);
if (cfgsize > 0) {
ZLOGI("load 1.cfg from fatfs\n");
if (memcmp(m_prvads1cfg_cache, m_prvads1cfg, sizeof(m_prvads1cfg)) != 0) {
ZLOGI("1.cfg is different from default\n");
} else {
ZLOGI("1.cfg is same as default\n");
}
for (uint16_t i = 0; i < cfgsize; i++) {
ads1293_spi_writereg_and_check(&m_ads1293_1, m_prvads1cfg_cache[i].add, m_prvads1cfg_cache[i].data);
}
} else {
for (uint16_t i = 0; i < ZARRAY_SIZE(m_prvads1cfg); i++) { for (uint16_t i = 0; i < ZARRAY_SIZE(m_prvads1cfg); i++) {
ads1293_spi_writereg_and_check(&m_ads1293_1, m_prvads1cfg[i].add, m_prvads1cfg[i].data); ads1293_spi_writereg_and_check(&m_ads1293_1, m_prvads1cfg[i].add, m_prvads1cfg[i].data);
} }
}
/** /**
* @brief READY引脚中断初始化 * @brief READY引脚中断初始化
@ -259,7 +326,7 @@ void ads1293_sample_one_frame();
void nrfx_timer_event_handler(nrf_timer_event_t event_type, void* p_context) { // void nrfx_timer_event_handler(nrf_timer_event_t event_type, void* p_context) { //
ads1293_sample_one_frame(); ads1293_sample_one_frame();
} }
static void ads1293_ready_pin_irq(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { ads1293_sample_one_frame(); }
//static void ads1293_ready_pin_irq(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { ads1293_sample_one_frame(); }
static void ads1293_sample_one_frame() { static void ads1293_sample_one_frame() {
if (!m_work_flag) { if (!m_work_flag) {
return; return;

2
sdk

@ -1 +1 @@
Subproject commit 45186701cdfa870204e0975dbf12a0feb50be71d
Subproject commit 20c99a0fe48fe28d0443e4f4429b9fcb9b3c0462
Loading…
Cancel
Save