Portfolio

Micro GUI for Atmel devboards AVR32 Shell/Terminal Compass/Gyro/Accelerometer application Tracking system Small HMI/SCADA C2C/B2C market Web cameras interface McDonald’s Bremen POS/Loyalty MIDLet Hotel booking MIDLET Secondary SCADA signals

AVR32/EVK110X micro GUI

Keywords

Atmel, AVR32, EVK, qTouch, ET024006.

Description

Sub-project for big AVR32-based system. Micro GUI for qTouch sensors and ET024006DHU display may be used in some Atmel development boards or custom boards with the same sensor panel and display.

The system consists of:

  • OO-based widgets library (on C)
  • qTouch processing library
  • utility functions and macros

Technologies

GUI is written on C in OO-style for bare-metal environment.

Key solutions

All widgets inherits some base “class”: widget, window, etc. Painting is optimized and occurs only for concrete screen domain for concrete widget when it’s needed. There is support of styles (fonts, colors, etc.)

Implemented widgets are:

  • screen
  • window
  • horizontal on-screen menu
  • scrollable list (with self-drawing support and selectable items)
  • radio/check list
  • radio/check box
  • label
  • oscilloscope with resolution auto-detection (based on signal’s period and amplitude detection)

Input signals of qTouch panel sensors has bounce, so it’s filtered at first, then is “translated” to logical state “PRESS”/“RELEASE”, also there is “sticking” (holding) detection of sensors:

There are some screenshots:

Implementation

The system was implemented by one person - me. I done the work for about 4-5 months.


AVR32 Shell/Terminal

Keywords

Atmel, AVR32, shell, terminal, ANSI.

Description

This is the sub-project for big AVR32-based project: shell and ANSI terminal support for AVR32.

The system includes functions:

  • ANSI terminal with support keystrokes: BS/DEL, ^L, ^U, TAB
  • Simple shell with job control
  • Some utility commands (kill, ps, uname, echo, help, uptime, sysctl, iostat, etc.)
  • Signals support (like Unix)

Technologies

Code is written in plain C with memory (string) usage optimization.

Key solutions

To optimize memory usage, string slices are used instead of memory allocation on heap. ANSI key codes are used for more user-friendly input. Adding of new command is simple and needs implementation of task procedure and signal catcher, background task procedures but only if needed.

Bases signals are supported: termination, abort (not masked), finalization, etc. They may be used to kill background job.

Demo:

Implementation

The system was implemented by one person - me. I done the work for about 2 months.


Compass/Gyro/Accelerometer application

Keywords

Gyro, Accelerometer, Compass.

Description

Application for debugging algorithms for Compass/Gyro/Accelerometer.

Technologies

Is written on Tcl/Tk

Key solutions

Application is small, portable and cross-platform, and consists of 4 windows: samples from sensors, OpenGL model, path diagrams for 3 axes, command terminal. Device (Honeywell HMC6343) is plugged into USB port (virtual COM with FTDI drivers are used), and application auto-detects used COM-port. There is terminal window with many commands, used for configuring, algorithms debugging. Implemented algorithms are: filters, integrators, cascades… Dataflow model is used for signal processing: each algorithm is configurable unit, all units can be cascaded. Movement of sensor is represented as table of values from all sensors and also as 3D model in OpenGL (with model rotation, move, etc.). Absolutely all commands of device are supported in commands terminal window (including calibration and reset).

Demo:

Implementation

The system was implemented by one person - me. I done the work for about 3-4 months.


Tracking system

Keywords

Tracking, radio tags, RFID, access point.

Description

The system is for tracking peoples (miners, for ex.) by radio-tags technology.

The system consists of:

  • central server
  • radio tags (1K)
  • access points

Technologies

All hardwire is written on C with WinAVR toolchain. Tags and access points uses Atmega AVR chips. For program and setup chips was written a special Tcl/Tk application.

Key solutions

The main problem is how to poll (ping) many of tags. To avoid this problem, server can setup list of polled tags to each access point, for example, if server “knows” that tags from 1 to 500 are very far from access point A, it can “turn-off” these tags from poll-list of access point A. This optimizes polling process.

Each hardwire has version ID (also date, type and config of hardwire) - all of them are setup by a special Tcl/Tk application (really it’s frontend to avrdude).

As radio module RFM is used, so I adapted famous RFM module of Mike McCauley (it’s great!) from Arduino to simple C and WinAVR.

For working with timeouts and usual C function alarm() I implemented alarm(), clock() and others for AVR chips (it’s easy to port to any AVR chip).

For debugging I implemented printf()-like macroses for any UART of the chip. Also was implemented software SPI (some of RFM chips were buggy!).

Implementation

The tags and hardwire software and Tcl/Tk frontend were implemented by one person - me. I done the work for about 6 months.


Small HMI/SCADA

Keywords

HMI, SCADA, Python, GFig, Tkinter, C, msgpack, PIL.

Description

Simple SCADA with sensors polling on Linpac-8x8x controller and schemes of HMI symbols visualization with Tkinter.

Technologies

  • Python as general language
  • C as language for controller software
  • Scheme as language for Gimp integration
  • Tkinter as GUI library
  • msgpack as marshaling library and protocol (C/Python)
  • PIL as raster images library
  • Gimp as image design tool

Key solutions

The system consists of sensor polling software on Linpac controller, server software with database and net broker (broker runs several net services) and workstation software with HMI tool (design of symbols and schemes is implemented in integration with Gimp program).

Sensor polling was written in C in Literate programming technique. All other software was written on Python. Integration with Gimp was done via Scheme extensions for Gimp and Python wrappers. Symbols consists of two kind of layers: raster and vector. For vector layers GFig Gimp extension is used. For GFig shapes processing on Tk canvas a special classes were written (supported affine transformation, labeling, etc.). Symbol implementation is flex, for example, alarm messages’ line is just a symbol bound to bottom of the window with autoscalling.

For visualization of symbols and schemes was written tool called “Symbox”. Symbox is based on Web browser idiom: user can navigate over folders, open there a symbols for testing and a schemes. Opened schemes supports three modes: simple viewing, test mode (local simulation) and live mode - for real signals receiving via UDP. Symbox supports direct search and reverse search, context based menu and popup menus. User can customize not only the view of symbols/schemes but also it’s logic via Python scripting in easy way. Symbox is very extendable: it’s easy to add new search plugins, views (in add to folder, symbol and scheme views), etc.

All software communicated via Network uses central broker. Writing client for this broker is easy - just use Python broker client module or C broker client module. Central broker consists of one program runs several services in self. One of them is the directory service for nodes finding. This program has console (shell) with some commands for monitoring and control.

Software is robust, stable, has not memory leaks.

Screenshot of HMI scheme - “Simulation mode”:

Implementation

All is done by one person - me about 3-4 months.


C2C/B2C market

Keywords

C2C, B2C, Python, CherryPy, Cheetah, RSA.

Description

This is the Web portal for sale and purchase of automobile glasses (automobile glass market).

The system includes functions:

  • register an user
  • search a glasses by different criteria
  • post advertisement for sale etc.
  • and has catalog of many Japan cars and it’s models.

Technologies

All of the system is based on Python and Python tools:

  • CherryPy as Web-framework and Web-server
  • Cheetah as templates processing
  • A-A-P as the local build system for some tasks
  • docutils as the document generation system
  • jQuery as JavaScript client library
  • Sqlite as database storage

Key solutions

The main requirement is to avoid database storing on the server-side (because of public server usage). So system works through the mail and consists of two parts: server (portal) that sends encrypted in RSA users’ requests to mail and the second part: processor of users’ requests running on operator host:

Web portal has own public database (on sqlite3) and operator host has another one - private, on sqlite3 too. All data on operator host is cached to prevent massive mail-box requests.

Also Web portal supports two modes: work mode and idle mode. Work mode is the usual way of portal working in production, Idle mode a.k.a. “Under construction” is used when administration works are doing (new version uploading, etc.); the switching between them is very simple and quick.

Seeking of the glass is based on Japanese car catalog which has structure: manufacture, model, body, place of glass. For operator host was also implemented flex and power shell with completions of the catalog entry (context depended) with Windows support.

Implementation

The system was implemented by one person - me. I done the work for about 2 months.


Web cameras interface

Keywords

Web-camera, Python, PIL, ffmpeg, Django.

Description

The system for video acquisition from slave hosts with webcams via FTP, storing on central server, includes Wen UI for seeing all video frames and movement detection.

Technologies

  • Django as Web framework
  • sqlite as database storage
  • ffmpeg as video extraction library
  • PIL as raster processing library
  • jQuery as JavaScript client library (Ajax, dynamic UI)

Key solutions

All video files are obtained from hosts via FTP in the background and are stored on the server. After this any video file is accessible as transparent container of frames with some attributes (duration, fps, frames number, etc.) and support motion detection function.

Web UI provides geo-location, camera, frames selection and looking for motions markers.

Implementation

The base system was implemented by me about 3 months, not finished.


McDonald’s Bremen POS/Loyalty MIDLet

Keywords

Java, J2ME, mobile technologies, Bluetooth.

Description

Bremen McDonald’s started Personalized Marketing/Loyalty program with Department One GmbH. I participated on the server side business platform development (about 20 developers command) but started to work on this project with mobile panel prject - all as outsource developer.

This is the mobile application written on J2ME platform which runs on many different mobiles’ phones (from simple old cells to Nokia smart-phones) with the same universal but flex code. Also there is the server application with rich UI (skins, mirroring, rounded frames, custom controls, etc.). Server-side application is the big media panel; mobile application supports control of the media panel (scrolling, entering text, navigate), changing with raster and video files ans so on. Communication is done via Bluetooth interface.

Technologies

Sun J2ME

Key solutions

Mobile application explores neighbors via Bluetooth very fast. Transferring of the multimedia content via Bluetooth does not cancel navigation/text entering via the same virtual Bluetooth COM-port (channel is multiplexed by different packets’ headers). All UI code doesn’t depend on the phone screen resolution. The application is absolutely the same on a different phones. Protocol implementation is very robust and is based on finite state machine. Scheme of the multiplexing:

Implementation

Project was done by 2 persons: the J2ME application and server side communication’s part was done by me about 6-8 months.


Hotel booking MIDLET

Keywords

Java, J2ME, XML, HTTP.

Description

Mobile application for browsing and booking Thailand hotels.

Technologies

Sun J2ME

Key solutions

Application obtain XML files from booking server via HTTP and parse them. Information is shown for user with short description of hotel rooms and small photo. Screen supports scrolling of entries and scrolling of the screen. All information is cached in RMS with simple storage system like FS but instead of file names hash values are used. The FS-like storage is very robust. The application is universal and runs on different mobile phones. All XML obtaining is done in asynchronous manner and is transparent for user. Scheme of FS-like RMS organization:

Implementation

Application was done by one person - me for about 1.5 months.


Secondary level SCADA signals generator

Keywords

SCADA, Python

Description

A part of big SCADA system. Main function is to calculate and generate secondary signals, based on primary measured signals and its timing features.

The application includes functions:

  • loading of secondary signals configuration from DB
  • listening and registration of primary signals and their timing features
  • evaluate values/timing complexes into new signals, called “secondary” or calculated
  • send secondary signals to message broker

Main features are:

  • “form” and configuration of each secondary signal is written in DB
  • about 2,500 primary signals
  • time of reaction about 1 sec
  • logging of events
  • each secondary signal can have different form and configuration

Technologies

Application was written initially on Python 1.5, then was reimplemented in Python 2.x. Communication with message broker was written as Python C extension.

Key solutions

Various caching schemes were implemented to achieve the required reaction rate.

Implementation

The system was implemented by one person - me. I done the work for about 6 months.