Ticket #5: cwiid-wminput-plugin-enhancements.diff
| File cwiid-wminput-plugin-enhancements.diff, 2.8 kB (added by amp, 5 years ago) |
|---|
-
wminput/plugins/ir_ptr/ir_ptr.c
32 32 uint16_t x; 33 33 uint16_t y; 34 34 }; 35 int a_debounce, b_debounce; 35 36 36 37 /* static objects are initialized to 0 by default */ 37 38 static int a_index = -1, b_index = -1; … … 134 135 } 135 136 } 136 137 } 138 139 #define DEBOUNCE_THRESHOLD 50 140 137 141 /* set a & b, mirror the x coordinates */ 138 142 if (a_index == -1) { 139 a.valid = 0; 143 a_debounce++; 144 if( a_debounce > DEBOUNCE_THRESHOLD ) { 145 a.valid = 0; 146 } 147 else { 148 a = prev_a; 149 } 140 150 } 141 151 else { 142 152 a = ir_mesg->src[a_index]; 143 153 a.x = WIIMOTE_IR_X_MAX - a.x; 154 a_debounce = 0; 144 155 } 145 156 if (b_index == -1) { 146 b.valid = 0; 157 b_debounce++; 158 if( b_debounce > DEBOUNCE_THRESHOLD ) { 159 b.valid = 0; 160 } 161 else { 162 b = prev_b; 163 } 147 164 } 148 165 else { 149 166 b = ir_mesg->src[b_index]; 150 167 b.x = WIIMOTE_IR_X_MAX - b.x; 168 b_debounce = 0; 151 169 } 152 170 153 171 /* if both sources are valid, calculate the center */ … … 216 234 old_flags = flags; 217 235 218 236 data.axes[0].valid = data.axes[1].valid = c.valid; 219 data.axes[0].value = c.x;220 data.axes[1].value = c.y;221 237 238 #define NEW_AMOUNT 0.6 239 #define OLD_AMOUNT (1.0-NEW_AMOUNT) 240 241 data.axes[0].value = c.x*NEW_AMOUNT + data.axes[0].value*OLD_AMOUNT; 242 data.axes[1].value = c.y*NEW_AMOUNT + data.axes[1].value*OLD_AMOUNT; 243 222 244 return &data; 223 245 } 224 246 -
wminput/plugins/acc/acc.c
127 127 return ret; 128 128 } 129 129 130 #define NEW_AMOUNT 0.1 131 #define OLD_AMOUNT (1.0-NEW_AMOUNT) 132 double a_x = 0, a_y = 0, a_z = 0; 133 130 134 static void process_acc(struct wiimote_acc_mesg *mesg) 131 135 { 132 double a _x, a_y, a_z, a;136 double a; 133 137 double roll, pitch; 134 138 135 a_x =((double)mesg->x - acc_zero.x) /136 (acc_one.x - acc_zero.x);137 a_y =((double)mesg->y - acc_zero.y) /138 (acc_one.y - acc_zero.y);139 a_z =((double)mesg->z - acc_zero.z) /140 (acc_one.z - acc_zero.z);139 a_x = (((double)mesg->x - acc_zero.x) / 140 (acc_one.x - acc_zero.x))*NEW_AMOUNT + a_x*OLD_AMOUNT; 141 a_y = (((double)mesg->y - acc_zero.y) / 142 (acc_one.y - acc_zero.y))*NEW_AMOUNT + a_y*OLD_AMOUNT; 143 a_z = (((double)mesg->z - acc_zero.z) / 144 (acc_one.z - acc_zero.z))*NEW_AMOUNT + a_z*OLD_AMOUNT; 141 145 142 146 a = sqrt(pow(a_x,2)+pow(a_y,2)+pow(a_z,2)); 143 147 roll = atan(a_x/a_z); … … 147 151 148 152 pitch = atan(a_y/a_z*cos(roll)); 149 153 150 data.axes[0].value = roll*1000; 151 data.axes[1].value = pitch*1000; 154 //printf( "roll %.2f pitch %.2f\n", roll, pitch ); 152 155 156 data.axes[0].value = roll*2000; 157 data.axes[1].value = pitch*2000; 158 153 159 if ((a > 0.85) && (a < 1.15)) { 154 160 if ((fabs(roll)*(180/PI) > 10) && (fabs(pitch)*(180/PI) < 80)) { 155 161 data.axes[2].valid = 1;
