75 break; \ |
75 break; \ |
76 default: \ |
76 default: \ |
77 __ASSERT_ALWAYS(0,RESMANUS_FAULT()); \ |
77 __ASSERT_ALWAYS(0,RESMANUS_FAULT()); \ |
78 } \ |
78 } \ |
79 } |
79 } |
|
80 |
80 /*************************************************************************************** |
81 /*************************************************************************************** |
81 class TTrackGetStateBuf |
82 class TTrackGetStateBuf |
82 ***************************************************************************************/ |
83 ***************************************************************************************/ |
83 TTrackGetStateBuf::TTrackGetStateBuf(TPowerResourceCbFn aFn, TAny* aPtr, |
84 TTrackGetStateBuf::TTrackGetStateBuf(TPowerResourceCbFn aFn, TAny* /*aPtr*/, |
84 TDfcQue* aQue, TInt aPriority) |
85 TDfcQue* aQue, TInt aPriority) |
85 : iCtrlBlock(aFn, aPtr, aQue, aPriority) |
86 : iCtrlBlock(aFn, this, aQue, aPriority) |
86 { |
87 { |
87 iRequest = NULL; |
88 iRequest = NULL; |
|
89 } |
|
90 |
|
91 TTrackGetStateBuf::~TTrackGetStateBuf() |
|
92 { |
|
93 if(iRequest) |
|
94 Kern::DestroyClientRequest(iRequest); |
88 } |
95 } |
89 |
96 |
90 /*************************************************************************************** |
97 /*************************************************************************************** |
91 class TTrackSetStateBuf |
98 class TTrackSetStateBuf |
92 ***************************************************************************************/ |
99 ***************************************************************************************/ |
93 TTrackSetStateBuf::TTrackSetStateBuf(TPowerResourceCbFn aFn, TAny* aPtr, |
100 TTrackSetStateBuf::TTrackSetStateBuf(TPowerResourceCbFn aFn, TAny* /*aPtr*/, |
94 TDfcQue* aQue, TInt aPriority) |
101 TDfcQue* aQue, TInt aPriority) |
95 : iCtrlBlock(aFn, aPtr, aQue, aPriority) |
102 : iCtrlBlock(aFn, this, aQue, aPriority) |
96 { |
103 { |
97 iRequest = NULL; |
104 iRequest = NULL; |
|
105 } |
|
106 |
|
107 TTrackSetStateBuf::~TTrackSetStateBuf() |
|
108 { |
|
109 if(iRequest) |
|
110 Kern::DestroyClientRequest(iRequest); |
98 } |
111 } |
99 |
112 |
100 /*************************************************************************************** |
113 /*************************************************************************************** |
101 class TTrackNotifyBuf |
114 class TTrackNotifyBuf |
102 ***************************************************************************************/ |
115 ***************************************************************************************/ |
103 TTrackNotifyBuf::TTrackNotifyBuf(TPowerResourceCbFn aFn, TAny* aPtr, |
116 TTrackNotifyBuf::TTrackNotifyBuf(TPowerResourceCbFn aFn, TAny* /*aPtr*/, |
104 TDfcQue* aQue, TInt aPriority) |
117 TDfcQue* aQue, TInt aPriority) |
105 : iNotifyBlock(aFn, aPtr, aQue, aPriority) |
118 : iNotifyBlock(aFn, this, aQue, aPriority) |
106 { |
119 { |
107 iRequest = NULL; |
120 iRequest = NULL; |
108 } |
121 } |
109 |
122 |
110 TTrackNotifyBuf::~TTrackNotifyBuf() |
123 TTrackNotifyBuf::~TTrackNotifyBuf() |
111 { |
124 { |
112 if(iRequest) |
125 if(iRequest) |
113 Kern::DestroyClientRequest(iRequest); |
126 Kern::DestroyClientRequest(iRequest); |
114 } |
127 } |
115 |
128 |
116 TTrackSetStateBuf::~TTrackSetStateBuf() |
|
117 { |
|
118 if(iRequest) |
|
119 Kern::DestroyClientRequest(iRequest); |
|
120 } |
|
121 |
|
122 TTrackGetStateBuf::~TTrackGetStateBuf() |
|
123 { |
|
124 if(iRequest) |
|
125 Kern::DestroyClientRequest(iRequest); |
|
126 } |
|
127 |
129 |
128 /*************************************************************************************** |
130 /*************************************************************************************** |
129 class DDeviceResManUs |
131 class DDeviceResManUs |
130 ***************************************************************************************/ |
132 ***************************************************************************************/ |
131 DDeviceResManUs::DDeviceResManUs() |
133 DDeviceResManUs::DDeviceResManUs() |
530 __ASSERT_ALWAYS(m.Ptr1() != NULL, RESMANUS_FAULT()); |
531 __ASSERT_ALWAYS(m.Ptr1() != NULL, RESMANUS_FAULT()); |
531 r = GetAndInitTrackingBuffer(iListenableTracker, trackBuf, (TUint)m.Ptr1(), pS); |
532 r = GetAndInitTrackingBuffer(iListenableTracker, trackBuf, (TUint)m.Ptr1(), pS); |
532 if(r != KErrNone) |
533 if(r != KErrNone) |
533 return r; |
534 return r; |
534 prn = &(((TTrackNotifyBuf*)trackBuf)->iNotifyBlock); |
535 prn = &(((TTrackNotifyBuf*)trackBuf)->iNotifyBlock); |
535 new (prn) DPowerResourceNotification(&AsyncCallBackFn, (TAny*)trackBuf, iDfcQ, KResManCallBackPriority); |
|
536 m.iArg[2] = (TAny*)prn; |
536 m.iArg[2] = (TAny*)prn; |
537 break; |
537 break; |
538 } |
538 } |
539 case RBusDevResManUs::ERequestQualifiedChangeNotification: |
539 case RBusDevResManUs::ERequestQualifiedChangeNotification: |
540 { |
540 { |
2050 Kern::Printf("= Notify tracker\n"); |
2047 Kern::Printf("= Notify tracker\n"); |
2051 break; |
2048 break; |
2052 } |
2049 } |
2053 Kern::Printf("iOwningChannel at 0x%x\n",aTracker->iOwningChannel); |
2050 Kern::Printf("iOwningChannel at 0x%x\n",aTracker->iOwningChannel); |
2054 Kern::Printf("iFreeQue at 0x%x\n",aTracker->iFreeQue); |
2051 Kern::Printf("iFreeQue at 0x%x\n",aTracker->iFreeQue); |
|
2052 |
2055 SDblQueLink* buf; |
2053 SDblQueLink* buf; |
2056 if(aTracker->iFreeQue!=NULL) |
2054 if(aTracker->iFreeQue!=NULL) |
2057 { |
2055 { |
2058 buf=aTracker->iFreeQue->First(); |
2056 SDblQueLink* anchor = &(aTracker->iFreeQue->iA); |
2059 while(buf!=aTracker->iFreeQue->Last()) |
2057 buf = anchor->iNext; |
2060 { |
2058 while(anchor != buf ) |
2061 Kern::Printf("iFreeQue first buffer at 0x%x\n",buf); |
2059 { |
|
2060 Kern::Printf("iFreeQue buffer at 0x%x\n",buf); |
2062 TAny* intermediatePtr = (TAny*)buf; |
2061 TAny* intermediatePtr = (TAny*)buf; |
2063 if((aTracker->iType == EGetState)||(aTracker->iType == ESetState)) |
2062 if(aTracker->iType == EGetState) |
|
2063 { |
|
2064 TTrackGetStateBuf* tempBuf =(TTrackGetStateBuf*)intermediatePtr; |
|
2065 Kern::Printf("TTrackGetStateBuf buffer control block at 0x%x\n",&(tempBuf->iCtrlBlock)); |
|
2066 } |
|
2067 else if(aTracker->iType == ESetState) |
2064 { |
2068 { |
2065 TTrackSetStateBuf* tempBuf =(TTrackSetStateBuf*)intermediatePtr; |
2069 TTrackSetStateBuf* tempBuf =(TTrackSetStateBuf*)intermediatePtr; |
2066 Kern::Printf("buffer control block at 0x%x\n",(TInt)&tempBuf->iCtrlBlock); |
2070 Kern::Printf("TTrackSetStateBuf buffer control block at 0x%x\n",&(tempBuf->iCtrlBlock)); |
|
2071 } |
|
2072 else if(aTracker->iType == ENotify) |
|
2073 { |
|
2074 TTrackNotifyBuf* tempBuf =(TTrackNotifyBuf*)intermediatePtr; |
|
2075 Kern::Printf("TTrackNotifyBuf buffer notify block at 0x%x\n",&(tempBuf->iNotifyBlock)); |
2067 } |
2076 } |
2068 buf = buf->iNext; |
2077 buf = buf->iNext; |
2069 }; |
2078 }; |
2070 } |
2079 } |
2071 Kern::Printf("iBusyQue at 0x%x\n",aTracker->iBusyQue); |
2080 Kern::Printf("iBusyQue at 0x%x\n",aTracker->iBusyQue); |
2072 if(aTracker->iBusyQue!=NULL) |
2081 if(aTracker->iBusyQue!=NULL) |
2073 { |
2082 { |
2074 buf=aTracker->iBusyQue->First(); |
2083 SDblQueLink* anchor = &(aTracker->iBusyQue->iA); |
2075 while(buf!=aTracker->iBusyQue->Last()) |
2084 buf = anchor->iNext; |
|
2085 while(anchor != buf ) |
2076 { |
2086 { |
2077 Kern::Printf("iBusyQue buffer at 0x%x\n",buf); |
2087 Kern::Printf("iBusyQue buffer at 0x%x\n",buf); |
2078 TAny* intermediatePtr = (TAny*)buf; |
2088 TAny* intermediatePtr = (TAny*)buf; |
2079 if((aTracker->iType == EGetState)||(aTracker->iType == ESetState)) |
2089 if(aTracker->iType == EGetState) |
|
2090 { |
|
2091 TTrackGetStateBuf* tempBuf =(TTrackGetStateBuf*)intermediatePtr; |
|
2092 Kern::Printf("TTrackGetStateBuf buffer control block at 0x%x\n",&(tempBuf->iCtrlBlock)); |
|
2093 } |
|
2094 else if(aTracker->iType == ESetState) |
2080 { |
2095 { |
2081 TTrackSetStateBuf* tempBuf =(TTrackSetStateBuf*)intermediatePtr; |
2096 TTrackSetStateBuf* tempBuf =(TTrackSetStateBuf*)intermediatePtr; |
2082 Kern::Printf("buffer control block at 0x%x\n", (TInt)&tempBuf->iCtrlBlock); |
2097 Kern::Printf("TTrackSetStateBuf buffer control block at 0x%x\n",&(tempBuf->iCtrlBlock)); |
|
2098 } |
|
2099 else if(aTracker->iType == ENotify) |
|
2100 { |
|
2101 TTrackNotifyBuf* tempBuf =(TTrackNotifyBuf*)intermediatePtr; |
|
2102 Kern::Printf("TTrackNotifyBuf buffer notify block at 0x%x\n",&(tempBuf->iNotifyBlock)); |
2083 } |
2103 } |
2084 buf= buf->iNext; |
2104 buf= buf->iNext; |
2085 }; |
2105 }; |
2086 } |
2106 } |
2087 } |
2107 } |
2155 } |
2175 } |
2156 // If buffer allocation failed, need to remove all previously-allocated buffers and the queues |
2176 // If buffer allocation failed, need to remove all previously-allocated buffers and the queues |
2157 if(r!=KErrNone) |
2177 if(r!=KErrNone) |
2158 { |
2178 { |
2159 SDblQueLink* ptr = (aTracker->iFreeQue)->First(); |
2179 SDblQueLink* ptr = (aTracker->iFreeQue)->First(); |
|
2180 TTrackingBuffer *buf = NULL; |
2160 do |
2181 do |
2161 { |
2182 { |
2162 SDblQueLink* next = NULL; |
2183 SDblQueLink* next = NULL; |
2163 if(ptr !=NULL) |
2184 if(ptr !=NULL) |
2164 next = ptr->iNext; |
2185 next = ptr->iNext; |
2165 delete ptr; |
2186 buf = (TTrackingBuffer *)ptr; |
|
2187 DELETE_TRACKING_BUFFER(aTracker,buf) |
2166 ptr = next; |
2188 ptr = next; |
2167 } while ((ptr!=NULL)&&(ptr!=(aTracker->iFreeQue)->Last())); |
2189 } while ((ptr!=NULL)&&(ptr!=(aTracker->iFreeQue)->Last())); |
2168 delete aTracker->iFreeQue; |
2190 delete aTracker->iFreeQue; |
2169 delete aTracker->iBusyQue; |
2191 delete aTracker->iBusyQue; |
2170 } |
2192 } |