blast.c
上传用户:fy98168
上传日期:2015-06-26
资源大小:13771k
文件大小:9k
源码类别:

DVD

开发平台:

C/C++

  1. /*****************************************************************************
  2. File name   : blast.c
  3. Description : STBlast interface.
  4. COPYRIGHT (C) STMicroelectronics 2002.
  5. Authors TM Chua (tm.chua@st.com)
  6. Original Work:  blast.c
  7. ===========================
  8. * IMPROVEMENTS OF THOUGHT *
  9. ===========================
  10. ========================
  11. * MODIFICATION HISTORY *
  12. ========================
  13. Date         Name Modification
  14. ----         ---- ------------
  15. 04 Sep 03 TM Created
  16. 01 Mar 04 TM Adpat for HD STB
  17. *****************************************************************************/
  18. #ifndef __BLAST_C__ /* Prevent multiple inclusion of the file */
  19. #define __BLAST_C__
  20. /* C++ support */
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. /* ************************************************************************
  25.    I N C L U D E S
  26.    ************************************************************************ */
  27. #include <string.h>
  28. #include "stdevice.h"
  29. #include "sttbx.h"
  30. #include "stpio.h"
  31. #include "stevt.h"
  32. #include "errors.h"
  33. #include "blast.h"
  34. /* ************************************************************************
  35.    EVENT
  36.    ************************************************************************ */
  37. #define NUMBER_EVT 1
  38. #define EVT_MAX_EVENTS          15
  39. #define EVT_MAX_CONNECTIONS     15
  40. #define EVT_MAX_SUBSCRIBERS     10
  41. static ST_DeviceName_t      EvtblastDeviceName[] = {"EVTBlast"};
  42. static STEVT_Handle_t       EvtHandle[NUMBER_EVT];
  43. enum
  44. {
  45.     EVT_DEVICE_0,
  46.     EVT_DEVICE_1,
  47.     EVT_DEVICE_2
  48. };
  49. /* ************************************************************************
  50.    D E F I N E S
  51.    ************************************************************************ */
  52. #define BLAST_EVT_DEV EvtblastDeviceName[0]
  53. #define BLAST_CLOCK_FREQUENCY ST_ClockInfo.CommsBlock
  54. #define BLAST_TXD_TYPE STBLAST_DEVICE_IR_TRANSMITTER
  55. #define BLAST_RXD_TYPE STBLAST_DEVICE_IR_RECEIVER
  56. #define BLAST_RXD_NUM 0
  57. #define BLAST_EVT_HDL EvtHandle[EVT_DEVICE_0]
  58. STBLAST_Handle_t     BlasterHandle[NUMBER_BLAST];
  59. /* Variables used by event handler */
  60. ST_ErrorCode_t LastEvent;
  61. ST_ErrorCode_t LastError;
  62. /* semaphore used by event handler */
  63. semaphore_t BlasterSemaphore;
  64. /* Blaster device names for transmitter and receiver */
  65. static ST_DeviceName_t      BlasterDeviceName[] =
  66. {
  67.     "TX",
  68.     "RX"
  69. };
  70. static ST_ClockInfo_t ST_ClockInfo;
  71. extern partition_t *SystemPartition;
  72. /* Extern function ------------------------------------------------------*/
  73. /* Static function ------------------------------------------------------*/
  74. static ST_ErrorCode_t blaster_Init(void);
  75. static void blaster_Callback(STEVT_CallReason_t Reason,
  76.                  const ST_DeviceName_t RegistrantName,
  77.                  STEVT_EventConstant_t Event,
  78.                  const void *EventData,
  79.                  const void *SubscriberData_p);
  80. static BOOL blaster_EvtInit(void);
  81. /* ************************************************************************
  82.    F U N C T I O N S
  83.    ************************************************************************ */
  84. static BOOL blaster_EvtInit(void)
  85. {
  86. int i;
  87. ST_ErrorCode_t error = ST_NO_ERROR;
  88. STEVT_InitParams_t EVTInitParams;
  89. STEVT_OpenParams_t EVTOpenParams;
  90. EVTInitParams.EventMaxNum = EVT_MAX_EVENTS;
  91. EVTInitParams.ConnectMaxNum = EVT_MAX_CONNECTIONS;
  92. EVTInitParams.SubscrMaxNum = EVT_MAX_SUBSCRIBERS;
  93. EVTInitParams.MemoryPartition = SystemPartition;
  94. for (i = 0; i < NUMBER_EVT && error == ST_NO_ERROR; i++)
  95. {
  96. error = STEVT_Init(EvtblastDeviceName[i], &EVTInitParams);
  97. if (error == ST_NO_ERROR)
  98. {
  99. error = STEVT_Open(EvtblastDeviceName[i], &EVTOpenParams,
  100. &EvtHandle[i]);
  101. }
  102. }
  103. return error ? TRUE : FALSE;
  104. }
  105. /* stdoc ******************************************************************
  106.    Name:        blaster_Callback
  107.    
  108.    Purpose:     Event handler for IR Blaster device events.
  109.    
  110.    Arguments:   <STEVT_CallReason_t Reason>  The reason because the
  111.                                         callback has been invoked
  112.     <const ST_DeviceName_t RegistrantName> The registrant name
  113.                 <STEVT_EventConstant_t Event> The event to check and 
  114.                                         manage
  115.                 <const void *EventData> The event data
  116.                 <const void *SubscriberData_p> The data to indentify
  117.                                         a specific subscriber 
  118.    
  119.    ReturnValue: None
  120.    
  121.    Public:      No
  122.    
  123.    ************************************************************************ */
  124. static void blaster_Callback(STEVT_CallReason_t Reason,
  125.                  const ST_DeviceName_t RegistrantName,
  126.                  STEVT_EventConstant_t Event,
  127.                  const void *EventData,
  128.                  const void *SubscriberData_p)
  129. {
  130.     switch (Event)
  131.     {
  132.         /* A infrared command has been transmitted or received */
  133.         case STBLAST_READ_DONE_EVT:
  134.         case STBLAST_WRITE_DONE_EVT:
  135.             LastEvent = Event;
  136.             LastError = ((STBLAST_EvtReadDoneParams_t *)EventData)->Result;
  137.             /* signal the blaster semaphore */
  138.             semaphore_signal(&BlasterSemaphore);
  139.             break;
  140.         default:
  141.             break;
  142.     }
  143. }
  144. /* stdoc ******************************************************************
  145.    Name:        BLASTER_Setup
  146.    
  147.    Purpose:     Init and open the blast driver for receiver and transmitter
  148.                 mode.
  149.    
  150.    Arguments:   None
  151.    
  152.    ReturnValue: ST_NO_ERROR if all is ok, or a specific error code depending
  153. on the called api
  154.    
  155.    Public:      No
  156.    
  157.    ************************************************************************ */
  158. static ST_ErrorCode_t blaster_Init(void)
  159. {
  160.     ST_ErrorCode_t error = ST_NO_ERROR;
  161.     STBLAST_InitParams_t BLASTInitParams;
  162.     STBLAST_OpenParams_t BlastOpenParams;
  163.     STEVT_DeviceSubscribeParams_t EvtSubParams;
  164.     memset(&BLASTInitParams, 0, sizeof(STBLAST_InitParams_t));
  165.     memset(&BlastOpenParams, 0, sizeof(STBLAST_OpenParams_t));
  166.     (void) ST_GetClockInfo(&ST_ClockInfo);
  167.     /* Set glitch width */
  168.     BlastOpenParams.RxParams.GlitchWidth = 0;
  169.     
  170.     /* General parameter for blaster initialization */
  171.     BLASTInitParams.DeviceType = BLAST_TXD_TYPE;
  172.     BLASTInitParams.DriverPartition = SystemPartition;
  173.     BLASTInitParams.ClockSpeed = BLAST_CLOCK_FREQUENCY;
  174.     BLASTInitParams.SymbolBufferSize =  SYMBOL_BUFFER_SIZE;
  175.     BLASTInitParams.BaseAddress = (U32 *)IRB_BASE_ADDRESS;
  176.     BLASTInitParams.InterruptNumber = IRB_INTERRUPT;
  177.     BLASTInitParams.InterruptLevel = IRB_INTERRUPT_LEVEL;
  178.     BLASTInitParams.InputActiveLow = TRUE;
  179.     strcpy(BLASTInitParams.EVTDeviceName, EvtblastDeviceName[0]/*BLAST_EVT_DEV*/);
  180.     /* Parameters for IR receiver */
  181.     BLASTInitParams.DeviceType = BLAST_RXD_TYPE;
  182.     /*BLASTInitParams.DeviceNumber = BLAST_RXD_NUM;*/
  183.     strcpy(BLASTInitParams.RxPin.PortName, BLAST_RXD_PIO);
  184.     BLASTInitParams.RxPin.BitMask = BLAST_RXD_BIT;
  185.     error = STBLAST_Init(BlasterDeviceName[BLASTER_RECEIVER], &BLASTInitParams);
  186.     
  187. if (error == ST_NO_ERROR)
  188. {
  189. STTBX_Print (("STBLAST_Init(RX)=%sn", STBLAST_GetRevision()));
  190. }
  191. else
  192. {
  193. }
  194.         
  195.     if (error == ST_NO_ERROR)
  196.     {
  197.         error = STBLAST_Open(BlasterDeviceName[BLASTER_RECEIVER], &BlastOpenParams,
  198.                              &BlasterHandle[BLASTER_RECEIVER]);
  199.         if (error != ST_NO_ERROR)
  200.         {
  201.             return error;
  202.         }
  203.         if (error == ST_NO_ERROR)
  204.         {
  205.             /* Subscribe to the relevant blaster events */
  206.             memset(&EvtSubParams, 0, sizeof(EvtSubParams));
  207.             EvtSubParams.NotifyCallback = blaster_Callback;
  208.             error = STEVT_SubscribeDeviceEvent(BLAST_EVT_HDL,
  209.                                     BlasterDeviceName[BLASTER_RECEIVER],
  210.                                     STBLAST_READ_DONE_EVT,
  211.                                     &EvtSubParams);
  212.             if (error != ST_NO_ERROR)
  213.     {
  214.                 return error;
  215.     }
  216.         }
  217.     }
  218.     /* Initialize BlasterSemaphore semaphore */
  219.     semaphore_init_fifo(&BlasterSemaphore, 0);
  220.     return error;
  221.        
  222. }/* end BLASTER_Setup() */
  223. ST_ErrorCode_t BLASTER_Setup ( void )
  224. {
  225. ST_ErrorCode_t error=ST_NO_ERROR;
  226. error = blaster_EvtInit();
  227. if ( error != ST_NO_ERROR )
  228. {
  229. STTBX_Print(("InitEvt for BLAST failn"));
  230. return error;
  231. }
  232. error = blaster_Init();
  233. if ( error != ST_NO_ERROR )
  234. {
  235. STTBX_Print(("InitBlast failn"));
  236. return error;
  237. }
  238. return error;
  239. }
  240. /* end C++ support */
  241. #ifdef __cplusplus
  242. }
  243. #endif
  244. #endif  /* #ifndef __BLAST_C__  */
  245. /*EOF*/