I did read some pages on wikipedia about BMP and bit depth :-)
First, looks to me that using just the "block data - Bitmap data" only
is ok.
http://en.wikipedia.org/wiki/BMP_file_format#Bitmap_data
And I would not used "Indexed color", just "Direct color" - because I am
worried of CPU and memory usage to "decode" the data from the color map,
I don't see any big advantages in using color map on this system.
http://en.wikipedia.org/wiki/Color_depth#Direct_color
So I think hardware should say to software the image bit depth and also
if is monochrome/grayscale or RGB.
Resuming, we would be downloading to hardware a kind of BMP files, of
monochrome/grayscale or RGB colors. This make sense? -- at least for
actual MCU and RAM, I think there will be no problem.
And to this kind of BMP files, we just need to add the frame_time, to be
able to make the animations :-)
What do you think?
You are right! Thats no sense to leave that work for MCU. So, maybe one
more field on hardware info to indicate if image is in RGB or grayscale?
> What's 'radial count'? Is it number of 'radial gridlines to blink' or
> some counter? I thought that we have 32 'circular gridlines' (due to
> 32LED-strip) and some programmed in firmware number of 'radial
> gridlines to blink', so we have polar grid of pixel co-ordinates.
> Software (or firmware) must convert rechtangular Cartesian pixel co-
> ordinates to polar ones. If it'll be done by software then we'll have
> some specific image dataformat (with polar co-ordinates) to put in
> board memory. If it'll be done by firmware, then we could use obvious
> BMP image format, but microcontroller itself must make such
> conversion. Am I right?
Let's leave the conversions to polar for software, for the same reasons
you told before.
32 LED strip X 256 radials is our matrix on actual hardware - 32 X 256
bits.
Why not hardware return the number of channels and the number of bits
per channel? - like:
- actual hardware: 1 channel, 1 bit;
- grayscale: 1 channel, 8 bits;
- RGB True color: 3 channels, 24 bits.
> And, BTW, where is the information about number of independent LED-
> strips (your board have 2 of them, older projects have one or double-
> one)? Or, maybe, such info isn't necessary, is it?
Yes, actual hardware have 2 strips of 32 LED.
Ok, one more field for indicating the number of strips. With value 1,
the same image goes to the left and right side of the wheel, with value
2, animation 1 goes to left side and animation 2 goes to right side.
Makes sense?
Okok, I think a understand now, except the ee field. Is it really need?
can you give a few examples?
So, it's not a checksum, right? - just the bit color depth?
I will not use it then, to simplify. Color depth information is also
on filed before.
Please everyone verify and say If there is some error or there is
something that should be added.
kvas_off, I did add you as a member, you can now write on wiki pages and
on SVN server :-)
Firmware version: byte_4; byte_5; byte_6
* same as above
Number of radial lines: byte_7; byte_8
* why 2 bytes?
Number of LEDs per radial line: byte_9; byte_10
* why 2 bytes?
It's possible to minimize further the bytes returned or accepted by
the functions?
Kavsoff, do you have experiency with AVR? Will you help on firmare? ;-)
Eheh, okok :-)
> Well, what can I say about the question? I have two of them (ATMega8 &
> ATMega16). That's all :) Also I learned assembler' codes for PIC-micro
> midrange 8-bit microcontrollers and I have a lot of them. :) And I
> studied MSP430 (texas instruments) programming with assembler codes
> and some C (via IAR) in university, only one semester. So what can I
> do ( the last phrase sounds like Russian ' I'll find some vodka ' ) :)
Well, you may did read the Firmware page already, and firmware have two
different parts.
First we must implement the API and after the POV. API is already +-
implemented, is structured now - If you want, you can help in implement
the base API (is the must urgent to do).
It should be difficult to work without hardware ;-) - unfortunally, I
don't have any PCB... I was also waiting to next version of hardware to
make one or two more PCBs.
Don't know if you are familiar with the GCC-AVR and AVR-Libc... you
know, they are very good and Free Software ;-) -- not as IAR ;-)
0001 0000 -> version 1.0, eheh, should be value 16 ;-)
Much more than freeware ;-)
> Generated codes are less
> dense than generated by licensed software (Keil or smth.) But, again,
> money for license...
Atmel have some workers working activly on GCC-AVR and AVR-Libc :-) And
I use this tools on my daily work, doing products with LEDs for
automobile industry ;-) - well, also we do some projects on renewable
energies :-)
When we are talking about the firmware, it's version is firmware
"type" dependent and it has only some meaning to the hardware where
that specific firmware is implemented. And that means, that 1byte is
also enough for versioning that firmware. I don't think someone will
develop more than 16 major versions of a firmware so quickly... and if
that happens, someone needs some lessons about defining versions to
software.
And If some others projects start using the same software, to program
matrix LEDs? 16 diferent hardwares is very few...
1 byte here just represents 0,00006 % of total memory of actual MCU (16kB) - we don't need to save them.
>
I don't recall of any kind of software with more than 16 major versions...
I think no, the beguinning is always 0. And the end is the size of
memory.
project X - version 1.0 - API 1.0
project Y - version 1.0 - API 1.0
For the software we don't need to understand the firmware/hardware
version, just the API.
But if you want to show information about the hardware and firmware
itself, go ahead and put the option with and array of several bytes to
return a string saying "MY KINKY PROJECT" and then it's version 1.0!
Only developers that do a extended firmware, will have tools to access
that. More, we are documenting the extended API, but it should be in a
specific page to not be confused as a "standard" API for the project.
So, for each different hardware, with different extended API,
developers should add the extended API functionalities to software?
Isn't there a better way, like we are trying to do with base API?
> More, we are documenting the extended API, but it should be in a
> specific page to not be confused as a "standard" API for the project.
Okok, when I will have free time I will separate the information in two pages.
A developer does a new firmware with a complete new set of functions,
with special commands, special arguments, special return values... how
could a software even imagine what to do? Unless it's a special
software already knowing it...
Okok - so implementing extended API on firmware and software must be
done for the same developers that builds a new hardware.
I remember you saying something about hardware returning information
to software about commands on extended API - maybe I misunderstood.
Okok - this week I will be working on firmware, implementing the API
that we defined on this last days.
Ok, did that: http://code.google.com/p/bicycleledpov/wiki/BicycleLEDPOVAPI
I added 2 bytes, so we can have 2^16 numbers of different hardwares,
each one with his own extended API.
Extended API page is here:
http://code.google.com/p/bicycleledpov/wiki/BicycleLEDPOVExtendedAPI