Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: content/browser/gamepad/xbox_data_fetcher_mac.cc

Issue 1549113002: Switch to standard integer types in content/browser/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/gamepad/xbox_data_fetcher_mac.h" 5 #include "content/browser/gamepad/xbox_data_fetcher_mac.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <limits> 9 #include <limits>
10 10
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 bool bumper_left : 1; 62 bool bumper_left : 1;
63 bool bumper_right : 1; 63 bool bumper_right : 1;
64 bool guide : 1; 64 bool guide : 1;
65 bool dummy1 : 1; // Always 0. 65 bool dummy1 : 1; // Always 0.
66 66
67 bool a : 1; 67 bool a : 1;
68 bool b : 1; 68 bool b : 1;
69 bool x : 1; 69 bool x : 1;
70 bool y : 1; 70 bool y : 1;
71 71
72 uint8 trigger_left; 72 uint8_t trigger_left;
73 uint8 trigger_right; 73 uint8_t trigger_right;
74 74
75 int16 stick_left_x; 75 int16_t stick_left_x;
76 int16 stick_left_y; 76 int16_t stick_left_y;
77 int16 stick_right_x; 77 int16_t stick_right_x;
78 int16 stick_right_y; 78 int16_t stick_right_y;
79 79
80 // Always 0. 80 // Always 0.
81 uint32 dummy2; 81 uint32_t dummy2;
82 uint16 dummy3; 82 uint16_t dummy3;
83 }; 83 };
84 84
85 struct XboxOneButtonData { 85 struct XboxOneButtonData {
86 bool sync : 1; 86 bool sync : 1;
87 bool dummy1 : 1; // Always 0. 87 bool dummy1 : 1; // Always 0.
88 bool start : 1; 88 bool start : 1;
89 bool back : 1; 89 bool back : 1;
90 90
91 bool a : 1; 91 bool a : 1;
92 bool b : 1; 92 bool b : 1;
93 bool x : 1; 93 bool x : 1;
94 bool y : 1; 94 bool y : 1;
95 95
96 bool dpad_up : 1; 96 bool dpad_up : 1;
97 bool dpad_down : 1; 97 bool dpad_down : 1;
98 bool dpad_left : 1; 98 bool dpad_left : 1;
99 bool dpad_right : 1; 99 bool dpad_right : 1;
100 100
101 bool bumper_left : 1; 101 bool bumper_left : 1;
102 bool bumper_right : 1; 102 bool bumper_right : 1;
103 bool stick_left_click : 1; 103 bool stick_left_click : 1;
104 bool stick_right_click : 1; 104 bool stick_right_click : 1;
105 105
106 uint16 trigger_left; 106 uint16_t trigger_left;
107 uint16 trigger_right; 107 uint16_t trigger_right;
108 108
109 int16 stick_left_x; 109 int16_t stick_left_x;
110 int16 stick_left_y; 110 int16_t stick_left_y;
111 int16 stick_right_x; 111 int16_t stick_right_x;
112 int16 stick_right_y; 112 int16_t stick_right_y;
113 }; 113 };
114 #pragma pack(pop) 114 #pragma pack(pop)
115 115
116 static_assert(sizeof(Xbox360ButtonData) == 18, "xbox button data wrong size"); 116 static_assert(sizeof(Xbox360ButtonData) == 18, "xbox button data wrong size");
117 static_assert(sizeof(XboxOneButtonData) == 14, "xbox button data wrong size"); 117 static_assert(sizeof(XboxOneButtonData) == 14, "xbox button data wrong size");
118 118
119 // From MSDN: 119 // From MSDN:
120 // http://msdn.microsoft.com/en-us/library/windows/desktop/ee417001(v=vs.85).asp x#dead_zone 120 // http://msdn.microsoft.com/en-us/library/windows/desktop/ee417001(v=vs.85).asp x#dead_zone
121 const int16 kLeftThumbDeadzone = 7849; 121 const int16_t kLeftThumbDeadzone = 7849;
122 const int16 kRightThumbDeadzone = 8689; 122 const int16_t kRightThumbDeadzone = 8689;
123 const uint8 kXbox360TriggerDeadzone = 30; 123 const uint8_t kXbox360TriggerDeadzone = 30;
124 const uint16 kXboxOneTriggerMax = 1023; 124 const uint16_t kXboxOneTriggerMax = 1023;
125 const uint16 kXboxOneTriggerDeadzone = 120; 125 const uint16_t kXboxOneTriggerDeadzone = 120;
126 126
127 void NormalizeAxis(int16 x, 127 void NormalizeAxis(int16_t x,
128 int16 y, 128 int16_t y,
129 int16 deadzone, 129 int16_t deadzone,
130 float* x_out, 130 float* x_out,
131 float* y_out) { 131 float* y_out) {
132 float x_val = x; 132 float x_val = x;
133 float y_val = y; 133 float y_val = y;
134 134
135 // Determine how far the stick is pushed. 135 // Determine how far the stick is pushed.
136 float real_magnitude = std::sqrt(x_val * x_val + y_val * y_val); 136 float real_magnitude = std::sqrt(x_val * x_val + y_val * y_val);
137 137
138 // Check if the controller is outside a circular dead zone. 138 // Check if the controller is outside a circular dead zone.
139 if (real_magnitude > deadzone) { 139 if (real_magnitude > deadzone) {
140 // Clip the magnitude at its expected maximum value. 140 // Clip the magnitude at its expected maximum value.
141 float magnitude = std::min(32767.0f, real_magnitude); 141 float magnitude = std::min(32767.0f, real_magnitude);
142 142
143 // Adjust magnitude relative to the end of the dead zone. 143 // Adjust magnitude relative to the end of the dead zone.
144 magnitude -= deadzone; 144 magnitude -= deadzone;
145 145
146 // Normalize the magnitude with respect to its expected range giving a 146 // Normalize the magnitude with respect to its expected range giving a
147 // magnitude value of 0.0 to 1.0 147 // magnitude value of 0.0 to 1.0
148 float ratio = (magnitude / (32767 - deadzone)) / real_magnitude; 148 float ratio = (magnitude / (32767 - deadzone)) / real_magnitude;
149 149
150 // Y is negated because xbox controllers have an opposite sign from 150 // Y is negated because xbox controllers have an opposite sign from
151 // the 'standard controller' recommendations. 151 // the 'standard controller' recommendations.
152 *x_out = x_val * ratio; 152 *x_out = x_val * ratio;
153 *y_out = -y_val * ratio; 153 *y_out = -y_val * ratio;
154 } else { 154 } else {
155 // If the controller is in the deadzone zero out the magnitude. 155 // If the controller is in the deadzone zero out the magnitude.
156 *x_out = *y_out = 0.0f; 156 *x_out = *y_out = 0.0f;
157 } 157 }
158 } 158 }
159 159
160 float NormalizeTrigger(uint8 value) { 160 float NormalizeTrigger(uint8_t value) {
161 return value < kXbox360TriggerDeadzone ? 0 : 161 return value < kXbox360TriggerDeadzone
162 static_cast<float>(value - kXbox360TriggerDeadzone) / 162 ? 0
163 (std::numeric_limits<uint8>::max() - kXbox360TriggerDeadzone); 163 : static_cast<float>(value - kXbox360TriggerDeadzone) /
164 (std::numeric_limits<uint8_t>::max() -
165 kXbox360TriggerDeadzone);
164 } 166 }
165 167
166 float NormalizeXboxOneTrigger(uint16 value) { 168 float NormalizeXboxOneTrigger(uint16_t value) {
167 return value < kXboxOneTriggerDeadzone ? 0 : 169 return value < kXboxOneTriggerDeadzone ? 0 :
168 static_cast<float>(value - kXboxOneTriggerDeadzone) / 170 static_cast<float>(value - kXboxOneTriggerDeadzone) /
169 (kXboxOneTriggerMax - kXboxOneTriggerDeadzone); 171 (kXboxOneTriggerMax - kXboxOneTriggerDeadzone);
170 } 172 }
171 173
172 void NormalizeXbox360ButtonData(const Xbox360ButtonData& data, 174 void NormalizeXbox360ButtonData(const Xbox360ButtonData& data,
173 XboxController::Data* normalized_data) { 175 XboxController::Data* normalized_data) {
174 normalized_data->buttons[0] = data.a; 176 normalized_data->buttons[0] = data.a;
175 normalized_data->buttons[1] = data.b; 177 normalized_data->buttons[1] = data.b;
176 normalized_data->buttons[2] = data.x; 178 normalized_data->buttons[2] = data.x;
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 393
392 CFRunLoopSourceRef source_ref; 394 CFRunLoopSourceRef source_ref;
393 kr = (*interface_)->CreateInterfaceAsyncEventSource(interface_, &source_ref); 395 kr = (*interface_)->CreateInterfaceAsyncEventSource(interface_, &source_ref);
394 if (kr != KERN_SUCCESS || !source_ref) 396 if (kr != KERN_SUCCESS || !source_ref)
395 return false; 397 return false;
396 source_.reset(source_ref); 398 source_.reset(source_ref);
397 CFRunLoopAddSource(CFRunLoopGetCurrent(), source_, kCFRunLoopDefaultMode); 399 CFRunLoopAddSource(CFRunLoopGetCurrent(), source_, kCFRunLoopDefaultMode);
398 400
399 // The interface should have two pipes. Pipe 1 with direction kUSBIn and pipe 401 // The interface should have two pipes. Pipe 1 with direction kUSBIn and pipe
400 // 2 with direction kUSBOut. Both pipes should have type kUSBInterrupt. 402 // 2 with direction kUSBOut. Both pipes should have type kUSBInterrupt.
401 uint8 num_endpoints; 403 uint8_t num_endpoints;
402 kr = (*interface_)->GetNumEndpoints(interface_, &num_endpoints); 404 kr = (*interface_)->GetNumEndpoints(interface_, &num_endpoints);
403 if (kr != KERN_SUCCESS || num_endpoints < 2) 405 if (kr != KERN_SUCCESS || num_endpoints < 2)
404 return false; 406 return false;
405 407
406 for (int i = 1; i <= 2; i++) { 408 for (int i = 1; i <= 2; i++) {
407 uint8 direction; 409 uint8_t direction;
408 uint8 number; 410 uint8_t number;
409 uint8 transfer_type; 411 uint8_t transfer_type;
410 uint16 max_packet_size; 412 uint16_t max_packet_size;
411 uint8 interval; 413 uint8_t interval;
412 414
413 kr = (*interface_)->GetPipeProperties(interface_, 415 kr = (*interface_)->GetPipeProperties(interface_,
414 i, 416 i,
415 &direction, 417 &direction,
416 &number, 418 &number,
417 &transfer_type, 419 &transfer_type,
418 &max_packet_size, 420 &max_packet_size,
419 &interval); 421 &interval);
420 if (kr != KERN_SUCCESS || transfer_type != kUSBInterrupt) { 422 if (kr != KERN_SUCCESS || transfer_type != kUSBInterrupt) {
421 return false; 423 return false;
422 } 424 }
423 if (i == read_endpoint_) { 425 if (i == read_endpoint_) {
424 if (direction != kUSBIn) 426 if (direction != kUSBIn)
425 return false; 427 return false;
426 read_buffer_.reset(new uint8[max_packet_size]); 428 read_buffer_.reset(new uint8_t[max_packet_size]);
427 read_buffer_size_ = max_packet_size; 429 read_buffer_size_ = max_packet_size;
428 QueueRead(); 430 QueueRead();
429 } else if (i == control_endpoint_) { 431 } else if (i == control_endpoint_) {
430 if (direction != kUSBOut) 432 if (direction != kUSBOut)
431 return false; 433 return false;
432 if (controller_type_ == XBOX_ONE_CONTROLLER) 434 if (controller_type_ == XBOX_ONE_CONTROLLER)
433 WriteXboxOneInit(); 435 WriteXboxOneInit();
434 } 436 }
435 } 437 }
436 438
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 } 516 }
515 517
516 void XboxController::ProcessXbox360Packet(size_t length) { 518 void XboxController::ProcessXbox360Packet(size_t length) {
517 if (length < 2) 519 if (length < 2)
518 return; 520 return;
519 DCHECK(length <= read_buffer_size_); 521 DCHECK(length <= read_buffer_size_);
520 if (length > read_buffer_size_) { 522 if (length > read_buffer_size_) {
521 IOError(); 523 IOError();
522 return; 524 return;
523 } 525 }
524 uint8* buffer = read_buffer_.get(); 526 uint8_t* buffer = read_buffer_.get();
525 527
526 if (buffer[1] != length) 528 if (buffer[1] != length)
527 // Length in packet doesn't match length reported by USB. 529 // Length in packet doesn't match length reported by USB.
528 return; 530 return;
529 531
530 uint8 type = buffer[0]; 532 uint8_t type = buffer[0];
531 buffer += 2; 533 buffer += 2;
532 length -= 2; 534 length -= 2;
533 switch (type) { 535 switch (type) {
534 case STATUS_MESSAGE_BUTTONS: { 536 case STATUS_MESSAGE_BUTTONS: {
535 if (length != sizeof(Xbox360ButtonData)) 537 if (length != sizeof(Xbox360ButtonData))
536 return; 538 return;
537 Xbox360ButtonData* data = reinterpret_cast<Xbox360ButtonData*>(buffer); 539 Xbox360ButtonData* data = reinterpret_cast<Xbox360ButtonData*>(buffer);
538 Data normalized_data; 540 Data normalized_data;
539 NormalizeXbox360ButtonData(*data, &normalized_data); 541 NormalizeXbox360ButtonData(*data, &normalized_data);
540 delegate_->XboxControllerGotData(this, normalized_data); 542 delegate_->XboxControllerGotData(this, normalized_data);
(...skipping 14 matching lines...) Expand all
555 } 557 }
556 558
557 void XboxController::ProcessXboxOnePacket(size_t length) { 559 void XboxController::ProcessXboxOnePacket(size_t length) {
558 if (length < 2) 560 if (length < 2)
559 return; 561 return;
560 DCHECK(length <= read_buffer_size_); 562 DCHECK(length <= read_buffer_size_);
561 if (length > read_buffer_size_) { 563 if (length > read_buffer_size_) {
562 IOError(); 564 IOError();
563 return; 565 return;
564 } 566 }
565 uint8* buffer = read_buffer_.get(); 567 uint8_t* buffer = read_buffer_.get();
566 568
567 uint8 type = buffer[0]; 569 uint8_t type = buffer[0];
568 buffer += 4; 570 buffer += 4;
569 length -= 4; 571 length -= 4;
570 switch (type) { 572 switch (type) {
571 case XBOX_ONE_STATUS_MESSAGE_BUTTONS: { 573 case XBOX_ONE_STATUS_MESSAGE_BUTTONS: {
572 if (length != sizeof(XboxOneButtonData)) 574 if (length != sizeof(XboxOneButtonData))
573 return; 575 return;
574 XboxOneButtonData* data = reinterpret_cast<XboxOneButtonData*>(buffer); 576 XboxOneButtonData* data = reinterpret_cast<XboxOneButtonData*>(buffer);
575 Data normalized_data; 577 Data normalized_data;
576 NormalizeXboxOneButtonData(*data, &normalized_data); 578 NormalizeXboxOneButtonData(*data, &normalized_data);
577 delegate_->XboxControllerGotData(this, normalized_data); 579 delegate_->XboxControllerGotData(this, normalized_data);
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 controllers_.insert(controller); 778 controllers_.insert(controller);
777 delegate_->XboxDeviceAdd(controller); 779 delegate_->XboxDeviceAdd(controller);
778 } 780 }
779 781
780 void XboxDataFetcher::RemoveController(XboxController* controller) { 782 void XboxDataFetcher::RemoveController(XboxController* controller) {
781 delegate_->XboxDeviceRemove(controller); 783 delegate_->XboxDeviceRemove(controller);
782 controllers_.erase(controller); 784 controllers_.erase(controller);
783 delete controller; 785 delete controller;
784 } 786 }
785 787
786 void XboxDataFetcher::RemoveControllerByLocationID(uint32 location_id) { 788 void XboxDataFetcher::RemoveControllerByLocationID(uint32_t location_id) {
787 XboxController* controller = NULL; 789 XboxController* controller = NULL;
788 for (std::set<XboxController*>::iterator i = controllers_.begin(); 790 for (std::set<XboxController*>::iterator i = controllers_.begin();
789 i != controllers_.end(); 791 i != controllers_.end();
790 ++i) { 792 ++i) {
791 if ((*i)->location_id() == location_id) { 793 if ((*i)->location_id() == location_id) {
792 controller = *i; 794 controller = *i;
793 break; 795 break;
794 } 796 }
795 } 797 }
796 if (controller) 798 if (controller)
797 RemoveController(controller); 799 RemoveController(controller);
798 } 800 }
799 801
800 void XboxDataFetcher::XboxControllerGotData(XboxController* controller, 802 void XboxDataFetcher::XboxControllerGotData(XboxController* controller,
801 const XboxController::Data& data) { 803 const XboxController::Data& data) {
802 delegate_->XboxValueChanged(controller, data); 804 delegate_->XboxValueChanged(controller, data);
803 } 805 }
804 806
805 void XboxDataFetcher::XboxControllerError(XboxController* controller) { 807 void XboxDataFetcher::XboxControllerError(XboxController* controller) {
806 RemoveController(controller); 808 RemoveController(controller);
807 } 809 }
OLDNEW
« no previous file with comments | « content/browser/gamepad/xbox_data_fetcher_mac.h ('k') | content/browser/geofencing/geofencing_dispatcher_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698