OSDN Git Service

initial files
[iptd/iPTd_R3.git] / src / ry0 / device / PT1 / PT1Core.h
1 //\r
2 // PT1Core.h\r
3 //\r
4 \r
5 #ifndef __RY0_DEVICE_PT1_PT1CORE_H__\r
6 #define __RY0_DEVICE_PT1_PT1CORE_H__\r
7 \r
8 #include <stdint.h>\r
9 #include <windows.h>\r
10 #include <process.h>\r
11 #include "EARTH_PT.h"\r
12 #include "ry0/device/Tuner.h"\r
13 \r
14 namespace ry0\r
15 {\r
16 namespace device\r
17 {\r
18 namespace PT1\r
19 {\r
20 \r
21 class PT1Tuner;\r
22 \r
23 class PT1Core\r
24 {\r
25     friend class PT1Tuner;\r
26 \r
27 public:\r
28     static const int EXCEPTION_NEW_DEVICE               = 0x00000001;\r
29     static const int EXCEPTION_DELETE                   = 0x00000002;\r
30     static const int EXCEPTION_OPEN                     = 0x00000004;\r
31     static const int EXCEPTION_CLOSE                    = 0x00000008;\r
32     static const int EXCEPTION_INIT_TUNER               = 0x00000010;\r
33     static const int EXCEPTION_SET_TUNER_POWER_RESET    = 0x00000020;\r
34     static const int EXCEPTION_SET_TUNER_SLEEP          = 0x00000040;\r
35     static const int EXCEPTION_SET_STREAM_ENABLE        = 0x00000080;\r
36     static const int EXCEPTION_SET_STREAM_GRAY          = 0x00000100;\r
37     static const int EXCEPTION_OTHER                    = 0x80000000;\r
38 \r
39     static const int MAX_TUNERS                         = 4;\r
40     static const int PAGE_SIZE                          = 4096;\r
41     static const int PAGE_COUNT                         = 47;\r
42     static const int PACKET_SIZE                        = 188;\r
43     static const int VIRTUAL_SIZE                       = 4;\r
44     static const int VIRTUAL_COUNT                      = 16;\r
45     static const int LOCK_SIZE                          = 4;\r
46     static const int BUFFER_PAGE_COUNT                  = 511;\r
47     static const int BLOCK_COUNT                        = 2;\r
48     static const int BLOCK_SIZE                         = (PAGE_SIZE * BUFFER_PAGE_COUNT / BLOCK_COUNT);\r
49 \r
50 \r
51 private:\r
52     CRITICAL_SECTION    _cs;\r
53     EARTH::PT::Device * _device;\r
54     char                _name[64];\r
55 \r
56     PT1Tuner *          _tuners[MAX_TUNERS];\r
57     bool                _locked[MAX_TUNERS];\r
58 \r
59     // for DMA Transfer\r
60     enum {\r
61         ST_IDLE = 0,\r
62         ST_READY,\r
63         ST_RUN,\r
64         ST_STOP}        _transfer;\r
65     uint32_t            _virtualIndex;\r
66     uint32_t            _imageIndex;\r
67     uint32_t            _blockIndex;\r
68     uint8_t             _buffer[BLOCK_SIZE];\r
69 \r
70     uint32_t offset(uint32_t imageIndex, uint32_t blockIndex, uint32_t additionalOffset);\r
71     uint32_t offset(uint32_t imageIndex, uint32_t blockIndex);\r
72     uint32_t read(uint32_t virtualIndex, uint32_t imageIndex, uint32_t blockIndex);\r
73     void clearBlock(uint32_t virtualIndex, uint32_t imageIndex, uint32_t blockIndex);\r
74     bool waitBlock();\r
75     void copyBlock();\r
76     bool dispatchBlock();\r
77 \r
78     //\r
79     PT1Core(EARTH::PT::Bus *bus, const EARTH::PT::Bus::DeviceInfo *deviceInfo, Tuner *tuners[4], HMODULE multi2_dll);\r
80     ~PT1Core();\r
81 \r
82     void release(Tuner *tuner);\r
83 \r
84 public:\r
85     bool getCnAgc(EARTH::uint tuner, EARTH::uint *cn100, EARTH::uint *agc, EARTH::uint *maxAgc);\r
86     bool setChannel(EARTH::uint tuner, int channel);\r
87 \r
88     const char *name();\r
89 \r
90     void transfer();\r
91 };\r
92 \r
93 } // PT1\r
94 } // device\r
95 } // ry0\r
96 \r
97 #endif // __RY0_DEVICE_PT1_PT1CORE_H__\r