#ifndef _OBP_UTILS_H_
#define _OBP_UTILS_H_
struct mxt_raw_crc {
uint16_t CRC;
uint8_t CRC_hi;
} __packed;
struct mxt_id_info {
uint8_t family;
uint8_t variant;
uint8_t version;
uint8_t build;
uint8_t matrix_x_size;
uint8_t matrix_y_size;
uint8_t num_objects;
} __packed;
struct mxt_object {
uint8_t type;
uint8_t start_pos_lsb;
uint8_t start_pos_msb;
uint8_t size_minus_one;
uint8_t instances_minus_one;
uint8_t num_report_ids;
} __packed;
struct mxt_message_any {
uint8_t reportid;
uint8_t data[7];
} __packed;
struct mxt_message_touch {
uint8_t reportid;
uint8_t flags;
uint8_t pos[3];
uint8_t area;
uint8_t amplitude;
} __packed;
#define MXT_MSGF_DETECT 0x80
#define MXT_MSGF_PRESS 0x40
#define MXT_MSGF_RELEASE 0x20
#define MXT_MSGF_MOVE 0x10
#define MXT_MSGF_VECTOR 0x08
#define MXT_MSGF_AMP 0x04
#define MXT_MSGF_SUPPRESS 0x02
#define MXT_MSGF_UNGRIP 0x01
union mxt_message {
struct mxt_message_touch any;
struct mxt_message_touch touch;
} __packed;
typedef union mxt_message mxt_message_t;
#define MXT_RESERVED_T0 0
#define MXT_RESERVED_T1 1
#define MXT_DEBUG_DELTAS 2
#define MXT_DEBUG_REFERENCES 3
#define MXT_SIGNALS 4
#define MXT_GEN_MESSAGEPROCESSOR 5
#define MXT_GEN_COMMANDPROCESSOR 6
#define MXT_GEN_POWERCONFIG 7
#define MXT_ACQUISITIONCONFIG 8
#define MXT_TOUCH_MULTITOUCHSCREEN9 9
#define MXT_TOUCH_SINGLETOUCHSCREEN 10
#define MXT_TOUCH_XSLIDER 11
#define MXT_TOUCH_YSLIDER 12
#define MXT_TOUCH_XWHEEL 13
#define MXT_TOUCH_YWHEEL 14
#define MXT_TOUCH_KEYARRAY 15
#define MXT_PROCG_SIGNALFILTER 16
#define MXT_PROCI_LINEARIZATIONTABLE 17
#define MXT_SPT_COMMSCONFIG 18
#define MXT_SPT_GPIOPWM 19
#define MXT_PROCI_GRIPFACESUPPRESSION 20
#define MXT_RESERVED21 21
#define MXT_PROCG_NOISESUPPRESSION22 22
#define MXT_TOUCH_PROXIMITY 23
#define MXT_PROCI_ONETOUCHGESTUREPROCESSOR 24
#define MXT_SPT_SELFTEST 25
#define MXT_DEBUG_CTERANGE 26
#define MXT_PROCI_TWOTOUCHGESTUREPROCESSOR 27
#define MXT_SPT_CTECONFIG28 28
#define MXT_SPT_GPI 29
#define MXT_SPT_GATE 30
#define MXT_TOUCH_KEYSET 31
#define MXT_TOUCH_XSLIDERSET 32
#define MXT_RESERVED33 33
#define MXT_GEN_MESSAGEBLOCK 34
#define MXT_SPT_PROTOTYPE 35
#define MXT_RESERVED36 36
#define MXT_DEBUG_DIAGNOSTIC 37
#define MXT_SPT_USERDATA 38
#define MXT_SPARE39 39
#define MXT_PROCI_GRIPSUPPRESSION 40
#define MXT_PROCI_PALMSUPPRESSION 41
#define MXT_PROCI_TOUCHSUPPRESSION 42
#define MXT_SPT_DIGITIZER 43
#define MXT_SPT_MESSAGECOUNT 44
#define MXT_PROCI_VIRTUALKEY 45
#define MXT_SPT_CTECONFIG46 46
#define MXT_PROCI_STYLUS 47
#define MXT_PROCG_NOISESUPPRESSION48 48
#define MXT_GEN_DUALPULSE 49
#define MXT_SPARE50 50
#define MXT_SPT_SONY_CUSTOM 51
#define MXT_TOUCH_PROXKEY 52
#define MXT_GEN_DATASOURCE 53
#define MXT_PROCG_NOISESUPPRESSION54 54
#define MXT_PROCI_ADAPTIVETHRESHOLD 55
#define MXT_PROCI_SHIELDLESS 56
#define MXT_PROCI_EXTRATOUCHSCREENDATA 57
#define MXT_SPT_EXTRANOISESUPCTRLS 58
#define MXT_SPT_FASTDRIFT 59
#define MXT_SPT_TIMER 61
#define MXT_PROCG_NOISESUPPRESSION62 62
#define MXT_PROCI_ACTIVESTYLUS63 63
#define MXT_SPT_REFERENCERELOAD 64
#define MXT_PROCI_LENSBENDING 65
#define MXT_SPT_GOLDENREFERENCES 66
#define MXT_PROCI_CUSTOMGESTUREPROCESSOR 67
#define MXT_SERIAL_DATA_COMMAND 68
#define MXT_PROCI_PALMGESTUREPROCESSOR 69
#define MXT_SPT_DYNAMICCONFIGURATIONCONTROLLER 70
#define MXT_SPT_DYNAMICCONFIGURATIONCONTAINER 71
#define MXT_PROCG_NOISESUPPRESSION72 72
#define MXT_PROCI_ZONEINDICATION 73
#define MXT_PROCG_SIMPLEGESTUREPROCESSOR 74
#define MXT_MOTION_SENSING_OBJECT 75
#define MXT_PROCI_MOTION_GESTURES 76
#define MXT_SPT_CTESCANCONFIG 77
#define MXT_PROCI_GLOVEDETECTION 78
#define MXT_SPT_TOUCHEVENTTRIGGER 79
#define MXT_PROCI_RETRANSMISSIONCOMPENSATION 80
#define MXT_PROCI_UNLOCKGESTURE 81
#define MXT_SPT_NOISESUPEXTENSION 82
#define MXT_ENVIRO_LIGHTSENSING 83
#define MXT_PROCI_GESTUREPROCESSOR 84
#define MXT_PEN_ACTIVESTYLUSPOWER 85
#define MXT_PROCG_NOISESUPACTIVESTYLUS 86
#define MXT_PEN_ACTIVESTYLUSDATA 87
#define MXT_PEN_ACTIVESTYLUSRECEIVE 88
#define MXT_PEN_ACTIVESTYLUSTRANSMIT 89
#define MXT_PEN_ACTIVESTYLUSWINDOW 90
#define MXT_DEBUG_CUSTOMDATACONFIG 91
#define MXT_PROCI_SYMBOLGESTUREPROCESSOR 92
#define MXT_PROCI_TOUCHSEQUENCELOGGER 93
#define MXT_TOUCH_MULTITOUCHSCREEN 100
#define MXT_SPT_TOUCHSCREENHOVER 101
#define MXT_SPT_SELFCAPHOVERCTECONFIG 102
#define MXT_PROCI_SCHNOISESUPPRESSION 103
#define MXT_SPT_AUXTOUCHCONFIG 104
#define MXT_SPT_DRIVENPLATEHOVERCONFIG 105
#define MXT_SPT_ACTIVESTYLUSMMBCONFIG 106
#define MXT_PROCI_ACTIVESTYLUS107 107
#define MXT_PROCG_NOISESUPSELFCAP 108
#define MXT_SPT_SELFCAPGLOBALCONFIG 109
#define MXT_SPT_SELFCAPTUNINGPARAMS 110
#define MXT_SPT_SELFCAPCONFIG 111
#define MXT_SPT_PROXMEASURECONFIG 113
#define MXT_GEN_INFOBLOCK16BIT 254
#define MXT_RESERVED255 255
#define MXTSTR(label) #label
#define MXT_INIT_STRINGS \
{ MXTSTR(MXT_RESERVED_T0), \
MXT_RESERVED_T0 }, \
{ MXTSTR(MXT_RESERVED_T1), \
MXT_RESERVED_T1 }, \
{ MXTSTR(MXT_DEBUG_DELTAS), \
MXT_DEBUG_DELTAS }, \
{ MXTSTR(MXT_DEBUG_REFERENCES), \
MXT_DEBUG_REFERENCES }, \
{ MXTSTR(MXT_SIGNALS), \
MXT_SIGNALS }, \
{ MXTSTR(MXT_GEN_MESSAGEPROCESSOR), \
MXT_GEN_MESSAGEPROCESSOR }, \
{ MXTSTR(MXT_GEN_COMMANDPROCESSOR), \
MXT_GEN_COMMANDPROCESSOR }, \
{ MXTSTR(MXT_GEN_POWERCONFIG), \
MXT_GEN_POWERCONFIG }, \
{ MXTSTR(MXT_ACQUISITIONCONFIG), \
MXT_ACQUISITIONCONFIG }, \
{ MXTSTR(MXT_TOUCH_MULTITOUCHSCREEN), \
MXT_TOUCH_MULTITOUCHSCREEN }, \
{ MXTSTR(MXT_TOUCH_SINGLETOUCHSCREEN), \
MXT_TOUCH_SINGLETOUCHSCREEN }, \
{ MXTSTR(MXT_TOUCH_XSLIDER), \
MXT_TOUCH_XSLIDER }, \
{ MXTSTR(MXT_TOUCH_YSLIDER), \
MXT_TOUCH_YSLIDER }, \
{ MXTSTR(MXT_TOUCH_XWHEEL), \
MXT_TOUCH_XWHEEL }, \
{ MXTSTR(MXT_TOUCH_YWHEEL), \
MXT_TOUCH_YWHEEL }, \
{ MXTSTR(MXT_TOUCH_KEYARRAY), \
MXT_TOUCH_KEYARRAY }, \
{ MXTSTR(MXT_PROCG_SIGNALFILTER), \
MXT_PROCG_SIGNALFILTER }, \
{ MXTSTR(MXT_PROCI_LINEARIZATIONTABLE), \
MXT_PROCI_LINEARIZATIONTABLE }, \
{ MXTSTR(MXT_SPT_COMMSCONFIG), \
MXT_SPT_COMMSCONFIG }, \
{ MXTSTR(MXT_SPT_GPIOPWM), \
MXT_SPT_GPIOPWM }, \
{ MXTSTR(MXT_PROCI_GRIPFACESUPPRESSION), \
MXT_PROCI_GRIPFACESUPPRESSION }, \
{ MXTSTR(MXT_RESERVED21), \
MXT_RESERVED21 }, \
{ MXTSTR(MXT_PROCG_NOISESUPPRESSION22), \
MXT_PROCG_NOISESUPPRESSION22 }, \
{ MXTSTR(MXT_PROCG_NOISESUPPRESSION48), \
MXT_PROCG_NOISESUPPRESSION48 }, \
{ MXTSTR(MXT_PROCG_NOISESUPPRESSION54), \
MXT_PROCG_NOISESUPPRESSION54 }, \
{ MXTSTR(MXT_PROCG_NOISESUPPRESSION62), \
MXT_PROCG_NOISESUPPRESSION62 }, \
{ MXTSTR(MXT_PROCG_NOISESUPPRESSION72), \
MXT_PROCG_NOISESUPPRESSION72 }, \
{ MXTSTR(MXT_TOUCH_PROXIMITY), \
MXT_TOUCH_PROXIMITY }, \
{ MXTSTR(MXT_PROCI_ONETOUCHGESTUREPROCESSOR), \
MXT_PROCI_ONETOUCHGESTUREPROCESSOR }, \
{ MXTSTR(MXT_SPT_SELFTEST), \
MXT_SPT_SELFTEST }, \
{ MXTSTR(MXT_DEBUG_CTERANGE), \
MXT_DEBUG_CTERANGE }, \
{ MXTSTR(MXT_PROCI_TWOTOUCHGESTUREPROCESSOR), \
MXT_PROCI_TWOTOUCHGESTUREPROCESSOR }, \
{ MXTSTR(MXT_SPT_CTECONFIG28), \
MXT_SPT_CTECONFIG28 }, \
{ MXTSTR(MXT_SPT_CTECONFIG46), \
MXT_SPT_CTECONFIG46 }, \
{ MXTSTR(MXT_SPT_GPI), \
MXT_SPT_GPI }, \
{ MXTSTR(MXT_SPT_GATE), \
MXT_SPT_GATE }, \
{ MXTSTR(MXT_TOUCH_KEYSET), \
MXT_TOUCH_KEYSET }, \
{ MXTSTR(MXT_TOUCH_XSLIDERSET), \
MXT_TOUCH_XSLIDERSET }, \
{ MXTSTR(MXT_RESERVED33), \
MXT_RESERVED33 }, \
{ MXTSTR(MXT_GEN_MESSAGEBLOCK), \
MXT_GEN_MESSAGEBLOCK }, \
{ MXTSTR(MXT_SPT_PROTOTYPE), \
MXT_SPT_PROTOTYPE }, \
{ MXTSTR(MXT_RESERVED36), \
MXT_RESERVED36 }, \
{ MXTSTR(MXT_DEBUG_DIAGNOSTIC), \
MXT_DEBUG_DIAGNOSTIC }, \
{ MXTSTR(MXT_SPT_USERDATA), \
MXT_SPT_USERDATA }, \
{ MXTSTR(MXT_SPARE39), \
MXT_SPARE39 }, \
{ MXTSTR(MXT_PROCI_GRIPSUPPRESSION), \
MXT_PROCI_GRIPSUPPRESSION }, \
{ MXTSTR(MXT_PROCI_PALMSUPPRESSION), \
MXT_PROCI_PALMSUPPRESSION }, \
{ MXTSTR(MXT_PROCI_TOUCHSUPPRESSION), \
MXT_PROCI_TOUCHSUPPRESSION }, \
{ MXTSTR(MXT_SPT_DIGITIZER), \
MXT_SPT_DIGITIZER }, \
{ MXTSTR(MXT_SPT_MESSAGECOUNT), \
MXT_SPT_MESSAGECOUNT }, \
{ MXTSTR(MXT_PROCI_VIRTUALKEY), \
MXT_PROCI_VIRTUALKEY }, \
{ MXTSTR(MXT_PROCI_STYLUS), \
MXT_PROCI_STYLUS }, \
{ MXTSTR(MXT_GEN_DUALPULSE), \
MXT_GEN_DUALPULSE }, \
{ MXTSTR(MXT_SPARE50), \
MXT_SPARE50 }, \
{ MXTSTR(MXT_SPT_SONY_CUSTOM), \
MXT_SPT_SONY_CUSTOM }, \
{ MXTSTR(MXT_TOUCH_PROXKEY), \
MXT_TOUCH_PROXKEY }, \
{ MXTSTR(MXT_GEN_DATASOURCE), \
MXT_GEN_DATASOURCE }, \
{ MXTSTR(MXT_PROCI_ADAPTIVETHRESHOLD), \
MXT_PROCI_ADAPTIVETHRESHOLD }, \
{ MXTSTR(MXT_PROCI_SHIELDLESS), \
MXT_PROCI_SHIELDLESS }, \
{ MXTSTR(MXT_PROCI_EXTRATOUCHSCREENDATA), \
MXT_PROCI_EXTRATOUCHSCREENDATA }, \
{ MXTSTR(MXT_SPT_EXTRANOISESUPCTRLS), \
MXT_SPT_EXTRANOISESUPCTRLS }, \
{ MXTSTR(MXT_SPT_FASTDRIFT), \
MXT_SPT_FASTDRIFT }, \
{ MXTSTR(MXT_SPT_TIMER), \
MXT_SPT_TIMER }, \
{ MXTSTR(MXT_PROCI_ACTIVESTYLUS63), \
MXT_PROCI_ACTIVESTYLUS63 }, \
{ MXTSTR(MXT_PROCI_ACTIVESTYLUS107), \
MXT_PROCI_ACTIVESTYLUS107 }, \
{ MXTSTR(MXT_SPT_REFERENCERELOAD), \
MXT_SPT_REFERENCERELOAD }, \
{ MXTSTR(MXT_PROCI_LENSBENDING), \
MXT_PROCI_LENSBENDING }, \
{ MXTSTR(MXT_SPT_GOLDENREFERENCES), \
MXT_SPT_GOLDENREFERENCES }, \
{ MXTSTR(MXT_PROCI_CUSTOMGESTUREPROCESSOR), \
MXT_PROCI_CUSTOMGESTUREPROCESSOR }, \
{ MXTSTR(MXT_SERIAL_DATA_COMMAND), \
MXT_SERIAL_DATA_COMMAND }, \
{ MXTSTR(MXT_PROCI_PALMGESTUREPROCESSOR), \
MXT_PROCI_PALMGESTUREPROCESSOR }, \
{ MXTSTR(MXT_SPT_DYNAMICCONFIGURATIONCONTROLLER), \
MXT_SPT_DYNAMICCONFIGURATIONCONTROLLER }, \
{ MXTSTR(MXT_SPT_DYNAMICCONFIGURATIONCONTAINER), \
MXT_SPT_DYNAMICCONFIGURATIONCONTAINER }, \
{ MXTSTR(MXT_PROCI_ZONEINDICATION), \
MXT_PROCI_ZONEINDICATION }, \
{ MXTSTR(MXT_PROCG_SIMPLEGESTUREPROCESSOR), \
MXT_PROCG_SIMPLEGESTUREPROCESSOR }, \
{ MXTSTR(MXT_MOTION_SENSING_OBJECT), \
MXT_MOTION_SENSING_OBJECT }, \
{ MXTSTR(MXT_PROCI_MOTION_GESTURES), \
MXT_PROCI_MOTION_GESTURES }, \
{ MXTSTR(MXT_SPT_CTESCANCONFIG), \
MXT_SPT_CTESCANCONFIG }, \
{ MXTSTR(MXT_PROCI_GLOVEDETECTION), \
MXT_PROCI_GLOVEDETECTION }, \
{ MXTSTR(MXT_SPT_TOUCHEVENTTRIGGER), \
MXT_SPT_TOUCHEVENTTRIGGER }, \
{ MXTSTR(MXT_PROCI_RETRANSMISSIONCOMPENSATION), \
MXT_PROCI_RETRANSMISSIONCOMPENSATION }, \
{ MXTSTR(MXT_PROCI_UNLOCKGESTURE), \
MXT_PROCI_UNLOCKGESTURE }, \
{ MXTSTR(MXT_SPT_NOISESUPEXTENSION), \
MXT_SPT_NOISESUPEXTENSION }, \
{ MXTSTR(MXT_ENVIRO_LIGHTSENSING), \
MXT_ENVIRO_LIGHTSENSING }, \
{ MXTSTR(MXT_PROCI_GESTUREPROCESSOR), \
MXT_PROCI_GESTUREPROCESSOR }, \
{ MXTSTR(MXT_PEN_ACTIVESTYLUSPOWER), \
MXT_PEN_ACTIVESTYLUSPOWER }, \
{ MXTSTR(MXT_PROCG_NOISESUPACTIVESTYLUS), \
MXT_PROCG_NOISESUPACTIVESTYLUS }, \
{ MXTSTR(MXT_PEN_ACTIVESTYLUSDATA), \
MXT_PEN_ACTIVESTYLUSDATA }, \
{ MXTSTR(MXT_PEN_ACTIVESTYLUSRECEIVE), \
MXT_PEN_ACTIVESTYLUSRECEIVE }, \
{ MXTSTR(MXT_PEN_ACTIVESTYLUSTRANSMIT), \
MXT_PEN_ACTIVESTYLUSTRANSMIT }, \
{ MXTSTR(MXT_PEN_ACTIVESTYLUSWINDOW), \
MXT_PEN_ACTIVESTYLUSWINDOW }, \
{ MXTSTR(MXT_DEBUG_CUSTOMDATACONFIG), \
MXT_DEBUG_CUSTOMDATACONFIG }, \
{ MXTSTR(MXT_PROCI_SYMBOLGESTUREPROCESSOR), \
MXT_PROCI_SYMBOLGESTUREPROCESSOR }, \
{ MXTSTR(MXT_PROCI_TOUCHSEQUENCELOGGER), \
MXT_PROCI_TOUCHSEQUENCELOGGER }, \
{ MXTSTR(MXT_TOUCH_MULTITOUCHSCREEN), \
MXT_TOUCH_MULTITOUCHSCREEN }, \
{ MXTSTR(MXT_SPT_TOUCHSCREENHOVER), \
MXT_SPT_TOUCHSCREENHOVER }, \
{ MXTSTR(MXT_SPT_SELFCAPHOVERCTECONFIG), \
MXT_SPT_SELFCAPHOVERCTECONFIG }, \
{ MXTSTR(MXT_PROCI_SCHNOISESUPPRESSION), \
MXT_PROCI_SCHNOISESUPPRESSION }, \
{ MXTSTR(MXT_SPT_AUXTOUCHCONFIG), \
MXT_SPT_AUXTOUCHCONFIG }, \
{ MXTSTR(MXT_SPT_DRIVENPLATEHOVERCONFIG), \
MXT_SPT_DRIVENPLATEHOVERCONFIG }, \
{ MXTSTR(MXT_SPT_ACTIVESTYLUSMMBCONFIG), \
MXT_SPT_ACTIVESTYLUSMMBCONFIG }, \
{ MXTSTR(MXT_PROCG_NOISESUPSELFCAP), \
MXT_PROCG_NOISESUPSELFCAP }, \
{ MXTSTR(MXT_SPT_SELFCAPGLOBALCONFIG), \
MXT_SPT_SELFCAPGLOBALCONFIG }, \
{ MXTSTR(MXT_SPT_SELFCAPTUNINGPARAMS), \
MXT_SPT_SELFCAPTUNINGPARAMS }, \
{ MXTSTR(MXT_SPT_SELFCAPCONFIG), \
MXT_SPT_SELFCAPCONFIG }, \
{ MXTSTR(MXT_SPT_PROXMEASURECONFIG), \
MXT_SPT_PROXMEASURECONFIG }, \
{ MXTSTR(MXT_GEN_INFOBLOCK16BIT), \
MXT_GEN_INFOBLOCK16BIT }, \
{ MXTSTR(MXT_RESERVED255), \
MXT_RESERVED255 }
#define MXT_CMDPROC_RESET_OFF 0x00
#define MXT_CMDPROC_BACKUPNV_OFF 0x01
#define MXT_CMDPROC_CALIBRATE_OFF 0x02
#define MXT_CMDPROC_REPORTALL_OFF 0x03
#define MXT_CMDPROC_RESERVED04_OFF 0x04
#define MXT_CMDPROC_DIAGNOSTIC_OFF 0x05
struct mxt_strinfo {
const char *id;
int type;
};
struct mxt_rollup {
struct mxt_id_info info;
struct mxt_object *objs;
int nobjs;
uint8_t *buf;
};
uint32_t obp_convert_crc(struct mxt_raw_crc *crc);
uint32_t obp_crc24(uint8_t *buf, size_t bytes);
#endif