File Coverage

blib/lib/Astro/SkyX.pm
Criterion Covered Total %
statement 15 112 13.3
branch 0 6 0.0
condition 0 6 0.0
subroutine 5 30 16.6
pod 0 25 0.0
total 20 179 11.1


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