| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- # Creating RGB matrix library
- # When you link this library with your binary, you need to add -lrt -lm -lpthread
- # So
- # -lrgbmatrix
- ##
- OBJECTS=gpio.o led-matrix.o options-initialize.o framebuffer.o \
- thread.o bdf-font.o graphics.o led-matrix-c.o hardware-mapping.o \
- pixel-mapper.o multiplex-mappers.o \
- content-streamer.o
- TARGET=librgbmatrix
- ###
- # After you change any of the following DEFINES, make sure to 'make' again.
- #
- # ########### NOTE ###########
- # all of these options can now can be set programmatically and
- # via command line flags as well. No real need to change them in the Makefile.
- # (So be prepared for these to be removed at some point)
- ###
- # There are several different pinouts for various breakout boards that uses
- # this library. If you are using the described pinout in the toplevel README.md
- # or the standard active-3 breakout board, then 'regular' is the one you'd like
- # to use.
- #
- # Adafruit also made a breakout board, if you want to use that, choose
- # 'adafruit-hat'
- #
- # These are the choices
- # regular # Following this project wiring and using these PCBs
- # adafruit-hat # If you have a RGB matrix HAT from Adafruit
- # adafruit-hat-pwm # If you have an Adafruit HAT with PWM hardware mod.
- # regular-pi1 # If you have an old Pi1 and regular didn't work.
- # classic # (deprecated) Classic Pi1/2/. Not used anymore.
- # classic-pi1 # (deprecated) Classic pinout on Rasperry Pi 1
- HARDWARE_DESC?=regular
- # If you see that your display is inverse, you might have a matrix variant
- # has uses inverse logic for the RGB bits. In that case: uncomment this.
- # Flag: --led-inverse
- #DEFINES+=-DINVERSE_RGB_DISPLAY_COLORS
- # For curiosity reasons and while tweaking values for LSB_PWM_NANOSECONDS,
- # uncomment to see refresh rate in terminal.
- # Flag: --led-show-refresh
- #DEFINES+=-DSHOW_REFRESH_RATE
- # For low refresh rates below 100Hz (e.g. a lot of panels), the eye will notice
- # some flicker. With this option enabled, the refreshed lines are interleaved,
- # so it is less noticeable. But looks less pleasant with fast eye movements.
- # Flag: --led-scan-mode=1
- #DEFINES+=-DRGB_SCAN_INTERLACED=1
- # The signal can be too fast for some LED panels, in particular with newer
- # (faster) Raspberry Pi 2s - in that case, the LED matrix only shows garbage.
- # This allows to slow down the GPIO for these cases.
- #
- # Set to 1 for RPi2 or RPi3 (default below), because they are typically
- # faster than the panels can digest.
- #
- # Set to 0 (or comment out) for RPi1, that are slow enough.
- #
- # Sometimes, you even have to give RGB_SLOWDOWN_GPIO=2 or even 3 for
- # particularly slow panels or bad signal cable situations. If that happens, you
- # typically should double check cables and add TTL level converter if you
- # haven't.
- # Flag: --led-slowdown-gpio
- #DEFINES+=-DRGB_SLOWDOWN_GPIO=1
- # This allows to change the base time-unit for the on-time in the lowest
- # significant bit in nanoseconds.
- # Higher numbers provide better quality (more accurate color, less ghosting),
- # but have a negative impact on the frame rate.
- #
- # For the same frame-rate, displays with higher multiplexing (e.g. 1:16 or 1:32)
- # require lower values.
- #
- # Good values for full-color display (PWM=11) are somewhere between 100 and 300.
- #
- # If you you use reduced bit color (e.g. PWM=1 for 8 colors like for text),
- # then higher values might be good to minimize ghosting (and you can afford
- # that, because lower PWM values result in higher frame-rates).
- #
- # How to decide ? Just leave the default if things are fine. If you see
- # ghosting in high-contrast applications (e.g. text), increase the value.
- # If you want to tweak, watch the framerate (-DSHOW_FRAME_RATE) while playing
- # with this number and the PWM values.
- # Flag: --led-pwm-lsb-nanoseconds
- #DEFINES+=-DLSB_PWM_NANOSECONDS=130
- # This is to debug problems with the hardware pulse generation. The PWM hardware
- # module is also used by Raspberry Pi sound system, so there might be
- # interference. Note, you typically don't want the hardware pulses disabled, as
- # the image will have visible brightness glitches; but for debugging, this is
- # a good choice.
- # Flag: --led-no-hardware-pulses
- #DEFINES+=-DDISABLE_HARDWARE_PULSES
- # This allows to fix the refresh rate to a particular refresh time in
- # microseconds.
- #
- # This can be used to mitigate some situations in which you have a rare
- # faint flicker, which can happen due to hardware events (network access)
- # or other situations such as other IO or heavy memory access by other
- # processes (all of which seem to break the isolation we request from the
- # kernel. You did set isolcpus=3 right ?)
- # You trade a slightly slower refresh rate and display brightness for less
- # visible flicker situations.
- #
- # For this to calibrate, run your program for a while with --led-show-refresh
- # and watch the line that shows the refresh time and the maximum microseconds
- # for a frame observed. The maximum number is updated whenever the frame
- # refresh take a little bit longer. So wait a while until that value doesn't
- # change anymore (at least a minute, so that you catch tasks that happen once
- # a minute). Some value might read e.g.
- # 204.6Hz max: 5133usec
- # Now take this maximum value you see there (here: 5133) and put in
- # this define (don't forget to remove the # in front).
- #
- # The refresh rate will now be adapted to always have this amount of time
- # between frames, so faster refreshes will be slowed down, but the occasional
- # delayed frame will fit into the time-window as well, thus reducing visible
- # brightness fluctuations.
- #
- # You can play with value a little and reduce until you find a good balance
- # between refresh rate (which is reduce the higher this value is) and
- # flicker suppression (which is better with higher values).
- # Flag: --led-limit-refresh
- #DEFINES+=-DFIXED_FRAME_MICROSECONDS=5000
- # Enable wide 64 bit GPIO offered with the compute module.
- # This will use more memory to internally represent the frame buffer, so
- # caches can't be utilized as much.
- # So only switch this on if you really use the compute module and use more
- # than 3 parallel chains.
- # (this is untested right now, waiting for hardware to arrive for testing)
- #DEFINES+=-DENABLE_WIDE_GPIO_COMPUTE_MODULE
- # ---- Pinout options for hardware variants; usually no change needed here ----
- # Uncomment if you want to use the Adafruit HAT with stable PWM timings.
- # The newer version of this library allows for much more stable (less flicker)
- # output, but it does not work with the Adafruit HAT unless you do a
- # simple hardware hack on them:
- # connect GPIO 4 (old OE) with 18 (the new OE); there are
- # convenient solder holes labeled 4 and 18 on the Adafruit HAT, pretty
- # close together.
- # Then you can set the flag --led-gpio-mapping=adafruit-hat-pwm
- # .. or uncomment the following line.
- #HARDWARE_DESC=adafruit-hat-pwm
- # Typically, a Hub75 panel is split in two half displays, so that a 1:16
- # multiplexing actually multiplexes over two half displays and gives 32 lines.
- # There are some other displays out there that you might experiment with
- # that are internally wired to only have one sub-panel. In that case you might
- # want to try this define to get a more reasonable canvas mapping.
- # This option is typically _not_ needed, only use when you attempt to connect
- # some oddball old (typically one-colored) display, such as Hub12.
- #DEFINES+=-DONLY_SINGLE_SUB_PANEL
- # If someone gives additional values on the make commandline e.g.
- # make USER_DEFINES="-DSHOW_REFRESH_RATE"
- DEFINES+=$(USER_DEFINES)
- DEFINES+=-DDEFAULT_HARDWARE='"$(HARDWARE_DESC)"'
- INCDIR=../include
- CFLAGS=-W -Wall -Wextra -Wno-unused-parameter -O3 -g -fPIC $(DEFINES)
- CXXFLAGS=$(CFLAGS) -fno-exceptions -std=c++11
- all : $(TARGET).a $(TARGET).so.1
- $(TARGET).a : $(OBJECTS)
- $(AR) rcs $@ $^
- $(TARGET).so.1 : $(OBJECTS)
- $(CXX) -shared -Wl,-soname,$@ -o $@ $^ -lpthread -lrt -lm -lpthread
- led-matrix.o: led-matrix.cc $(INCDIR)/led-matrix.h
- thread.o : thread.cc $(INCDIR)/thread.h
- framebuffer.o: framebuffer.cc framebuffer-internal.h
- graphics.o: graphics.cc utf8-internal.h
- %.o : %.cc compiler-flags
- $(CXX) -I$(INCDIR) $(CXXFLAGS) -c -o $@ $<
- %.o : %.c compiler-flags
- $(CC) -I$(INCDIR) $(CFLAGS) -c -o $@ $<
- clean:
- rm -f $(OBJECTS) $(TARGET).a $(TARGET).so.1
- compiler-flags: FORCE
- @echo '$(CXX) $(CXXFLAGS)' | cmp -s - $@ || echo '$(CXX) $(CXXFLAGS)' > $@
- .PHONY: FORCE
|