xref: /utopia/UTPA2-700.0.x/modules/ir_tx/drv/ir_tx/mdrv_IR_TX.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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