Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
dualshock3.cpp
- Committer:
- Kize
- Date:
- 2020-06-21
- Revision:
- 0:4289fbe66d45
File content as of revision 0:4289fbe66d45:
#include "dualshock3.h"
Dualshock3::Dualshock3(PinName tx, PinName rx)
:controller(tx, rx), baudrate(DEFAULT_BAUDRATE)
{
button_state = 0;
button_risen = 0;
previous_button_state = button_state;
data[3] = 0x40;
data[4] = 0x40;
data[5] = 0x40;
data[6] = 0x40;
printf("dualshock3 is ready\r\n");
}
void Dualshock3::set_baudrate(int baud)
{
baudrate = baud;
}
void Dualshock3::initialize(void)
{
controller.baud(baudrate);
controller.attach(callback(this, &Dualshock3::read), Serial::RxIrq);
}
void Dualshock3::clear(void)
{
button_state = 0;
button_risen = 0;
}
void Dualshock3::read(void)
{
__disable_irq();
data[0] = controller.getc();
if(data[0]==0x80){
for(int i=1;i<DATA_LENGTH;i++){
data[i] = controller.getc();
}
button_state = (data[1]<<DATA_LENGTH) + data[2];
//今該当ボタンのビットが1で、前回は0なら、risenを1にする
if((button_state & UP) && !(previous_button_state & UP)){
button_risen |= UP;
}
if((button_state & DOWN) && !(previous_button_state & DOWN)){
button_risen |= DOWN;
}
if((button_state & LEFT) && !(previous_button_state & LEFT)){
button_risen |= LEFT;
}
if((button_state & RIGHT) && !(previous_button_state & RIGHT)){
button_risen |= RIGHT;
}
if((button_state & TRIANGLE) && !(previous_button_state & TRIANGLE)){
button_risen |= TRIANGLE;
}
if((button_state & CROSS) && !(previous_button_state & CROSS)){
button_risen |= CROSS;
}
if((button_state & CIRCLE) && !(previous_button_state & CIRCLE)){
button_risen |= CIRCLE;
}
if((button_state & RECTANGLE) && !(previous_button_state & RECTANGLE)){
button_risen |= RECTANGLE;
}
if((button_state & L1) && !(previous_button_state & L1)){
button_risen |= L1;
}
if((button_state & L2) && !(previous_button_state & L2)){
button_risen |= L2;
}
if((button_state & R1) && !(previous_button_state & R1)){
button_risen |= R1;
}
if((button_state & R2) && !(previous_button_state & R2)){
button_risen |= R2;
}
if((button_state & START) && !(previous_button_state & START)){
button_risen |= START;
}
if((button_state & SELECT) && !(previous_button_state & SELECT)){
button_risen |= SELECT;
}
previous_button_state = button_state;
}
__enable_irq();
}
bool Dualshock3::circle_is_pushed(void)
{
if(button_state & CIRCLE){
return true;
}else{
return 0;
}
}
bool Dualshock3::cross_is_pushed(void)
{
if(button_state & CROSS){
return true;
}else{
return 0;
}
}
bool Dualshock3::rectangle_is_pushed(void)
{
if(button_state & RECTANGLE){
return true;
}else{
return 0;
}
}
bool Dualshock3::triangle_is_pushed(void)
{
if(button_state & TRIANGLE){
return true;
}else{
return 0;
}
}
bool Dualshock3::up_is_pushed(void)
{
if(button_state & UP){
if(button_state & DOWN){
return 0;
}else{
return true;
}
}else{
return 0;
}
}
bool Dualshock3::down_is_pushed(void)
{
if(button_state & DOWN){
if(button_state & UP){
return 0;
}else{
return true;
}
}else{
return 0;
}
}
bool Dualshock3::left_is_pushed(void)
{
if(button_state & LEFT){
if(button_state & RIGHT){
return 0;
}else{
return true;
}
}else{
return 0;
}
}
bool Dualshock3::right_is_pushed(void)
{
if(button_state & RIGHT){
if(button_state & LEFT){
return 0;
}else{
return true;
}
}else{
return 0;
}
}
bool Dualshock3::l1_is_pushed(void)
{
if(button_state & L1){
return true;
}else{
return 0;
}
}
bool Dualshock3::l2_is_pushed(void)
{
if(button_state & L2){
return true;
}else{
return 0;
}
}
bool Dualshock3::r1_is_pushed(void)
{
if(button_state & R1){
return true;
}else{
return 0;
}
}
bool Dualshock3::r2_is_pushed(void)
{
if(button_state & R2){
return true;
}else{
return 0;
}
}
bool Dualshock3::start_is_pushed(void)
{
if((button_state & START) == START){
return true;
}else{
return 0;
}
}
bool Dualshock3::select_is_pushed(void)
{
if((button_state & SELECT) == SELECT){
return true;
}else{
return 0;
}
}
float Dualshock3::get_left_stick_x(void)
{
return (float)(data[3] - CENTER_STICK_VAL) / CENTER_STICK_VAL;
}
float Dualshock3::get_left_stick_y(void)
{
return -(float)(data[4] - CENTER_STICK_VAL) / CENTER_STICK_VAL;
}
float Dualshock3::get_right_stick_x(void)
{
return (float)(data[5] - CENTER_STICK_VAL) / CENTER_STICK_VAL;
}
float Dualshock3::get_right_stick_y(void)
{
return -(float)(data[6] - CENTER_STICK_VAL) / CENTER_STICK_VAL;
}
bool Dualshock3::circle_has_been_pushed(void)
{
if(button_risen & CIRCLE){
button_risen = 0;
return true;
}else{
return 0;
}
}
bool Dualshock3::cross_has_been_pushed(void)
{
if(button_risen & CROSS){
button_risen = 0;
return true;
}else{
return 0;
}
}
bool Dualshock3::rectangle_has_been_pushed(void)
{
if(button_risen & RECTANGLE){
button_risen = 0;
return true;
}else{
return 0;
}
}
bool Dualshock3::triangle_has_been_pushed(void)
{
if(button_risen & TRIANGLE){
button_risen = 0;
return true;
}else{
return 0;
}
}
bool Dualshock3::up_has_been_pushed(void)
{
if(button_risen & UP){
if(up_is_pushed()){
button_risen = 0;
return true;
}else{
return 0;
}
}else{
return 0;
}
}
bool Dualshock3::down_has_been_pushed(void)
{
if(button_risen & DOWN){
if(down_is_pushed()){
button_risen = 0;
return true;
}else{
return 0;
}
}else{
return 0;
}
}
bool Dualshock3::left_has_been_pushed(void)
{
if(button_risen & LEFT){
if(left_is_pushed()){
button_risen = 0;
return true;
}else{
return 0;
}
}else{
return 0;
}
}
bool Dualshock3::right_has_been_pushed(void)
{
if(button_risen & RIGHT){
if(right_is_pushed()){
button_risen = 0;
return true;
}else{
return 0;
}
}else{
return 0;
}
}
bool Dualshock3::l1_has_been_pushed(void)
{
if(button_risen & L1){
button_risen = 0;
return true;
}else{
return 0;
}
}
bool Dualshock3::l2_has_been_pushed(void)
{
if(button_risen & L2){
button_risen = 0;
return true;
}else{
return 0;
}
}
bool Dualshock3::r1_has_been_pushed(void)
{
if(button_risen & R1){
button_risen = 0;
return true;
}else{
return 0;
}
}
bool Dualshock3::r2_has_been_pushed(void)
{
if(button_risen & R2){
button_risen = 0;
return true;
}else{
return 0;
}
}
bool Dualshock3::start_has_been_pushed(void)
{
if((button_risen & START) == START){
if(start_is_pushed()){
button_risen = 0;
return true;
}else{
return 0;
}
}else{
return 0;
}
}
bool Dualshock3::select_has_been_pushed(void)
{
if((button_risen & SELECT) == SELECT){
if(select_is_pushed()){
button_risen = 0;
return true;
}else{
return 0;
}
}else{
return 0;
}
}
void Dualshock3::get_all_buttons_info(int buttons_info[14]){
/*
for(int i=0;i<14;i++){
buttons_info[i] = 0;
}
*/
buttons_info[0] = select_is_pushed();
buttons_info[1] = start_is_pushed();
buttons_info[2] = up_is_pushed();
buttons_info[3] = right_is_pushed();
buttons_info[4] = down_is_pushed();
buttons_info[5] = left_is_pushed();
buttons_info[6] = l2_is_pushed();
buttons_info[7] = r2_is_pushed();
buttons_info[8] = l1_is_pushed();
buttons_info[9] = r1_is_pushed();
buttons_info[10] = triangle_is_pushed();
buttons_info[11] = circle_is_pushed();
buttons_info[12] = cross_is_pushed();
buttons_info[13] = rectangle_is_pushed();
}
void Dualshock3::get_all_sticks_info(float sticks_info[4]){
sticks_info[0] = get_left_stick_x();
sticks_info[1] = get_left_stick_y();
sticks_info[2] = get_right_stick_x();
sticks_info[3] = get_right_stick_y();
}