// extern.h

// external struture array
#include "outcont.h"

extern struct OC *OutputControl[24];

// external prototypes

// AD prototypes
extern unsigned InitializeAnalog(void);
extern int TurnOnAnalog(int channel);
extern int TurnOffAnalog(int channel);
extern int GetChannelValue(int channel);

// digital routines -- also put in digital.h without "extern"
extern unsigned get_port(void);
extern int ConfigureOutput(int arraynumber, 
                    int type, 
                    int ForwardPortNumber, 
                    int ReversePortNumber,
                    int DirectionPortNumber,
                    int BrakePortNumber);
extern int SetLast(int arraynumber);
extern int TurnOn(int arraynumber);
extern int TurnOff(int arraynumber);
extern int is_closure(int input);
extern void set_up_ppi(int mode);
extern void btoa(void);
extern void motor(long on, long off);
extern void motor2(long on, long off);
extern void portaon(void);
extern void portaoff(void);
extern void portbon(void);
extern void portboff(void);
extern void portcon(void);
extern void portcoff(void);

// timer routines -- also put in timer.h without "extern"
extern double get_frequency(void);
extern double get_mintime(void);
extern double get_maxtime(void);
extern long get_timer_counter(void);
extern int set_up_new_timer(double freq);
extern void wait(double seconds);
extern void restore_old_timer(void);
extern int pwm(int arraynumber, int type,
		int ForwardPortNumber, int ReversePortNumber,
		int DirectionPortNumber, int BrakePortNumber,
		double ForwardOnTime, double ForwardOffTime,
		double ReverseOnTime, double ReverseOffTime,
		int StartDirection);

// set up a uni-directioanl pwm channel
extern int UniPwm(int arraynumber, int ForwardPortNumber,
		double ForwardOnTime, double ForwardOffTime);

// set up a uni-directioanl pwm channel using duty cycle
extern int UniPwmDuty(int arraynumber, int ForwardPortNumber,
		double ForwardDutycycle);

// set up a dual pwm channel using duty cycle
extern int DualPwmDuty(int arraynumber, int StartDirection,
    int ForwardPortNumber, double ForwardDutycycle,
    int ReversePortNumber, double ReverseDutycycle);

// set up a channel with a pwm line and a direction line -- no brake
// using duty cycle
extern int PwmAndDirectionDuty(int arraynumber, int StartDirection,
                               int PwmPortNumber,
                               int DirectionPortNumber,
                               double ForwardDutycycle,
                               double ReverseDutycycle);

// set up an L289
extern int L289PwmDuty(int arraynumber, int StartDirection,
    int PwmPortNumber, double ForwardDutycycle,
    double ReverseDutycycle, int Direction1Port, int Direction2Port);

// go forward
extern int Forward(int arraynumber);

// go in reverse
extern int Reverse(int arraynumber);

// stop
extern int Stop(int arraynumber);

// brake a dual pwm channel
// taking both lines high brakes
extern int BrakeDualPwm(int arraynumber);

// brale am L298
extern int BrakeL298(int arraynumber);

extern Blink(int arraynumber, int BlinkPort, double BlinkOnTime, double BlinkOffTime);
extern void showall(void);
extern void show(int location);

// end extern.h





