File Coverage

blib/lib/Astro/SkyX.pm
Criterion Covered Total %
statement 14 126 11.1
branch 0 6 0.0
condition 0 6 0.0
subroutine 5 35 14.2
pod 0 30 0.0
total 19 203 9.3


line stmt bran cond sub pod time code
1             package Astro::SkyX;
2              
3 1     1   22634 use 5.006001;
  1         3  
4 1     1   5 use strict;
  1         1  
  1         31  
5 1     1   6 use warnings;
  1         6  
  1         237  
6             require IO::Socket;
7             require Scalar::Util;
8             require Exporter;
9             require Astro::SkyX::Application;
10             require Astro::SkyX::AutomatedImageLinkSettings;
11             require Astro::SkyX::ClosedLoopSlew;
12             require Astro::SkyX::ImageLinkResults;
13             require Astro::SkyX::ImageLink;
14             require Astro::SkyX::OpticalTubeAssembly;
15             require Astro::SkyX::SelectedHardware;
16             require Astro::SkyX::WeatherUtil;
17             require Astro::SkyX::TheSkyXAction;
18             require Astro::SkyX::ccdsoftCamera;
19             require Astro::SkyX::ccdsoftCameraImage;
20             require Astro::SkyX::ccdsoftAutoguiderImage;
21             require Astro::SkyX::sky6DataWizard;
22             require Astro::SkyX::sky6DirectGuide;
23             require Astro::SkyX::sky6Dome;
24             require Astro::SkyX::sky6MyFOVs;
25             require Astro::SkyX::sky6ObjectInformation;
26             require Astro::SkyX::sky6RASCOMTele;
27             require Astro::SkyX::sky6RASCOMTheSky;
28             require Astro::SkyX::sky6Raven;
29             require Astro::SkyX::sky6StarChart;
30             require Astro::SkyX::sky6TheSky;
31             require Astro::SkyX::sky6Utils;
32             require Astro::SkyX::sky6Web;
33 1     1   5 use constant IGNORECTLC => 0;
  1         1  
  1         87  
34 1     1   5 use vars qw( $SkyXConnection $error );
  1         7  
  1         2117  
35              
36             our @ISA = qw( Exporter );
37              
38             our %EXPORT_TAGS = ( 'all' => [ qw(
39             new connect Send Get
40             ) ] );
41              
42             our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
43              
44             our @EXPORT = qw(
45             );
46              
47             our $VERSION = '0.11';
48            
49             my %attr_data =
50             (
51             _debug => [0, 'read/write'],
52             );
53             my $count = 0;
54             my $select = '';
55             ##---##
56              
57             sub new {
58 0     0 0   my ($caller, %arg) = @_;
59 0           my $caller_is_obj = ref($caller);
60 0   0       my $class = $caller_is_obj || $caller;
61              
62             my $self = bless {
63 0           _debug => $arg{"DEBUG"},
64             _SkyXConnection => $_[2],
65             _connect => $_[3],
66             _Send => $_[4],
67             _Get => $_[5],
68             _Application => $_[6],
69             _AutomatedImageLinkSettings => $_[7],
70             _ClosedLoopSlew => $_[8],
71             _ImageLinkResults => $_[9],
72             _ImageLink => $_[10],
73             _OpticalTubeAssembly => $_[11],
74             _SelectedHardware => $_[12],
75             _WeatherUtil => $_[13],
76             _TheSkyXAction => $_[14],
77             _sky6DataWizard => $_[15],
78             _sky6DirectGuide => $_[16],
79             _sky6Dome => $_[17],
80             _sky6MyFOVs => $_[18],
81             _sky6ObjectInformation => $_[19],
82             _sky6RASCOMTele => $_[20],
83             _sky6RASCOMTheSky => $_[21],
84             _sky6Raven => $_[22],
85             _sky6StarChart => $_[23],
86             _sky6TheSky => $_[24],
87             _sky6Utils => $_[25],
88             _sky6Web => $_[26],
89             _ccdsoftCamera => $_[27],
90             _ccdsoftCameraImage => $_[28],
91             _ccdsoftAutoguiderImage => $_[29],
92             }, $class;
93 0           $self->{_Application} = Astro::SkyX::Application::new("Astro::SkyX::Application");
94 0           $self->{_AutomatedImageLinkSettings} = Astro::SkyX::AutomatedImageLinkSettings::new("Astro::SkyX::AutomatedImageLinkSettings");
95 0           $self->{_ClosedLoopSlew} = Astro::SkyX::ClosedLoopSlew::new("Astro::SkyX::ClosedLoopSlew");
96 0           $self->{_ImageLinkResults} = Astro::SkyX::ImageLinkResults::new("Astro::SkyX::ImageLinkResults");
97 0           $self->{_ImageLink} = Astro::SkyX::ImageLink::new("Astro::SkyX::ImageLink");
98 0           $self->{_OpticalTubeAssembly} = Astro::SkyX::OpticalTubeAssembly::new("Astro::SkyX::OpticalTubeAssembly");
99 0           $self->{_SelectedHardware} = Astro::SkyX::SelectedHardware::new("Astro::SkyX::SelectedHardware");
100 0           $self->{_WeatherUtil} = Astro::SkyX::WeatherUtil::new("Astro::SkyX::WeatherUtil");
101 0           $self->{_TheSkyXAction} = Astro::SkyX::TheSkyXAction::new("Astro::SkyX::TheSkyXAction");
102 0           $self->{_sky6DataWizard} = Astro::SkyX::sky6DataWizard::new("Astro::SkyX::sky6DataWizard");
103 0           $self->{_sky6DirectGuide} = Astro::SkyX::sky6DirectGuide::new("Astro::SkyX::sky6DirectGuide");
104 0           $self->{_sky6Dome} = Astro::SkyX::sky6Dome::new("Astro::SkyX::sky6Dome");
105 0           $self->{_sky6MyFOVs} = Astro::SkyX::sky6MyFOVs::new("Astro::SkyX::sky6MyFOVs");
106 0           $self->{_sky6ObjectInformation} = Astro::SkyX::sky6ObjectInformation::new("Astro::SkyX::sky6ObjectInformation");
107 0           $self->{_sky6RASCOMTele} = Astro::SkyX::sky6RASCOMTele::new("Astro::SkyX::sky6RASCOMTele");
108 0           $self->{_sky6RASCOMTheSky} = Astro::SkyX::sky6RASCOMTheSky::new("Astro::SkyX::sky6RASCOMTheSky");
109 0           $self->{_sky6Raven} = Astro::SkyX::sky6Raven::new("Astro::SkyX::sky6Raven");
110 0           $self->{_sky6StarChart} = Astro::SkyX::sky6StarChart::new("Astro::SkyX::sky6StarChart");
111 0           $self->{_sky6TheSky} = Astro::SkyX::sky6TheSky::new("Astro::SkyX::sky6TheSky");
112 0           $self->{_sky6Utils} = Astro::SkyX::sky6Utils::new("Astro::SkyX::sky6Utils");
113 0           $self->{_sky6Web} = Astro::SkyX::sky6Web::new("Astro::SkyX::sky6Web");
114 0           $self->{_ccdsoftCamera} = Astro::SkyX::ccdsoftCamera::new("Astro::SkyX::ccdsoftCamera");
115 0           $self->{_ccdsoftCameraImage} = Astro::SkyX::ccdsoftCameraImage::new("Astro::SkyX::ccdsoftCameraImage");
116 0           $self->{_ccdsoftAutoguiderImage} = Astro::SkyX::ccdsoftAutoguiderImage::new("Astro::SkyX::ccdsoftAutoguiderImage");
117 0           return $self;
118             }
119              
120             sub Application {
121 0     0 0   my $self = shift @_;
122 0           return $self->{_Application};
123             }
124              
125             sub AutomatedImageLinkSettings {
126 0     0 0   my $self = shift @_;
127 0           return $self->{_AutomatedImageLinkSettings};
128             }
129              
130             sub ClosedLoopSlew {
131 0     0 0   my $self = shift @_;
132 0           return $self->{_ClosedLoopSlew};
133             }
134              
135             sub ImageLinkResults {
136 0     0 0   my $self = shift @_;
137 0           return $self->{_ImageLinkResults};
138             }
139              
140             sub ImageLink {
141 0     0 0   my $self = shift @_;
142 0           return $self->{_ImageLink};
143             }
144              
145             sub OpticalTubeAssembly {
146 0     0 0   my $self = shift @_;
147 0           return $self->{_OpticalTubeAssembly};
148             }
149              
150             sub SelectedHardware {
151 0     0 0   my $self = shift @_;
152 0           return $self->{_SelectedHardware};
153             }
154              
155             sub WeatherUtil {
156 0     0 0   my $self = shift @_;
157 0           return $self->{_WeatherUtil};
158             }
159              
160             sub TheSkyXAction {
161 0     0 0   my $self = shift @_;
162 0           return $self->{_TheSkyXAction};
163             }
164              
165             sub sky6DataWizard {
166 0     0 0   my $self = shift @_;
167 0           return $self->{_sky6DataWizard};
168             }
169              
170             sub sky6DirectGuide {
171 0     0 0   my $self = shift @_;
172 0           return $self->{_sky6DirectGuide};
173             }
174              
175             sub sky6Dome {
176 0     0 0   my $self = shift @_;
177 0           return $self->{_sky6Dome};
178             }
179              
180             sub sky6MyFOVs {
181 0     0 0   my $self = shift @_;
182 0           return $self->{_sky6MyFOVs};
183             }
184              
185             sub sky6ObjectInformation {
186 0     0 0   my $self = shift @_;
187 0           return $self->{_sky6ObjectInformation};
188             }
189              
190             sub sky6RASCOMTele {
191 0     0 0   my $self = shift @_;
192 0           return $self->{_sky6RASCOMTele};
193             }
194              
195             sub sky6RASCOMTheSky {
196 0     0 0   my $self = shift @_;
197 0           return $self->{_sky6RASCOMTheSky};
198             }
199              
200             sub sky6Raven {
201 0     0 0   my $self = shift @_;
202 0           return $self->{_sky6Raven};
203             }
204              
205             sub sky6StarChart {
206 0     0 0   my $self = shift @_;
207 0           return $self->{_sky6StarChart};
208             }
209              
210             sub sky6TheSky {
211 0     0 0   my $self = shift @_;
212 0           return $self->{_sky6TheSky};
213             }
214              
215             sub sky6Utils {
216 0     0 0   my $self = shift @_;
217 0           return $self->{_sky6Utils};
218             }
219              
220             sub sky6Web {
221 0     0 0   my $self = shift @_;
222 0           return $self->{_sky6Web};
223             }
224              
225             sub ccdsoftCamera {
226 0     0 0   my $self = shift @_;
227 0           return $self->{_ccdsoftCamera};
228             }
229              
230             sub ccdsoftCameraImage {
231 0     0 0   my $self = shift @_;
232 0           return $self->{_ccdsoftCameraImage};
233             }
234              
235             sub ccdsoftAutoguiderImage {
236 0     0 0   my $self = shift @_;
237 0           return $self->{_ccdsoftAutoguiderImage};
238             }
239              
240             sub connect {
241 0     0 0   my ($obj,$destinationIP,$destinationPort) = @_;
242 0           $SkyXConnection = IO::Socket::INET->new (
243             PeerAddr => $destinationIP,
244             PeerPort => $destinationPort,
245             Blocking => 0,
246             autoflush => 1,
247             Proto => 'tcp',
248             Timeout => "300",
249             );
250 0 0         if ( ! Scalar::Util::openhandle($SkyXConnection ) ){
251 0           die "Unable to connect to The Sky X\n";
252             }
253 0           $SkyXConnection->autoflush(1);
254              
255 0           select $SkyXConnection;
256 0           $| = 1;
257 0           $select = IO::Select->new();
258 0           $select->add($SkyXConnection);
259 0           select STDOUT;
260 0 0         return 0 unless $SkyXConnection;
261 0           return $SkyXConnection;
262             }
263              
264             sub Send {
265 0     0 0   my $signal = $SIG{INT};
266 0           if ( IGNORECTLC ){
267             $SIG{INT} = 'IGNORE';
268             }
269 0           my ($self,$sendtext) = @_;
270 0           $sendtext =~ s/\\/\\\\/g;
271 0           print $SkyXConnection "$sendtext\r\n";
272             # print "Sending...\n$sendtext\n";
273 0           $SkyXConnection->flush;
274 0           $SIG{INT} = $signal;
275             }
276              
277             sub Get {
278 0     0 0   my $signal = $SIG{INT};
279 0           if ( IGNORECTLC ){
280             $SIG{INT} = 'IGNORE';
281             }
282 0           my ($self) = @_;
283 0           my $output = undef;
284 0           $error = "";
285 0   0       while ( ! defined($output) or ($output !~ /[|].*Error = .*\./) ) {
286 0           while ( my @read_from = $select->can_read(0) ) {
287 0           my $data = '';
288 0           $read_from[0]->recv($data,1024);
289 0 0         $output .= $data if $data;
290             }
291             }
292 0           ($output,$error) = split(/\|([^|]+)$/,$output);
293 0           $SIG{INT} = $signal;
294 0           return ($output);
295             }
296              
297             sub getError {
298 0     0 0   return ($error);
299             }
300              
301             sub Wait {
302 0     0 0   my ($waitsecs) = @_;
303 0           select(undef,undef,undef,$waitsecs);
304             }
305              
306              
307              
308              
309             1;
310              
311             __END__