00001 #include <arpa/inet.h> 00002 #include "devicedvbinput.inc" 00003 #include <errno.h> 00004 #include <netdb.h> 00005 #include <netinet/in.h> 00006 #include <sys/socket.h> 00007 #include <stdio.h> 00008 #include <stdlib.h> 00009 #include "renderfarm.inc" 00010 #include "renderfarmclient.h" 00011 #include "tunerserver.h" 00012 #include <unistd.h> 00013 00014 00015 00016 00017 TunerServer::TunerServer(RenderFarmClientThread *client) 00018 { 00019 this->client = client; 00020 device_number = 0; 00021 port = 0; 00022 audio_pid = 0; 00023 video_pid = 0; 00024 channel = 0; 00025 table = 0; 00026 is_busy = 0; 00027 temp = 0; 00028 temp_allocated = 0; 00029 connection_closed = 0; 00030 } 00031 00032 00033 TunerServer::~TunerServer() 00034 { 00035 delete [] temp; 00036 } 00037 00038 00039 00040 void TunerServer::main_loop() 00041 { 00042 int error = 0; 00043 00044 // Send status 00045 if(is_busy) 00046 { 00047 error = client->write_int64(1); 00048 return; 00049 } 00050 else 00051 { 00052 error = client->write_int64(0); 00053 } 00054 00055 is_busy = 1; 00056 while(!error) 00057 { 00058 error = 0; 00059 00060 00061 00062 int64_t command = client->read_int64(&error); 00063 00064 00065 00066 00067 // Assume read error was connection closing. 00068 if(error) break; 00069 00070 //printf("TunerServerThread::run 1 command=%d\n", command); 00071 00072 switch(command) 00073 { 00074 case NETTUNE_SIGNAL: 00075 { 00076 int current_power = 0; 00077 int current_lock = 0; 00078 error = get_signal_strength(¤t_power, ¤t_lock); 00079 error = client->write_int64(error); 00080 if(!error) 00081 error = client->write_int64(current_power); 00082 if(!error) 00083 error = client->write_int64(current_lock); 00084 break; 00085 } 00086 00087 case NETTUNE_SET_TABLE: 00088 table = client->read_int64(&error); 00089 break; 00090 00091 case NETTUNE_SET_CHANNEL: 00092 channel = client->read_int64(&error); 00093 break; 00094 00095 case NETTUNE_SET_AUDIO_PID: 00096 audio_pid = client->read_int64(&error); 00097 break; 00098 00099 case NETTUNE_SET_VIDEO_PID: 00100 video_pid = client->read_int64(&error); 00101 break; 00102 00103 case NETTUNE_READ: 00104 { 00105 // Get requested size 00106 int size = client->read_int64(&error); 00107 if(temp_allocated < size) 00108 { 00109 delete [] temp; 00110 temp = new unsigned char[size]; 00111 temp_allocated = size; 00112 } 00113 00114 // Get number of bytes read and buffer 00115 int bytes_read = read_data(temp, size); 00116 error = client->write_int64(bytes_read); 00117 if(!error) 00118 error = client->write_socket((char*)temp, bytes_read); 00119 break; 00120 } 00121 00122 case NETTUNE_OPEN: 00123 { 00124 printf("TunerServerThread::run audio_pid=0x%x video_pid=0x%x table=%d channel=%d\n", 00125 audio_pid, 00126 video_pid, 00127 table, 00128 channel); 00129 error = open_tuner(); 00130 error = client->write_int64(error); 00131 break; 00132 } 00133 00134 00135 case NETTUNE_CLOSE: 00136 error = 1; 00137 break; 00138 } 00139 } 00140 00141 printf("TunerServerThread::run: connection closed\n"); 00142 00143 close_tuner(); 00144 is_busy = 0; 00145 } 00146 00147 int TunerServer::get_channel() 00148 { 00149 return channel; 00150 } 00151 00152 int TunerServer::get_table() 00153 { 00154 return table; 00155 } 00156 00157 int TunerServer::get_audio_pid() 00158 { 00159 return audio_pid; 00160 } 00161 00162 int TunerServer::get_video_pid() 00163 { 00164 return video_pid; 00165 } 00166 00167 int TunerServer::get_device_number() 00168 { 00169 return device_number; 00170 } 00171 00172 00173 int TunerServer::open_tuner() 00174 { 00175 return 1; 00176 } 00177 00178 int TunerServer::close_tuner() 00179 { 00180 return 1; 00181 } 00182 00183 00184 int TunerServer::get_signal_strength(int *current_power, int *current_lock) 00185 { 00186 return 1; 00187 } 00188 00189 int TunerServer::read_data(unsigned char *data, int size) 00190 { 00191 return 0; 00192 } 00193 00194 00195 00196
1.5.5