2
3
4
5
6
7
8
9
10
11
12
13
14
15
20#define SI4844_ADDRESS 0x11
25#define ATDD_POWER_DOWN 0x11
26#define ATDD_POWER_UP 0xE1
27#define ATDD_AUDIO_MODE 0xE2
29#define ATDD_XOSCEN 0x80
30#define ATDD_XOWAIT 0x40
31#define ATDD_GET_STATUS 0xE0
33#define SET_PROPERTY 0x12
34#define GET_PROPERTY 0x13
35#define RX_VOLUME 0x4000
36#define RX_HARD_MUTE 0x4001
37#define RX_BASS_TREBLE 0x4002
38#define RX_ACTUAL_VOLUME 0x4003
40#define FM_SOFT_MUTE_MAX_ATTENUATION 0x1302
41#define AM_SOFT_MUTE_MAX_ATTENUATION 0x3302
42#define FM_DEEMPHASIS 0x1100
43#define FM_SOFT_MUTE_RATE 0x1300
44#define FM_SOFT_MUTE_SLOPE 0x1301
45#define FM_STEREO_IND_BLEND_THRESHOLD 0x1207
46#define FM_BLEND_RSSI_STEREO_THRESHOLD 0x1800
47#define FM_BLEND_RSSI_MONO_THRESHOLD 0x1801
49#define REFCLK_FREQ 0x0201
50#define REFCLK_PRESCALE 0x0202
52#define AM_SOFT_MUTE_RATE 0x3300
53#define AM_SOFT_MUTE_SLOPE 0x3301
54#define AM_SOFT_MUTE_SNR_THRESHOLD 0x3303
60
61
62
63
64
65
66
67
71
72
73
74
75
84} si4844_arg_band_index;
87
88
89
90
91
100 uint8_t BANDTOP_HIGH;
112
113
114
115
131
132
133
134
135
157} si4844_get_channel_frequency;
160
161
162
163
168} si4844_status_response;
171
172
173
174
186} si4844_firmware_info;
189
190
191
195} si4844_firmware_response;
198
199
200
204 uint8_t AUDIOMODE : 2;
206 uint8_t ADJPT_ATTN : 1;
207 uint8_t ADJPT_STEO : 1;
208 uint8_t Reserved : 2;
215
216
217
222 uint8_t ADJPT_ATTN:1;
223 uint8_t ADJPT_STEO:1;
229} si4844_audiomode_status_response;
232
233
234
235
246
247
248
249
250volatile static bool data_from_device;
253
254
255
256
257
258
259
260
264static void interrupt_hundler()
266 data_from_device =
true;
270
271
272
273
280 si4844_status_response status_response;
281 si4844_firmware_response firmware_response;
283 uint16_t interruptPin;
284 uint8_t currentBand = 0;
290 inline void setClockLow(
void) { Wire.setClock(10000); };
291 inline void setClockHigh(
void) { Wire.setClock(50000); };
292 inline void waitInterrupt(
void);
293 inline bool isClearToSend(
void);
294 inline void waitToSend(
void);
297 const char *bandmode_table[3] = {
"FM",
"AM",
"SW"};
298 const char *stereo_indicator_table[2] = {
"Off",
"On "};
299 char strFormattedCurrentFrequenct[8];
302 uint8_t bassTreble = 4;
306
307
308
309
310
311
312
316
317
318
319
320
324 void setProperty(uint16_t propertyNumber, uint16_t parameter);
326 void sendCommand(uint8_t cmd,
int parameter_size,
const uint8_t *parameter);
329 void setup(uint16_t resetPin,
int interruptPin, byte defaultBand);
330 void debugDevice(uint16_t resetPin, uint16_t interruptPin, uint8_t defaultBand,
void (*showFunc)(
char *msg));
364 si4844_audiomode_status_response
365 setAudioMode(uint8_t audiomode, uint8_t fm_mono, uint8_t adjpt_attn, uint8_t adjpt_steo, uint8_t opcode);
370 void setCustomBand(uint8_t bandIndex, uint16_t botton, uint16_t top, uint8_t bandSpace, uint8_t dfband = 0, uint8_t uni_am = 0, uint8_t tvreq = 0 );
383
384
385
386
387
392
393
394
395
396 inline char *
getBandMode(){
return (
char *) bandmode_table[status_response.refined.BANDMODE]; };
399
400
401
402
403 inline char *
getStereoIndicator(){
return (
char *) stereo_indicator_table[status_response.refined.STATION]; };
406
407
408
409
410
414
415
416
417
421
422
423
424
425
430
431
432
433
437
438
439
440
441
442
443
444
448
449
450
451
452
453
454
455
456
457
464
465
466
467
471
472
473
474
497 void convertToChar(uint32_t value,
char *strValue, uint8_t len, uint8_t dot, uint8_t separator,
bool remove_leading_zeros =
true);
#define FM_SOFT_MUTE_RATE
Definition: SI4844.h:43
#define AM_SOFT_MUTE_SLOPE
Definition: SI4844.h:53
uint16_t value
Definition: SI4844.h:242
#define AM_SOFT_MUTE_MAX_ATTENUATION
Definition: SI4844.h:41
#define FM_STEREO_IND_BLEND_THRESHOLD
Definition: SI4844.h:45
#define RX_HARD_MUTE
Definition: SI4844.h:36
#define REFCLK_PRESCALE
Definition: SI4844.h:50
#define RX_ACTUAL_VOLUME
Definition: SI4844.h:38
#define ATDD_GET_STATUS
Definition: SI4844.h:31
#define ATDD_POWER_DOWN
Definition: SI4844.h:25
si4844_firmware_info refined
Definition: SI4844.h:193
uint8_t raw[9]
Definition: SI4844.h:194
#define FM_SOFT_MUTE_MAX_ATTENUATION
Definition: SI4844.h:40
#define SET_PROPERTY
Definition: SI4844.h:33
#define GET_REV
Definition: SI4844.h:28
#define ATDD_POWER_UP
Definition: SI4844.h:26
#define FM_DEEMPHASIS
Definition: SI4844.h:42
#define AM_SOFT_MUTE_SNR_THRESHOLD
Definition: SI4844.h:54
#define AM_SOFT_MUTE_RATE
Definition: SI4844.h:52
uint16_t dummy
Definition: SI4844.h:155
#define SI4844_ADDRESS
SI4844 ARDUINO LIBRARY
Definition: SI4844.h:20
#define GET_PROPERTY
Definition: SI4844.h:34
#define REFCLK_FREQ
Definition: SI4844.h:49
#define RX_VOLUME
Definition: SI4844.h:35
#define RX_BASS_TREBLE
Definition: SI4844.h:37
uint16_t CHFREQ
Definition: SI4844.h:156
#define ATDD_AUDIO_MODE
Definition: SI4844.h:27
SI4844 Class.
Definition: SI4844.h:276
uint16_t getFirmwareComponentMajorRevision()
Definition: SI4844.h:488
uint16_t getStatusHostPowerUp()
Definition: SI4844.h:460
uint16_t getFirmwareCTS()
Definition: SI4844.h:484
uint16_t getStatusCTS()
Definition: SI4844.h:479
uint16_t getFirmwareChipRevision()
Definition: SI4844.h:490
uint16_t getFirmwareErr()
Definition: SI4844.h:483
uint16_t getFirmwareMinorRevision()
Definition: SI4844.h:487
uint16_t getStatusHostReset()
Definition: SI4844.h:461
uint16_t getFirmwareComponentMinorRevision()
Definition: SI4844.h:489
uint16_t getFirmwareMajorRevision()
Definition: SI4844.h:486
uint16_t getFirmwarePartNumber()
Definition: SI4844.h:485
void setResetPin(uint16_t resetPin)
Definition: SI4844.cpp:182
void setDefaultBandIndx(uint8_t bandidx)
Definition: SI4844.cpp:278
void setInterruptPin(int interruptPin)
Definition: SI4844.cpp:189
uint16_t getFirmwareReserved()
Definition: SI4844.h:482
void setStatusInterruptFromDevice(bool value)
Set the Data Status From Device.
Definition: SI4844.h:313
bool getDataStatusInterruptFromDevice()
Get the Data Status From Device.
Definition: SI4844.h:321
void sendCommand(uint8_t cmd, int parameter_size, const uint8_t *parameter)
Sends a given command to the SI4844 device.
Definition: SI4844.cpp:96
void setProperty(uint16_t propertyNumber, uint16_t parameter)
Sends (sets) property to the SI48XX.
Definition: SI4844.cpp:25
void getCommandResponse(int response_size, uint8_t *response)
Returns with the command response.
Definition: SI4844.cpp:118
uint16_t getProperty(uint16_t propertyNumber)
Gets a given property from the SI4844.
Definition: SI4844.cpp:54
uint8_t raw
Definition: SI4844.h:211
uint8_t BCFG1
Definition: SI4844.h:139
uint8_t raw
Definition: SI4844.h:127
uint8_t CHIPREV
Definition: SI4844.h:185
uint8_t CMPMINOR
Definition: SI4844.h:184
uint8_t HOSTPWRUP
Definition: SI4844.h:143
uint8_t FWMAJOR
Definition: SI4844.h:181
uint8_t STEREO
Definition: SI4844.h:140
uint8_t PN
Definition: SI4844.h:180
uint8_t CMPMAJOR
Definition: SI4844.h:183
uint8_t raw[4]
Definition: SI4844.h:167
uint8_t d1
Definition: SI4844.h:149
uint8_t raw[7]
Definition: SI4844.h:108
uint8_t ERR
Definition: SI4844.h:178
uint8_t RESERVED
Definition: SI4844.h:177
uint8_t d3
Definition: SI4844.h:151
uint8_t HOSTRST
Definition: SI4844.h:144
uint8_t BANDMODE
Definition: SI4844.h:147
uint8_t d4
Definition: SI4844.h:150
si4844_get_status refined
Definition: SI4844.h:165
uint8_t raw
Definition: SI4844.h:228
uint8_t raw
Definition: SI4844.h:83
uint8_t STATION
Definition: SI4844.h:141
uint8_t BANDIDX
Definition: SI4844.h:146
uint8_t CTS
Definition: SI4844.h:179
uint8_t FWMINOR
Definition: SI4844.h:182
si4844_get_channel_frequency rawStatus
Definition: SI4844.h:166
uint8_t d2
Definition: SI4844.h:148
uint8_t INFORDY
Definition: SI4844.h:142
uint8_t CTS
Definition: SI4844.h:145
uint8_t BCFG0
Definition: SI4844.h:138
void setAmSoftMuteMaxAttenuation(uint8_t value)
Sets AM Soft Mute Max Attenuation..
Definition: SI4844.cpp:855
float getFrequency(void)
Get the current frequency of the radio in KHz.
Definition: SI4844.cpp:671
uint32_t getFrequencyInteger(void)
Get the current frequency of the radio in KHz in uint32_t (long integer) .
Definition: SI4844.cpp:717
uint16_t getStatusBCFG0()
Gets Band CFG0 (Band Detection Configuration).
Definition: SI4844.h:411
void setFmDeemphasis(uint8_t value)
Sets de-emphasis time constant.
Definition: SI4844.cpp:878
void changeVolume(char)
Up or down the sound volume level.
Definition: SI4844.cpp:404
si4844_firmware_response * getFirmware(void)
Get part number, chip revision, firmware, patch, and component revision numbers.
Definition: SI4844.cpp:643
void setFmSoftMuteRate(uint8_t value)
Sets the attack and decay rates when entering and leaving soft mute.
Definition: SI4844.cpp:891
void setAmSoftMuteSnrThreshold(uint8_t value)
Sets the SNR threshold to engage soft mute.
Definition: SI4844.cpp:962
uint16_t getStatusBandMode()
Gets the current Band Mode.
Definition: SI4844.h:468
void setFmSoftMuteSlope(uint8_t value)
Configures attenuation slope during soft mute in dB attenuation per dB SNR below the soft mute SNR th...
Definition: SI4844.cpp:906
void resetStatus(void)
set the interrupr status to false. It will turn true after next interrupr
Definition: SI4844.cpp:774
uint16_t getStatusBandIndex()
Gets the current Band Index Detected.
Definition: SI4844.h:475
si4844_status_response * getStatus(void)
Get tune freq, band, and others information, status of the device.
Definition: SI4844.cpp:610
uint8_t getVolume()
Gets the current audio volume level.
Definition: SI4844.h:388
uint16_t getStatusStationIndicator()
Gets Station Indicator.
Definition: SI4844.h:434
void bassTrebleUp()
More treble, less bass.
Definition: SI4844.cpp:514
void setBand(byte)
Sets a new band to the device.
Definition: SI4844.cpp:331
void setBassTreble(uint8_t bass_treble)
Set the sound volume level, bass and treble.
Definition: SI4844.cpp:495
void setReferenceClockFrequency(uint16_t value)
Sets the frequency of the REFCLK from the output of the prescaler.
Definition: SI4844.cpp:976
uint8_t getVolumeProperty()
Gets the current volume value stored in SI4844 device.
Definition: SI4844.cpp:471
void setBlendThresholdStereoIndicator(uint16_t value)
Sets the blend threshold for stereo indicator.
Definition: SI4844.cpp:919
void setCustomBand(uint8_t bandIndex, uint16_t botton, uint16_t top, uint8_t bandSpace, uint8_t dfband=0, uint8_t uni_am=0, uint8_t tvreq=0)
This method allows you to customize the frequency range of a band.
Definition: SI4844.cpp:798
void setVolume(byte)
Sets the volume level.
Definition: SI4844.cpp:454
void reset(void)
Resets the SI4844 device.
Definition: SI4844.cpp:246
void setAmSoftMuteSlope(uint8_t value)
Configures attenuation slope during soft mute in dB attenuation per dB SNR below the soft mute SNR th...
Definition: SI4844.cpp:949
uint16_t getStatusStereo()
Gets Stereo indicator.
Definition: SI4844.h:426
char * getStereoIndicator()
Get the Stereo Indicator.
Definition: SI4844.h:403
char * getBandMode()
Get the Band Mode.
Definition: SI4844.h:396
void setup(uint16_t resetPin, int interruptPin, byte defaultBand)
Initiates the SI4844 instance and connect the device (SI4844) to Arduino.
Definition: SI4844.cpp:152
uint16_t getRawChannelFrequency()
Gets the Channel Frequency.
Definition: SI4844.h:458
void powerUp(void)
Power the device up.
Definition: SI4844.cpp:288
void volumeUp(void)
Increases the volume level.
Definition: SI4844.cpp:429
void setCrystalOscillatorStabilizationWaitTime(uint8_t XOWAIT)
Sets Crystal Oscillator Stabilization Wait Time After Reset.
Definition: SI4844.cpp:317
void volumeDown(void)
Decreases the volume level.
Definition: SI4844.cpp:440
void setCrystalOscillatorEnable(uint8_t XOSCEN)
Sets Crystal Oscillator Enable.
Definition: SI4844.cpp:303
uint16_t getStatusInformationReady()
Gets Information Ready.
Definition: SI4844.h:445
uint16_t getStatusBCFG1()
Gets Band CFG1 (Band Properties Priority)
Definition: SI4844.h:418
void debugDevice(uint16_t resetPin, uint16_t interruptPin, uint8_t defaultBand, void(*showFunc)(char *msg))
Used to debug
Definition: SI4844.cpp:203
void audioMute(uint8_t value)
Mutes the audio output.
Definition: SI4844.cpp:583
void bassTrebleDown()
Less treble, more bass.
Definition: SI4844.cpp:503
void setFmSoftMuteMaxAttenuation(uint8_t value)
FM Soft Mute Maximum Attenuation.
Definition: SI4844.cpp:866
si4844_audiomode_status_response setAudioMode(uint8_t audiomode, uint8_t fm_mono, uint8_t adjpt_attn, uint8_t adjpt_steo, uint8_t opcode)
Set audio mode.
Definition: SI4844.cpp:546
void setReferenceClockPrescaler(uint16_t value)
Sets the number used by the prescaler to divide the external reference clock frequency down to the in...
Definition: SI4844.cpp:991
bool hasStatusChanged(void)
Checks whether the SI4844 has its status changed.
Definition: SI4844.cpp:765
void setAudioMute(bool on)
Mutes the audio output.
Definition: SI4844.cpp:594
void setAmSoftMuteRate(uint8_t value)
Sets the attack and decay rates when entering or leaving soft mute.
Definition: SI4844.cpp:935
void powerDown(void)
Power the device down.
Definition: SI4844.cpp:267
void convertToChar(uint32_t value, char *strValue, uint8_t len, uint8_t dot, uint8_t separator, bool remove_leading_zeros=true)
Converts a number to a char array.
Definition: SI4844.cpp:1058
bool detectDevice()
Checks communication with SI4844 via I2C.
Definition: SI4844.cpp:1005
uint8_t scanI2CBus(uint8_t *device, uint8_t limit)
Scans the I2C bus and returns the addresses of the devices found.
Definition: SI4844.cpp:1021
char * getFormattedFrequency(uint8_t removeRightDigit=0)
Gets Formatted Frequency.
Definition: SI4844.cpp:1096