Commit c877be84 authored by Stephen Farry's avatar Stephen Farry

Merge branch 'master' of ssh://gitlab.cern.ch:7999/hev-sw/hev-sw

parents a7f4105f c4b65fc1
......@@ -54,6 +54,7 @@ void UILoop::receiveCommands()
personal_data_format pers;
_pl_receive.getPayload(reinterpret_cast<void*>(&pers));
strcpy(_personal.name, pers.name);
strcpy(_personal.patient_id, pers.patient_id);
_personal.age = pers.age;
_personal.sex = pers.sex;
_personal.height = pers.height;
......@@ -190,7 +191,7 @@ void UILoop::reportCycleReadings()
_cycle_data.peak_inspiratory_pressure = cr.peak_inspiratory_pressure;
_cycle_data.plateau_pressure = cr.plateau_pressure;
_cycle_data.mean_airway_pressure = cr.mean_airway_pressure;
_cycle_data.fiO2_percent = cr.fiO2_percent;
_cycle_data.fiO2_percent = 21.0; // cr.fiO2_percent;
_cycle_data.apnea_index = cr.apnea_index;
_cycle_data.apnea_time = cr.apnea_time;
_cycle_data.mandatory_breath = cr.mandatory_breath;
......@@ -333,6 +334,7 @@ void UILoop::reportPersonal()
_personal_data.timestamp = static_cast<uint32_t>(tnow);
strcpy(_personal_data.name, _personal.name);
strcpy(_personal_data.patient_id, _personal.patient_id);
_personal_data.age = _personal.age ;
_personal_data.sex = _personal.sex ;
_personal_data.height = _personal.height;
......
......@@ -21,7 +21,7 @@
#include <Arduino_Due_pinout.h>
#endif
#define HEV_FORMAT_VERSION 0xB4
#define HEV_FORMAT_VERSION 0xB5
//
const float MAX_VALVE_FRAC_OPEN = 0.74;
......@@ -433,6 +433,7 @@ struct personal_data_format {
uint8_t payload_type = PAYLOAD_TYPE::PERSONAL;
char name[60];
char patient_id[20];
uint8_t age;
char sex;
uint8_t height;
......@@ -715,6 +716,7 @@ struct cycle_readings{
struct personal_details{
char name[60];
char patient_id[20];
uint8_t age;
char sex;
uint8_t height;
......
This diff is collapsed.
......@@ -261,22 +261,22 @@
function update_alarms() {
$.getJSON("live-alarms", function (data) {
if (data != null && data.length > 0 && data[0].alarm_type == 'PRIORITY_HIGH') {
document.getElementById("alarms").innerHTML = "High priority: " + data[0].alarm_code;
if (data.alarm_type == 'PRIORITY_HIGH') {
document.getElementById("alarms").innerHTML = "High priority: " + data.alarm_code;
var el = document.getElementById("alarm_ul");
el.classList.add("alarm-red");
var el2 = document.getElementById("path-alarm");
el2.classList.add("path-icon-alarm");
}
if (data != null && data.length > 0 && data[0].alarm_type == 'PRIORITY_MEDIUM') {
document.getElementById("alarms").innerHTML = "Medium priority: " + data[0].alarm_code;
if (data.alarm_type == 'PRIORITY_MEDIUM') {
document.getElementById("alarms").innerHTML = "Medium priority: " + data.alarm_code;
var el = document.getElementById("alarm_ul");
el.classList.add("alarm-red");
var el2 = document.getElementById("path-alarm");
el2.classList.add("path-icon-alarm");
}
if (data != null && data.length > 0 && data[0].alarm_type == 'PRIORITY_LOW') {
document.getElementById("alarms").innerHTML = "Low priority: " + data[0].alarm_code;
if (data.alarm_type == 'PRIORITY_LOW') {
document.getElementById("alarms").innerHTML = "Low priority: " + data.alarm_code;
var el = document.getElementById("alarm_ul");
el.classList.add("alarm-red");
var el2 = document.getElementById("path-alarm");
......@@ -290,7 +290,7 @@
}
});
}
//var alarmInterval = setInterval('update_alarms()', 1000);
var alarmInterval = setInterval('update_alarms()', 1000);
function unlock(){
......
......@@ -206,7 +206,7 @@ class HEVVersionError(Exception):
@dataclass
class PayloadFormat():
# class variables excluded from init args and output dict
_RPI_VERSION: ClassVar[int] = field(default=0xB4, init=False, repr=False)
_RPI_VERSION: ClassVar[int] = field(default=0xB5, init=False, repr=False)
_dataStruct: ClassVar[Any] = field(default=Struct("<BIB"), init=False, repr=False)
_byteArray: ClassVar[bytearray] = field(default=None, init=False, repr=False)
......@@ -682,14 +682,15 @@ class TargetFormat(PayloadFormat):
# =======================================
@dataclass
class PersonalFormat(PayloadFormat):
_dataStruct = Struct("<BIB60sBcBB")
_dataStruct = Struct("<BIB60s20sBcBB")
payload_type: PAYLOAD_TYPE = PAYLOAD_TYPE.PERSONAL
name : str = ""
age : int = 0
sex : str = ""
height : int = 0
weight : int = 0
name : str = ""
patient_id : str = ""
age : int = 0
sex : str = ""
height : int = 0
weight : int = 0
# for receiving DataFormat from microcontroller
# fill the struct from a byteArray,
......@@ -698,11 +699,13 @@ class PersonalFormat(PayloadFormat):
#logging.info(binascii.hexlify(byteArray))
tmp_payload_type = 0
tmp_name = None
tmp_id = None
tmp_sex = None
(self.version,
self.timestamp,
tmp_payload_type,
tmp_name,
tmp_id,
self.age,
tmp_sex,
self.height,
......@@ -711,6 +714,7 @@ class PersonalFormat(PayloadFormat):
self.checkVersion()
self.payload_type = PAYLOAD_TYPE(tmp_payload_type)
self.name = tmp_name.decode().rstrip('\0')
self.patient_id = tmp_id.decode().rstrip('\0')
self.sex = tmp_sex.decode()
self._byteArray = byteArray
# =======================================
......
......@@ -42,7 +42,7 @@ class Dependant(object):
if payload.getType() == PAYLOAD_TYPE.DATA.value:
#logging.info(f"payload received: {payload}")
logging.info(f"payload received: {payload.timestamp} p {payload.pressure_patient:3.2f} f {payload.flow:3.3f} base {payload.volume:3.3f} d {payload.flow - payload.volume:3.3f} {payload.fsm_state}")
#logging.info(f"payload received: {payload.timestamp} p {payload.pressure_patient:3.2f} f {payload.flow:3.3f} base {payload.volume:3.3f} d {payload.flow - payload.volume:3.3f} {payload.fsm_state}")
#logging.info(f"Fsm state: {payload.fsm_state}")
fsm = payload.fsm_state
#if payload.getType() == PAYLOAD_TYPE.IVT.value:
......@@ -57,8 +57,8 @@ class Dependant(object):
# logging.info(f"payload received: {payload} {fsm}")
#if payload.getType() == PAYLOAD_TYPE.DEBUG.value:
# logging.info(f" PID {payload.kp:3.6f} {payload.ki:3.6f} {payload.kd:3.6f} {payload.proportional:3.6f} {payload.integral:3.6f} {payload.derivative:3.6f} {payload.valve_duty_cycle:3.6f} {payload.target_pressure:3.6f} {payload.process_pressure:3.6f} fsm {fsm}")
#if payload.getType() == PAYLOAD_TYPE.PERSONAL.value:
# logging.info(f"payload received: {payload} ")
if payload.getType() == PAYLOAD_TYPE.PERSONAL.value:
logging.info(f"payload received: {payload} ")
#if payload.getType() == PAYLOAD_TYPE.LOGMSG.value:
# logging.info(f"LOGMSG {payload.timestamp}:{payload.message} {fsm}")
#if payload.getType() == PAYLOAD_TYPE.TARGET.value:
......@@ -81,9 +81,9 @@ def send_cmd(cmd_type, cmd_code, param=0.0):
else:
return cmd
def send_personal(name, age, sex, height, weight):
def send_personal(name, patient_id, age, sex, height, weight):
try:
cmd = PersonalFormat(name=name.encode(), age=int(age), sex=sex.encode(), height=int(height), weight=int(weight))
cmd = PersonalFormat(name=name.encode(), patient_id=patient_id.encode(), age=int(age), sex=sex.encode(), height=int(height), weight=int(weight))
logging.info(f' payload sent {cmd}')
comms.writePayload(cmd)
except Exception as e:
......@@ -102,7 +102,7 @@ async def commsDebug():
#await asyncio.sleep(10)
#print('send personal info')
#send_personal("Jessica Jones", 29, 'F', 175, 58)
send_personal("Jessica Jones", 'abc1234', 29, 'F', 175, 58)
#send_cmd(cmd_type="GET_THRESHOLD_MAX", cmd_code="APNEA")
#await asyncio.sleep(1)
......@@ -122,10 +122,10 @@ async def commsDebug():
#print('set curr rr=11 ')
#send_cmd(cmd_type="SET_TARGET_CURRENT", cmd_code="RESPIRATORY_RATE", param=11.0)
send_cmd(cmd_type="SET_MODE", cmd_code="PC_PSV", param=1)
send_cmd(cmd_type="SET_TARGET_PC_PSV", cmd_code="INHALE_TRIGGER_THRESHOLD", param=1)
send_cmd(cmd_type="SET_TARGET_PC_PSV", cmd_code="EXHALE_TRIGGER_THRESHOLD", param=25)
send_cmd(cmd_type="SET_TARGET_CURRENT", cmd_code="RESPIRATORY_RATE", param=5.0)
# send_cmd(cmd_type="SET_MODE", cmd_code="PC_PSV", param=1)
# send_cmd(cmd_type="SET_TARGET_PC_PSV", cmd_code="INHALE_TRIGGER_THRESHOLD", param=1)
# send_cmd(cmd_type="SET_TARGET_PC_PSV", cmd_code="EXHALE_TRIGGER_THRESHOLD", param=25)
# send_cmd(cmd_type="SET_TARGET_CURRENT", cmd_code="RESPIRATORY_RATE", param=5.0)
#await asyncio.sleep(1)
#print('get targets pcac, current')
#send_cmd(cmd_type="GET_TARGETS", cmd_code="PC_AC", param=0)
......@@ -153,9 +153,10 @@ async def commsDebug():
#send_cmd(cmd_type="GET_TARGETS", cmd_code="CPAP", param=0)
#send_cmd(cmd_type="GET_TARGETS", cmd_code="TEST", param=0)
#send_cmd(cmd_type="GET_TARGETS", cmd_code="CURRENT", param=0)
cmd = send_cmd(cmd_type="GENERAL", cmd_code="START", param=0)
#cmd = send_cmd(cmd_type="GENERAL", cmd_code="START", param=0)
cmd = send_cmd(cmd_type="GENERAL", cmd_code="GET_PERSONAL", param=0)
print('send start')
#print('sent inhale + exhale trigger -> 1')
#print('sent inhale + exhale trigger -> 1')
while True:
await asyncio.sleep(1)
#print("get targets")
......
......@@ -146,11 +146,12 @@ class HEVServer(object):
elif reqtype == "PERSONAL":
# ignore for the minute
name = request["name"].encode()
patient_id = request["patient_id"].encode()
age = int(request["age"])
sex = request["sex"].encode()
height = int(request["height"])
weight = int(request["weight"])
pfmt = PersonalFormat(name=name, age=age, sex=sex, height=height, weight=weight)
pfmt = PersonalFormat(name=name, patient_id=patient_id, age=age, sex=sex, height=height, weight=weight)
self._comms_lli.writePayload(pfmt)
payload = {"type": "ack"}
pass
......
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment