/** HID class driver callback function for the processing of HID reports from the host. */ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, const uint8_t ReportType, const void* ReportData, const uint16_t ReportSize) { uint8_t* Data = (uint8_t*)ReportData; //get the data out of the function for later use for (int i=0; i<ConfigSize; i++) { input_data[i] = Data[i]; } //Determine which function to call based on the package-id switch(input_data[0]) { case 0x00: ConfigRequest(); break; case 0x01: SetCommand(); break; case 0x02: DataRequest(); break; case 0x03: ErrorRequest(); break; default: ReturnError(0x01); break; } return; }
void processMsg(void) { struct IntuiMessage *msg; struct DropMessage *dm; int source,target; while(!ende) { WaitPort(win->UserPort); while((msg = GTD_GetIMsg(win->UserPort)) != 0) { imsg = *msg; if (imsg.Class == IDCMP_OBJECTDROP) { if ((dm = imsg.IAddress) != 0) { if (!dm->dm_Object.od_Owner && dm->dm_Target) { target = dm->dm_Target->GadgetID; switch(target) { case 1: case 2: source = dm->dm_Gadget->GadgetID; if (source < 3) { source--; target--; GT_SetGadgetAttrs(lvgad[0],win,NULL,GTLV_Labels,~0L,TAG_END); GT_SetGadgetAttrs(lvgad[1],win,NULL,GTLV_Labels,~0L,TAG_END); if (target) MoveTo(dm->dm_Object.od_Object,&list[source],dm->dm_SourceEntry,&list[target],dm->dm_TargetEntry); else { Remove(dm->dm_Object.od_Object); AddTail(&list[target],dm->dm_Object.od_Object); } GT_SetGadgetAttrs(lvgad[0],win,NULL,GTLV_Labels,&list[0],TAG_END); GT_SetGadgetAttrs(lvgad[1],win,NULL,GTLV_Labels,&list[1],TAG_END); } else { target--; GT_SetGadgetAttrs(lvgad[target],win,NULL,GTLV_Labels,~0L,TAG_END); if ((node = AllocMem(sizeof(struct Node),MEMF_CLEAR | MEMF_PUBLIC)) != 0) { node->ln_Name = in.in_Name; InsertAt(&list[target],node,dm->dm_TargetEntry); } GT_SetGadgetAttrs(lvgad[target],win,NULL,GTLV_Labels,&list[target],TAG_END); } break; case 3: DisplayBeep(NULL); break; case 4: case 5: source = dm->dm_Gadget->GadgetID-1; GT_SetGadgetAttrs(lvgad[source],win,NULL,GTLV_Labels,~0L,TAG_END); if (target == 4) { if ((node = AllocMem(sizeof(struct Node),MEMF_CLEAR | MEMF_PUBLIC)) != 0) { node->ln_Name = ((struct ImageNode *)dm->dm_Object.od_Object)->in_Name; AddTail(&list[source],node); } } else { Remove((struct Node *)dm->dm_Object.od_Object); FreeMem(dm->dm_Object.od_Object,sizeof(struct Node)); } GT_SetGadgetAttrs(lvgad[source],win,NULL,GTLV_Labels,&list[source],TAG_END); break; } } else if (!dm->dm_Object.od_Owner) { DisplayBeep(NULL); // unsupported drag?! } else if (!stricmp(dm->dm_Object.od_Owner,"dragtest")) { char t[256]; if (GTD_GetString(&dm->dm_Object,t,256)) ErrorRequest("I do not want a node from a clone of mine.\nEspecially, I don't like \"%s\".",t); } else if (!strcmp(dm->dm_Object.od_Owner,"intuition")) ErrorRequest("An object from a custom gadget?\nThat's nothing for me.",dm->dm_Object.od_Owner); else ErrorRequest("An object from %s?\nSounds interesting.",dm->dm_Object.od_Owner); } else DisplayBeep(NULL); } GTD_ReplyIMsg(msg); switch(imsg.Class) { case IDCMP_GADGETDOWN: break; case IDCMP_GADGETUP: switch(((struct Gadget *)imsg.IAddress)->GadgetID) { case 3: GT_SetGadgetAttrs(lvgad[0],win,NULL,GTLV_Labels,~0L,TAG_END); if ((node = AllocMem(sizeof(struct Node),MEMF_CLEAR | MEMF_PUBLIC)) != 0) { node->ln_Name = in.in_Name; AddTail(&list[0],node); } GT_SetGadgetAttrs(lvgad[0],win,NULL,GTLV_Labels,&list[0],TAG_END); break; } break; case IDCMP_CLOSEWINDOW: ende = TRUE; break; } } } }