+ switch(Dst)
+ {
+ case UDI_MASTATE_USAGEIND:
+ ASSERT(Dst != UDI_MASTATE_USAGEIND);
+ break;
+ case UDI_MASTATE_SECBIND:
+ Inst->CurState = UDI_MASTATE_SECBIND;
+ for( int i = 1; i < Inst->Module->nRegions; i ++ )
+ {
+ // TODO: Bind secondaries to primary
+ Log_Warning("UDI", "TODO: Bind secondary channels");
+ //inst->Regions[i]->PriChannel = UDI_CreateChannel_Blank(
+ }
+ //UDI_MA_TransitionState(Inst, UDI_MASTATE_SECBIND, UDI_MASTATE_PARENTBIND);
+ //break;
+ case UDI_MASTATE_PARENTBIND:
+ Inst->CurState = UDI_MASTATE_PARENTBIND;
+ if( Inst->Parent )
+ {
+ tUDI_DriverModule *Module = Inst->Module;
+ tUDI_ChildBinding *parent_bind = Inst->ParentChildBinding;
+ // TODO: Handle multi-parent drivers
+ ASSERTC(Module->nParents, ==, 1);
+
+ // Bind to parent
+ tUDI_BindOps *parent = &Module->Parents[0];
+ udi_channel_t channel = UDI_CreateChannel_Blank(UDI_int_GetMetaLang(Inst->Module, parent->meta_idx));
+
+ UDI_BindChannel(channel,true, Inst, parent->ops_idx, parent->region_idx, NULL,false,0);
+ UDI_BindChannel(channel,false,
+ Inst->Parent, parent_bind->Ops->ops_idx, parent_bind->BindOps->region_idx,
+ NULL, true, parent_bind->ChildID);