#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include <stdio.h>
#include <stdlib.h>
#include "wiimote.h"
#include "wiimote_api.h"

wiimote_t wiimote = WIIMOTE_INIT;

MODULE = Linux::Input::Wiimote         PACKAGE = Linux::Input::Wiimote

PROTOTYPES: DISABLE

char * c_wiimote_discover()
     CODE:
          wiimote_t wiimote[4];
          int nmotes = 0;
          int i = 0;
          nmotes = wiimote_discover(wiimote, 4);
          RETVAL = " ";
          if ( nmotes > 0 ) {
             for (i=0; i<nmotes; i++) {
                RETVAL =  wiimote[i].link.r_addr;
             }
          } else {
             RETVAL = "0";
          }

     OUTPUT:
          RETVAL


int c_wiimote_connect(const char *arg)
     CODE:
          RETVAL = wiimote_connect(&wiimote, arg );
     OUTPUT:
          RETVAL

int c_wiimote_is_open()
     CODE:
          RETVAL = wiimote_is_open(&wiimote);
     OUTPUT:
          RETVAL

int c_wiimote_update()
     CODE:
          RETVAL = wiimote_update(&wiimote);
     OUTPUT:
          RETVAL

int c_wiimote_disconnect()
     CODE:
          RETVAL =  wiimote_disconnect(&wiimote);
     OUTPUT:
          RETVAL

int c_get_wiimote_keys_raw_bits()
     CODE:
          RETVAL =  wiimote.keys.bits;
     OUTPUT:
          RETVAL
    
int c_get_wiimote_rumble()
     CODE:
          RETVAL =  wiimote.rumble;
     OUTPUT:
          RETVAL

void c_set_wiimote_rumble(int arg)
     CODE:
          wiimote.rumble = arg;
          
int c_get_wiimote_ir()
     CODE:
          RETVAL =  wiimote.mode.ir;
     OUTPUT:
          RETVAL

void c_set_wiimote_ir(int arg)
     CODE:
          wiimote.mode.ir = arg;
          
int c_get_wiimote_ext_nunchuk_joyx()
     CODE:
          RETVAL =  wiimote.ext.nunchuk.joyx;
     OUTPUT:
          RETVAL

int c_get_wiimote_ext_nunchuk_joyy()
     CODE:
          RETVAL =  wiimote.ext.nunchuk.joyy;
     OUTPUT:
          RETVAL

int c_get_wiimote_ext_nunchuk_keys_c()
     CODE:
          RETVAL =  wiimote.ext.nunchuk.keys.c;
     OUTPUT:
          RETVAL

int c_get_wiimote_ext_nunchuk_keys_z()
     CODE:
          RETVAL =  wiimote.ext.nunchuk.keys.z;
     OUTPUT:
          RETVAL

int c_get_wiimote_ext_nunchuk_axis_x()
     CODE:
          RETVAL =  wiimote.ext.nunchuk.axis.x;
     OUTPUT:
          RETVAL

int c_get_wiimote_ext_nunchuk_axis_y()
     CODE:
          RETVAL =  wiimote.ext.nunchuk.axis.y;
     OUTPUT:
          RETVAL

int c_get_wiimote_ext_nunchuk_axis_z()
     CODE:
          RETVAL =  wiimote.ext.nunchuk.axis.z;
     OUTPUT:
          RETVAL

int c_get_wiimote_axis_x()
     CODE:
          RETVAL =  wiimote.axis.x;
     OUTPUT:
          RETVAL

int c_get_wiimote_axis_y()
     CODE:
          RETVAL =  wiimote.axis.y;
     OUTPUT:
          RETVAL

int c_get_wiimote_axis_z()
     CODE:
          RETVAL =  wiimote.axis.z;
     OUTPUT:
          RETVAL

float c_get_wiimote_tilt_x()
     CODE:
          RETVAL =  wiimote.tilt.x;
     OUTPUT:
          RETVAL


float c_get_wiimote_tilt_y()
     CODE:
          RETVAL =  wiimote.tilt.y;
     OUTPUT:
          RETVAL

float c_get_wiimote_tilt_z()
     CODE:
          RETVAL =  wiimote.tilt.z;
     OUTPUT:
          RETVAL

void c_activate_wiimote_accelerometer()
     CODE:
           wiimote.mode.acc = 1;

void c_deactivate_wiimote_accelerometer()
     CODE:
           wiimote.mode.acc = 0;

int c_get_wiimote_ir1_x()
     CODE:
          RETVAL =  wiimote.ir1.x;
     OUTPUT:
          RETVAL

int c_get_wiimote_ir1_y()
     CODE:
          RETVAL =  wiimote.ir1.y;
     OUTPUT:
          RETVAL

int c_get_wiimote_ir1_size()
     CODE:
          RETVAL =  wiimote.ir1.size;
     OUTPUT:
          RETVAL

int c_get_wiimote_ir2_x()
     CODE:
          RETVAL =  wiimote.ir2.x;
     OUTPUT:
          RETVAL

int c_get_wiimote_ir2_y()
     CODE:
          RETVAL =  wiimote.ir2.y;
     OUTPUT:
          RETVAL

int c_get_wiimote_ir2_size()
     CODE:
          RETVAL =  wiimote.ir2.size;
     OUTPUT:
          RETVAL

int c_get_wiimote_ir3_x()
     CODE:
          RETVAL =  wiimote.ir3.x;
     OUTPUT:
          RETVAL

int c_get_wiimote_ir3_y()
     CODE:
          RETVAL =  wiimote.ir3.y;
     OUTPUT:
          RETVAL

int c_get_wiimote_ir3_size()
     CODE:
          RETVAL =  wiimote.ir3.size;
     OUTPUT:
          RETVAL

int c_get_wiimote_ir4_x()
     CODE:
          RETVAL =  wiimote.ir4.x;
     OUTPUT:
          RETVAL

int c_get_wiimote_ir4_y()
     CODE:
          RETVAL =  wiimote.ir4.y;
     OUTPUT:
          RETVAL

int c_get_wiimote_ir4_size()
     CODE:
          RETVAL =  wiimote.ir4.size;
     OUTPUT:
          RETVAL

float c_get_wiimote_force_x()
     CODE:
          RETVAL =  wiimote.force.x;
     OUTPUT:
          RETVAL

float c_get_wiimote_force_y()
     CODE:
          RETVAL =  wiimote.force.y;
     OUTPUT:
          RETVAL

float c_get_wiimote_force_z()
     CODE:
          RETVAL =  wiimote.force.z;
     OUTPUT:
          RETVAL