1/*
2 * Copyright 2003-2006, Waldemar Kornewald <wkornew@gmx.net>
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef MODEM_DEVICE__H
6#define MODEM_DEVICE__H
7
8
9#include "Modem.h"
10
11#include <KPPPDevice.h>
12
13
14enum modem_state {
15	INITIAL,
16		// the same as IsDown() == true
17	TERMINATING,
18	DIALING,
19	OPENED
20		// the same as IsUp() == true
21};
22
23
24class ACFCHandler;
25
26class ModemDevice : public KPPPDevice {
27	public:
28		ModemDevice(KPPPInterface& interface, driver_parameter *settings);
29		virtual ~ModemDevice();
30
31		const char *PortName() const
32			{ return fPortName; }
33		int32 Handle() const
34			{ return fHandle; }
35				// returns file handle for modem driver
36
37		const char *InitString() const
38			{ return fInitString; }
39		const char *DialString() const
40			{ return fDialString; }
41
42		virtual status_t InitCheck() const;
43
44		virtual bool Up();
45		virtual bool Down();
46
47		void SetSpeed(uint32 bps);
48		virtual uint32 InputTransferRate() const;
49		virtual uint32 OutputTransferRate() const;
50			// this is around 60% of the input transfer rate
51
52		virtual uint32 CountOutputBytes() const;
53
54		void OpenModem();
55		void CloseModem();
56
57		// notifications:
58		void FinishedDialing();
59		void FailedDialing();
60		void ConnectionLost();
61
62		virtual status_t Send(net_buffer *packet, uint16 protocolNumber = 0);
63		status_t DataReceived(uint8 *buffer, uint32 length);
64			// this will put the data into an mbuf and call Receive()
65		virtual status_t Receive(net_buffer *packet, uint16 protocolNumber = 0);
66
67	private:
68		const char *fPortName, *fInitString, *fDialString;
69		int32 fHandle;
70			// file handle for modem driver
71
72		thread_id fWorkerThread;
73
74		uint32 fInputTransferRate, fOutputTransferRate;
75		uint32 fOutputBytes;
76
77		modem_state fState;
78
79		ACFCHandler *fACFC;
80};
81
82
83#endif
84