uint8_t *read_sms_raw_bytes(int type, int *size) { int kernFunc; char *servMatch; int dataType; uint8_t *data; int t; data = malloc(sizeof(union motion_data)); if ( data == 0 ) return 0; t = type; if ( t == 0 ) { int i; for ( i = 1; ; i++ ) { if ( !set_values(i, &kernFunc, &servMatch, &dataType) ) break; if ( probe_sms(kernFunc, servMatch, dataType, data) ) { t = i; break; } } } else { if ( !set_values(type, &kernFunc, &servMatch, &dataType) ) return 0; if ( !probe_sms(kernFunc, servMatch, dataType, data) ) return 0; } if ( t ) { switch ( dataType ) { case PB_IB: if ( size ) *size = sizeof(struct pb_ib_data); break; case MBP: if ( size ) *size = sizeof(struct mbp_data); break; default: t = 0; break; } if ( t ) return data; } free(data); if ( size ) *size = 0; return 0; }
int read_sms_raw(int type, int *x, int *y, int *z) { int kernFunc; char *servMatch; int dataType; union motion_data data; if ( !set_values(type, &kernFunc, &servMatch, &dataType) ) return 0; if ( probe_sms(kernFunc, servMatch, dataType, &data) ) { switch ( dataType ) { case PB_IB: if ( x ) *x = data.pb_ib.x; if ( y ) *y = data.pb_ib.y; if ( z ) *z = data.pb_ib.z; break; case MBP: if ( x ) *x = data.mbp.x; if ( y ) *y = data.mbp.y; if ( z ) *z = data.mbp.z; break; default: return 0; } return 1; } return 0; }
int detect_sms() { int kernFunc; char *servMatch; int dataType; union motion_data data; int i; for ( i = 1; ; i++ ) { if ( !set_values(i, &kernFunc, &servMatch, &dataType) ) break; if ( probe_sms(kernFunc, servMatch, dataType, &data) ) return i; } return unknown; }