acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
serial.h
1
35#pragma once
36
37
38
40
41
42//#include <limits>
43//#include <vector>
44//#include <string>
45//#include <cstring>
46//#include <sstream>
47//#include <exception>
48//#include <stdexcept>
49//#include <serial/v8stdint.h>
50
51#define THROW(exceptionClass, message) throw ::exception( exceptionClass(__FILE__, __LINE__, (message) ) )
52
53namespace serial
54{
55
56
60 enum enum_byte_size
61 {
62 e_byte_size_five = 5,
63 e_byte_size_six = 6,
64 e_byte_size_seven = 7,
65 e_byte_size_eight = 8
66 };
67
71 enum enum_parity
72 {
73 e_parity_none = 0,
74 e_parity_odd = 1,
75 e_parity_even = 2,
76 e_parity_mark = 3,
77 e_parity_space = 4
78 };
79
83 enum enum_stop_bit
84 {
85 e_stop_bit_one = 1,
86 e_stop_bit_two = 2,
87 e_stop_bit_one_point_five
88 };
89
93 enum enum_flow_control
94 {
95 e_flow_control_none = 0,
96 e_flow_control_software,
97 e_flow_control_hardware
98 };
99
106 struct CLASS_DECL_ACME timeout
107 {
108#ifdef maximum
109# undef maximum
110#endif
111 static ::u32 maximum()
112 {
113 return numeric_info<::u32>::maximum();
114 }
124 virtual timeout simpleTimeout(const class time & time);
125
140
141
142 explicit timeout (const class time & timeInterByteTimeout=0_ms,
143 const class time & timeReadTimeoutConstant=0_ms,
144 ::u32 uReadTimeoutMultiplier=0,
145 const class time & timeWriteTimeoutConstant=0_ms,
146 ::u32 uWriteTimeoutMultiplier=0)
147 : m_timeInterByteTimeout(timeInterByteTimeout),
148 m_timeReadTimeoutConstant(timeReadTimeoutConstant),
149 m_uReadTimeoutMultiplier(uReadTimeoutMultiplier),
150 m_timeWriteTimeoutConstant(timeWriteTimeoutConstant),
151 m_uWriteTimeoutMultiplier(uWriteTimeoutMultiplier)
152 {}
153 timeout(nullptr_t) : timeout() { }
154 };
155
159 class CLASS_DECL_ACME serial :
160 virtual public particle
161 {
162 public:
163
164
165
167
168
200 serial ();
201
203 virtual ~serial ();
204
205
206 virtual void initialize_serial(
207 const string &port = "",
208 ::u32 baudrate = 9600,
209 struct timeout timeout = nullptr,
210 enum_byte_size ebytesize = e_byte_size_eight,
211 enum_parity eparity = e_parity_none,
212 enum_stop_bit estopbit = e_stop_bit_one,
213 enum_flow_control eflowcontrol = e_flow_control_none);
214
228 virtual void
229 open ();
230
235 virtual bool
236 isOpen () const;
237
239 virtual void close ();
240
241 //virtual void readLock();
242 //virtual void readUnlock();
243 //virtual void writeLock();
244 //virtual void writeUnlock();
245
246 virtual ::particle * read_synchronization();
247 virtual ::particle * write_synchronization();
248
250 virtual size_t
251 available ();
252
257 virtual bool
258 waitReadable ();
259
264 virtual void
265 waitByteTimes (size_t count);
266
295 virtual size_t
296 read (::u8 *buffer, size_t size);
297
309 virtual size_t
310 read (memory &buffer, size_t size = 1);
311
323 virtual size_t
324 read (string &buffer, size_t size = 1);
325
336 virtual string
337 read (size_t size = 1);
338
352 virtual size_t
353 readline (string &buffer, size_t size = 65536, string eol = "\n");
354
367 virtual string
368 readline (size_t size = 65536, string eol = "\n");
369
384 virtual string_array_base
385 readlines (size_t size = 65536, string eol = "\n");
386
402 virtual size_t
403 write (const ::u8 *data, size_t size);
404
417 virtual size_t
418 write (const memory &data);
419
432 virtual size_t
433 write (const string &data);
434
443 virtual void setPort (const string &port);
444
445
446 virtual void _setPort(const string& port);
447
454 virtual string
455 getPort () const;
456
493 virtual void set_timeout (const struct timeout &timeout);
495 virtual void set_timeout(const class ::time & inter_byte_timeout, const class ::time & read_timeout_constant,
496 ::u32 read_timeout_multiplier, const class ::time & write_timeout_constant,
497 ::u32 write_timeout_multiplier)
498 {
499 struct timeout timeout(inter_byte_timeout, read_timeout_constant,
500 read_timeout_multiplier, write_timeout_constant,
501 write_timeout_multiplier);
502 return set_timeout(timeout);
503 }
504
512 virtual struct timeout getTimeout () const;
513
526 virtual void
527 setBaudrate (::u32 baudrate);
528
537 virtual ::u32
538 getBaudrate () const;
539
548 virtual void
549 setBytesize (enum_byte_size ebytesize);
550
557 virtual enum_byte_size
558 getBytesize () const;
559
567 virtual void
568 setParity (enum_parity eparity);
569
576 virtual enum_parity
577 getParity () const;
578
586 virtual void
587 setStopbits (enum_stop_bit estopbit);
588
595 virtual enum_stop_bit
596 getStopbits () const;
597
606 virtual void
607 setFlowcontrol (enum_flow_control eflowcontrol);
608
615 virtual enum_flow_control
616 getFlowcontrol () const;
617
619 virtual void
620 flush ();
621
623 virtual void
624 flushInput ();
625
627 virtual void
628 flushOutput ();
629
631 virtual void
632 sendBreak (::i32 time);
633
635 virtual void
636 setBreak (bool level = true);
637
639 virtual void
640 setRTS (bool level = true);
641
643 virtual void
644 setDTR (bool level = true);
645
660 virtual bool
661 waitForChange ();
662
664 virtual bool
665 getCTS ();
666
668 virtual bool
669 getDSR ();
670
672 virtual bool
673 getRI ();
674
676 virtual bool getCD ();
677
678 // Read common function
679 virtual size_t _read(::u8 *buffer, size_t size);
680
681 // Write common function
682 virtual size_t _write(const ::u8 *data, size_t length);
683
684
685 virtual void _flush();
686
687
688 virtual void _flushOutput();
689
690 virtual void _flushInput();
691
692
693 };
694
695
696
697 //::exception exception(const string& description);
698 //::exception io_exception(string file, ::i32 line, ::i32 errnum);
699 //::exception io_exception_descripton(string file, ::i32 line, const_char_pointer description);
700 //::exception port_opened_exception_descripton(string file, ::i32 line, const_char_pointer description);
701
702 class serial_exception : public ::exception
703 {
704 //
705 // // Disable copy constructors
706 // serial_exception& operator=(const serial_exception&);
707 //
708 // string e_what_;
709
710 public:
711
712 serial_exception(const string & description) :
713 ::exception(error_serial)
714 {
715// ::string_stream str;
716 // str << "serial_exception " << description << " failed.";
717 // e_what_ = str;
718 }
719 // serial_exception (const serial_exception& other) : e_what_(other.e_what_) {}
720 // virtual ~serial_exception() noexcept {}
721 // virtual const_char_pointer what () const noexcept
722 // {
723 // return e_what_.c_str();
724 // }
725 };
726
727 class io_exception : public ::exception
728 {
729// // Disable copy constructors
730// io_exception& operator=(const io_exception&);
731// string file_;
732// ::i32 line_;
733// string e_what_;
734// ::i32 errno_;
735 public:
736 explicit io_exception(string file, ::i32 line, ::i32 errnum) :
737 ::exception(error_serial_io)
738 {
739 //: file_(file), line_(line), errno_(errnum)
740// ::string_stream str;
741//#if defined(_WIN32) && !defined(__MINGW32__)
742// ::i8 error_str [1024];
743// strerror_s(error_str, 1024, errnum);
744//#else
745// char_pointer error_str = strerror(errnum);
746//#endif
747// str << "IO Exception (" << errno_ << "): " << error_str;
748// set_file(file_);
749// m_iLine = line_;
750// e_what_ = str;
751 }
752
753 explicit io_exception(string file, ::i32 line, const_char_pointer description) :
754 ::exception(error_serial_io)
755 {
756// ::string_stream str;
757// str << "IO Exception: " << description;
758// set_file(file_);
759// m_iLine = line_;
760// e_what_ = str;
761 }
762// virtual ~io_exception() noexcept {}
763// io_exception (const io_exception& other) : line_(other.line_), e_what_(other.e_what_), errno_(other.errno_) {}
764//
765// ::i32 getErrorNumber () const
766// {
767// return errno_;
768// }
769//
770// virtual const_char_pointer what () const noexcept
771// {
772// return e_what_.c_str();
773// }
774 };
775
776 class port_not_opened_exception : public ::exception
777 {
778 // Disable copy constructors
779 // const port_not_opened_exception& operator=(port_not_opened_exception);
780 // string e_what_;
781 public:
782 port_not_opened_exception (const_char_pointer description)
783 {
784 //::string_stream str;
785 //str << "port_not_opened_exception " << description << " failed.";
786 //e_what_ = str;
787 }
788 // port_not_opened_exception (const port_not_opened_exception& other) : e_what_(other.e_what_) {}
789 // virtual ~port_not_opened_exception() noexcept {}
790 // virtual const_char_pointer what () const noexcept
791 // {
792 // return e_what_.c_str();
793 // }
794 };
795
796
797// /* Lists the serial ports available on the system
798// *
799// * Returns a vector of available serial ports, each represented
800// * by a serial::port_info data structure:
801// *
802// * \return vector of serial::port_info.
803// */
804// CLASS_DECL_ACME array<port_info> list_ports();
805
806
807
808 //class scoped_read_lock
809 //{
810 //public:
811
812
813 // serial * m_pserial;
814
815
816 // scoped_read_lock(serial * pserial) :
817 // m_pserial(pserial)
818 // {
819
820 // m_pserial->readLock();
821
822 // }
823
824
825 // ~scoped_read_lock()
826 // {
827
828 // m_pserial->readUnlock();
829
830 // }
831
832 //};
833
834
835 //class scoped_write_lock
836 //{
837 //public:
838
839 // serial* m_pserial;
840
841
842 // scoped_write_lock(serial * pserial) :
843 // m_pserial(pserial)
844 // {
845 //
846 // m_pserial->writeLock();
847
848 // }
849
850
851 // ~scoped_write_lock()
852 // {
853
854 // m_pserial->writeUnlock();
855
856 // }
857
858 //};
859
860
861} // namespace serial
862
863
864
Definition memory.h:33
virtual void set_timeout(const struct timeout &timeout)
virtual void set_timeout(const class ::time &inter_byte_timeout, const class ::time &read_timeout_constant, ::u32 read_timeout_multiplier, const class ::time &write_timeout_constant, ::u32 write_timeout_multiplier)
Definition serial.h:495
virtual size_t readline(string &buffer, size_t size=65536, string eol="\n")
Definition serial.cpp:187
virtual bool waitReadable()
Definition serial.cpp:96
virtual void close()
Definition serial.cpp:69
serial()
__creatable_from_library(directory_system, directory_system, "acme_windows_common");
Definition serial.cpp:22
virtual string getPort() const
Definition serial.cpp:344
virtual size_t available()
Definition serial.cpp:86
virtual size_t write(const ::u8 *data, size_t size)
Definition serial.cpp:298
virtual size_t read(::u8 *buffer, size_t size)
Definition serial.cpp:125
virtual bool isOpen() const
Definition serial.cpp:77
virtual void waitByteTimes(size_t count)
Definition serial.cpp:108
virtual void open()
Definition serial.cpp:61
virtual void setPort(const string &port)
Definition serial.cpp:316
virtual string_array_base readlines(size_t size=65536, string eol="\n")
Definition serial.cpp:207
Definition aaa_time.h:13
Definition filesystem.h:16
Definition serial.h:107
class::time m_timeReadTimeoutConstant
Definition serial.h:129
class::time m_timeInterByteTimeout
Definition serial.h:127
::u32 m_uReadTimeoutMultiplier
Definition serial.h:133
::u32 m_uWriteTimeoutMultiplier
Definition serial.h:139
virtual timeout simpleTimeout(const class time &time)
Definition serial.cpp:46
class::time m_timeWriteTimeoutConstant
Definition serial.h:135