Esempio n. 1
0
int usbctrl_set_rumble(int port, uint8_t l, uint8_t r) {
    usbctrl_softc_t * softc = getcontroller(port);
    if(softc == NULL)
	return -1;
    usbdev_t *dev = softc->dev;
    usbreq_t *ur;
    unsigned xdata_len;
    uint8_t* buf = NULL;

    if(softc->is_wireless)
    {
	buf = usb_dma_alloc(0xC);

	if (buf == NULL) {
		printf("couldn't alloc buffer\n");
		/* Could not allocate a buffer, fail. */
		return -1;
	}

    	uint8_t xdata[0xC] = { 0x00, 0x01, 0x0f, 0xc0, 0x00, l, r, 0x00, 0x00, 0x00, 0x00, 0x00 };
	xdata_len = 0xC;
	memcpy(buf, &xdata, 0xC);
    }
    else
    {
	buf = usb_dma_alloc(0x8);
	 
	if (buf == NULL) {
		printf("couldn't alloc buffer\n");
		/* Could not allocate a buffer, fail. */
		return -1;
	}

	uint8_t xdata[0x8] = { 0x00, 0x08, 0x00, l, r, 0x00, 0x00, 0x00 };
	xdata_len = 0x8;
	memcpy(buf, &xdata, 0x8);
    }



    ur = usb_make_request(dev, softc->uhid_ipipe_tx, buf, xdata_len, UR_FLAG_OUT);
    ur->ur_callback = usbctrl_set_led_callback;
    usb_queue_request(ur);

    return 0;
}
Esempio n. 2
0
/*
 * Get the midi command,channel and parameters
 */
void ALSAMidiIn::getmidicmd(MidiCmdType &cmdtype,
                            unsigned char &cmdchan,
                            int *cmdparams)
{
    snd_seq_event_t *midievent = NULL;
    cmdtype = MidiNull;

    if(inputok == false) {
        /* The input is broken. We need to block for a while anyway so other
           non-RT threads get a chance to run. */
        sleep(1);
        return;
    }

    snd_seq_event_input(midi_handle, &midievent);

    if(midievent == NULL)
        return;
    switch(midievent->type) {
    case SND_SEQ_EVENT_NOTEON:
        cmdtype      = MidiNoteON;
        cmdchan      = midievent->data.note.channel;
        cmdparams[0] = midievent->data.note.note;
        cmdparams[1] = midievent->data.note.velocity;
        break;
    case SND_SEQ_EVENT_NOTEOFF:
        cmdtype      = MidiNoteOFF;
        cmdchan      = midievent->data.note.channel;
        cmdparams[0] = midievent->data.note.note;
        break;
    case SND_SEQ_EVENT_PITCHBEND:
        cmdtype      = MidiController;
        cmdchan      = midievent->data.control.channel;
        cmdparams[0] = C_pitchwheel; //Pitch Bend
        cmdparams[1] = midievent->data.control.value;
        break;
    case SND_SEQ_EVENT_CONTROLLER:
        cmdtype      = MidiController;
        cmdchan      = midievent->data.control.channel;
        cmdparams[0] = getcontroller(midievent->data.control.param);
        cmdparams[1] = midievent->data.control.value;
        //fprintf(stderr,"t=%d val=%d\n",midievent->data.control.param,midievent->data.control.value);
        break;
    }
}
Esempio n. 3
0
/*
 * Get the midi command,channel and parameters
 */
void OSSMidiIn::getmidicmd(MidiCmdType &cmdtype,unsigned char &cmdchan,int *cmdparams){
    unsigned char tmp,i;
    if (inputok==0) {
	cmdtype=MidiNull;
	return;
    };
    i=0;
    if (lastmidicmd==0){//asteapta prima data pana cand vine prima comanda midi
	while (tmp<0x80) tmp=getmidibyte();
	lastmidicmd=tmp;
	};

    tmp=getmidibyte();

    if (tmp>=0x80) {
	lastmidicmd=tmp;
	tmp=getmidibyte();
	};

    if ((lastmidicmd>=0x80)&&(lastmidicmd<=0x8f)){//Note OFF
	cmdtype=MidiNoteOFF;
	cmdchan=lastmidicmd%16;
	cmdparams[0]=tmp;//note number
    };

    if ((lastmidicmd>=0x90)&&(lastmidicmd<=0x9f)){//Note ON
	cmdtype=MidiNoteON;
	cmdchan=lastmidicmd%16;
	cmdparams[0]=tmp;//note number	
	cmdparams[1]=getmidibyte();//velocity
	if (cmdparams[1]==0) cmdtype=MidiNoteOFF;//if velocity==0 then is note off
    };
    if ((lastmidicmd>=0xB0)&&(lastmidicmd<=0xBF)){//Controllers
	cmdtype=MidiController;
	cmdchan=lastmidicmd%16;
	cmdparams[0]=getcontroller(tmp);
	cmdparams[1]=getmidibyte();
    };
    if ((lastmidicmd>=0xE0)&&(lastmidicmd<=0xEF)){//Pitch Wheel
	cmdtype=MidiController;
	cmdchan=lastmidicmd%16;
	cmdparams[0]=C_pitchwheel;
	cmdparams[1]=(tmp+getmidibyte()*(int) 128)-8192;//hope this is correct
    };
};