Difference between revisions of "TODO"

From ElphelWiki
Jump to: navigation, search
(TODO list)
Line 1: Line 1:
== TODO list ==
+
= TODO list =
  
 
Some project ideas
 
Some project ideas
  
=== Camera reflashing over TCP/IP ===
+
== Add support for wifi and bluetooth ==
  
Elphel cameras use very nice feature of Axis ETRAX100LX processor - network boot. It is a tiny hard-wired boot loader that uses CPU cache for temporary storage, does not need any special hardware but the Ethernet PHY (anyway present in a networked system). No special connectors, just a single pushbutton switches the system into network boot allowing cold boot of a system without any component pre-programming. It is also a very safe way fro the firmware upgrades - if anything went wrong (i.e. power interruption) it is always possible to start over again - all the software on the camera end resides in the CPU ROM.
+
Add support for most used USB wifi and bluetooth USB keys.
  
 +
== Bluetooth remote control ==
  
But there are some shortcomings of this process. The bootloader is really tiny and needs some special low-level packets from the host. No http/ftp, no TCP/IP at all - that imposes special software requirements on the server (host PC) side.
+
Add a remote control via bluetooth and wifi.
  
So - it will be nice to complement this bullet-proof flashing process (that works for cold booting) with a more convenient one for upgrades, including remote upgrades when there is no easy access to the camera. The original method (all the server side software comes on Live CD with the camera) will be used just for the factory firmware installation and as a backup method for customers if the camera does not boot anymore for some reasons.
+
== Make more human-readable flash.log ==
  
Model 333 has 3 memories:
+
The flash.log in the nfs share more human-readable. Maybe add some more info inside.
# System SDRAM - 32MB
 
# System Flash - 16MB, it holds root file system (see [[333_File_System#cramfs]])
 
# "Frame buffer" memory - actually universal 32MB DDR SDRAM connected directly to the FPGA
 
  
It is possible to use the system SDRAM for the temporary buffering of the new flash image but we do not know how this memory will be used in the future software releases, so it can be a good solution that uses frame buffer memory for that purpose. Usage of this memory requires that FPGA is programmed and active, there is driver that allows R/W access to this memory as a block device. FPGA access to the memory is rather flexible, clock rate is variable so it will be good to test this memory and verify data integrity before overwriting the flash memory.
+
== PHP interface for reflashing camera(s) ==
  
Other challenge (maybe it is not that difficult) is to unmount flash-based file systems (including root) during the flash process that will end with system reboot to the new image.
+
PHP web interface to reflash one or multiple cameras with ktest, brows the log for each of them and why not run some tests like get an JPEG image and check if the image is "normal". The interface should allow to configure all ktest params individually per camera.
  
=== Hardware Test Software ===
+
== The streamer ==
  
We definitely need some production test software including memory test for the frame memory, FPGA.
+
=== Audio ===
  
One particular program can be
+
Implement audio from alsa source synced with video.
  
==== Flash Memory Read ====
+
=== Subtitles ===
  
In network boot mode. On rare occasions the flash image gets corrupted and camera does not boot until the boot sector is overwritten. And we do not know what causes the boot sector to be overwritten - bug in a driver? Or something else? What might help is to be able to actually read that corrupted sector and it is definitely possible to do without booting the camera with modified version of the network boot loader. Such program might help with other post mortem analysis of the non-bootable flash images.
+
Implement subtitles what can be redden or not by the client. Subtitles should be able to handle info from EXIF and any user defined data.
 +
 
 +
=== Write to disk ===
 +
 
 +
Implement an option to stream to the network and/or to the hard drive / CF.
 +
 
 +
== Exif ==
 +
 
 +
Add fields for geo-location (GPS), orientation of the camera and some user defined data. The camera model should also include sensor type and model.
 +
 
 +
== Make a block diagram of the boot process ==
 +
 
 +
It is needed for new devs and to be able to have an overview of the process and be able to enhance it.
 +
 
 +
== Better usage of busybox ==
 +
 
 +
Enable cool and useful staff from busybox as for example passwd, cfdisk, minicom, ...
 +
(Please post a list to this section for discussion before doing what)
 +
 
 +
== Hardware Test Software ==
 +
 
 +
Hmm... will be described later.
 +
 
 +
== Do some magic to be able to pass params to the kernel over reboot ==
 +
 
 +
Implement a way to pass params to the next booted kernel. This can be done in 2 different ways:
 +
 
 +
* passing kernel params truth RAM
 +
* using KEXEC kernel function
 +
* simulate the green button pressure at boot time (to boot in flashing mode)
 +
* after flashing the camera from network boot erase the bit saying what the green button was pressed
 +
 
 +
== Green button ==
 +
 
 +
The green button on the back of the camera can be used in different ways:
 +
 
 +
* at power up to put the CPU in flashing mode
 +
* 1-2 seconds after power up and hold for ~8 seconds to boot the camera with squashfs and tmpfs instead of jffs. When a special script can be used to relink safe files from sqauashfs to jffs. (cf [http://wiki.elphel.com/index.php?title=TODO&action=submit#Change_the_structure_of_the_boot_process])
 +
* something else user configurable after init 5
 +
 
 +
== Init levels ==
 +
 
 +
Implement init levels, init 3 should have only GNU/Linux with telnetd, everything camera specific should run from init 5. The default level will be 5, but ktest should be able to pass init=3 to the kernel.
 +
 
 +
== Ktest ==
 +
 
 +
=== Rename ktest ===
 +
Ktest should be renamed to something else resuming it's function.
 +
 
 +
=== Better output ===
 +
Some more output should be added to ktest to make it more verbose and user-friendly.
 +
 
 +
=== New function ===
 +
Add new function and param to read & copy partitions from the flash to NFS for debuging.
 +
 
 +
== Ethernet leds ==
 +
 
 +
Hack in to the ehternet driver to make a better usage of leds. For example during flash with pressed button boot with orange led ON, blink orange while booting the kernel, blink with the green led while copying from NFS to flash and green ON when completely flashed and ready to be rebooted. While normal operation leds can be used in a more nice way when now.
 +
 
 +
== Change the structure of the boot process ==
 +
 
 +
I like how partitions are organized in OpenWRT. The root partition should be read only squashfs. The same root partition should be used to boot from flash or from ktest. Then a read/write flash or tmpfs partition can be mounted, squashfs remounted to a new directory. And files from / linked to the /squashfs directory.
 +
 
 +
During the flash process files from squashfs will be symlinked to the tmpfs and to the flash r/w partition.
 +
 
 +
Like what we always have a clean squashfs, links from the r/w jffs partition can be removed and replaced by real files with different content. We can also implement a function for the green button to erase the files from the r/w partition and relink them to /squashfs. It's a simple way to get back to a known point without reflashing the camera.

Revision as of 17:00, 17 August 2007

TODO list

Some project ideas

Add support for wifi and bluetooth

Add support for most used USB wifi and bluetooth USB keys.

Bluetooth remote control

Add a remote control via bluetooth and wifi.

Make more human-readable flash.log

The flash.log in the nfs share more human-readable. Maybe add some more info inside.

PHP interface for reflashing camera(s)

PHP web interface to reflash one or multiple cameras with ktest, brows the log for each of them and why not run some tests like get an JPEG image and check if the image is "normal". The interface should allow to configure all ktest params individually per camera.

The streamer

Audio

Implement audio from alsa source synced with video.

Subtitles

Implement subtitles what can be redden or not by the client. Subtitles should be able to handle info from EXIF and any user defined data.

Write to disk

Implement an option to stream to the network and/or to the hard drive / CF.

Exif

Add fields for geo-location (GPS), orientation of the camera and some user defined data. The camera model should also include sensor type and model.

Make a block diagram of the boot process

It is needed for new devs and to be able to have an overview of the process and be able to enhance it.

Better usage of busybox

Enable cool and useful staff from busybox as for example passwd, cfdisk, minicom, ... (Please post a list to this section for discussion before doing what)

Hardware Test Software

Hmm... will be described later.

Do some magic to be able to pass params to the kernel over reboot

Implement a way to pass params to the next booted kernel. This can be done in 2 different ways:

  • passing kernel params truth RAM
  • using KEXEC kernel function
  • simulate the green button pressure at boot time (to boot in flashing mode)
  • after flashing the camera from network boot erase the bit saying what the green button was pressed

Green button

The green button on the back of the camera can be used in different ways:

  • at power up to put the CPU in flashing mode
  • 1-2 seconds after power up and hold for ~8 seconds to boot the camera with squashfs and tmpfs instead of jffs. When a special script can be used to relink safe files from sqauashfs to jffs. (cf [1])
  • something else user configurable after init 5

Init levels

Implement init levels, init 3 should have only GNU/Linux with telnetd, everything camera specific should run from init 5. The default level will be 5, but ktest should be able to pass init=3 to the kernel.

Ktest

Rename ktest

Ktest should be renamed to something else resuming it's function.

Better output

Some more output should be added to ktest to make it more verbose and user-friendly.

New function

Add new function and param to read & copy partitions from the flash to NFS for debuging.

Ethernet leds

Hack in to the ehternet driver to make a better usage of leds. For example during flash with pressed button boot with orange led ON, blink orange while booting the kernel, blink with the green led while copying from NFS to flash and green ON when completely flashed and ready to be rebooted. While normal operation leds can be used in a more nice way when now.

Change the structure of the boot process

I like how partitions are organized in OpenWRT. The root partition should be read only squashfs. The same root partition should be used to boot from flash or from ktest. Then a read/write flash or tmpfs partition can be mounted, squashfs remounted to a new directory. And files from / linked to the /squashfs directory.

During the flash process files from squashfs will be symlinked to the tmpfs and to the flash r/w partition.

Like what we always have a clean squashfs, links from the r/w jffs partition can be removed and replaced by real files with different content. We can also implement a function for the green button to erase the files from the r/w partition and relink them to /squashfs. It's a simple way to get back to a known point without reflashing the camera.