/***************************************************************************** ** Function name: LiftTableHandle ** Descriptions: 给设备管理任务发送升降机控制邮箱 ** parameters: HandleType:操作类型1:出货操作 2:检查状态 3:查询出货结果 ChannelNum:逻辑货道编号 LevelNum:层编号 Binnum:箱柜编号 BackMsg:返回的数据 ** Returned value: 0:成功;1:失败; *****************************************************************************/ unsigned char LiftTableHandle(unsigned char HandleType,unsigned char ChannelNum,unsigned char LevelNum,unsigned char Binnum,unsigned char *BackMsg) { MessagePack *RecvBoxPack; uint8_t err,i; MsgAccepterPack.ChnlHandleType = HandleType; MsgAccepterPack.ChannelNum = ChannelNum; MsgAccepterPack.Binnum = Binnum; MsgAccepterPack.LevelNum = LevelNum; TraceChannel("LiftTableHandle[start]:type = %d\r\n",HandleType); liftSetReady(0); OSMboxPost(g_LiftTableMail,&MsgAccepterPack); RecvBoxPack = OSMboxPend(g_LiftTableBackMail,LIFT_HANDLE_TIMEOUT,&err); liftSetReady(1); if(err == OS_NO_ERR){ TraceChannel("LiftTableHandle[pend]:type=%d\r\n",HandleType); for(i=0;i<10;i++){ BackMsg[i] = RecvBoxPack->LiftTablePack[i]; } return RecvBoxPack->HandleResult; } TraceChannel("LiftTableHandle[pend]:timeout!\r\n"); return 0xFF; }
unsigned char TestLiftTablePend(unsigned char *BackMsg) { MessagePack *RecvBoxPack; uint8_t err,i; //等待邮箱返回 RecvBoxPack = OSMboxPend(g_LiftTableBackMail,50/5,&err); if(err == OS_NO_ERR) { TraceChannel("BackMsg=\r\n"); for(i=0;i<10;i++) { BackMsg[i] = RecvBoxPack->LiftTablePack[i]; TraceChannel("%x ",BackMsg[i]); } return RecvBoxPack->HandleResult; } return 0xff; }
FeatureUnit::FeatureUnit(Device* device, size_t interface, usb_audiocontrol_header_descriptor* Header) : _AudioControl(device, interface, Header) { usb_feature_unit_descriptor* Feature = (usb_feature_unit_descriptor*) Header; fID = Feature->unit_id; TRACE("Feature ID:%d\n", fID); fSourceID = Feature->source_id; TRACE("Source ID:%d\n", fSourceID); uint8 controlSize = 4; uint8 channelsCount = (Feature->length - 6) / controlSize; uint8 *ControlsBitmapPointer = (uint8*)&Feature->bma_controls[0]; if (device->SpecReleaseNumber() < 0x200) { usb_feature_unit_descriptor_r1* Feature = (usb_feature_unit_descriptor_r1*) Header; controlSize = Feature->control_size; channelsCount = (Feature->length - 7) / Feature->control_size; ControlsBitmapPointer = &Feature->bma_controls[0]; } TRACE("Channel bitmap size:%d\n", controlSize); TRACE("Channels number:%d\n", channelsCount - 1); // not add master! for (size_t i = 0; i < channelsCount; i++) { uint8 *controlPointer = &ControlsBitmapPointer[i * controlSize]; switch(controlSize) { case 1: fControlBitmaps.PushBack(*controlPointer); break; case 2: fControlBitmaps.PushBack(*(uint16*)controlPointer); break; case 4: fControlBitmaps.PushBack(*(uint32*)controlPointer); break; default: TRACE_ALWAYS("Feature control of unsupported size %d ignored\n", controlSize); continue; } TraceChannel(device, i); } fStringIndex = ControlsBitmapPointer[channelsCount * controlSize]; TRACE("StringIndex:%d\n", fStringIndex); fStatus = B_OK; }