Y112S打印机

发布时间 2023-12-06 14:01:53作者: thatdor

Y112S打印机

打印机参数

分辨率:8点/mm,384点/行
有效打印宽度:48mm
每列网格数:8个,40mm,每个波形占一半
进纸步距(点距):0.125mm
网格:5mm*5mm,打印机按照整数个网格打印

缓存

网格

GRID length:5mm 点数:40

25mm/s -> 0.2s/GRID

50mm/s -> 0.1s/GRID

配置

1. 速率

25mm/s

50mm/s

2. 模式

    PRINTER_WAVE_MODE_ECG,
    PRINTER_WAVE_MODE_AP,
    PRINTER_WAVE_MODE_BALLOON,
    PRINTER_WAVE_MODE_ECG_AP,
    PRINTER_WAVE_MODE_ECG_BALLOON,
    PRINTER_WAVE_MODE_AP_BALLOON,

回调

回调

    QList<ecg_wave_change_callback_fun> m_wave_change_callback_list;

流程

// 接收到下位机波形数据
void DuCbMsgBoundaryThread::duCbM1RunInfoRequestRecvCallback(void *parm)
// ecg处理接收波形
    ECG::get_instance()->set_recv_ecg_wave(msg->wave_data, 10, msg->wave_index);
// 调用注册好的回调函数,将波形数据传给打印机
        ecg_wave_change_callback_fun fun = m_wave_change_callback_list[i];
        if (fun != nullptr)
        {
            fun(wave, length, nullptr);
        }

cb msgboundary处理逻辑

du_cb_register_handler​中注册回调函数与消息枚举关系

#define DU_CB_ID_M1_RUN_INFO_RESPONSE (49)
    DU_CB_msg_recv_handler_register(DuCbMsgBoundaryThread::duCbM1RunInfoRequestRecvCallback, DU_CB_ID_M1_RUN_INFO_RESPONSE);

DU_CB_receive​中区分消息枚举,调用DU_CB_CALL_RECV_MSG_PROCESS​进行回调

    case DU_CB_ID_M1_RUN_INFO_RESPONSE:
        len = DU_CB_m1_run_info_response_deserialization(rawBuf, msgbuf);
        /* Message Process */
        DU_CB_CALL_RECV_MSG_PROCESS(DU_CB_ID_M1_RUN_INFO_RESPONSE, msgbuf, len);
        /* Message Process End */
        break;

CTSimage

​​image​​

tmp

int Printer::get_interpolation_wave_list(int cache_num, QList<int>& ecg_list, QList<int>& ibp_list,
    QList<int>& balloon_pressure_list, QList<int>& wave_flag_list)
{
    ecg_list = qlist_take_first_n_values(m_ecg_list, cache_num);
    ibp_list = qlist_take_first_n_values(m_ibp_pressure_list, cache_num);
    balloon_pressure_list = qlist_take_first_n_values(m_balloon_pressure_list, cache_num);
    wave_flag_list = qlist_take_first_n_values(m_wave_flag_list, cache_num);
}

坐标映射

[min, max]映射到[0, 160]且作翻转,min->160, max->0

如果你已经将原始区间 [min, max]​ 映射到了 [0, 160]​,而现在想要将 min​ 映射到 160​,max​ 映射到 0​,可以在原始映射的基础上做一个简单的反转。

首先,将原始的映射公式:

$$
\text{mappedValue} = \frac{(value - \text{min}) \times 160}{\text{max} - \text{min}}
$$

进行反转,将值映射到 [160, 0]​ 区间。考虑到反转,映射后的值 mappedValue​ 将变为:

$$
\text{mappedValue} = 160 - \frac{(value - \text{min}) \times 160}{\text{max} - \text{min}}
$$

这个公式将会把原始区间 [min, max]​ 中的值映射到 [160, 0]​ 区间。