1 /****************************************************************************
3 * Copyright(c) 2010 Yamaha Corporation. All rights reserved.
7 * Description : MC Driver device interface
9 * Version : 1.0.0 2010.09.10
11 ****************************************************************************/
15 #include "mcservice.h"
16 #include "mcresctrl.h"
17 #include "mcmachdep.h"
19 #include "mcdebuglog.h"
24 static MCDRV_PACKET* gpsPacket = NULL;
26 /****************************************************************************
27 * McDevIf_AllocPacketBuf
30 * allocate the buffer for register setting packets.
37 ****************************************************************************/
38 SINT32 McDevIf_AllocPacketBuf
43 SINT32 sdRet = MCDRV_SUCCESS;
45 #if (MCDRV_DEBUG_LEVEL>=4)
46 McDebugLog_FuncIn("McDevIf_AllocPacketBuf");
49 gpsPacket = McResCtrl_AllocPacketBuf();
56 McDevIf_ClearPacket();
59 #if (MCDRV_DEBUG_LEVEL>=4)
60 McDebugLog_FuncOut("McDevIf_AllocPacketBuf", &sdRet);
66 /****************************************************************************
67 * McDevIf_ReleasePacketBuf
70 * Release the buffer for register setting packets.
76 ****************************************************************************/
77 void McDevIf_ReleasePacketBuf
82 #if (MCDRV_DEBUG_LEVEL>=4)
83 McDebugLog_FuncIn("McDevIf_ReleasePacketBuf");
86 McResCtrl_ReleasePacketBuf();
88 #if (MCDRV_DEBUG_LEVEL>=4)
89 McDebugLog_FuncOut("McDevIf_ReleasePacketBuf", 0);
93 /****************************************************************************
103 ****************************************************************************/
104 void McDevIf_ClearPacket
109 #if (MCDRV_DEBUG_LEVEL>=4)
111 McDebugLog_FuncIn("McDevIf_ClearPacket");
114 if(gpsPacket == NULL)
116 #if (MCDRV_DEBUG_LEVEL>=4)
118 McDebugLog_FuncOut("McDevIf_ClearPacket", &sdRet);
123 gpsPacket[0].dDesc = MCDRV_PACKET_TYPE_TERMINATE;
125 #if (MCDRV_DEBUG_LEVEL>=4)
126 McDebugLog_FuncOut("McDevIf_ClearPacket", 0);
130 /****************************************************************************
141 ****************************************************************************/
142 void McDevIf_AddPacket
150 #if (MCDRV_DEBUG_LEVEL>=4)
151 McDebugLog_FuncIn("McDevIf_AddPacket");
154 if(gpsPacket == NULL)
159 for(i = 0; i < MCDRV_MAX_PACKETS; i++)
161 if(gpsPacket[i].dDesc == MCDRV_PACKET_TYPE_TERMINATE)
166 if(i >= MCDRV_MAX_PACKETS)
168 McDevIf_ExecutePacket();
172 gpsPacket[i].dDesc = dDesc;
173 gpsPacket[i].bData = bData;
174 gpsPacket[i+1UL].dDesc = MCDRV_PACKET_TYPE_TERMINATE;
177 #if (MCDRV_DEBUG_LEVEL>=4)
178 McDebugLog_FuncOut("McDevIf_AddPacket", 0);
182 /****************************************************************************
183 * McDevIf_AddPacketRepeat
186 * Add packets to set data at same register over agian.
189 * pbData poointer to packet data
190 * wDataCount packet data count
194 ****************************************************************************/
195 void McDevIf_AddPacketRepeat
204 #if (MCDRV_DEBUG_LEVEL>=4)
205 McDebugLog_FuncIn("McDevIf_AddPacketRepeat");
208 for(wCount = 0; wCount < wDataCount; wCount++)
210 McDevIf_AddPacket(dDesc, pbData[wCount]);
213 #if (MCDRV_DEBUG_LEVEL>=4)
214 McDebugLog_FuncOut("McDevIf_AddPacketRepeat", 0);
218 /****************************************************************************
219 * McDevIf_ExecutePacket
222 * Execute sequence for register setting.
227 * MCDRV_ERROR_ARGUMENT
229 ****************************************************************************/
230 SINT32 McDevIf_ExecutePacket
236 SINT16 swPacketIndex;
242 MCDRV_UPDATE_MODE eUpdateMode;
244 #if (MCDRV_DEBUG_LEVEL>=4)
245 McDebugLog_FuncIn("McDevIf_ExecutePacket");
248 if(gpsPacket == NULL)
250 sdRet = MCDRV_ERROR_RESOURCEOVER;
254 sdRet = MCDRV_SUCCESS;
256 McResCtrl_InitRegUpdate();
258 while ((MCDRV_PACKET_TYPE_TERMINATE != (gpsPacket[swPacketIndex].dDesc & MCDRV_PACKET_TYPE_MASK)) && (sdRet == MCDRV_SUCCESS))
260 dPacketType = gpsPacket[swPacketIndex].dDesc & MCDRV_PACKET_TYPE_MASK;
263 case MCDRV_PACKET_TYPE_WRITE:
264 case MCDRV_PACKET_TYPE_FORCE_WRITE:
265 wRegType = (UINT16)(gpsPacket[swPacketIndex].dDesc & MCDRV_PACKET_REGTYPE_MASK);
266 wAddress = (UINT16)(gpsPacket[swPacketIndex].dDesc & MCDRV_PACKET_ADR_MASK);
267 if (MCDRV_PACKET_TYPE_WRITE == dPacketType)
269 eUpdateMode = eMCDRV_UPDATE_NORMAL;
271 else if (MCDRV_PACKET_TYPE_FORCE_WRITE == dPacketType)
273 eUpdateMode = eMCDRV_UPDATE_FORCE;
277 eUpdateMode = eMCDRV_UPDATE_DUMMY;
279 McResCtrl_AddRegUpdate(wRegType, wAddress, gpsPacket[swPacketIndex].bData, eUpdateMode);
282 case MCDRV_PACKET_TYPE_TIMWAIT:
283 McResCtrl_ExecuteRegUpdate();
284 McResCtrl_InitRegUpdate();
285 dParam1 = gpsPacket[swPacketIndex].dDesc & MCDRV_PACKET_TIME_MASK;
286 McSrv_Sleep(dParam1);
289 case MCDRV_PACKET_TYPE_EVTWAIT:
290 McResCtrl_ExecuteRegUpdate();
291 McResCtrl_InitRegUpdate();
292 dParam1 = gpsPacket[swPacketIndex].dDesc & MCDRV_PACKET_EVT_MASK;
293 dParam2 = gpsPacket[swPacketIndex].dDesc & MCDRV_PACKET_EVTPRM_MASK;
294 sdRet = McResCtrl_WaitEvent(dParam1, dParam2);
304 if(sdRet == MCDRV_SUCCESS)
306 McResCtrl_ExecuteRegUpdate();
308 McDevIf_ClearPacket();
311 #if (MCDRV_DEBUG_LEVEL>=4)
312 McDebugLog_FuncOut("McDevIf_ExecutePacket", &sdRet);