1 #if !defined(MSOS_TYPE_LINUX_KERNEL)
2 #include "string.h"
3 #include <stdio.h>
4 #else
5 #include <linux/string.h>
6 #include <linux/slab.h>
7 #endif
8
9 #include "MsTypes.h"
10 #include "utopia_dapi.h"
11 #include "drv_IR_TX.h"
12 #include "drvIR_TX_private.h"
13 #include "MsOS.h"
14 #include "utopia.h"
15
16 #include "ULog.h"
17
18 #define TAG_IR_TX "IR_TX"
19
20 enum
21 {
22 IRTX_POOL_ID_IRTX0=0
23 } eIR_TXPoolID;
24
25
IR_TXRegisterToUtopia(FUtopiaOpen ModuleType)26 void IR_TXRegisterToUtopia(FUtopiaOpen ModuleType)
27 {
28 void* pUtopiaModule = NULL;
29 UtopiaModuleCreate(MODULE_IR_TX, 8, &pUtopiaModule);
30 UtopiaModuleRegister(pUtopiaModule);
31
32 UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)IR_TXOpen, (FUtopiaClose)IR_TXClose, (FUtopiaIOctl)IR_TXIoctl);
33
34 #if defined(MSOS_TYPE_LINUX_KERNEL)
35 //UtopiaModuleSetupSTRFunctionPtr(pUtopiaModule,(FUtopiaSTR)BDMAStr);
36 //UtopiaModuleSetSTRPrivate(pUtopiaModule, STRPrivateDataSize);
37 #endif
38
39 // 2. deal with resource
40 void* psResource = NULL;
41 // start func to add res, call once will create 2 access in resource. Also can declare BDMA_POOL_ID_BDMA1 for another channel depend on driver owner.
42 UtopiaModuleAddResourceStart(pUtopiaModule, IRTX_POOL_ID_IRTX0);
43 // resource can alloc private for internal use, ex, BDMA_RESOURCE_PRIVATE
44 UtopiaResourceCreate("ir_tx", sizeof(IR_TX_RESOURCE_PRIVATE), &psResource);
45 // func to reg res
46 UtopiaResourceRegister(pUtopiaModule, psResource, IRTX_POOL_ID_IRTX0);
47 // end function to add res
48 UtopiaModuleAddResourceEnd(pUtopiaModule, IRTX_POOL_ID_IRTX0);
49 }
50
51
52
IR_TXOpen(void ** ppInstance,MS_U32 u32ModuleVersion,void * pAttribute)53 MS_U32 IR_TXOpen(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute)
54 {
55 IR_TX_INSTANT_PRIVATE *pBdmaPri = NULL;
56
57 UtopiaInstanceCreate(sizeof(IR_TX_INSTANT_PRIVATE), ppInstance);
58 UtopiaInstanceGetPrivate(*ppInstance, (void**)&pBdmaPri);
59
60 pBdmaPri->fpIRTXSetStatus = (IOCTL_IRTX_SETSTATUS)_MDrv_IR_TX_SetStatus;
61 pBdmaPri->fpIRTXSetMemStatus = (IOCTL_IRTX_SETMEMSTATUS)_MDrv_IR_TX_SetMemStatus;
62 pBdmaPri->fpIRTXSetClkDiv = (IOCTL_IRTX_SETCLKDIV)_MDrv_IR_TX_SetClkDiv;
63 pBdmaPri->fpIRTXSetDelayCycleTime = (IOCTL_IRTX_SETDELAYCLKTIME)_MDrv_IR_TX_SetDelayCycleTime;
64 pBdmaPri->fpIRTXSetMemAddr = (IOCTL_IRTX_SETMEMADDR)_MDrv_IR_TX_SetMemAddr;
65
66 pBdmaPri->fpIRTXSetMemData = (IOCTL_IRTX_SETMEMDATA)_MDrv_IR_TX_SetMemData;
67 pBdmaPri->fpIRTXSetUnitValue = (IOCTL_IRTX_SETUNITVALUE)_MDrv_IR_TX_SetUnitValue;
68 pBdmaPri->fpIRTXSetShotCount = (IOCTL_IRTX_SETSHOTCOUNT)_MDrv_IR_TX_SetShotCount;
69 pBdmaPri->fpIRTX_Init = (IOCTL_IRTX_INIT)_MDrv_IR_TX_Init;
70 pBdmaPri->fpIRTX_Trigger = (IOCTL_IRTX_TRIGGER)_MDrv_IR_TX_Trigger;
71 pBdmaPri->fpIRTX_SetCarrierCount = (IOCTL_IRTX_SETCARRIERCOUNT)_MDrv_IR_TX_SetCarrierCount;
72
73 return 0;
74 }
75
IR_TXIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)76 MS_U32 IR_TXIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
77 {
78 void* pModule = NULL;
79 UtopiaInstanceGetModule(pInstance, &pModule);
80 //void* pResource = NULL;
81
82 //PIRTX_SETSTATUS_PARAM pSetStatusParam = NULL;
83 //PIRTX_SETMEMSTATUS_PARAM pMemStatusParam = NULL;
84 //PIRTX_SETCLKDIV_PARAM pSetClkDivParam = NULL;
85 //PIRTX_SETDELAYCLKTIME_PARAM pSetDelayClkTimeParam = NULL;
86 //PIRTX_SETMEMADDR_PARAM pSetMemAddrParam = NULL;
87 //PIRTX_SETMEMDATA_PARAM pSetMemDataParam = NULL;
88 //PIRTX_SETUNITVALUE_PARAM pSetUnitValueParam = NULL;
89 //PIRTX_SETSHOTCOUNT_PARAM pShotCountParam = NULL;
90 //PIRTX_INIT_PARAM pInit = NULL;
91 //PIRTX_TRIGGER_PARAM pTriggerParam = NULL;
92 //PIRTX_SETCARRIERCOUNT_PARAM pSetCarrierCountParam = NULL;
93
94 IR_TX_INSTANT_PRIVATE* psIRTXInstPri = NULL;
95 UtopiaInstanceGetPrivate(pInstance, (void**)&psIRTXInstPri);
96
97 MS_U32 u32Ret;
98
99 switch(u32Cmd)
100 {
101
102 /////////////////////////////////////////////////////////////////
103
104 case MDrv_CMD_IR_TX_Init:
105 {
106 //PIRTX_INIT_PARAM pParam = (PIRTX_INIT_PARAM)pArgs;
107 u32Ret = psIRTXInstPri->fpIRTX_Init();
108 return u32Ret;
109 }
110
111 /////////////////////////////////////////////////////////////////
112
113 case MDrv_CMD_IR_TX_SetStatus:
114 {
115
116 PIRTX_SETSTATUS_PARAM pParam = (PIRTX_SETSTATUS_PARAM)pArgs;
117 u32Ret = psIRTXInstPri->fpIRTXSetStatus(pParam->Status);
118 return u32Ret;
119 }
120
121 ////////////////////////////////////////////////////////////////
122
123 case MDrv_CMD_IR_TX_SetMemStatus:
124 {
125 PIRTX_SETMEMSTATUS_PARAM pParam = (PIRTX_SETMEMSTATUS_PARAM)pArgs;
126 u32Ret = psIRTXInstPri->fpIRTXSetMemStatus(pParam->Status);
127 return u32Ret;
128 }
129
130 /////////////////////////////////////////////////////////////////
131
132 case MDrv_CMD_IR_TX_SetClkDiv:
133 {
134 PIRTX_SETCLKDIV_PARAM pParam = (PIRTX_SETCLKDIV_PARAM)pArgs;
135 u32Ret = psIRTXInstPri->fpIRTXSetClkDiv(pParam->Div);
136 return u32Ret;
137 }
138
139 ////////////////////////////////////////////////////////////////
140
141 case MDrv_CMD_IR_TX_SetDelayCycleTime:
142 {
143 PIRTX_SETDELAYCLKTIME_PARAM pParam = (PIRTX_SETDELAYCLKTIME_PARAM)pArgs;
144 u32Ret = psIRTXInstPri->fpIRTXSetDelayCycleTime(pParam->CycleTime_H,pParam->CycleTime_L);
145 return u32Ret;
146 }
147
148 /////////////////////////////////////////////////////////////////
149
150 case MDrv_CMD_IR_TX_SetMemAddr:
151 {
152 PIRTX_SETMEMADDR_PARAM pParam = (PIRTX_SETMEMADDR_PARAM)pArgs;
153 u32Ret = psIRTXInstPri->fpIRTXSetMemAddr(pParam->MemAddr);
154 return u32Ret;
155 }
156
157 ////////////////////////////////////////////////////////////////
158
159 case MDrv_CMD_IR_TX_SetMemData:
160 {
161 PIRTX_SETMEMDATA_PARAM pParam = (PIRTX_SETMEMDATA_PARAM)pArgs;
162 u32Ret = psIRTXInstPri->fpIRTXSetMemData(pParam->MemData);
163 return u32Ret;
164 }
165
166 /////////////////////////////////////////////////////////////////
167
168 case MDrv_CMD_IR_TX_SetUnitValue:
169 {
170 PIRTX_SETUNITVALUE_PARAM pParam = (PIRTX_SETUNITVALUE_PARAM)pArgs;
171 u32Ret = psIRTXInstPri->fpIRTXSetUnitValue(pParam->Unit_Value,pParam->Unit_Number);
172 return u32Ret;
173 }
174
175 /////////////////////////////////////////////////////////////////
176
177 case MDrv_CMD_IR_TX_SetShotCount:
178 {
179 PIRTX_SETSHOTCOUNT_PARAM pParam = (PIRTX_SETSHOTCOUNT_PARAM)pArgs;
180 u32Ret = psIRTXInstPri->fpIRTXSetShotCount(pParam->H_ShotCount, pParam->L_ShotCount, pParam->Unit_Number);
181 return u32Ret;
182 }
183
184 /////////////////////////////////////////////////////////////////
185
186 case MDrv_CMD_IR_TX_Trigger:
187 {
188 //PIRTX_TRIGGER_PARAM pParam = (PIRTX_TRIGGER_PARAM)pArgs;
189 u32Ret = psIRTXInstPri->fpIRTX_Trigger();
190 return u32Ret;
191 }
192 /////////////////////////////////////////////////////////////////
193
194 case MDrv_CMD_IR_TX_SetCarrierCount:
195 {
196 PIRTX_SETCARRIERCOUNT_PARAM pParam = (PIRTX_SETCARRIERCOUNT_PARAM)pArgs;
197 u32Ret = psIRTXInstPri->fpIRTX_SetCarrierCount(pParam->Count);
198 return u32Ret;
199 }
200 }//end switch
201
202 return 1; // FIXME: error code
203 }
204
205
IR_TXClose(void * pInstance)206 MS_U32 IR_TXClose(void* pInstance)
207 {
208 UtopiaInstanceDelete(pInstance);
209
210 return UTOPIA_STATUS_SUCCESS;
211 }
212
213