controller.c 1.54 KB
#include <ultra64.h>

#include <ramrom.h>

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/* app specific includes */
#include "rsplight.h"

OSMesgQueue	controllerMsgQ;
OSMesg		controllerMsgBuf;

int initControllers(void);
OSContStatus     statusdata[MAXCONTROLLERS];
OSContPad        controllerdata[MAXCONTROLLERS];

/*
 *
 * Return the lowest number controller connected to system
 */
int initControllers()
{
    OSMesgQueue     serialMsgQ;
    OSMesg          serialMsg;
    int             i;
    u8              pattern;

    osCreateMesgQueue(&serialMsgQ, &serialMsg, 1);
    osSetEventMesg(OS_EVENT_SI, &serialMsgQ, (OSMesg)1);

    osContInit(&serialMsgQ, &pattern, &statusdata[0]);

    osCreateMesgQueue(&controllerMsgQ, &controllerMsgBuf, 1);
    osSetEventMesg(OS_EVENT_SI, &controllerMsgQ, (OSMesg)0);

    for (i = 0; i < MAXCONTROLLERS; i++) {
        if ((pattern & (1<<i)) &&
                !(statusdata[i].errno & CONT_NO_RESPONSE_ERROR))
            return i;
    }
    return -1;
}

void ReadController()
{
  static u16             button, lastbutton;
    
  osContStartReadData(&controllerMsgQ);
  (void)osRecvMesg(&controllerMsgQ, NULL, OS_MESG_BLOCK);
  osContGetReadData(controllerdata);
  button = controllerdata[0].button;
    
  if ((button & CONT_A) && !(lastbutton & CONT_A))
    {
      ImageNumber--;
      rmonPrintf("Doing image %d \n", ImageNumber);
    }
  else if ((button & CONT_E)  && !(lastbutton & CONT_E))
    {
      ImageNumber++;
      rmonPrintf("Doing image %d \n", ImageNumber);
    }

  lastbutton = button;
}