Ejemplo n.º 1
0
int prSendSysex(VMGlobals *g, int numArgsPushed)
{
	int err, uid, size;

	if( !isKindOfSlot(g->sp, s_int8array->u.classobj) )
		return errWrongType;

	PyrInt8Array* packet = slotRawInt8Array(g->sp);
	size = packet->size;

	PyrSlot *u = g->sp - 1;
	err = slotIntVal(u, &uid);
	if (err) return err;

	MIDIEndpointRef dest;
	MIDIObjectType mtype;
	MIDIObjectFindByUniqueID(uid, (MIDIObjectRef*)&dest, &mtype);
	if (mtype != kMIDIObjectType_Destination) return errFailed;
	if (!dest) return errFailed;

	MIDISysexSendRequest *pk = (MIDISysexSendRequest*) malloc (sizeof(MIDISysexSendRequest) + size);
	Byte *data = (Byte *)pk + sizeof(MIDISysexSendRequest);

	memcpy(data,packet->b, size);
	pk->complete = false;
	pk -> destination = dest;
	pk -> data = data;
	pk -> bytesToSend = size;
	pk->completionProc = freeSysex;
	pk->completionRefCon = 0;

	return ((MIDISendSysex(pk) == (OSStatus)0) ? errNone : errFailed);
}
Ejemplo n.º 2
0
//_________________________________________________________
static void SendSysExAux(SlotPtr slot)
{
	int i,bytestosend;
	unsigned char* ptr;
	OSErr err;

	// Prepare bytes
	bytestosend = min(MAX_SYSEX_BYTES,slot->remaining);
	slot->remaining-= bytestosend;
	ptr = slot->data;
	for (i = 0 ; i < bytestosend ; i++) MidiStreamGetByte (&slot->outsysex, ptr++);
 	
	// Init completion structure
	slot->request.destination = slot->dest;
	slot->request.data = slot->data;
	slot->request.bytesToSend = bytestosend;
	slot->request.complete = FALSE;
	slot->request.completionProc = CompletionProc;
	slot->request.completionRefCon = slot;
	
	err = MIDISendSysex(&slot->request);
	if (err != noErr) fprintf(stderr, "MIDISendSysex : error %ld\n", err);
 }