/*****************************************************************************
** 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;	
}
Exemple #3
0
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;
}