Browse Source

update

master
zhaohe 1 year ago
parent
commit
db4d7c8bcc
  1. 19
      app/app.uvoptx
  2. 173
      app/src/app_ble_service.c
  3. 20
      app/src/sample_data_manager_service.c
  4. 2
      libznordic

19
app/app.uvoptx

@ -147,7 +147,24 @@
<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>
</TargetDriverDllRegistry>
<Breakpoint/>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>19</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>.\src\main.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
</Breakpoint>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>

173
app/src/app_ble_service.c

@ -21,8 +21,12 @@ static bool m_realtime_report_state = false; // ʵʱ
static uint8_t m_txbuf[128];
static uint8_t m_reportbuf[128];
APP_TIMER_DEF(m_record_upload_tmr); //
APP_TIMER_DEF(m_record_upload_finish_packet_report_tmr); //
static void prvf_process_ble_rx_data(void* p_event_data, uint16_t event_size);
static void process_ble_rx_data(void* p_event_data, uint16_t event_size);
static void RecordUpload_tmr_cb(void* p_context);
/*******************************************************************************
* *
@ -139,6 +143,125 @@ void prvf_report_sample_data(uint32_t frameIndex, uint32_t data, uint32_t data2,
}
/*******************************************************************************
* *
*******************************************************************************/
static int m_upload_fd;
static uint8_t m_datacache[256];
static int m_remaindatalen = 0;
static uint32_t m_report_data_sumcheckcode = 0;
static bool m_isupload_data_state = false;
void RecordUpload_report_finish_event(uint32_t sumcheckcode) {
ify_hrs_packet_t* txheader = (ify_hrs_packet_t*)m_txbuf;
uint16_t sendlen = sizeof(ify_hrs_packet_t) + 4;
txheader->cmd = ify_hrs_report_record_upload_end; // 6A
txheader->frame_index = 0;
txheader->frame_type = kifyhrs_pt_report;
// txheader->data[0] = errorcode;
*(uint32_t*)txheader->data = sumcheckcode;
zdatachannel_data_send2(m_txbuf, sendlen);
return;
}
int RecordUpload_ble_stop_upload_record() {
m_isupload_data_state = false;
app_timer_stop(m_record_upload_tmr);
return 0;
}
/**
* @brief
*
* @param p_context
*/
static void RecordUpload_finish_packet_report_tmr_cb(void* p_context) { //
RecordUpload_report_finish_event(m_report_data_sumcheckcode);
}
static void RecordUpload_tmr_cb(void* p_context) { //
if (!m_isupload_data_state) return;
// sample_data_mgr_read
if (m_remaindatalen == 0) {
memset(m_datacache, 0, sizeof(m_datacache));
int32_t rdsize = SampleDataMgr_read(m_upload_fd, m_datacache, sizeof(m_datacache));
if (rdsize <= 0) {
ZLOGI("read file end,stop upload");
ZERROR_CHECK(app_timer_start(m_record_upload_finish_packet_report_tmr, APP_TIMER_TICKS(30), (void*)m_report_data_sumcheckcode));
RecordUpload_ble_stop_upload_record();
return;
}
m_remaindatalen = rdsize;
}
if (m_remaindatalen == 0) {
return;
}
int32_t mtusize = zble_module_get_mtu_size();
mtusize = mtusize < 128 ? mtusize : 128;
uint8_t* data = m_datacache + (sizeof(m_datacache) - m_remaindatalen);
int len = m_remaindatalen > mtusize ? mtusize : m_remaindatalen;
ZLOGI("upload %d %d %d", len, m_remaindatalen, mtusize);
if (!zdatachannel_is_connected()) {
ZLOGI("ble is disconnected,stop upload");
RecordUpload_ble_stop_upload_record();
return;
}
uint32_t suc = zdatachannel_block_data_send2(data, len);
if (suc != NRF_SUCCESS) {
if (suc == NRF_ERROR_INVALID_STATE) {
// 使notify
ZLOGI("ble unenable notify,stop upload");
RecordUpload_ble_stop_upload_record();
return;
} else if (suc == NRF_ERROR_BUSY || suc == NRF_ERROR_RESOURCES) {
//
return;
} else {
ZLOGI("ble send error,stop upload %x", suc);
RecordUpload_ble_stop_upload_record();
return;
}
}
for (uint32_t i = 0; i < len; i++) {
m_report_data_sumcheckcode += data[i];
}
m_remaindatalen -= len;
}
int RecordUpload_start(sample_data_filename_t* recordid) {
//
//
//
SampleDataMgr_changeToLocalMode();
m_upload_fd = SampleDataMgr_open(recordid, kwrflag_read_only);
if (m_upload_fd <= 0) {
return kifyhrs_ecode_no_record_find;
}
ZERROR_CHECK(app_timer_start(m_record_upload_tmr, APP_TIMER_TICKS(2), NULL));
m_isupload_data_state = true;
m_remaindatalen = 0;
m_report_data_sumcheckcode = 0;
return 0;
}
int RecordUpload_stop_upload() {
m_isupload_data_state = false;
SampleDataMgr_changeToExtMode();
app_timer_stop(m_record_upload_tmr);
return 0;
}
bool RecordUpload_is_uploading() { return m_isupload_data_state; }
/*******************************************************************************
* *
*******************************************************************************/
static void process_ble_rx_data(void* p_event_data, uint16_t event_size) { //
@ -152,16 +275,13 @@ static void prvf_process_ble_rx_data(void* p_event_data, uint16_t len) {
ify_hrs_cmd_t cmd = (ify_hrs_cmd_t)rxheader->cmd;
memset(m_txbuf, 0, sizeof(m_txbuf));
ZLOGI("rx:");
NRF_LOG_HEXDUMP_INFO(p_event_data, len);
ZLOGI("rx cmd:%d index:%d datalen:%d", cmd, rxheader->frame_index, len - sizeof(ify_hrs_packet_t));
NRF_LOG_HEXDUMP_INFO(p_event_data, len);
txheader->cmd = rxheader->cmd;
txheader->frame_index = rxheader->frame_index;
txheader->frame_type = kifyhrs_pt_cmd_receipt;
NRF_LOG_HEXDUMP_INFO(rxheader->data, len - sizeof(ify_hrs_packet_t));
if (cmd == ify_hrs_cmd_read_device_version) {
device_version_info_receipt_t* receipt = (device_version_info_receipt_t*)txheader->data;
uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(device_version_info_receipt_t);
@ -232,6 +352,12 @@ static void prvf_process_ble_rx_data(void* p_event_data, uint16_t len) {
else if (cmd == ify_hrs_cmd_start_capture) {
// hwss_start_capture();
if (RecordUpload_is_uploading()) {
ZLOGI("uploading,can not start capture");
send_error_receipt(rxheader, kifyhrs_ecode_device_busy);
}
DeviceCtrl_startSample();
send_success_receipt(rxheader, 0);
}
@ -307,7 +433,31 @@ static void prvf_process_ble_rx_data(void* p_event_data, uint16_t len) {
else if (cmd == ify_hrs_cmd_start_upload_record) {
// 12-
send_error_receipt(rxheader, kifyhrs_ecode_cmd_not_support);
// send_error_receipt(rxheader, kifyhrs_ecode_cmd_not_support);
start_upload_record_cmd_t* cmd = (start_upload_record_cmd_t*)rxheader->data;
static sample_data_filename_t filename;
memset(&filename, 0, sizeof(filename));
memcpy(&filename, cmd->record_id, sizeof(cmd->record_id));
//
if (DeviceCtrl_now_state() != kdevice_state_ready) {
send_error_receipt(rxheader, kifyhrs_ecode_device_busy);
return;
}
int ecode = RecordUpload_start(&filename);
if (0 == 0) {
send_success_receipt(rxheader, 0);
} else {
send_error_receipt(rxheader, 0);
}
}
else if (cmd == ify_hrs_cmd_stop_upload_record) {
RecordUpload_stop_upload();
send_success_receipt(rxheader, 0);
}
else if (cmd == ify_hrs_cmd_enter_ota) {
@ -358,7 +508,7 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { //
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);
prvf_try_report_sensor_drop_event(drop0, drop1);
}
} else if (event->eventType == kevent_sample_stop_event) {
@ -375,4 +525,13 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { //
}
}
void AppBleService_init() { AppEvent_regListener(app_event_listener); }
bool m_ble_cmder_is_inited = false;
void AppBleService_init() {
AppEvent_regListener(app_event_listener);
if (!m_ble_cmder_is_inited) {
ZERROR_CHECK(app_timer_create(&m_record_upload_tmr, APP_TIMER_MODE_REPEATED, RecordUpload_tmr_cb));
ZERROR_CHECK(app_timer_create(&m_record_upload_finish_packet_report_tmr, APP_TIMER_MODE_SINGLE_SHOT, RecordUpload_finish_packet_report_tmr_cb));
}
m_ble_cmder_is_inited = true;
}

20
app/src/sample_data_manager_service.c

@ -109,11 +109,21 @@ void SampleDataMgr_changeToExtMode() {
static FIL m_default_file_handler;
static bool m_is_open;
int32_t SampleDataMgr_open(sample_data_filename_t* filename, wrflag_t flag) {
FRESULT ff_result = f_open(&m_default_file_handler, (const TCHAR*)"0.bin", FA_CREATE_ALWAYS | FA_READ | FA_WRITE);
ZASSERT(ff_result == FR_OK);
m_is_open = true;
return 1;
int32_t SampleDataMgr_open(sample_data_filename_t* filename, wrflag_t flag) {
if (flag == kwrflag_write_only) {
FRESULT ff_result = f_open(&m_default_file_handler, (const TCHAR*)"0.bin", FA_CREATE_ALWAYS | FA_READ | FA_WRITE);
ZASSERT(ff_result == FR_OK);
m_is_open = true;
return 1;
} else {
FRESULT ff_result = f_open(&m_default_file_handler, (const TCHAR*)"0.bin", FA_READ);
if (ff_result != FR_OK) {
return -1;
}
m_is_open = true;
return 1;
}
}
int32_t SampleDataMgr_close(int32_t fd) {
ZASSERT(m_is_open);

2
libznordic

@ -1 +1 @@
Subproject commit abd42bcb1415ad3178e4f876c5274f820856351c
Subproject commit dd5788e214bada44f7f8906702a52fed9b3a91ae
Loading…
Cancel
Save