OpenIR Bidirectional Communication
Progress on the OpenIR project has been a little slow recently, Christmas has come and gone and now a heavy workload is slowing things down further. Having said that, today has seen the project pass another milestone with a Windows configuration application communicating with the an STM8S Discovery board over a TTL serial port.
This post will give an overview of the current progress.
Windows Configuration Application
One of the goals of the OpenIR project is to create a universal remote control. To this end the project will require a configuration application. Having a number of years experience in Windows programming it made sense for the Windows platform to host the first generation of the configuration application for the remote control.
In the previous post a number of command functions were identified as being essential to this project. The main concern for the initial development is the size of the application which IAR can support on the STM8S. This is limited to 8KB and the EEPROM transfer function is likely to consume the most memory and code space. This function has been targeted first as it is likely to identify any issues early on in the software development phase of the project.
The Windows configuration application is a classic WinForms application with three distinct areas:
- Communication settings (serial port)
- General configuration
- Commands (IR sequences)
This currently looks as follows:
The upper panel allows the user to select the COM port and the communication settings (baud rate, parity etc.). The two buttons allow the user to request the EEPROM data and write send the updated the EEPROM configuration back to the IR remote control module.
The middle section contains the controls which will show and allow the editing of the static configuration such as the name, carrier frequency etc.
The lower panel contains the command list the remote control can send. More on this in a future port.
The current application allows the communication settings to be changed and implements the Read EEPROM request.
Data Packet Format
The initial design of the data packets allows for a request or response to be transferred with an optional data packet. The basic format is as follows:
|0||1||Data packet header (0xaa).|
|1||2||Length of the data packet (unsigned short), high byte first.|
|3||1||Command to be executed.|
|4||n||Data required for this command.|
|4 + n||1||Checksum for the entire packet.|
The packet header is an arbitrary value and 0xaa has been chosen as it is an alternating sequence of bits.
The initial design packet size was expected to be less than 256 bytes. As the design progressed it became apparent that is was desirable for the packets to be greater larger than 256 bytes.
There are a limited number of commands which have been identified for this project. At the current time this is set to be 7 and a single byte is sufficient.
The data packet is optional and in the case of the EEPROM read/write functions this will be the contents of the EEPROM either being read or written.
The checksum byte is a simple exclusive OR of all of the bytes in the packet from the initial packet header through the the end of the data packet. The starting value for the checksum is 0xaa.
The configuration application will first scan the PC for COM ports. Any available ports will be added to the drop down list of COM port names. Selecting a COM port will populate the fields with the default COM port configuration.
Clicking on the Read EEPROM button send a request to the STM8S. The STM8S will respond with the contents of the EEPROM. This can be seen in the following traces from the logic analyser.
The first trace shows the request packet (top trace) and the response from the IR remote control (lower trace):
Zooming on on the request trace we can see that the command 1 (request for EEPROM data) is sent to the IR remote control:
Moving along the timeline the lower trace shows the response from the module expanded:
The initial communications with the IR remote control and a PC has been successful. At this point in time the source code requires some clean up work. The next step is to enhance the EEPROM configuration allowing the EEPROM to be rewritten upon command from the Windows configuration application.Software Development, STM8 • RSS 2.0 feed Both comments and pings are currently closed.