2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
28#define SI4844_ADDRESS 0x11
33#define ATDD_POWER_DOWN 0x11
34#define ATDD_POWER_UP 0xE1
35#define ATDD_AUDIO_MODE 0xE2
37#define ATDD_XOSCEN 0x80
38#define ATDD_XOWAIT 0x40
39#define ATDD_GET_STATUS 0xE0
41#define SET_PROPERTY 0x12
42#define GET_PROPERTY 0x13
43#define RX_VOLUME 0x4000
44#define RX_HARD_MUTE 0x4001
45#define RX_BASS_TREBLE 0x4002
46#define RX_ACTUAL_VOLUME 0x4003
48#define FM_SOFT_MUTE_MAX_ATTENUATION 0x1302
49#define AM_SOFT_MUTE_MAX_ATTENUATION 0x3302
50#define FM_DEEMPHASIS 0x1100
51#define FM_SOFT_MUTE_RATE 0x1300
52#define FM_SOFT_MUTE_SLOPE 0x1301
53#define FM_STEREO_IND_BLEND_THRESHOLD 0x1207
54#define FM_BLEND_RSSI_STEREO_THRESHOLD 0x1800
55#define FM_BLEND_RSSI_MONO_THRESHOLD 0x1801
57#define REFCLK_FREQ 0x0201
58#define REFCLK_PRESCALE 0x0202
60#define AM_SOFT_MUTE_RATE 0x3300
61#define AM_SOFT_MUTE_SLOPE 0x3301
62#define AM_SOFT_MUTE_SNR_THRESHOLD 0x3303
65#define DEVICE_LAST_VALID_INDEX_BAND 40
68
69
70
71
72
73
74
75
79
80
81
82
83
92} si4844_arg_band_index;
95
96
97
98
99
106 uint8_t BANDBOT_HIGH;
108 uint8_t BANDTOP_HIGH;
120
121
122
123
139
140
141
142
143
151 uint8_t HOSTPWRUP : 1;
156} si4844_device_status;
159
160
161
162
163
185} si4844_get_channel_frequency;
188
189
190
191
196} si4844_status_response;
199
200
201
202
214} si4844_firmware_info;
217
218
219
223} si4844_firmware_response;
226
227
228
232 uint8_t AUDIOMODE : 2;
234 uint8_t ADJPT_ATTN : 1;
235 uint8_t ADJPT_STEO : 1;
236 uint8_t Reserved : 2;
243
244
245
250 uint8_t ADJPT_ATTN:1;
251 uint8_t ADJPT_STEO:1;
257} si4844_audiomode_status_response;
260
261
262
263
274
275
276
277
278
279volatile static bool data_from_device;
283
284
285
286
293 si4844_device_status device_status;
294 si4844_status_response all_receiver_status;
295 si4844_firmware_response firmware_response;
297 uint16_t interruptPin;
298 uint8_t currentBand = 0;
302 uint32_t clockSpeed = 50000;
305 uint8_t system_error = 0;
311
312
313
314
315 inline void setClockSpeed(uint16_t clock) {
this->clockSpeed = clock; };
318
319
320
321 inline void setClockLow(
void) { Wire.setClock(10000); };
324
325
326
327
328 inline void setClockHigh() { Wire.setClock(
this->clockSpeed); };
331 inline void waitInterrupt(
void);
332 inline bool isClearToSend(
void);
333 inline void waitToSend(
void);
334 void waitDetectFrequency();
337 void setPredefinedBand(uint8_t bandIndex);
338 void setUserDefinedBand(int8_t bandIndex, uint32_t bottomFrequency, uint32_t topFrequency, uint8_t space );
342 const char *bandmode_table[3] = {
"FM",
"AM",
"SW"};
343 const char *stereo_indicator_table[2] = {
"ST",
"MO"};
344 char strFormattedCurrentFrequenct[8];
347 uint8_t bassTreble = 4;
351
352
353
354
355
356
357
361
362
363
364
365
369 void setProperty(uint16_t propertyNumber, uint16_t parameter);
371 void sendCommand(uint8_t cmd,
int parameter_size,
const uint8_t *parameter);
374 void setupSlideSwitch(uint16_t resetPin,
int interruptPin, uint32_t hightClockSpeed = 50000);
375 void setup(uint16_t resetPin,
int interruptPin, int8_t defaultBand = 0, uint32_t hightClockSpeed = 50000);
376 void debugDevice(uint16_t resetPin, uint16_t interruptPin, uint8_t defaultBand,
void (*showFunc)(
char *msg));
378 void setBand(uint8_t newBand = 0);
381 void addCustomBand(int8_t bandIdx, uint32_t bottomFrequency, uint32_t topFrequency, uint8_t space );
416 si4844_audiomode_status_response
417 setAudioMode(uint8_t audiomode, uint8_t fm_mono, uint8_t adjpt_attn, uint8_t adjpt_steo, uint8_t opcode);
428 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 );
442
443
444
445
446
450
451
452
453
454
459
460
461
462
463
464 inline char *
getBandMode(){
return (
char *) bandmode_table[all_receiver_status.refined.BANDMODE]; };
467
468
469
470
471
472
473 inline char *
getStereoIndicator(){
return (
char *) stereo_indicator_table[device_status.refined.STEREO]; };
476
477
478
479
480
481
485
486
487
488
489
493
494
495
496
497
498
499
504
505
506
507
508
512
513
514
515
516
517
518
519
520
524
525
526
527
528
529
533
534
535
536
537
538
543
544
545
546
547
548
549
550
551
552
557
558
559
560
561
565
566
567
568
591 void convertToChar(uint32_t value,
char *strValue, uint8_t len, uint8_t dot, uint8_t separator,
bool remove_leading_zeros =
true);
Definition: BandList.h:20
void interrupt_hundler()
Library handle interrupt.
Definition: SI4844.cpp:39
#define FM_SOFT_MUTE_RATE
Definition: SI4844.h:51
#define AM_SOFT_MUTE_SLOPE
Definition: SI4844.h:61
uint16_t value
Definition: SI4844.h:270
#define DEVICE_LAST_VALID_INDEX_BAND
Definition: SI4844.h:65
#define AM_SOFT_MUTE_MAX_ATTENUATION
Definition: SI4844.h:49
#define FM_STEREO_IND_BLEND_THRESHOLD
Definition: SI4844.h:53
#define RX_HARD_MUTE
Definition: SI4844.h:44
#define REFCLK_PRESCALE
Definition: SI4844.h:58
#define RX_ACTUAL_VOLUME
Definition: SI4844.h:46
#define ATDD_GET_STATUS
Definition: SI4844.h:39
#define ATDD_POWER_DOWN
Definition: SI4844.h:33
si4844_firmware_info refined
Definition: SI4844.h:221
uint8_t raw[9]
Definition: SI4844.h:222
#define FM_SOFT_MUTE_MAX_ATTENUATION
Definition: SI4844.h:48
#define SET_PROPERTY
Definition: SI4844.h:41
#define GET_REV
Definition: SI4844.h:36
#define ATDD_POWER_UP
Definition: SI4844.h:34
#define FM_DEEMPHASIS
Definition: SI4844.h:50
#define AM_SOFT_MUTE_SNR_THRESHOLD
Definition: SI4844.h:62
#define AM_SOFT_MUTE_RATE
Definition: SI4844.h:60
uint16_t dummy
Definition: SI4844.h:183
#define SI4844_ADDRESS
SI4844 ARDUINO LIBRARY
Definition: SI4844.h:28
#define GET_PROPERTY
Definition: SI4844.h:42
#define REFCLK_FREQ
Definition: SI4844.h:57
#define RX_VOLUME
Definition: SI4844.h:43
#define RX_BASS_TREBLE
Definition: SI4844.h:45
uint16_t CHFREQ
Definition: SI4844.h:184
#define ATDD_AUDIO_MODE
Definition: SI4844.h:35
Definition: BandList.h:28
SI4844 Class.
Definition: SI4844.h:289
uint16_t getFirmwareComponentMajorRevision()
Definition: SI4844.h:582
uint16_t getFirmwareCTS()
Definition: SI4844.h:578
uint16_t getStatusCTS()
Definition: SI4844.h:573
uint16_t getFirmwareChipRevision()
Definition: SI4844.h:584
uint16_t getFirmwareErr()
Definition: SI4844.h:577
uint16_t getFirmwareMinorRevision()
Definition: SI4844.h:581
uint16_t getFirmwareComponentMinorRevision()
Definition: SI4844.h:583
uint16_t getFirmwareMajorRevision()
Definition: SI4844.h:580
uint16_t getFirmwarePartNumber()
Definition: SI4844.h:579
void setDefaultBandIndx(uint8_t bandidx)
Definition: SI4844.cpp:395
uint8_t getBassTreble()
Definition: SI4844.h:392
uint16_t getFirmwareReserved()
Definition: SI4844.h:576
void setStatusInterruptFromDevice(bool value)
Set the Data Status From Device.
Definition: SI4844.h:358
bool getDataStatusInterruptFromDevice()
Get the Data Status From Device.
Definition: SI4844.h:366
void sendCommand(uint8_t cmd, int parameter_size, const uint8_t *parameter)
Sends a given command to the SI4844 device.
Definition: SI4844.cpp:126
void setResetPin(uint16_t resetPin)
Sets the MCU RESET pin.
Definition: SI4844.cpp:294
void setProperty(uint16_t propertyNumber, uint16_t parameter)
Sends (sets) property to the SI48XX.
Definition: SI4844.cpp:55
void getCommandResponse(int response_size, uint8_t *response)
Returns with the command response.
Definition: SI4844.cpp:148
void setInterruptPin(int interruptPin)
Sets the MCU Interrupt pin.
Definition: SI4844.cpp:306
uint16_t getProperty(uint16_t propertyNumber)
Gets a given property from the SI4844.
Definition: SI4844.cpp:84
uint8_t raw
Definition: SI4844.h:155
uint8_t raw
Definition: SI4844.h:239
uint8_t BCFG1
Definition: SI4844.h:167
uint8_t raw
Definition: SI4844.h:135
uint8_t CHIPREV
Definition: SI4844.h:213
uint8_t CMPMINOR
Definition: SI4844.h:212
uint8_t HOSTPWRUP
Definition: SI4844.h:171
uint8_t FWMAJOR
Definition: SI4844.h:209
uint8_t STEREO
Definition: SI4844.h:168
uint8_t PN
Definition: SI4844.h:208
uint8_t CMPMAJOR
Definition: SI4844.h:211
uint8_t raw[4]
Definition: SI4844.h:195
uint8_t d1
Definition: SI4844.h:177
uint8_t raw[7]
Definition: SI4844.h:116
uint8_t ERR
Definition: SI4844.h:206
uint8_t RESERVED
Definition: SI4844.h:205
uint8_t d3
Definition: SI4844.h:179
uint8_t HOSTRST
Definition: SI4844.h:172
uint8_t BANDMODE
Definition: SI4844.h:175
uint8_t d4
Definition: SI4844.h:178
si4844_get_status refined
Definition: SI4844.h:193
uint8_t raw
Definition: SI4844.h:256
uint8_t raw
Definition: SI4844.h:91
uint8_t STATION
Definition: SI4844.h:169
uint8_t BANDIDX
Definition: SI4844.h:174
uint8_t CTS
Definition: SI4844.h:207
uint8_t FWMINOR
Definition: SI4844.h:210
si4844_get_channel_frequency rawStatus
Definition: SI4844.h:194
uint8_t d2
Definition: SI4844.h:176
uint8_t INFORDY
Definition: SI4844.h:170
uint8_t CTS
Definition: SI4844.h:173
uint8_t BCFG0
Definition: SI4844.h:166
void setAmSoftMuteMaxAttenuation(uint8_t value)
Sets AM Soft Mute Max Attenuation..
Definition: SI4844.cpp:1227
float getFrequency(void)
Get the current frequency of the radio in KHz.
Definition: SI4844.cpp:1098
uint32_t getFrequencyInteger(void)
Get the current frequency of the radio in KHz in uint32_t (long integer) .
Definition: SI4844.cpp:1144
uint16_t getStatusBCFG0()
Gets Band CFG0 (Band Detection Configuration).
Definition: SI4844.h:482
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:255
void setBandSlideSwitch()
Sets a new band to the device configured as Slide Switch.
Definition: SI4844.cpp:625
void setFmDeemphasis(uint8_t value)
Sets de-emphasis time constant.
Definition: SI4844.cpp:1250
void changeVolume(char)
Up or down the sound volume level.
Definition: SI4844.cpp:772
bool hasBandChanged(void)
Checks whether the current band detected by the device changed.
Definition: SI4844.cpp:1204
si4844_firmware_response * getFirmware(void)
Get part number, chip revision, firmware, patch, and component revision numbers.
Definition: SI4844.cpp:1070
void setFmSoftMuteRate(uint8_t value)
Sets the attack and decay rates when entering and leaving soft mute.
Definition: SI4844.cpp:1263
void setAmSoftMuteSnrThreshold(uint8_t value)
Sets the SNR threshold to engage soft mute.
Definition: SI4844.cpp:1334
uint16_t getStatusBandMode()
Gets the current Band Mode.
Definition: SI4844.h:562
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:1278
void resetStatus(void)
set the interrupr status to false. It will turn true after next interrupr
Definition: SI4844.cpp:1213
bool needHostPowerUp()
Checks Host Power Up Status.
Definition: SI4844.h:530
uint16_t getStatusBandIndex()
Gets the current Band Index Detected.
Definition: SI4844.h:569
uint8_t getVolume()
Gets the current audio volume level.
Definition: SI4844.h:455
uint16_t getStatusStationIndicator()
Gets Station Indicator.
Definition: SI4844.h:509
void bassTrebleUp()
More treble, less bass.
Definition: SI4844.cpp:883
si4844_device_status * getStatus()
Gets current status of the device.
Definition: SI4844.cpp:980
void setBassTreble(uint8_t bass_treble)
Set the sound volume level, bass and treble.
Definition: SI4844.cpp:863
void setReferenceClockFrequency(uint16_t value)
Sets the frequency of the REFCLK from the output of the prescaler.
Definition: SI4844.cpp:1348
uint8_t getVolumeProperty()
Gets the current volume value stored in SI4844 device.
Definition: SI4844.cpp:839
bool needHostReset()
Checks HOST Reset Status
Definition: SI4844.h:539
void setBlendThresholdStereoIndicator(uint16_t value)
Sets the blend threshold for stereo indicator.
Definition: SI4844.cpp:1291
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:672
void addCustomBand(int8_t bandIdx, uint32_t bottomFrequency, uint32_t topFrequency, uint8_t space)
Add a custom band in the list of custom bands.
Definition: SI4844.cpp:471
void setVolume(byte)
Sets the volume level.
Definition: SI4844.cpp:822
void reset(void)
Resets the SI4844 device.
Definition: SI4844.cpp:363
bool isHostDetectionBandConfig()
Band CFG0 (Band Detection Configuration)
Definition: SI4844.cpp:1030
int8_t getValidBandIndex()
Retrieves the current valid BAND INDEX.
Definition: SI4844.cpp:1044
BandNode * findCustomBand(int8_t bandIdx)
Find a custom band in the list of custom bands.
Definition: SI4844.cpp:497
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:1321
uint16_t getStatusStereo()
Gets Stereo indicator.
Definition: SI4844.h:500
si4844_status_response * getAllReceiverInfo(void)
Gets all current information of the receiver (tune freq, band, and others information,...
Definition: SI4844.cpp:999
char * getStereoIndicator()
Get the Stereo Indicator.
Definition: SI4844.h:473
char * getBandMode()
Get the Band Mode.
Definition: SI4844.h:464
uint8_t getCurrentBand()
Gets the latest band set by the microcontroller.
Definition: SI4844.h:447
uint16_t getRawChannelFrequency()
Gets the Channel Frequency.
Definition: SI4844.h:553
void powerUp(void)
Power the device up.
Definition: SI4844.cpp:406
void volumeUp(void)
Increases the volume level.
Definition: SI4844.cpp:797
void setCrystalOscillatorStabilizationWaitTime(uint8_t XOWAIT)
Sets Crystal Oscillator Stabilization Wait Time After Reset.
Definition: SI4844.cpp:454
void volumeDown(void)
Decreases the volume level.
Definition: SI4844.cpp:808
void setCrystalOscillatorEnable(uint8_t XOSCEN)
Sets Crystal Oscillator Enable.
Definition: SI4844.cpp:440
uint16_t getStatusInformationReady()
Gets Information Ready.
Definition: SI4844.h:521
uint16_t getStatusBCFG1()
Gets Band CFG1 (Band Properties Priority)
Definition: SI4844.h:490
void debugDevice(uint16_t resetPin, uint16_t interruptPin, uint8_t defaultBand, void(*showFunc)(char *msg))
Used to debug
Definition: SI4844.cpp:320
void audioMute(uint8_t value)
Mutes the audio output.
Definition: SI4844.cpp:952
void bassTrebleDown()
Less treble, more bass.
Definition: SI4844.cpp:872
void setFmSoftMuteMaxAttenuation(uint8_t value)
FM Soft Mute Maximum Attenuation.
Definition: SI4844.cpp:1238
void setBand(uint8_t newBand=0)
Sets a new band to the device.
Definition: SI4844.cpp:593
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:915
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:1363
bool hasStatusChanged(void)
Checks whether the SI4844 has its status changed.
Definition: SI4844.cpp:1192
void removeCustomBand(int8_t bandIdx)
Remove a custom band in the list of custom bands.
Definition: SI4844.cpp:483
void setupSlideSwitch(uint16_t resetPin, int interruptPin, uint32_t hightClockSpeed=50000)
Initiates the SI48XX instance and connect the device (SI4844) to a microcontroller.
Definition: SI4844.cpp:189
void setAudioMute(bool on)
Mutes the audio output.
Definition: SI4844.cpp:963
void setAmSoftMuteRate(uint8_t value)
Sets the attack and decay rates when entering or leaving soft mute.
Definition: SI4844.cpp:1307
void powerDown(void)
Power the device down.
Definition: SI4844.cpp:384
char * getFormattedFrequency(uint8_t removeRightDigit=0, uint8_t thousandsSeparator=',')
Gets Formatted Frequency.
Definition: SI4844.cpp:1468
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:1430
bool detectDevice()
Checks communication with SI4844 via I2C.
Definition: SI4844.cpp:1377
uint8_t scanI2CBus(uint8_t *device, uint8_t limit)
Scans the I2C bus and returns the addresses of the devices found.
Definition: SI4844.cpp:1393