@@ -39,6 +39,7 @@ class Parser {
3939private:
4040 struct ipts_dimensions m_dim {};
4141 struct ipts_timestamp m_time {};
42+ struct ipts_pen_metadata m_pen_meta {};
4243
4344public:
4445 /* !
@@ -231,6 +232,9 @@ class Parser {
231232 case IPTS_REPORT_TYPE_HEATMAP :
232233 this ->parse_heatmap_data (sub);
233234 break ;
235+ case IPTS_REPORT_TYPE_PEN_METADATA :
236+ this ->parse_pen_metadata (sub);
237+ break ;
234238 case IPTS_REPORT_TYPE_PEN_DFT_WINDOW :
235239 this ->parse_dft_window (sub);
236240 break ;
@@ -426,6 +430,12 @@ class Parser {
426430 dft.rows = window.num_rows ;
427431 dft.type = window.data_type ;
428432
433+ if (window.seq_num == m_pen_meta.seq_num &&
434+ window.data_type == m_pen_meta.data_type ) {
435+ const auto g = m_pen_meta.group_counter ;
436+ dft.group = g;
437+ }
438+
429439 dft.dim = m_dim;
430440 dft.time = m_time;
431441
@@ -434,6 +444,18 @@ class Parser {
434444
435445 this ->on_dft (dft);
436446 }
447+
448+ /* !
449+ * Parses a pen metadata report.
450+ *
451+ * A pen metadata report precedes each DFT report.
452+
453+ * @param[in] reader The chunk of data allocated to the report.
454+ */
455+ void parse_pen_metadata (Reader &reader)
456+ {
457+ m_pen_meta = reader.read <struct ipts_pen_metadata >();
458+ }
437459};
438460
439461} // namespace iptsd::ipts
0 commit comments