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
250
255
256
257
258
278
279
280
281
285
286
287
291
292
293
294
313
314
315
316
317
318
319
323
324
325
326
327
331 void setProperty(uint16_t propertyNumber, uint16_t parameter);
333 void sendCommand(uint8_t cmd,
int parameter_size,
const uint8_t *parameter);
336 void setup(uint16_t resetPin,
int interruptPin, int8_t defaultBand = 0, uint32_t hightClockSpeed = 50000);
337 void debugDevice(uint16_t resetPin, uint16_t interruptPin, uint8_t defaultBand,
void (*showFunc)(
char *msg));
371 si4844_audiomode_status_response
372 setAudioMode(uint8_t audiomode, uint8_t fm_mono, uint8_t adjpt_attn, uint8_t adjpt_steo, uint8_t opcode);
377 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 );
390
391
392
393
394
399
400
401
402
403 inline char *
getBandMode(){
return (
char *) bandmode_table[status_response.refined.BANDMODE]; };
406
407
408
409
410 inline char *
getStereoIndicator(){
return (
char *) stereo_indicator_table[status_response.refined.STATION]; };
413
414
415
416
417
421
422
423
424
428
429
430
431
432
437
438
439
440
444
445
446
447
448
449
450
451
455
456
457
458
459
460
461
462
463
464
471
472
473
474
478
479
480
481
504 void convertToChar(uint32_t value,
char *strValue, uint8_t len, uint8_t dot, uint8_t separator,
bool remove_leading_zeros =
true);
void interrupt_hundler()
Library handle interrupt.
Definition: SI4844.cpp:27
#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
static volatile bool data_from_device
Interrupt status.
Definition: SI4844.h:251
#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:261
const char * stereo_indicator_table[2]
Definition: SI4844.h:305
uint8_t currentBand
Definition: SI4844.h:269
uint16_t getFirmwareComponentMajorRevision()
Definition: SI4844.h:495
uint8_t volume
Definition: SI4844.h:308
uint16_t getStatusHostPowerUp()
Definition: SI4844.h:467
uint16_t getFirmwareCTS()
Definition: SI4844.h:491
uint16_t getStatusCTS()
Definition: SI4844.h:486
uint16_t resetPin
Definition: SI4844.h:267
uint16_t getFirmwareChipRevision()
Definition: SI4844.h:497
uint16_t getFirmwareErr()
Definition: SI4844.h:490
const char * bandmode_table[3]
Definition: SI4844.h:304
uint16_t getFirmwareMinorRevision()
Definition: SI4844.h:494
uint32_t clockSpeed
Definition: SI4844.h:273
si4844_firmware_response firmware_response
Definition: SI4844.h:266
uint8_t xowait
Definition: SI4844.h:272
uint16_t getStatusHostReset()
Definition: SI4844.h:468
uint16_t getFirmwareComponentMinorRevision()
Definition: SI4844.h:496
uint8_t xoscen
Definition: SI4844.h:271
uint16_t getFirmwareMajorRevision()
Definition: SI4844.h:493
uint16_t getFirmwarePartNumber()
Definition: SI4844.h:492
char strFormattedCurrentFrequenct[8]
Definition: SI4844.h:306
uint16_t interruptPin
Definition: SI4844.h:268
void setDefaultBandIndx(uint8_t bandidx)
Definition: SI4844.cpp:311
si4844_status_response status_response
Definition: SI4844.h:265
uint8_t bassTreble
Definition: SI4844.h:309
uint16_t getFirmwareReserved()
Definition: SI4844.h:489
void setClockSpeed(uint16_t clock)
Sets hight clock speed to be used on I2C bus.
Definition: SI4844.h:282
void setStatusInterruptFromDevice(bool value)
Set the Data Status From Device.
Definition: SI4844.h:320
bool getDataStatusInterruptFromDevice()
Get the Data Status From Device.
Definition: SI4844.h:328
void waitInterrupt(void)
Waiting for an external interrupt.
Definition: SI4844.cpp:151
void setClockLow(void)
Sets I2C bus speed to 10kHz.
Definition: SI4844.h:288
bool isClearToSend(void)
Checks the CTS status.
Definition: SI4844.cpp:407
void waitToSend(void)
Wait for the ATDD become Clear to Send.
Definition: SI4844.cpp:423
void sendCommand(uint8_t cmd, int parameter_size, const uint8_t *parameter)
Sends a given command to the SI4844 device.
Definition: SI4844.cpp:114
void setResetPin(uint16_t resetPin)
Sets the MCU RESET pin.
Definition: SI4844.cpp:210
void setProperty(uint16_t propertyNumber, uint16_t parameter)
Sends (sets) property to the SI48XX.
Definition: SI4844.cpp:43
void getCommandResponse(int response_size, uint8_t *response)
Returns with the command response.
Definition: SI4844.cpp:136
void setInterruptPin(int interruptPin)
Sets the MCU Interrupt pin.
Definition: SI4844.cpp:222
void setClockHigh()
Sets I2C bus speed to hight previous defined speed.
Definition: SI4844.h:295
uint16_t getProperty(uint16_t propertyNumber)
Gets a given property from the SI4844.
Definition: SI4844.cpp:72
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:887
float getFrequency(void)
Get the current frequency of the radio in KHz.
Definition: SI4844.cpp:704
uint32_t getFrequencyInteger(void)
Get the current frequency of the radio in KHz in uint32_t (long integer) .
Definition: SI4844.cpp:750
uint16_t getStatusBCFG0()
Gets Band CFG0 (Band Detection Configuration).
Definition: SI4844.h:418
void setup(uint16_t resetPin, int interruptPin, int8_t defaultBand=0, uint32_t hightClockSpeed=50000)
Initiates the SI4844 instance and connect the device (SI4844) to Arduino.
Definition: SI4844.cpp:171
void setFmDeemphasis(uint8_t value)
Sets de-emphasis time constant.
Definition: SI4844.cpp:910
void changeVolume(char)
Up or down the sound volume level.
Definition: SI4844.cpp:437
si4844_firmware_response * getFirmware(void)
Get part number, chip revision, firmware, patch, and component revision numbers.
Definition: SI4844.cpp:676
void setFmSoftMuteRate(uint8_t value)
Sets the attack and decay rates when entering and leaving soft mute.
Definition: SI4844.cpp:923
void setAmSoftMuteSnrThreshold(uint8_t value)
Sets the SNR threshold to engage soft mute.
Definition: SI4844.cpp:994
uint16_t getStatusBandMode()
Gets the current Band Mode.
Definition: SI4844.h:475
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:938
void resetStatus(void)
set the interrupr status to false. It will turn true after next interrupr
Definition: SI4844.cpp:807
uint16_t getStatusBandIndex()
Gets the current Band Index Detected.
Definition: SI4844.h:482
si4844_status_response * getStatus(void)
Get tune freq, band, and others information, status of the device.
Definition: SI4844.cpp:643
uint8_t getVolume()
Gets the current audio volume level.
Definition: SI4844.h:395
uint16_t getStatusStationIndicator()
Gets Station Indicator.
Definition: SI4844.h:441
void bassTrebleUp()
More treble, less bass.
Definition: SI4844.cpp:547
void setBand(byte)
Sets a new band to the device.
Definition: SI4844.cpp:364
void setBassTreble(uint8_t bass_treble)
Set the sound volume level, bass and treble.
Definition: SI4844.cpp:528
void setReferenceClockFrequency(uint16_t value)
Sets the frequency of the REFCLK from the output of the prescaler.
Definition: SI4844.cpp:1008
uint8_t getVolumeProperty()
Gets the current volume value stored in SI4844 device.
Definition: SI4844.cpp:504
void setBlendThresholdStereoIndicator(uint16_t value)
Sets the blend threshold for stereo indicator.
Definition: SI4844.cpp:951
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:831
void setVolume(byte)
Sets the volume level.
Definition: SI4844.cpp:487
void reset(void)
Resets the SI4844 device.
Definition: SI4844.cpp:279
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:981
uint16_t getStatusStereo()
Gets Stereo indicator.
Definition: SI4844.h:433
char * getStereoIndicator()
Get the Stereo Indicator.
Definition: SI4844.h:410
char * getBandMode()
Get the Band Mode.
Definition: SI4844.h:403
uint16_t getRawChannelFrequency()
Gets the Channel Frequency.
Definition: SI4844.h:465
void powerUp(void)
Power the device up.
Definition: SI4844.cpp:321
void volumeUp(void)
Increases the volume level.
Definition: SI4844.cpp:462
void setCrystalOscillatorStabilizationWaitTime(uint8_t XOWAIT)
Sets Crystal Oscillator Stabilization Wait Time After Reset.
Definition: SI4844.cpp:350
void volumeDown(void)
Decreases the volume level.
Definition: SI4844.cpp:473
void setCrystalOscillatorEnable(uint8_t XOSCEN)
Sets Crystal Oscillator Enable.
Definition: SI4844.cpp:336
uint16_t getStatusInformationReady()
Gets Information Ready.
Definition: SI4844.h:452
uint16_t getStatusBCFG1()
Gets Band CFG1 (Band Properties Priority)
Definition: SI4844.h:425
void debugDevice(uint16_t resetPin, uint16_t interruptPin, uint8_t defaultBand, void(*showFunc)(char *msg))
Used to debug
Definition: SI4844.cpp:236
void audioMute(uint8_t value)
Mutes the audio output.
Definition: SI4844.cpp:616
void bassTrebleDown()
Less treble, more bass.
Definition: SI4844.cpp:536
void setFmSoftMuteMaxAttenuation(uint8_t value)
FM Soft Mute Maximum Attenuation.
Definition: SI4844.cpp:898
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:579
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:1023
bool hasStatusChanged(void)
Checks whether the SI4844 has its status changed.
Definition: SI4844.cpp:798
void setAudioMute(bool on)
Mutes the audio output.
Definition: SI4844.cpp:627
void setAmSoftMuteRate(uint8_t value)
Sets the attack and decay rates when entering or leaving soft mute.
Definition: SI4844.cpp:967
void powerDown(void)
Power the device down.
Definition: SI4844.cpp:300
char * getFormattedFrequency(uint8_t removeRightDigit=0, uint8_t thousandsSeparator=',')
Gets Formatted Frequency.
Definition: SI4844.cpp:1128
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:1090
bool detectDevice()
Checks communication with SI4844 via I2C.
Definition: SI4844.cpp:1037
uint8_t scanI2CBus(uint8_t *device, uint8_t limit)
Scans the I2C bus and returns the addresses of the devices found.
Definition: SI4844.cpp:1053