ECG Files concurrent reading from device

dev_3.3_BLE
haroon amjad 2 years ago
parent 68b83e5f98
commit 1fd978e0c2

@ -50,6 +50,11 @@ class BleBridge(
private lateinit var Echannel: EventChannel
private var eventSink: EventChannel.EventSink? = null
private var ecgFileNames = arrayListOf<String>()
var ecgList: ArrayList<EcgData> = arrayListOf()
val gson = Gson()
companion object {
private const val CHANNEL = "BLE-Platform-Bridge"
private const val EVENTCHANNEL = "BLE-Platform-Bridge-Event"
@ -188,7 +193,6 @@ class BleBridge(
}
fun scanDevice(methodCall: MethodCall, result: MethodChannel.Result) {
println("This is Test of Scanning")
LiveEventBus.get<Boolean>(EventMsgConst.Ble.EventServiceConnectedAndInterfaceInit)
.observe(this.mainActivity) {
@ -232,7 +236,6 @@ class BleBridge(
}
if (deviceName.contains("DuoEK", ignoreCase = true)) {
val gson = Gson()
LiveEventBus.get<InterfaceEvent>(InterfaceEvent.ER2.EventEr2Info)
.observe(this.mainActivity) {
val data = it.data as DeviceInfo
@ -242,12 +245,14 @@ class BleBridge(
}
LiveEventBus.get<InterfaceEvent>(InterfaceEvent.ER2.EventEr2FileList)
.observe(this.mainActivity) {
val fileNames = it.data as ArrayList<String>
println("DuoEK FileNames List: $fileNames")
val returnData =
mapOf("type" to "fileList", "data" to fileNames)
// eventSink?.success(fileNames.toString())
eventSink?.success(returnData)
BleServiceHelper.BleServiceHelper.stopRtTask(model)
ecgFileNames = it.data as ArrayList<String>
readFile()
// val fileNames = it.data as ArrayList<String>
// println("DuoEK FileNames List: ${fileNames}")
// val returnData =
// mapOf("type" to "fileList", "data" to fileNames)
// eventSink?.success(returnData)
}
LiveEventBus.get<InterfaceEvent>(InterfaceEvent.ER2.EventEr2SetTime)
@ -255,23 +260,30 @@ class BleBridge(
println("EventEr2SetTime")
// Get Device Info
BleServiceHelper.BleServiceHelper.er2GetInfo(model)
ecgRTTask.run()
// ecgRTTask.run()
}
LiveEventBus.get<InterfaceEvent>(InterfaceEvent.ER2.EventEr2ReadFileComplete)
.observe(this.mainActivity) {
println("EventEr2ReadFileComplete")
val data = it.data as Er2File
val file = Er2EcgFile(data.content)
val ecgShorts = Er1Decompress.unCompressAlgECG(file.waveData)
val ecgData = EcgData()
val startTime = DateUtil.getSecondTimestamp(data.fileName.replace("R", ""))
ecgData.fileName = data.fileName
ecgData.duration = file.recordingTime
ecgData.shortData = ecgShorts
ecgData.startTime = startTime
val returnData =
mapOf("type" to "fileDetail", "data" to gson.toJson(ecgData))
eventSink?.success(returnData)
if (data.fileName.contains("R")) {
val file = Er2EcgFile(data.content)
val ecgShorts = Er1Decompress.unCompressAlgECG(file.waveData)
val ecgData = EcgData()
val startTime = DateUtil.getSecondTimestamp(data.fileName.replace("R", ""))
ecgData.fileName = data.fileName
ecgData.duration = file.recordingTime
ecgData.shortData = ecgShorts
ecgData.startTime = startTime
ecgList.add(ecgData)
print(ecgList)
// val returnData =
// mapOf("type" to "fileDetail", "data" to gson.toJson(ecgList))
// eventSink?.success(returnData)
}
ecgFileNames.removeAt(0)
readFile()
}
LiveEventBus.get<InterfaceEvent>(InterfaceEvent.ER2.EventEr2RtData)
@ -328,6 +340,15 @@ class BleBridge(
}
}
private fun readFile() {
if (ecgFileNames.size == 0) {
val returnData =
mapOf("type" to "fileDetail", "data" to gson.toJson(ecgList))
eventSink?.success(returnData)
} else {
BleServiceHelper.BleServiceHelper.er2ReadFile(model, ecgFileNames[0])
}
}
private fun getEKGFilesList() {
//Get EKG File List
@ -335,7 +356,8 @@ class BleBridge(
}
private fun getEKGFileDetail(fileName: String) {
BleServiceHelper.BleServiceHelper.er2ReadFile(model, fileName)
// readFile()
// BleServiceHelper.BleServiceHelper.er2ReadFile(model, fileName)
}
}

@ -31,7 +31,8 @@ class _EKG_BLEState extends State<EKG_BLE> {
List<String> ekgFilesList = [];
EKGFileDetailResponseModel ekgFileDetailResponseModel;
List<EKGFileDetailResponseModel> ekgFileDetailResponseModelList = [];
EKGRealTimeDataResponseModel ekgRealTimeDataResponseModel;
List<int> ecgBytesAllDataList = [];
@ -86,7 +87,6 @@ class _EKG_BLEState extends State<EKG_BLE> {
plotAreaBorderWidth: 0,
primaryXAxis: NumericAxis(majorGridLines: const MajorGridLines(width: 0)),
primaryYAxis: NumericAxis(axisLine: const AxisLine(width: 0), majorTickLines: const MajorTickLines(size: 0)),
series: <LineSeries<_ChartData, int>>[
LineSeries<_ChartData, int>(
onRendererCreated: (ChartSeriesController controller) {
@ -181,75 +181,24 @@ class _EKG_BLEState extends State<EKG_BLE> {
],
),
mHeight(20.0),
_buildLiveLineChart()
// ValueListenableBuilder(
// valueListenable: ekgValueNotifier,
// builder: (context, value, _) {
// return Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Text(
// value,
// style: TextStyle(fontSize: 9.0),
// ),
// mHeight(24.0),
// getFilesListWidget(),
// mHeight(20.0),
// // SizedBox(
// // height: 150.0,
// // width: MediaQuery.of(context).size.width,
// // child: (ekgRealTimeDataResponseModel != null && ekgRealTimeDataResponseModel.wave != null)
// // ? LineChart(
// // LineChartData(
// // lineTouchData: LineTouchData(handleBuiltInTouches: false),
// // gridData: FlGridData(
// // show: true,
// // verticalInterval: 30,
// // horizontalInterval: 30,
// // getDrawingVerticalLine: (value) {
// // return FlLine(
// // color: Colors.red[300],
// // strokeWidth: 0.4,
// // );
// // },
// // getDrawingHorizontalLine: (value) {
// // return FlLine(
// // color: Colors.red[300],
// // strokeWidth: 0.4,
// // );
// // },
// // ),
// // titlesData: FlTitlesData(show: true),
// // borderData: FlBorderData(
// // show: false,
// // border: Border.all(color: const Color(0xff37434d), width: 1),
// // ),
// // minX: 0,
// // // maxX: (ekgRealTimeDataResponseModel.wave.ecgBytes.length.toDouble() - 1),
// // maxX: ecgBytesAllDataList.length.toDouble(),
// // minY: ekgRealTimeDataResponseModel.wave.ecgBytes.reduce((value, element) => value < element ? value : element).toDouble(),
// // maxY: ekgRealTimeDataResponseModel.wave.ecgBytes.reduce((value, element) => value > element ? value : element).toDouble(),
// // lineBarsData: [
// // LineChartBarData(
// // isCurved: false,
// // preventCurveOverShooting: true,
// // barWidth: 0.5,
// // dotData: FlDotData(show: false),
// // // spots: getDataList(ekgRealTimeDataResponseModel.wave.ecgBytes),
// // spots: getDataList(ekgRealTimeDataResponseModel.wave.ecgBytes),
// // colors: [Colors.grey[800]],
// // isStrokeCapRound: true,
// // belowBarData: BarAreaData(show: false),
// // ),
// // ],
// // ),
// // )
// // : Container(),
// // ),
// ],
// );
// },
// ),
// _buildLiveLineChart()
ValueListenableBuilder(
valueListenable: ekgValueNotifier,
builder: (context, value, _) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
value,
style: TextStyle(fontSize: 9.0),
),
mHeight(24.0),
getFilesListWidget(),
mHeight(20.0),
],
);
},
),
],
),
),
@ -287,23 +236,28 @@ class _EKG_BLEState extends State<EKG_BLE> {
itemBuilder: (context, index) {
return InkWell(
onTap: () {
getEKGFileDetails(ekgFilesList[index]);
showEKGFileDetails(ekgFileDetailResponseModelList[index]);
},
child: Text(ekgFilesList[index]));
child: Text(ekgFileDetailResponseModelList[index].fileName));
},
itemCount: ekgFilesList.length,
separatorBuilder: (context, index) => SizedBox(height: 14),
);
}
void getEKGFileDetails(String fileName) async {
print("received file name: $fileName");
await BleChannel.getEKGFileDetails(fileName);
void showEKGFileDetails(EKGFileDetailResponseModel ekgFileDetailResponseModel) async {
print("received file name: ${ekgFileDetailResponseModel.fileName}");
Navigator.push(context, FadePage(page: EKGChartView(ekgFileDetailResponseModel: ekgFileDetailResponseModel)));
// await BleChannel.getEKGFileDetails(fileName);
}
void parseEKGFileDetailObject(dynamic returnData) {
ekgFileDetailResponseModel = EKGFileDetailResponseModel.fromJson(json.decode(returnData));
Navigator.push(context, FadePage(page: EKGChartView(ekgFileDetailResponseModel: ekgFileDetailResponseModel)));
returnData.forEach((v) {
ekgFileDetailResponseModelList.add(new EKGFileDetailResponseModel.fromJson(v));
});
print(ekgFileDetailResponseModelList.length);
// ekgFileDetailResponseModel = EKGFileDetailResponseModel.fromJson(json.decode(returnData));
// Navigator.push(context, FadePage(page: EKGChartView(ekgFileDetailResponseModel: ekgFileDetailResponseModel)));
}
String parseEKGRealTimeDataObject(dynamic returnData) {

Loading…
Cancel
Save