Skip to content
This repository

Si4735 Refactor, as discussed on the blog #1

Open
wants to merge 34 commits into from

2 participants

Radu - Eosif Mihailescu Jon Carrier
Radu - Eosif Mihailescu

For some unknown reason, my reply to your comment on your blog disappeared today, in spite of being initially published without issue. This gave me enough determination and time to set up a proper github account, do the paperwork which brings us to this message and also write a proper ChangeLog entry :-)

  • added keywords file for syntax highlighting support in Arduino IDE
  • added Si4735-private.h, containing library-private constants
  • switched to using the official SPI library
  • moved translation (table-driven) code to a separate class, thus allowing gcc's -Os to magically do the right thing if you're not using that class
  • added translation of PTY codes between locales
  • made Si4735 connection configurable at constructor, as is the case with many other libraries. Used default parameters to keep the change transparent.
  • made powering Si4735 off a digital pin optional
  • adjusted code behavior to match data sheet timing specs to the letter -- this includes obvious things such as making sure SPI speed is under 2.5MHz at all times and not so obvious things such as signal-to-signal sequencing and timing restrictions
  • used default arguments to factor a nicer interface for sendCommand()
  • added chip communication debugging (with pretty print!), controlled by compile-time #define
  • added constants for all data sheet flags and numbers, making the code more readable
  • added varactor (varicap) bits when tuning on SW
  • ensured "silence on the bus!" during tuning, as recommended in the data sheet
  • RDS configuration isn't a global state, configured per power up, but a local one, configured after successful tune in -- changed to match
  • made returning only parts of the chip revision data possible
  • getFrequency() now ACKs STCINT
  • made use of built-in constrain() to streamline code
  • updateRDS() now only runs if in FM mode and RDSINT was triggered, SPI traffic per call reduced from 3+17 bytes to 2 bytes for inactive runs
  • now also extracting DI, M/S, PTYN from RDS
  • added endianness awareness where necessary throughout the code (AVRs are little-endian, Si4735 is big-endian)
  • used integer arithmetic (fixed point) for group 4A date/time calculations as AVRs lack a FPU and emulation is not only slow, but also big
  • string sanitization now uses "?" as placeholder character, as is customary
  • added isRDSCapable(), for high-level code to be able to decide not to call updateRDS() after a set timeout for trying to acquire the RDS stream
  • getRDSTime() now returns false if no CT is being transmitted
  • getRSQ() now ACKs RSQINT, also now extracts PILOT too
  • the chip knows its current volume level, no need to store it locally too, also enhanced volumeDown() to mute when reaching the bottom
  • made extensive use of the word() constructor to enforce proper alignment of values at all times
  • since all class functions that call getResponse() live within the class, it made perfect sense to add private byte response[16]
  • end() can now optionally hard power off the chip
  • removed locale stuff from class Si4735, left only setDeemphasis()
  • setMode() now allows switching modes on the fly, including the whole dance of getting the chip ready again
  • resetRDS() now gracefully resets RDS strings (space-fill instead of truncate)
  • used built-in constant for SPI pins doing away with the #if defined(MEGA) block
  • refactored Si4735_Example and Si4735_SerialExample to work with the current version of the library, also extended their functionality to make them more useful for quickly getting a feel of what (and how) the library does
  • added a command to flush the current command string buffer contents to Si4735_SerialExample
  • added the "?" (help) command to both examples
Radu - Eosif Mihailescu Full refactor and facelift, as discussed here: http://carrierfrequenc…
…y.blogspot.com/2011/08/si4735-amfmswlw-radio-project.html?showComment=1331813321168#c6485673424790958660

- added keywords file for syntax highlighting support in Arduino IDE
- added Si4735-private.h, containing library-private constants
- switched to using the official SPI library
- moved translation (table-driven) code to a separate class, thus
allowing gcc's -Os to magically do the right thing if you're not using
that class
- added translation of PTY codes between locales
- made Si4735 connection configurable at constructor, as is the case
with many other libraries. Used default parameters to keep the change
transparent.
- made powering Si4735 off a digital pin optional
- adjusted code behavior to match data sheet timing specs to the letter
-- this includes obvious things such as making sure SPI speed is under
2.5MHz at all times and not so obvious things such as signal-to-signal
sequencing and timing restrictions
-  used default arguments to factor a nicer interface for sendCommand()
- added chip communication debugging (with pretty print!), controlled
by compile-time #define
- added constants for all data sheet flags and numbers, making the code
more readable
- added varactor (varicap) bits when tuning on SW
- ensured "silence on the bus!" during tuning, as recommended in the
data sheet
- RDS configuration isn't a global state, configured per power up, but
a local one, configured *after* successful tune in -- changed to match
- made returning only parts of the chip revision data possible
- getFrequency() now ACKs STCINT
- made use of built-in constrain() to streamline code
- updateRDS() now only runs if in FM mode *and* RDSINT was triggered,
SPI traffic per call reduced from 3+17 bytes to 2 bytes for inactive
runs
- now also extracting DI, M/S, PTYN from RDS
- added endianness awareness where necessary throughout the code (AVRs
are little-endian, Si4735 is big-endian)
- used integer arithmetic (fixed point) for group 4A date/time
calculations as AVRs lack a FPU and emulation is not only slow, but
also big
- string sanitization now uses "?" as placeholder character, as is
customary
- added isRDSCapable(), for high-level code to be able to decide not to
call updateRDS() after a set timeout for trying to acquire the RDS
stream
- getRDSTime() now returns false if no CT is being transmitted
- getRSQ() now ACKs RSQINT, also now extracts PILOT too
- the chip knows its current volume level, no need to store it locally
too, also enhanced volumeDown() to mute when reaching the bottom
-  made extensive use of the word() constructor to enforce proper
alignment of values at all times
- since all class functions that call getResponse() live within the
class, it made perfect sense to add private byte response[16]
- end() can now optionally hard power off the chip
- removed locale stuff from class Si4735, left only setDeemphasis()
- setMode() now allows switching modes on the fly, including the whole
dance of getting the chip ready again
- resetRDS() now gracefully resets RDS strings (space-fill instead of
truncate)
- used built-in constant for SPI pins doing away with the #if
defined(MEGA) block
- refactored Si4735_Example and Si4735_SerialExample to work with the
current version of the library, also extended their functionality to
make them more useful for quickly getting a feel of what (and how) the
library does
- added a command to flush the current command string buffer contents
to Si4735_SerialExample
- added the "?" (help) command to both examples
399acfe
Jon Carrier
Owner
Radu - Eosif Mihailescu

Thank you for the good words and taking the time to write :-) That's encouragement enough to keep improving the code ;-)

I was planning to port your code to the new library too, I simply did the examples first because they seemed intended to be part of the library (whereas your code looked like something that uses the library). If you can't do it tonight, I'll be happy to do it.

As for the humble part, I did not know how much were you going to like the fact that I basically touched each and every line of your code so a humble attitude felt like the right thing to do. And anyway, if it weren't for your code, I wouldn't have had what to improve on, in the first place -- so bragging just didn't fit the picture :-)

Finally, in what callsign decoding from PI, I've read the RDBS standard and it's not what I would call complicated so if that guy's code follows the standard, it should be easy to make it simpler and shorter.

I'll probably have another round of updates (not so extensive as the first one :-D) in by the weekend so the library as a whole should look its best by the beginning of next week.

Once again, thank you for your time,
Looking forward to hearing from you again,
Radu

added some commits March 23, 2012
Radu - Eosif Mihailescu Cosmetic/formatting fixes, documentation fixes, comment streamlining
- cosmetic fixes, done away with hard tabs, added full stops where
missing, corrected Capitalization etc.
- fixed a typo in keywords.txt
- added SI4735_FLG_DEEMPH_NONE
- removed char callSign[5] from Si4735_Station
- updated README, streamlined file headers
- generally made sure the code is in good, consistent shape before the
weekend dive-in :-)
4abd50b
Radu - Eosif Mihailescu Cosmetic fixes, examples half
- made indentation consistent
- made file headers consistent
7afcc00
Radu - Eosif Mihailescu Moved RDS Decoder into its own class
Moved RDS Decoder into its own class, allowing size optimizations and
making the code more modular and readable. Now Si4735 deals exclusively
with talking to the chip, as it should be.
Optimized out frequency and RSQ inside Si4735: we always ask the chip
when returning those so why store them? Memory is expensive on a
microcontroller.
414cab3
Radu - Eosif Mihailescu Added I2C mode and streamlined constructor
- added I2C mode using Wire library. Unfortunately, it inherits from
Stream (who had that "wonderful" idea?) and tends to be rather big
(compared to SPI). Also, defaults to 100kHz with no means to change
that :-(
- added exclusion defines for SPI and I2C code.
- streamlined Si4735 constructor, done away with pins which are always
connected (have to be) to the same Arduino pin (e.g. SDIO to MOSI)
- made getRevision return the chip type and patch number too
- added constants for hardwired pins and done away with the lame "use
0xFF" docstring on the constructor.
ade07d8
Radu - Eosif Mihailescu Keyword file updates
- synched keyword file to the latest code layout
458ec79
Radu - Eosif Mihailescu Made GPO2 expendable when using I2C
- added constants and logic for "I don't use GPO2 in I2C mode"
- aligned 0xFF -> SI4735_PIN_POWER_HW
- cosmetic fixes to the README
cd1542a
Radu - Eosif Mihailescu Minor cleanups and debug instrumentation
- added RDS received group counters by group type and a dumper
- cleaned-up the examples, added GET_INT_STATUS before reading the
status word for pretty printing
- cleaned-up keywords.txt, Arduino seems to want hard tabs in it :-(
c98028b
Radu - Eosif Mihailescu Moved received signal quality metrics back inside Si4735 class
- for some unknown reason, either the Arduino preprocessor or avr-gcc
is playing tricks on me and generates code the deadlocks the micro
controller when compiling the current version of this method (which
works just fine on i386, mind you). So, I'm reverting to the previous
approach, of copying things around twice.
65a6012
Radu - Eosif Mihailescu Fixed wrong types in function call to memset() in Si4735 constructor
- this is a syntax error in debug code, epic fail on my side
- also used sizeof() instead of hardcoded values
737f6db
Radu - Eosif Mihailescu Added 'valid tune' output to the 'f' command
- make the 'f' command also output the VALID bit to make debugging
easier.
8c9a455
Radu - Eosif Mihailescu Corrected I2C constants
- we are not doing bit-banging I2C -- the AVR does it on its own. So,
our addresses should be 7 bits and we don't need to care about the
read/write bits anymore
- fix #ifdef typo
* credit for all the above goes to tcanaday
e3ef813
Radu - Eosif Mihailescu Added destructor to Si4735 class
- added an explicit destructor to Si4735
- sorted out I2C fix credits
a990898
Radu - Eosif Mihailescu Made XOSC optional
- added logic to specify there is no 32768Hz oscillator connected to
the chip (and thus the latter should use its own internal version).
- current avr-gcc does the PROGMEM thing by default for constant
strings, no need to make our lives miserable with _P function calls
- removed AdvancedRadio as it's not an example but a full-fledged
project and is out of scope for this library.
83c119b
Radu - Eosif Mihailescu Updated documentation
- made it clear that people should prefer tried and tested, sound
solutions to hacks if they expect things to work
- added more TODO work
92c30d2
Radu - Eosif Mihailescu Slimlined destructor
- moved destructor in the header file since it only contains one
statement.
7d2a31d
Radu - Eosif Mihailescu Inlined accessors
- moved all accessors from the .cpp file to the header, thus inlining
them
6f36854
Radu - Eosif Mihailescu Syntax fixes
- I hate the fact that the semicolon is optional "sometimes" in C++.
Either make it compulsory, or do away with it completely -- do we
really save *that* much time by allowing people not to type it at
certain times?!?
2e343d3
Radu - Eosif Mihailescu Disabled I2C and switched to bool
- the pointer corruption problems I've seen lately have been traced to
the Wire library, I've disabled it while an investigation is underway.
A refactor + facelift could be in order for Wire as well since, IMHO,
it was way too many lines (and files) of code for what it does (compare
with SPI).
- I do enjoy standards quite a lot, even if Arduino differs: switched
to bool, ditched boolean. Compiles and works just fine, code size
smaller by 5 bytes :-)
dae0505
Radu - Eosif Mihailescu Revert "Moved received signal quality metrics back inside Si4735 class"
- this reverts commit 65a6012.
- since pointer problems were traced to Wire, this has proven unnecessarry.
9bea6fb
Radu - Eosif Mihailescu Calibrated SPI for BOB-08745 version
- reduced SPI speed down to 250kHz if using an Uno/Mega + BOB-08745; as
the latter tends to be very slow due to its cheap design
- moved bool goodtune from .data to .bss, makes debugging easier
- updated documentation
820e4b6
Radu - Eosif Mihailescu Forced Serial to serialize things
- it seems Serial is neither as reentrant, nor as blocking as we'd like
it to be. Adding an explicit flush() after each output block to enforce
blocking operation -- turns out at 9600 baud there's plenty of time bad
things can happen between sent characters ;-)
07edbf7
Radu - Eosif Mihailescu BUGFIX: wrong expression order in for()
- fixed typo in SerialExample, mixed test and increment expressions in
for()
3ed95c2
Radu - Eosif Mihailescu Moved strings to flash
- moved all strings longer than 6 characters (inclusive) to flash, this
covers both GUI strings and string tables.
ff8faea
Radu - Eosif Mihailescu BUGFIX: avr-gcc 4.7.0 actually cares about __progmem__ being const-only
- all-time favorite C kill-a-brain-cell mistake and fix, const * const
instead of const *. Never ceases to amuse me, in a very, very bitter
way.
924620c
Radu - Eosif Mihailescu BUGFIX: Si4735::begin() calls Si4735::setMode() using wrong value
- was calling using private property _mode instead of passed value mode
- updated README with credits
285b3ae
Radu - Eosif Mihailescu BUGFIX: Si4735::begin() doesn't properly set SEN up if not in default…
… (shield, SEN = SS) topology

- added code to explicitly set SEN up if it's not tied to SS
c063716
Radu - Eosif Mihailescu Updated GPO2 behaviour
- updated GPO2 behaviour to obey "hardwired" state (i.e. don't attempt to drive the pin if the user said it's been hardwired)
- fixed SI4735_PIN_GPO2_HWL constant
ca122bd
Radu - Eosif Mihailescu BUGFIX: SET_PROPERTY completes in 10ms, not when CTS comes back up
- added delay to SET_PROPERTY to match datasheet parameters
- added explicit INTACK to all tuning commands as the user may not actually call getFrequency(); after each such command
7395ee5
Radu - Eosif Mihailescu BUGFIX: new private method missing from header file
- added Si4735::completeTune(); to Si4735.h, GitHub's web editing GUI made missing it easy.
e90f7ee
Radu - Eosif Mihailescu Added constants for AM_CHANNEL_FILTER 6a3b406
Radu - Eosif Mihailescu BUGFIX: misspelled symbolic constant (credits: Albert Tejera)
- SI4735_[FA]M_TUNE_STATUS --> SI4735_CMD_[FA]M_TUNE_STATUS
ad733eb
Radu - Eosif Mihailescu Re-enabled I2C (long overdue)
- many people have reported success with all avr-gcc versions in the wild and at least Arduino IDE 1.0, so I guess this now works properly and what I was seeing were either avr-gcc bugs or my faults in other parts of the code.
4b0ef0b
Radu - Eosif Mihailescu Extended support to the whole Si47xx family
- added symbolic constants for all new commands
- added symbolic constants for all new properties
- flag/status constants are next
Credits go to Anderson Alves dos Santos for suggesting this should be done.
d08fc76
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Showing 34 unique commits by 1 author.

Mar 18, 2012
Radu - Eosif Mihailescu Full refactor and facelift, as discussed here: http://carrierfrequenc…
…y.blogspot.com/2011/08/si4735-amfmswlw-radio-project.html?showComment=1331813321168#c6485673424790958660

- added keywords file for syntax highlighting support in Arduino IDE
- added Si4735-private.h, containing library-private constants
- switched to using the official SPI library
- moved translation (table-driven) code to a separate class, thus
allowing gcc's -Os to magically do the right thing if you're not using
that class
- added translation of PTY codes between locales
- made Si4735 connection configurable at constructor, as is the case
with many other libraries. Used default parameters to keep the change
transparent.
- made powering Si4735 off a digital pin optional
- adjusted code behavior to match data sheet timing specs to the letter
-- this includes obvious things such as making sure SPI speed is under
2.5MHz at all times and not so obvious things such as signal-to-signal
sequencing and timing restrictions
-  used default arguments to factor a nicer interface for sendCommand()
- added chip communication debugging (with pretty print!), controlled
by compile-time #define
- added constants for all data sheet flags and numbers, making the code
more readable
- added varactor (varicap) bits when tuning on SW
- ensured "silence on the bus!" during tuning, as recommended in the
data sheet
- RDS configuration isn't a global state, configured per power up, but
a local one, configured *after* successful tune in -- changed to match
- made returning only parts of the chip revision data possible
- getFrequency() now ACKs STCINT
- made use of built-in constrain() to streamline code
- updateRDS() now only runs if in FM mode *and* RDSINT was triggered,
SPI traffic per call reduced from 3+17 bytes to 2 bytes for inactive
runs
- now also extracting DI, M/S, PTYN from RDS
- added endianness awareness where necessary throughout the code (AVRs
are little-endian, Si4735 is big-endian)
- used integer arithmetic (fixed point) for group 4A date/time
calculations as AVRs lack a FPU and emulation is not only slow, but
also big
- string sanitization now uses "?" as placeholder character, as is
customary
- added isRDSCapable(), for high-level code to be able to decide not to
call updateRDS() after a set timeout for trying to acquire the RDS
stream
- getRDSTime() now returns false if no CT is being transmitted
- getRSQ() now ACKs RSQINT, also now extracts PILOT too
- the chip knows its current volume level, no need to store it locally
too, also enhanced volumeDown() to mute when reaching the bottom
-  made extensive use of the word() constructor to enforce proper
alignment of values at all times
- since all class functions that call getResponse() live within the
class, it made perfect sense to add private byte response[16]
- end() can now optionally hard power off the chip
- removed locale stuff from class Si4735, left only setDeemphasis()
- setMode() now allows switching modes on the fly, including the whole
dance of getting the chip ready again
- resetRDS() now gracefully resets RDS strings (space-fill instead of
truncate)
- used built-in constant for SPI pins doing away with the #if
defined(MEGA) block
- refactored Si4735_Example and Si4735_SerialExample to work with the
current version of the library, also extended their functionality to
make them more useful for quickly getting a feel of what (and how) the
library does
- added a command to flush the current command string buffer contents
to Si4735_SerialExample
- added the "?" (help) command to both examples
399acfe
Mar 23, 2012
Radu - Eosif Mihailescu Cosmetic/formatting fixes, documentation fixes, comment streamlining
- cosmetic fixes, done away with hard tabs, added full stops where
missing, corrected Capitalization etc.
- fixed a typo in keywords.txt
- added SI4735_FLG_DEEMPH_NONE
- removed char callSign[5] from Si4735_Station
- updated README, streamlined file headers
- generally made sure the code is in good, consistent shape before the
weekend dive-in :-)
4abd50b
Radu - Eosif Mihailescu Cosmetic fixes, examples half
- made indentation consistent
- made file headers consistent
7afcc00
Mar 24, 2012
Radu - Eosif Mihailescu Moved RDS Decoder into its own class
Moved RDS Decoder into its own class, allowing size optimizations and
making the code more modular and readable. Now Si4735 deals exclusively
with talking to the chip, as it should be.
Optimized out frequency and RSQ inside Si4735: we always ask the chip
when returning those so why store them? Memory is expensive on a
microcontroller.
414cab3
Radu - Eosif Mihailescu Added I2C mode and streamlined constructor
- added I2C mode using Wire library. Unfortunately, it inherits from
Stream (who had that "wonderful" idea?) and tends to be rather big
(compared to SPI). Also, defaults to 100kHz with no means to change
that :-(
- added exclusion defines for SPI and I2C code.
- streamlined Si4735 constructor, done away with pins which are always
connected (have to be) to the same Arduino pin (e.g. SDIO to MOSI)
- made getRevision return the chip type and patch number too
- added constants for hardwired pins and done away with the lame "use
0xFF" docstring on the constructor.
ade07d8
Radu - Eosif Mihailescu Keyword file updates
- synched keyword file to the latest code layout
458ec79
Mar 29, 2012
Radu - Eosif Mihailescu Made GPO2 expendable when using I2C
- added constants and logic for "I don't use GPO2 in I2C mode"
- aligned 0xFF -> SI4735_PIN_POWER_HW
- cosmetic fixes to the README
cd1542a
Mar 31, 2012
Radu - Eosif Mihailescu Minor cleanups and debug instrumentation
- added RDS received group counters by group type and a dumper
- cleaned-up the examples, added GET_INT_STATUS before reading the
status word for pretty printing
- cleaned-up keywords.txt, Arduino seems to want hard tabs in it :-(
c98028b
Apr 02, 2012
Radu - Eosif Mihailescu Moved received signal quality metrics back inside Si4735 class
- for some unknown reason, either the Arduino preprocessor or avr-gcc
is playing tricks on me and generates code the deadlocks the micro
controller when compiling the current version of this method (which
works just fine on i386, mind you). So, I'm reverting to the previous
approach, of copying things around twice.
65a6012
Radu - Eosif Mihailescu Fixed wrong types in function call to memset() in Si4735 constructor
- this is a syntax error in debug code, epic fail on my side
- also used sizeof() instead of hardcoded values
737f6db
Apr 03, 2012
Radu - Eosif Mihailescu Added 'valid tune' output to the 'f' command
- make the 'f' command also output the VALID bit to make debugging
easier.
8c9a455
Radu - Eosif Mihailescu Corrected I2C constants
- we are not doing bit-banging I2C -- the AVR does it on its own. So,
our addresses should be 7 bits and we don't need to care about the
read/write bits anymore
- fix #ifdef typo
* credit for all the above goes to tcanaday
e3ef813
Radu - Eosif Mihailescu Added destructor to Si4735 class
- added an explicit destructor to Si4735
- sorted out I2C fix credits
a990898
Apr 08, 2012
Radu - Eosif Mihailescu Made XOSC optional
- added logic to specify there is no 32768Hz oscillator connected to
the chip (and thus the latter should use its own internal version).
- current avr-gcc does the PROGMEM thing by default for constant
strings, no need to make our lives miserable with _P function calls
- removed AdvancedRadio as it's not an example but a full-fledged
project and is out of scope for this library.
83c119b
Apr 13, 2012
Radu - Eosif Mihailescu Updated documentation
- made it clear that people should prefer tried and tested, sound
solutions to hacks if they expect things to work
- added more TODO work
92c30d2
Apr 14, 2012
Radu - Eosif Mihailescu Slimlined destructor
- moved destructor in the header file since it only contains one
statement.
7d2a31d
Radu - Eosif Mihailescu Inlined accessors
- moved all accessors from the .cpp file to the header, thus inlining
them
6f36854
Radu - Eosif Mihailescu Syntax fixes
- I hate the fact that the semicolon is optional "sometimes" in C++.
Either make it compulsory, or do away with it completely -- do we
really save *that* much time by allowing people not to type it at
certain times?!?
2e343d3
Apr 15, 2012
Radu - Eosif Mihailescu Disabled I2C and switched to bool
- the pointer corruption problems I've seen lately have been traced to
the Wire library, I've disabled it while an investigation is underway.
A refactor + facelift could be in order for Wire as well since, IMHO,
it was way too many lines (and files) of code for what it does (compare
with SPI).
- I do enjoy standards quite a lot, even if Arduino differs: switched
to bool, ditched boolean. Compiles and works just fine, code size
smaller by 5 bytes :-)
dae0505
Radu - Eosif Mihailescu Revert "Moved received signal quality metrics back inside Si4735 class"
- this reverts commit 65a6012.
- since pointer problems were traced to Wire, this has proven unnecessarry.
9bea6fb
Apr 17, 2012
Radu - Eosif Mihailescu Calibrated SPI for BOB-08745 version
- reduced SPI speed down to 250kHz if using an Uno/Mega + BOB-08745; as
the latter tends to be very slow due to its cheap design
- moved bool goodtune from .data to .bss, makes debugging easier
- updated documentation
820e4b6
Apr 19, 2012
Radu - Eosif Mihailescu Forced Serial to serialize things
- it seems Serial is neither as reentrant, nor as blocking as we'd like
it to be. Adding an explicit flush() after each output block to enforce
blocking operation -- turns out at 9600 baud there's plenty of time bad
things can happen between sent characters ;-)
07edbf7
Apr 21, 2012
Radu - Eosif Mihailescu BUGFIX: wrong expression order in for()
- fixed typo in SerialExample, mixed test and increment expressions in
for()
3ed95c2
Apr 23, 2012
Radu - Eosif Mihailescu Moved strings to flash
- moved all strings longer than 6 characters (inclusive) to flash, this
covers both GUI strings and string tables.
ff8faea
Radu - Eosif Mihailescu BUGFIX: avr-gcc 4.7.0 actually cares about __progmem__ being const-only
- all-time favorite C kill-a-brain-cell mistake and fix, const * const
instead of const *. Never ceases to amuse me, in a very, very bitter
way.
924620c
May 24, 2012
Radu - Eosif Mihailescu BUGFIX: Si4735::begin() calls Si4735::setMode() using wrong value
- was calling using private property _mode instead of passed value mode
- updated README with credits
285b3ae
May 25, 2012
Radu - Eosif Mihailescu BUGFIX: Si4735::begin() doesn't properly set SEN up if not in default…
… (shield, SEN = SS) topology

- added code to explicitly set SEN up if it's not tied to SS
c063716
Jun 06, 2012
Radu - Eosif Mihailescu Updated GPO2 behaviour
- updated GPO2 behaviour to obey "hardwired" state (i.e. don't attempt to drive the pin if the user said it's been hardwired)
- fixed SI4735_PIN_GPO2_HWL constant
ca122bd
Jun 15, 2012
Radu - Eosif Mihailescu BUGFIX: SET_PROPERTY completes in 10ms, not when CTS comes back up
- added delay to SET_PROPERTY to match datasheet parameters
- added explicit INTACK to all tuning commands as the user may not actually call getFrequency(); after each such command
7395ee5
Radu - Eosif Mihailescu BUGFIX: new private method missing from header file
- added Si4735::completeTune(); to Si4735.h, GitHub's web editing GUI made missing it easy.
e90f7ee
Radu - Eosif Mihailescu Added constants for AM_CHANNEL_FILTER 6a3b406
Aug 02, 2012
Radu - Eosif Mihailescu BUGFIX: misspelled symbolic constant (credits: Albert Tejera)
- SI4735_[FA]M_TUNE_STATUS --> SI4735_CMD_[FA]M_TUNE_STATUS
ad733eb
Oct 13, 2012
Radu - Eosif Mihailescu Re-enabled I2C (long overdue)
- many people have reported success with all avr-gcc versions in the wild and at least Arduino IDE 1.0, so I guess this now works properly and what I was seeing were either avr-gcc bugs or my faults in other parts of the code.
4b0ef0b
May 06, 2013
Radu - Eosif Mihailescu Extended support to the whole Si47xx family
- added symbolic constants for all new commands
- added symbolic constants for all new properties
- flag/status constants are next
Credits go to Anderson Alves dos Santos for suggesting this should be done.
d08fc76
Something went wrong with that request. Please try again.