<commit_before>It is a null modem / loop back kernel mode driver providing full duplex communication and handshaking signals.

It creates virtual serial ports pair that appears same as the real once to the application software.

##Use cases
- Fully automate Junit testing and continuous integration
- Custom protocols development and debugging
- Serial port based application's scalability and performance testing
- Can be used as a medium for inter/intra-process communication
- Serial port communication sniffer or test sniffer application itself
- GPS coordinates and robotics emulator/simulator
- Application development when hardware is still not available
- Test/debug different serial port device emulators like modem and faxes etc
- Testing high level user space drivers
- Segregate hardware issues from software bugs quickly during product development
- Multiple producers/consumers sharing same channel application design development/testing
- Development cost reduction across team
- Add new functionality to existing application by inserting plugin between serial hardware and existing application   
  [hw device]--[hw comport]--[plugin software (process data)]--[virtual comport]--[Existing application]
- Write user space drivers for ex; multiplex several virtual connections on single physical GSM Modem line
- Protocol converter engine software
- Provide serial port where most modern systems does not have physical RS232 ports
- Capture the output of guest OS running on virtual machine and re-direct it to a terminal program on host
- Share virtual COM ports data with disk files and named pipes
- Analyze and reverse-engineer serial protocols

##Features
- Create standard, loopback or custom pinout connected serial devices
- Software, hardware and no flow controls emulation
- Parity, frame, overrun and line break events emulation
- Control signals (RTS,DTR,CTS,DCD,RI,LOOP,DSR) and all serial port settings
- Ring indicator line signal emulation
- Create/destroy virtual serial ports dynamically directly from your application without reboot
- Operating system specific serial port APIs and IOCTL supported
- Serial ports can be deleted even when opened by an application (useful in automated testing)
- Plug and play device emulated
- Ports can be created automatically at system boots
- Create large number of serial ports
- Speed is directly proportional to your software/hardware configuration
- Virtual box and VMware virtual machine supported
- Multithreaded environment supported
- Mismatched line settings causes garbled data as in real life and appropriate error event generation
- API to control virtual ports directly from your application

##Demo application


##Build and Run
See instructions in operating system specific directory for build scripts, udev rules, steps to install etc.

##Pins mapping

There are three connection configurations supported by this driver.

####Standard nulll modem
```
 tty2com0            tty2com1
     RXD -------------- TXD
     TXD -------------- RXD
     DTR -------------- DSR,DCD
 DSR,DCD -------------- DTR
     CTS -------------- RTS
     RTS -------------- CTS
     GND -------------- GND
```
- TX of local port is connected to RX of remote port and vice-versa
- DTR of the local port is connected to DSR and DCD of the remote port
- RTS of the local port is connected to CTS of the remote port

####Standard loop back
```<commit_msg>add feature in null modem driver readme<commit_after>It is a null modem / loop back kernel mode driver providing full duplex communication and handshaking signals.

It creates virtual serial ports pair that appears same as the real once to the application software.

##Use cases
- Fully automate Junit testing and continuous integration
- Custom protocols development and debugging
- Serial port based application's scalability and performance testing
- Can be used as a medium for inter/intra-process communication
- Serial port communication sniffer or test sniffer application itself
- GPS coordinates and robotics emulator/simulator
- Application development when hardware is still not available
- Test/debug different serial port device emulators like modem and faxes etc
- Testing high level user space drivers
- Segregate hardware issues from software bugs quickly during product development
- Multiple producers/consumers sharing same channel application design development/testing
- Development cost reduction across team
- Add new functionality to existing application by inserting plugin between serial hardware and existing application   
  [hw device]--[hw comport]--[plugin software (process data)]--[virtual comport]--[Existing application]
- Write user space drivers for ex; multiplex several virtual connections on single physical GSM Modem line
- Protocol converter engine software
- Provide serial port where most modern systems does not have physical RS232 ports
- Capture the output of guest OS running on virtual machine and re-direct it to a terminal program on host
- Share virtual COM ports data with disk files and named pipes
- Analyze and reverse-engineer serial protocols

##Features
- Create standard, loopback or custom pinout connected serial devices
- Software, hardware and no flow controls emulation
- Parity, frame, overrun and line break events emulation
- Control signals (RTS,DTR,CTS,DCD,RI,LOOP,DSR) and all serial port settings
- Ring indicator line signal emulation
- Create/destroy virtual serial ports dynamically directly from your application without reboot
- Operating system specific serial port APIs and IOCTL supported
- Serial ports can be deleted even when opened by an application (useful in automated testing)
- Plug and play device emulated
- Ports can be created automatically at system boots
- Create large number of serial ports
- Speed is directly proportional to your software/hardware configuration
- Virtual box and VMware virtual machine supported
- Multithreaded environment supported
- Mismatched line settings causes garbled data as in real life and appropriate error event generation
- Leverages OS specific feature and technologies like WDM, WMI, power management, PnP etc.
- API to control virtual ports directly from your application

##Demo application


##Build and Run
See instructions in operating system specific directory for build scripts, udev rules, steps to install etc.

##Pins mapping

There are three connection configurations supported by this driver.

####Standard nulll modem
```
 tty2com0            tty2com1
     RXD -------------- TXD
     TXD -------------- RXD
     DTR -------------- DSR,DCD
 DSR,DCD -------------- DTR
     CTS -------------- RTS
     RTS -------------- CTS
     GND -------------- GND
```
- TX of local port is connected to RX of remote port and vice-versa
- DTR of the local port is connected to DSR and DCD of the remote port
- RTS of the local port is connected to CTS of the remote port

####Standard loop back
```
{'fraction_non_alphanumeric': 0.064688085290304, 'fraction_numerical': 0.002017000432214378, 'mean_word_length': 3.790890269151139, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4009949', 'n_tokens_mistral': 1594, 'n_tokens_neox': 1512, 'n_words': 913}