Lines Matching refs:kp
205 static void calc_dpd2pos_scale( KPADInsideStatus *kp ) in calc_dpd2pos_scale() argument
219 kp->dpd2pos_scale = sqrtf( sx * sx + sy * sy ) ;// Diagonal in calc_dpd2pos_scale()
222 if ( kp->center_org.x < 0.0f ) { in calc_dpd2pos_scale()
223 sx += kp->center_org.x ; in calc_dpd2pos_scale()
225 sx -= kp->center_org.x ; in calc_dpd2pos_scale()
229 if ( kp->center_org.y < 0.0f ) { in calc_dpd2pos_scale()
230 sy += kp->center_org.y ; in calc_dpd2pos_scale()
232 sy -= kp->center_org.y ; in calc_dpd2pos_scale()
237 kp->dpd2pos_scale /= sx ; in calc_dpd2pos_scale()
239 kp->dpd2pos_scale /= sy ; in calc_dpd2pos_scale()
250 static void reset_kpad( KPADInsideStatus *kp ) in reset_kpad() argument
253 KPADStatus *sp = &kp->status ; in reset_kpad()
261 kp->btn_repeat_time = 0 ; in reset_kpad()
262 kp->btn_repeat_next = kp->btn_repeat_delay ; in reset_kpad()
266 kp->dpd_valid2_ct = 0 ; in reset_kpad()
271 sp->horizon.x = kp->acc_horizon.x = kp->obj_horizon.x = 1.0f ; in reset_kpad()
272 sp->horizon.y = kp->acc_horizon.y = kp->obj_horizon.y = 0.0f ; in reset_kpad()
279 sp->dist = kp->dist_org ; in reset_kpad()
282 kp->sec_dist = sp->dist ; in reset_kpad()
283 kp->sec_length = kp->trust_sec_length = kp_dist_vv1 / kp->sec_dist ; in reset_kpad()
284 kp->sec_nrm = kp->sec_nrm_hori ; in reset_kpad()
291 kp->hard_acc = sp->acc ; in reset_kpad()
293 kp->ah_circle_pos = kp->acc_horizon ; in reset_kpad()
294 kp->ah_circle_ct = kp_ah_circle_ct ; in reset_kpad()
297 kp->valid_objs = 0 ; in reset_kpad()
299 op = &kp->kobj_sample[ WPAD_DPD_MAX_OBJECTS - 1 ] ; in reset_kpad()
302 } while ( --op >= kp->kobj_sample ) ; in reset_kpad()
304 op = &kp->kobj_regular[ KPAD_USE_OBJECTS - 1 ] ; in reset_kpad()
307 } while ( --op >= kp->kobj_regular ) ; in reset_kpad()
310 kp->wpad_ring_idx = -1 ; // Ring buffer unprocessed in reset_kpad()
311 kp->work_ct = 0 ; // Number of DPD processes in a single game frame in reset_kpad()
316 if ( kp->wpad_chan_no < 0 ) { in reset_kpad()
317 sp->wpad_err = (s8)WPADProbe( kp->wpad_chan_no + WPAD_MAX_CONTROLLERS, NULL ) ; in reset_kpad()
318 WPADStopMotor( kp->wpad_chan_no + WPAD_MAX_CONTROLLERS ) ; in reset_kpad()
321 kp->wpad_chan_no += WPAD_MAX_CONTROLLERS; in reset_kpad()
324 sp->wpad_err = (s8)WPADProbe( kp->wpad_chan_no, NULL ) ; in reset_kpad()
325 WPADStopMotor( kp->wpad_chan_no ) ; in reset_kpad()
347 kp->btn_cl_repeat_time = 0 ; in reset_kpad()
348 kp->btn_cl_repeat_next = kp->btn_cl_repeat_delay ; in reset_kpad()
376 KPADInsideStatus *kp = &inside_kpads[ chan ] ; in KPADCalibrateDPD() local
377 KPADStatus *sp = &kp->status ; in KPADCalibrateDPD()
383 if ( kp->valid_objs != KPAD_USE_OBJECTS ) return ( kp->valid_objs ) ; in KPADCalibrateDPD()
388 vx = kp->hard_acc.x ; in KPADCalibrateDPD()
389 vy = kp->hard_acc.y ; in KPADCalibrateDPD()
392 kp->accXY_nrm_hori.x = vx / f1 ; in KPADCalibrateDPD()
393 kp->accXY_nrm_hori.y = vy / f1 ; in KPADCalibrateDPD()
399 op1 = kp->kobj_sample ; in KPADCalibrateDPD()
409 kp->kobj_regular[0] = *op1 ; in KPADCalibrateDPD()
410 kp->kobj_regular[1] = *op2 ; in KPADCalibrateDPD()
414 kp->kobj_regular[0] = *op2 ; in KPADCalibrateDPD()
415 kp->kobj_regular[1] = *op1 ; in KPADCalibrateDPD()
422 calc_dpd2pos_scale( kp ) ; in KPADCalibrateDPD()
425 vx = kp->kobj_regular[KPAD_USE_OBJECTS-1].center.x - kp->kobj_regular[0].center.x ; in KPADCalibrateDPD()
426 vy = kp->kobj_regular[KPAD_USE_OBJECTS-1].center.y - kp->kobj_regular[0].center.y ; in KPADCalibrateDPD()
428 kp->sec_nrm_hori.x = vx * f1 ; in KPADCalibrateDPD()
429 kp->sec_nrm_hori.y = vy * f1 ; in KPADCalibrateDPD()
434 kp->dist_org = kp_dist_vv1 * f1 ; in KPADCalibrateDPD()
441 return ( kp->valid_objs ) ; in KPADCalibrateDPD()
474 KPADInsideStatus *kp = &inside_kpads[ chan ] ; in KPADSetSensorHeight() local
476 kp->center_org.x = 0.0f ; in KPADSetSensorHeight()
477 kp->center_org.y = -level ; in KPADSetSensorHeight()
478 calc_dpd2pos_scale( kp ) ; in KPADSetSensorHeight()
485 static void calc_button_repeat( KPADInsideStatus *kp, KPADStatus *sp, u32 dev_type ) in calc_button_repeat() argument
490 kp->btn_cl_repeat_time = 0 ; in calc_button_repeat()
491 kp->btn_cl_repeat_next = kp->btn_cl_repeat_delay ; in calc_button_repeat()
494 if ( sp->ex_status.cl.trig && kp->btn_cl_repeat_pulse ) { in calc_button_repeat()
499 kp->btn_cl_repeat_time += kp->work_ct ; in calc_button_repeat()
500 if ( kp->btn_cl_repeat_time >= KPAD_BTN_NO_RPT_DELAY ) { in calc_button_repeat()
501 kp->btn_cl_repeat_time -= KPAD_BTN_NO_RPT_DELAY ; in calc_button_repeat()
505 if ( kp->btn_cl_repeat_time >= kp->btn_cl_repeat_next ) { in calc_button_repeat()
509 kp->btn_cl_repeat_next += kp->btn_cl_repeat_pulse ; in calc_button_repeat()
512 if ( kp->btn_cl_repeat_time >= KPAD_BTN_RPT_TIME_MAX ) { in calc_button_repeat()
513 kp->btn_cl_repeat_time -= KPAD_BTN_RPT_TIME_MAX ; in calc_button_repeat()
514 kp->btn_cl_repeat_next -= KPAD_BTN_RPT_TIME_MAX ; in calc_button_repeat()
521 kp->btn_repeat_time = 0 ; in calc_button_repeat()
522 kp->btn_repeat_next = kp->btn_repeat_delay ; in calc_button_repeat()
525 if ( sp->trig && kp->btn_repeat_pulse ) { in calc_button_repeat()
531 kp->btn_repeat_time += kp->work_ct ; in calc_button_repeat()
532 if ( kp->btn_repeat_time >= KPAD_BTN_NO_RPT_DELAY ) { in calc_button_repeat()
533 kp->btn_repeat_time -= KPAD_BTN_NO_RPT_DELAY ; in calc_button_repeat()
537 if ( kp->btn_repeat_time >= kp->btn_repeat_next ) { in calc_button_repeat()
541 kp->btn_repeat_next += kp->btn_repeat_pulse ; in calc_button_repeat()
544 if ( kp->btn_repeat_time >= KPAD_BTN_RPT_TIME_MAX ) { in calc_button_repeat()
545 kp->btn_repeat_time -= KPAD_BTN_RPT_TIME_MAX ; in calc_button_repeat()
546 kp->btn_repeat_next -= KPAD_BTN_RPT_TIME_MAX ; in calc_button_repeat()
557 static void read_kpad_button( KPADInsideStatus *kp, void *vp, u32 dev_type ) in read_kpad_button() argument
559 KPADStatus *sp = &kp->status ; in read_kpad_button()
560 KPADEXStatus *ep = &kp->status.ex_status; in read_kpad_button()
568 if ( kp->wpad_chan_no < 0 ) return ; in read_kpad_button()
584 kp->wpad_chan_no -= WPAD_MAX_CONTROLLERS ; in read_kpad_button()
585 reset_kpad( kp ) ; in read_kpad_button()
599 kp->wpad_chan_no -= WPAD_MAX_CONTROLLERS ; in read_kpad_button()
600 reset_kpad( kp ); in read_kpad_button()
615 kp->wpad_chan_no -= WPAD_MAX_CONTROLLERS ; in read_kpad_button()
616 reset_kpad( kp ) ; in read_kpad_button()
632 calc_button_repeat( kp, sp, WPAD_DEV_CORE ) ; in read_kpad_button()
640 calc_button_repeat( kp, sp, WPAD_DEV_CLASSIC ); in read_kpad_button()
649 static void calc_acc( KPADInsideStatus *kp, f32 *acc, f32 acc2 ) in calc_acc() argument
663 if ( f1 >= kp->acc_play_radius ) { in calc_acc()
668 f1 /= kp->acc_play_radius ; in calc_acc()
672 f1 *= kp->acc_sensitivity ; in calc_acc()
682 static void calc_acc_horizon( KPADInsideStatus *kp ) in calc_acc_horizon() argument
688 f1 = sqrtf( kp->hard_acc.x * kp->hard_acc.x + kp->hard_acc.y * kp->hard_acc.y ) ; in calc_acc_horizon()
690 ax = kp->hard_acc.x / f1 ; in calc_acc_horizon()
691 ay = kp->hard_acc.y / f1 ; in calc_acc_horizon()
700 vx = kp->accXY_nrm_hori.x * ax + kp->accXY_nrm_hori.y * ay ; in calc_acc_horizon()
701 vy = kp->accXY_nrm_hori.y * ax - kp->accXY_nrm_hori.x * ay ; in calc_acc_horizon()
704 ax = ( vx - kp->acc_horizon.x ) * f1 + kp->acc_horizon.x ; in calc_acc_horizon()
705 ay = ( vy - kp->acc_horizon.y ) * f1 + kp->acc_horizon.y ; in calc_acc_horizon()
710 kp->acc_horizon.x = ax / f1 ; in calc_acc_horizon()
711 kp->acc_horizon.y = ay / f1 ; in calc_acc_horizon()
715 kp->ah_circle_pos.x += ( kp->acc_horizon.x - kp->ah_circle_pos.x ) * kp_ah_circle_pw ; in calc_acc_horizon()
716 kp->ah_circle_pos.y += ( kp->acc_horizon.y - kp->ah_circle_pos.y ) * kp_ah_circle_pw ; in calc_acc_horizon()
718 vx = kp->acc_horizon.x - kp->ah_circle_pos.x ; in calc_acc_horizon()
719 vy = kp->acc_horizon.y - kp->ah_circle_pos.y ; in calc_acc_horizon()
721 if ( kp->ah_circle_ct ) -- kp->ah_circle_ct ; in calc_acc_horizon()
723 kp->ah_circle_ct = kp_ah_circle_ct ; in calc_acc_horizon()
727 static void calc_acc_vertical( KPADInsideStatus *kp ) in calc_acc_vertical() argument
729 KPADStatus *sp = &kp->status ; in calc_acc_vertical()
734 ax = sqrtf( f2 = kp->hard_acc.x * kp->hard_acc.x + kp->hard_acc.y * kp->hard_acc.y ) ; in calc_acc_vertical()
735 ay = - kp->hard_acc.z ; in calc_acc_vertical()
772 static void read_kpad_acc( KPADInsideStatus *kp, void *vp, u32 dev_type, s32 chan ) in read_kpad_acc() argument
774 KPADStatus *sp = &kp->status ; in read_kpad_acc()
792 if ( kp->wpad_chan_no < 0 ) return ; in read_kpad_acc()
793 err = kp->status.wpad_err; in read_kpad_acc()
826 kp->wpad_chan_no -= WPAD_MAX_CONTROLLERS ; in read_kpad_acc()
827 reset_kpad( kp ) ; in read_kpad_acc()
832 kp->hard_acc.x = clamp_acc( (f32)(s32)-fp->accX * acc_scale_x, kp_rm_acc_max ) ; in read_kpad_acc()
833 kp->hard_acc.y = clamp_acc( (f32)(s32)-fp->accZ * acc_scale_z, kp_rm_acc_max ) ; in read_kpad_acc()
834 kp->hard_acc.z = clamp_acc( (f32)(s32) fp->accY * acc_scale_y, kp_rm_acc_max ) ; in read_kpad_acc()
842 kp->wpad_chan_no -= WPAD_MAX_CONTROLLERS ; in read_kpad_acc()
843 reset_kpad( kp ) ; in read_kpad_acc()
848 kp->hard_acc.x = clamp_acc( (f32)(s32)-wp->accX * acc_scale_x, kp_rm_acc_max ) ; in read_kpad_acc()
849 kp->hard_acc.y = clamp_acc( (f32)(s32)-wp->accZ * acc_scale_z, kp_rm_acc_max ) ; in read_kpad_acc()
850 kp->hard_acc.z = clamp_acc( (f32)(s32) wp->accY * acc_scale_y, kp_rm_acc_max ) ; in read_kpad_acc()
858 calc_acc( kp, &sp->acc.x, kp->hard_acc.x ) ; in read_kpad_acc()
859 calc_acc( kp, &sp->acc.y, kp->hard_acc.y ) ; in read_kpad_acc()
860 calc_acc( kp, &sp->acc.z, kp->hard_acc.z ) ; in read_kpad_acc()
870 calc_acc_horizon( kp ) ; in read_kpad_acc()
871 calc_acc_vertical( kp ) ; in read_kpad_acc()
883 …calc_acc( kp, &sp->ex_status.fs.acc.x, clamp_acc( (f32)(s32)-fp->fsAccX * fs_acc_scale_x, kp_fs_ac… in read_kpad_acc()
884 …calc_acc( kp, &sp->ex_status.fs.acc.y, clamp_acc( (f32)(s32)-fp->fsAccZ * fs_acc_scale_z, kp_fs_ac… in read_kpad_acc()
885 …calc_acc( kp, &sp->ex_status.fs.acc.z, clamp_acc( (f32)(s32) fp->fsAccY * fs_acc_scale_y, kp_fs_ac… in read_kpad_acc()
899 static void get_kobj( KPADInsideStatus *kp, void *vp, u32 dev_type ) in get_kobj() argument
917 kobj_p = &kp->kobj_sample[ WPAD_DPD_MAX_OBJECTS - 1 ] ; in get_kobj()
932 } while ( --kobj_p >= kp->kobj_sample ) ; in get_kobj()
981 static f32 calc_horizon( KPADInsideStatus *kp, Vec2 *p1, Vec2 *p2, Vec2 *hori ) in calc_horizon() argument
992 hori->x = kp->sec_nrm_hori.x * vx + kp->sec_nrm_hori.y * vy ; in calc_horizon()
993 hori->y = kp->sec_nrm_hori.y * vx - kp->sec_nrm_hori.x * vy ; in calc_horizon()
1002 static s8 select_2obj_first( KPADInsideStatus *kp ) in select_2obj_first() argument
1008 op1 = kp->kobj_sample ; in select_2obj_first()
1016 f1 = calc_horizon( kp, &op1->center, &op2->center, &hori ) ; in select_2obj_first()
1021 f1 = kp->acc_horizon.x * hori.x + kp->acc_horizon.y * hori.y ; in select_2obj_first()
1036 } while ( ++op2 <= &kp->kobj_sample[ WPAD_DPD_MAX_OBJECTS - 1 ] ) ; in select_2obj_first()
1037 } while ( ++op1 < &kp->kobj_sample[ WPAD_DPD_MAX_OBJECTS - 1 ] ) ; in select_2obj_first()
1042 kp->kobj_regular[0] = *rp1 ; in select_2obj_first()
1043 kp->kobj_regular[1] = *rp2 ; in select_2obj_first()
1052 static s8 select_2obj_continue( KPADInsideStatus *kp ) in select_2obj_continue() argument
1061 op1 = kp->kobj_sample ; in select_2obj_continue()
1081 f1 -= kp->sec_dist ; in select_2obj_continue()
1090 f2 = kp->sec_nrm.x * nrm.x + kp->sec_nrm.y * nrm.y ; in select_2obj_continue()
1113 } while ( ++op2 <= &kp->kobj_sample[ WPAD_DPD_MAX_OBJECTS - 1 ] ) ; in select_2obj_continue()
1114 } while ( ++op1 < &kp->kobj_sample[ WPAD_DPD_MAX_OBJECTS - 1 ] ) ; in select_2obj_continue()
1119 kp->kobj_regular[0] = *rp1 ; in select_2obj_continue()
1120 kp->kobj_regular[1] = *rp2 ; in select_2obj_continue()
1129 static s8 select_1obj_first( KPADInsideStatus *kp ) in select_1obj_first() argument
1137 vx = kp->sec_nrm_hori.x * kp->acc_horizon.x + kp->sec_nrm_hori.y * kp->acc_horizon.y ; in select_1obj_first()
1138 vy = kp->sec_nrm_hori.y * kp->acc_horizon.x - kp->sec_nrm_hori.x * kp->acc_horizon.y ; in select_1obj_first()
1141 vx *= kp->trust_sec_length ; in select_1obj_first()
1142 vy *= kp->trust_sec_length ; in select_1obj_first()
1145 op1 = kp->kobj_sample ; in select_1obj_first()
1160 kp->kobj_regular[1] = *op1 ; in select_1obj_first()
1162 kp->kobj_regular[0].center = p1 ; in select_1obj_first()
1163 kp->kobj_regular[0].error_fg = 0 ; in select_1obj_first()
1164 kp->kobj_regular[0].state_fg = -1 ; in select_1obj_first()
1173 kp->kobj_regular[0] = *op1 ; in select_1obj_first()
1175 kp->kobj_regular[1].center = p2 ; in select_1obj_first()
1176 kp->kobj_regular[1].error_fg = 0 ; in select_1obj_first()
1177 kp->kobj_regular[1].state_fg = -1 ; in select_1obj_first()
1183 } while ( ++op1 < &kp->kobj_sample[ WPAD_DPD_MAX_OBJECTS ] ) ; in select_1obj_first()
1192 static s8 select_1obj_continue( KPADInsideStatus *kp ) in select_1obj_continue() argument
1200 op1 = kp->kobj_regular ; in select_1obj_continue()
1205 op2 = kp->kobj_sample ; in select_1obj_continue()
1217 } while ( ++op2 < &kp->kobj_sample[ WPAD_DPD_MAX_OBJECTS ] ) ; in select_1obj_continue()
1218 } while ( ++op1 < &kp->kobj_regular[ KPAD_USE_OBJECTS ] ) ; in select_1obj_continue()
1226 … kp->sec_nrm.x = kp->sec_nrm_hori.x * kp->acc_horizon.x + kp->sec_nrm_hori.y * kp->acc_horizon.y ; in select_1obj_continue()
1227 … kp->sec_nrm.y = kp->sec_nrm_hori.y * kp->acc_horizon.x - kp->sec_nrm_hori.x * kp->acc_horizon.y ; in select_1obj_continue()
1230 vx = kp->sec_length * kp->sec_nrm.x ; in select_1obj_continue()
1231 vy = kp->sec_length * kp->sec_nrm.y ; in select_1obj_continue()
1232 if ( rp1 == &kp->kobj_regular[0] ) { in select_1obj_continue()
1233 kp->kobj_regular[1].center.x = rp1->center.x + vx ; in select_1obj_continue()
1234 kp->kobj_regular[1].center.y = rp1->center.y + vy ; in select_1obj_continue()
1235 kp->kobj_regular[1].error_fg = 0 ; in select_1obj_continue()
1236 kp->kobj_regular[1].state_fg = -1 ; in select_1obj_continue()
1238 kp->kobj_regular[0].center.x = rp1->center.x - vx ; in select_1obj_continue()
1239 kp->kobj_regular[0].center.y = rp1->center.y - vy ; in select_1obj_continue()
1240 kp->kobj_regular[0].error_fg = 0 ; in select_1obj_continue()
1241 kp->kobj_regular[0].state_fg = -1 ; in select_1obj_continue()
1244 if ( kp->status.dpd_valid_fg < 0 ) { in select_1obj_continue()
1255 static void calc_obj_horizon( KPADInsideStatus *kp ) in calc_obj_horizon() argument
1260 vx = kp->kobj_regular[1].center.x - kp->kobj_regular[0].center.x ; in calc_obj_horizon()
1261 vy = kp->kobj_regular[1].center.y - kp->kobj_regular[0].center.y ; in calc_obj_horizon()
1262 kp->sec_length = sqrtf( vx * vx + vy * vy ) ; // Should not be zero in calc_obj_horizon()
1264 f1 = 1.0f / kp->sec_length ; in calc_obj_horizon()
1265 kp->sec_dist = kp_dist_vv1 * f1 ; in calc_obj_horizon()
1267 kp->sec_nrm.x = ( vx *= f1 ) ; in calc_obj_horizon()
1268 kp->sec_nrm.y = ( vy *= f1 ) ; in calc_obj_horizon()
1270 kp->obj_horizon.x = kp->sec_nrm_hori.x * vx + kp->sec_nrm_hori.y * vy ; in calc_obj_horizon()
1271 kp->obj_horizon.y = kp->sec_nrm_hori.y * vx - kp->sec_nrm_hori.x * vy ; in calc_obj_horizon()
1278 static void calc_dpd_variable( KPADInsideStatus *kp, s8 valid_fg_next ) in calc_dpd_variable() argument
1280 KPADStatus *sp = &kp->status ; in calc_dpd_variable()
1294 pos.x = kp->sec_nrm_hori.x * kp->sec_nrm.x + kp->sec_nrm_hori.y * kp->sec_nrm.y ; in calc_dpd_variable()
1295 pos.y = kp->sec_nrm_hori.y * kp->sec_nrm.x - kp->sec_nrm_hori.x * kp->sec_nrm.y ; in calc_dpd_variable()
1310 if ( f1 >= kp->hori_play_radius ) { in calc_dpd_variable()
1315 f1 /= kp->hori_play_radius ; in calc_dpd_variable()
1319 f1 *= kp->hori_sensitivity ; in calc_dpd_variable()
1339 dist = kp_dist_vv1 / kp->sec_length ; in calc_dpd_variable()
1357 if ( f1 >= kp->dist_play_radius ) { in calc_dpd_variable()
1362 f1 /= kp->dist_play_radius ; in calc_dpd_variable()
1366 f1 *= kp->dist_sensitivity ; in calc_dpd_variable()
1383 pos.x = ( kp->kobj_regular[0].center.x + kp->kobj_regular[1].center.x ) * 0.5f ; in calc_dpd_variable()
1384 pos.y = ( kp->kobj_regular[0].center.y + kp->kobj_regular[1].center.y ) * 0.5f ; in calc_dpd_variable()
1387 f1 = kp->sec_nrm.x * kp->sec_nrm_hori.x + kp->sec_nrm.y * kp->sec_nrm_hori.y ; in calc_dpd_variable()
1388 f2 = -kp->sec_nrm.y * kp->sec_nrm_hori.x + kp->sec_nrm.x * kp->sec_nrm_hori.y ; in calc_dpd_variable()
1393 vec.x = ( kp->center_org.x - vec.x ) * kp->dpd2pos_scale ; in calc_dpd_variable()
1394 vec.y = ( kp->center_org.y - vec.y ) * kp->dpd2pos_scale ; in calc_dpd_variable()
1397 pos.x = -kp->accXY_nrm_hori.y * vec.x + kp->accXY_nrm_hori.x * vec.y ; in calc_dpd_variable()
1398 pos.y = -kp->accXY_nrm_hori.x * vec.x - kp->accXY_nrm_hori.y * vec.y ; in calc_dpd_variable()
1413 if ( f1 >= kp->pos_play_radius ) { in calc_dpd_variable()
1418 f1 /= kp->pos_play_radius ; in calc_dpd_variable()
1422 f1 *= kp->pos_sensitivity ; in calc_dpd_variable()
1443 static void read_kpad_dpd( KPADInsideStatus *kp, void *vp, u32 dev_type ) in read_kpad_dpd() argument
1445 KPADStatus *sp = &kp->status ; in read_kpad_dpd()
1454 if ( kp->wpad_chan_no < 0 ) return ; in read_kpad_dpd()
1458 err = kp->status.wpad_err; in read_kpad_dpd()
1469 kp->wpad_chan_no -= WPAD_MAX_CONTROLLERS ; in read_kpad_dpd()
1470 reset_kpad( kp ) ; in read_kpad_dpd()
1476 get_kobj( kp, fp, WPAD_DEV_FREESTYLE ) ; in read_kpad_dpd()
1484 kp->wpad_chan_no -= WPAD_MAX_CONTROLLERS ; in read_kpad_dpd()
1485 reset_kpad( kp ) ; in read_kpad_dpd()
1491 get_kobj( kp, cp, WPAD_DEV_CLASSIC ) ; in read_kpad_dpd()
1500 kp->wpad_chan_no -= WPAD_MAX_CONTROLLERS ; in read_kpad_dpd()
1501 reset_kpad( kp ) ; in read_kpad_dpd()
1507 get_kobj( kp, wp, WPAD_DEV_CORE ) ; in read_kpad_dpd()
1515 check_kobj_outside_frame( kp->kobj_sample ) ; // Set surrounding objects to invalid in read_kpad_dpd()
1516 …check_kobj_same_position( kp->kobj_sample ) ; // Set objects at the same coordinate to be invalid in read_kpad_dpd()
1519 kp->valid_objs = 0 ; in read_kpad_dpd()
1520 op1 = &kp->kobj_sample[ WPAD_DPD_MAX_OBJECTS - 1 ] ; in read_kpad_dpd()
1522 if ( op1->error_fg == 0 ) ++ kp->valid_objs ; in read_kpad_dpd()
1523 } while ( --op1 >= kp->kobj_sample ) ; in read_kpad_dpd()
1530 if ( kp->valid_objs >= 2 ) in read_kpad_dpd()
1532 valid_fg_next = select_2obj_continue( kp ); in read_kpad_dpd()
1535 if ( kp->valid_objs >= 1 ) in read_kpad_dpd()
1537 valid_fg_next = select_1obj_continue( kp ); in read_kpad_dpd()
1542 if ( kp->valid_objs >= 2 ) in read_kpad_dpd()
1544 valid_fg_next = select_2obj_first( kp ); in read_kpad_dpd()
1547 if ( kp->valid_objs >= 1 ) in read_kpad_dpd()
1549 valid_fg_next = select_1obj_continue( kp ); in read_kpad_dpd()
1554 if ( kp->valid_objs >= 2 ) in read_kpad_dpd()
1556 valid_fg_next = select_2obj_first( kp ); in read_kpad_dpd()
1560 if ( kp->valid_objs == 1 ) in read_kpad_dpd()
1562 valid_fg_next = select_1obj_first( kp ); in read_kpad_dpd()
1576 calc_obj_horizon( kp ) ; in read_kpad_dpd()
1579 if ( kp->ah_circle_ct == 0 ) { in read_kpad_dpd()
1580 …if ( kp->obj_horizon.x * kp->acc_horizon.x + kp->obj_horizon.y * kp->acc_horizon.y <= kp_err_acc_i… in read_kpad_dpd()
1583 kp->kobj_regular[0].error_fg = in read_kpad_dpd()
1584 kp->kobj_regular[1].error_fg = 1 ; in read_kpad_dpd()
1590 if ( kp->dpd_valid2_ct == 200 ) { in read_kpad_dpd()
1591 kp->trust_sec_length = kp->sec_length ; in read_kpad_dpd()
1593 ++ kp->dpd_valid2_ct ; in read_kpad_dpd()
1596 kp->dpd_valid2_ct = 0 ; in read_kpad_dpd()
1599 kp->dpd_valid2_ct = 0 ; in read_kpad_dpd()
1603 calc_dpd_variable( kp, valid_fg_next ) ; in read_kpad_dpd()
1687 static void read_kpad_stick( KPADInsideStatus *kp, void *vp ) in read_kpad_stick() argument
1689 KPADStatus *sp = &kp->status ; in read_kpad_stick()
1696 if ( kp->wpad_chan_no < 0 ) return ; in read_kpad_stick()
1700 err = kp->status.wpad_err; in read_kpad_stick()
1708 kp->wpad_chan_no -= WPAD_MAX_CONTROLLERS ; in read_kpad_stick()
1709 reset_kpad( kp ) ; in read_kpad_stick()
1722 kp->wpad_chan_no -= WPAD_MAX_CONTROLLERS ; in read_kpad_stick()
1723 reset_kpad( kp ) ; in read_kpad_stick()
1743 KPADInsideStatus *kp = &inside_kpads[ chan ] ; in check_dpd_setting() local
1748 if ( kp->dpd_ctrl_busy ) in check_dpd_setting()
1751 reset_kpad( kp ); in check_dpd_setting()
1759 if ( kp->dpd_set_enabled && ! dpd_enabled ) in check_dpd_setting()
1762 reset_kpad( kp ); in check_dpd_setting()
1765 else if ( !(kp->dpd_set_enabled) && dpd_enabled ) in check_dpd_setting()
1768 reset_kpad( kp ); in check_dpd_setting()
1771 else if ( kp->dpd_ctrl_retry_flag ) in check_dpd_setting()
1774 if ( kp->dpd_set_enabled ) in check_dpd_setting()
1782 reset_kpad( kp ); in check_dpd_setting()
1785 else if ( kp->dpd_request_flag ) in check_dpd_setting()
1805 static s32 check_device( s32 chan, KPADInsideStatus *kp ) in check_device() argument
1817 if ( kp->wpad_chan_no >= 0 ) in check_device()
1821 kp->wpad_chan_no = (s16)( chan - WPAD_MAX_CONTROLLERS ); in check_device()
1822 kp->status.dev_type = WPAD_DEV_NOT_FOUND ; in check_device()
1832 else if ( type == kp->status.dev_type ) in check_device()
1841 if ( kp->dpd_set_enabled ) in check_device()
1850 kp->wpad_chan_no = (s16)chan ; in check_device()
1851 kp->status.dev_type = type ; in check_device()
1852 reset_kpad( kp ) ; in check_device()
1859 kp->wpad_chan_no = (s16)( chan - WPAD_MAX_CONTROLLERS ) ; in check_device()
1870 KPADInsideStatus *kp = &inside_kpads[ chan ] ; in KPADRead() local
1887 sp->dev_type = kp->status.dev_type ; in KPADRead()
1893 if ( check_device( chan, kp ) ) { in KPADRead()
1904 if ( !is_valid_device( kp->status.dev_type ) ){ in KPADRead()
1914 if( kp->wpad_chan_no >= 0 ) { in KPADRead()
1915 idx_now = (s32)WPADGetLatestIndexInBuf( kp->wpad_chan_no ) ; in KPADRead()
1917 idx_now = (s32)WPADGetLatestIndexInBuf( kp->wpad_chan_no + WPAD_MAX_CONTROLLERS ) ; in KPADRead()
1920 idx_old = kp->wpad_ring_idx ; in KPADRead()
1925 kp->wpad_ring_idx = (s16)idx_now ; in KPADRead()
1946 kp->work_ct = 0 ; in KPADRead()
1948 if ( kp->status.dev_type == WPAD_DEV_CORE in KPADRead()
1949 || kp->status.dev_type == WPAD_DEV_FUTURE in KPADRead()
1950 || kp->status.dev_type == WPAD_DEV_UNKNOWN in KPADRead()
1951 …|| kp->status.dev_type == WPAD_DEV_NOT_SUPPORTED ) { // Treat the same way as core contro… in KPADRead()
1955 wp = &((WPADStatus*)kp->wpad_ring_bf)[ idx ] ; in KPADRead()
1958 kp->status.wpad_err = wp->err ; in KPADRead()
1961 read_kpad_acc( kp, wp, WPAD_DEV_CORE, chan ) ; in KPADRead()
1962 read_kpad_dpd( kp, wp, WPAD_DEV_CORE ) ; in KPADRead()
1965 if ( kp->work_ct >= sample_ct - copy_ct ) { in KPADRead()
1967 *sp = kp->status ; // The button information is actually unnecessary copying in KPADRead()
1969 } while ( ++ kp->work_ct < sample_ct ) ; in KPADRead()
1970 } else if ( kp->status.dev_type == WPAD_DEV_FREESTYLE) { in KPADRead()
1974 fp = &((WPADFSStatus*)kp->wpad_ring_bf)[ idx ] ; in KPADRead()
1977 kp->status.wpad_err = fp->err ; in KPADRead()
1980 read_kpad_acc( kp, fp, WPAD_DEV_FREESTYLE, chan ) ; in KPADRead()
1981 read_kpad_dpd( kp, fp, WPAD_DEV_FREESTYLE ) ; in KPADRead()
1982 read_kpad_stick( kp, fp ) ; in KPADRead()
1985 if ( kp->work_ct >= sample_ct - copy_ct ) { in KPADRead()
1987 *sp = kp->status ; // The button information is actually unnecessary copying in KPADRead()
1989 } while ( ++ kp->work_ct < sample_ct ) ; in KPADRead()
1990 } else if ( kp->status.dev_type == WPAD_DEV_CLASSIC ) { in KPADRead()
1994 cp = &((WPADCLStatus*)kp->wpad_ring_bf)[ idx ] ; in KPADRead()
1997 kp->status.wpad_err = cp->err ; in KPADRead()
2000 read_kpad_acc( kp, cp, WPAD_DEV_CLASSIC, chan ) ; in KPADRead()
2001 read_kpad_dpd( kp, cp, WPAD_DEV_CLASSIC ) ; in KPADRead()
2002 read_kpad_stick( kp, cp ) ; in KPADRead()
2005 if ( kp->work_ct >= sample_ct - copy_ct ) { in KPADRead()
2007 *sp = kp->status ; // The button information is actually unnecessary copying in KPADRead()
2009 } while ( ++ kp->work_ct < sample_ct ) ; in KPADRead()
2017 if ( kp->status.dev_type == WPAD_DEV_CORE in KPADRead()
2018 || kp->status.dev_type == WPAD_DEV_FUTURE in KPADRead()
2019 || kp->status.dev_type == WPAD_DEV_NOT_SUPPORTED in KPADRead()
2020 || kp->status.dev_type == WPAD_DEV_UNKNOWN ) { // Treat the same way as core controller in KPADRead()
2021 read_kpad_button( kp, wp, WPAD_DEV_CORE ) ; in KPADRead()
2022 } else if ( kp->status.dev_type == WPAD_DEV_FREESTYLE ) { in KPADRead()
2023 read_kpad_button( kp, fp, WPAD_DEV_FREESTYLE ) ; in KPADRead()
2024 } else if ( kp->status.dev_type == WPAD_DEV_CLASSIC ) { in KPADRead()
2025 read_kpad_button( kp, cp, WPAD_DEV_CLASSIC ) ; in KPADRead()
2031 sp->hold = kp->status.hold ; in KPADRead()
2032 sp->trig = kp->status.trig ; in KPADRead()
2033 sp->release = kp->status.release ; in KPADRead()
2035 if ( kp->status.dev_type == WPAD_DEV_CLASSIC ) { in KPADRead()
2036 sp->ex_status.cl.hold = kp->status.ex_status.cl.hold; in KPADRead()
2037 sp->ex_status.cl.trig = kp->status.ex_status.cl.trig; in KPADRead()
2038 sp->ex_status.cl.release = kp->status.ex_status.cl.release; in KPADRead()
2055 KPADInsideStatus *kp ; in KPADInit() local
2065 kp = &inside_kpads[i] ; in KPADInit()
2068 kp->dpd_set_enabled = TRUE; in KPADInit()
2069 kp->dpd_ctrl_retry_flag = FALSE; in KPADInit()
2070 kp->dpd_request_flag = FALSE; in KPADInit()
2071 kp->dpd_ctrl_busy = FALSE; in KPADInit()
2072 kp->dpd_ctrl_callback = NULL; in KPADInit()
2075 kp->status.dev_type = WPAD_DEV_NOT_FOUND ; in KPADInit()
2076 kp->wpad_chan_no = (s16)( i - WPAD_MAX_CONTROLLERS ) ; in KPADInit()
2077 (void)check_device( i, kp ) ; in KPADInit()
2080 kp->dist_org = idist_org ; in KPADInit()
2081 kp->accXY_nrm_hori = iaccXY_nrm_hori ; in KPADInit()
2082 kp->sec_nrm_hori = isec_nrm_hori ; in KPADInit()
2083 kp->center_org = icenter_org ; in KPADInit()
2084 calc_dpd2pos_scale( kp ) ; in KPADInit()
2087 kp->pos_play_radius = in KPADInit()
2088 kp->hori_play_radius = in KPADInit()
2089 kp->dist_play_radius = in KPADInit()
2090 kp->acc_play_radius = 0.0f ; in KPADInit()
2092 kp->pos_sensitivity = in KPADInit()
2093 kp->hori_sensitivity = in KPADInit()
2094 kp->dist_sensitivity = in KPADInit()
2095 kp->acc_sensitivity = 1.0f ; in KPADInit()
2100 kp->btn_repeat_delay = KPAD_BTN_NO_RPT_DELAY ; in KPADInit()
2101 kp->btn_repeat_pulse = 0 ; in KPADInit()
2103 kp->btn_cl_repeat_delay = KPAD_BTN_NO_RPT_DELAY ; in KPADInit()
2104 kp->btn_cl_repeat_pulse = 0 ; in KPADInit()
2119 KPADInsideStatus *kp ; in KPADReset() local
2136 kp = &inside_kpads[ WPAD_MAX_CONTROLLERS - 1 ] ; in KPADReset()
2138 reset_kpad( kp ) ; in KPADReset()
2139 } while ( --kp >= inside_kpads ) ; in KPADReset()
2166 KPADInsideStatus *kp = &inside_kpads[ chan ] ; in set_dpd_disable() local
2188 kp->dpd_ctrl_retry_flag = (ret == WPAD_ERR_BUSY)? TRUE : FALSE; in set_dpd_disable()
2191 kp->dpd_ctrl_busy = TRUE; in set_dpd_disable()
2195 kp->dpd_ctrl_retry_flag = TRUE; in set_dpd_disable()
2198 WPADSetAutoSamplingBuf( chan, kp->wpad_ring_bf, KPAD_RING_BUFS ); in set_dpd_disable()
2213 KPADInsideStatus *kp = &inside_kpads[ chan ] ; in set_dpd_enable() local
2237 kp->dpd_ctrl_retry_flag = (ret != WPAD_ERR_NONE)? TRUE : FALSE; in set_dpd_enable()
2240 kp->dpd_ctrl_busy = TRUE; in set_dpd_enable()
2244 kp->dpd_ctrl_retry_flag = TRUE; in set_dpd_enable()
2247 WPADSetAutoSamplingBuf( chan, kp->wpad_ring_bf, KPAD_RING_BUFS ); in set_dpd_enable()
2254 KPADInsideStatus *kp = &inside_kpads[ chan ]; in control_dpd_start_() local
2257 if ( ! kp->dpd_request_flag ) in control_dpd_start_()
2264 kp->dpd_request_flag = TRUE; in control_dpd_start_()
2265 if ( kp->dpd_ctrl_callback ) in control_dpd_start_()
2267 kp->dpd_ctrl_callback( chan, KPAD_STATE_CTRL_DPD_START ); in control_dpd_start_()
2277 KPADInsideStatus *kp = &inside_kpads[ chan ]; in control_dpd_end_() local
2281 if ( kp->dpd_request_flag ) in control_dpd_end_()
2283 kp->dpd_request_flag = FALSE; in control_dpd_end_()
2284 if ( kp->dpd_ctrl_callback ) in control_dpd_end_()
2286 kp->dpd_ctrl_callback( chan, KPAD_STATE_CTRL_DPD_FINISHED ); in control_dpd_end_()
2295 KPADInsideStatus *kp = &inside_kpads[ chan ]; in KPADiRestoreDPD() local
2303 before = kp->dpd_set_enabled; in KPADiRestoreDPD()
2304 kp->dpd_set_enabled = enable; in KPADiRestoreDPD()
2338 KPADInsideStatus *kp = &inside_kpads[ chan ]; in KPADiControlDpdCallback() local
2341 kp->dpd_ctrl_busy = FALSE; in KPADiControlDpdCallback()
2346 kp->dpd_ctrl_retry_flag = TRUE; in KPADiControlDpdCallback()
2353 if ( ( dpdEnabled == kp->dpd_set_enabled ) && in KPADiControlDpdCallback()
2354 ( ! kp->dpd_ctrl_retry_flag ) ) in KPADiControlDpdCallback()