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
155
156
157
158
162} si4844_status_response;
165
166
167
168
180} si4844_firmware_info;
183
184
185
189} si4844_firmware_response;
192
193
194
198 uint8_t AUDIOMODE : 2;
200 uint8_t ADJPT_ATTN : 1;
201 uint8_t ADJPT_STEO : 1;
202 uint8_t Reserved : 2;
209
210
211
216 uint8_t ADJPT_ATTN:1;
217 uint8_t ADJPT_STEO:1;
223} si4844_audiomode_status_response;
226
227
228
229
240
241
242
243
244volatile static bool data_from_device;
247
248
249
250
251
252
253
254
258static void interrupt_hundler()
260 data_from_device =
true;
264
265
266
267
274 si4844_status_response status_response;
275 si4844_firmware_response firmware_response;
277 uint16_t interruptPin;
278 uint8_t currentBand = 0;
284 inline void setClockLow(
void) { Wire.setClock(10000); };
285 inline void setClockHigh(
void) { Wire.setClock(50000); };
286 inline void waitInterrupt(
void);
287 inline bool isClearToSend(
void);
288 inline void waitToSend(
void);
291 const char *bandmode_table[3] = {
"FM",
"AM",
"SW"};
292 const char *stereo_indicator_table[2] = {
"Off",
"On "};
295 uint8_t bassTreble = 4;
299
300
301
302
303
304
305
308
309
310
311
312
316 void setProperty(uint16_t propertyNumber, uint16_t parameter);
318 void sendCommand(uint8_t cmd,
int parameter_size,
const uint8_t *parameter);
321 void setup(uint16_t resetPin,
int interruptPin, byte defaultBand);
322 void debugDevice(uint16_t resetPin, uint16_t interruptPin, uint8_t defaultBand,
void (*showFunc)(
char *msg));
356 si4844_audiomode_status_response
357 setAudioMode(uint8_t audiomode, uint8_t fm_mono, uint8_t adjpt_attn, uint8_t adjpt_steo, uint8_t opcode);
362 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 );
374
375
376
377
378
383
384
385
386
387 inline char *
getBandMode(){
return (
char *) bandmode_table[status_response.refined.BANDMODE]; };
390
391
392
393
394 inline char *
getStereoIndicator(){
return (
char *) stereo_indicator_table[status_response.refined.STATION]; };
#define FM_SOFT_MUTE_RATE
Definition: SI4844.h:43
#define AM_SOFT_MUTE_SLOPE
Definition: SI4844.h:53
uint16_t value
Definition: SI4844.h:236
#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:187
uint8_t raw[9]
Definition: SI4844.h:188
#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
#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
#define ATDD_AUDIO_MODE
Definition: SI4844.h:27
SI4844 Class.
Definition: SI4844.h:270
uint16_t getFirmwareComponentMajorRevision()
Definition: SI4844.h:415
uint16_t getStatusBCFG0()
Definition: SI4844.h:397
uint16_t getStatusHostPowerUp()
Definition: SI4844.h:402
uint16_t getFirmwareCTS()
Definition: SI4844.h:411
uint16_t getStatusBandMode()
Definition: SI4844.h:404
uint16_t getStatusCTS()
Definition: SI4844.h:406
uint16_t getStatusBandIndex()
Definition: SI4844.h:405
uint16_t getStatusStationIndicator()
Definition: SI4844.h:400
uint16_t getFirmwareChipRevision()
Definition: SI4844.h:417
uint16_t getFirmwareErr()
Definition: SI4844.h:410
uint16_t getFirmwareMinorRevision()
Definition: SI4844.h:414
uint16_t getStatusStereo()
Definition: SI4844.h:399
uint16_t getStatusHostReset()
Definition: SI4844.h:403
uint16_t getFirmwareComponentMinorRevision()
Definition: SI4844.h:416
uint16_t getFirmwareMajorRevision()
Definition: SI4844.h:413
uint16_t getFirmwarePartNumber()
Definition: SI4844.h:412
void setResetPin(uint16_t resetPin)
Definition: SI4844.cpp:180
uint16_t getStatusInformationReady()
Definition: SI4844.h:401
uint16_t getStatusBCFG1()
Definition: SI4844.h:398
void setDefaultBandIndx(uint8_t bandidx)
Definition: SI4844.cpp:276
void setInterruptPin(int interruptPin)
Definition: SI4844.cpp:187
uint16_t getFirmwareReserved()
Definition: SI4844.h:409
uint8_t raw
Definition: SI4844.h:205
uint8_t BCFG1
Definition: SI4844.h:139
uint8_t raw
Definition: SI4844.h:127
uint8_t CHIPREV
Definition: SI4844.h:179
uint8_t CMPMINOR
Definition: SI4844.h:178
uint8_t HOSTPWRUP
Definition: SI4844.h:143
uint8_t FWMAJOR
Definition: SI4844.h:175
uint8_t STEREO
Definition: SI4844.h:140
uint8_t PN
Definition: SI4844.h:174
uint8_t CMPMAJOR
Definition: SI4844.h:177
uint8_t raw[4]
Definition: SI4844.h:161
uint8_t d1
Definition: SI4844.h:149
uint8_t raw[7]
Definition: SI4844.h:108
uint8_t ERR
Definition: SI4844.h:172
uint8_t RESERVED
Definition: SI4844.h:171
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:160
uint8_t raw
Definition: SI4844.h:222
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:173
uint8_t FWMINOR
Definition: SI4844.h:176
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:802
float getFrequency(void)
Get the current frequency of the radio in KHz.
Definition: SI4844.cpp:669
void setFmDeemphasis(uint8_t value)
Sets de-emphasis time constant.
Definition: SI4844.cpp:825
void changeVolume(char)
Up or down the sound volume level.
Definition: SI4844.cpp:402
void setStatusInterruptFromDevice(bool value)
Set the Data Status From Device.
Definition: SI4844.h:306
si4844_firmware_response * getFirmware(void)
Get part number, chip revision, firmware, patch, and component revision numbers.
Definition: SI4844.cpp:641
void setFmSoftMuteRate(uint8_t value)
Sets the attack and decay rates when entering and leaving soft mute.
Definition: SI4844.cpp:838
void setAmSoftMuteSnrThreshold(uint8_t value)
Sets the SNR threshold to engage soft mute.
Definition: SI4844.cpp:909
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:853
bool getDataStatusInterruptFromDevice()
Get the Data Status From Device.
Definition: SI4844.h:313
void resetStatus(void)
set the interrupr status to false. It will turn true after next interrupr
Definition: SI4844.cpp:724
si4844_status_response * getStatus(void)
Get tune freq, band, and others information, status of the device.
Definition: SI4844.cpp:608
uint8_t getVolume()
Gets the current audio volume level.
Definition: SI4844.h:379
void bassTrebleUp()
More treble, less bass.
Definition: SI4844.cpp:512
void setBand(byte)
Sets a new band to the device.
Definition: SI4844.cpp:329
void setBassTreble(uint8_t bass_treble)
Set the sound volume level, bass and treble.
Definition: SI4844.cpp:493
void setReferenceClockFrequency(uint16_t value)
Sets the frequency of the REFCLK from the output of the prescaler.
Definition: SI4844.cpp:923
uint8_t getVolumeProperty()
Gets the current volume value stored in SI4844 device.
Definition: SI4844.cpp:469
void setBlendThresholdStereoIndicator(uint16_t value)
Sets the blend threshold for stereo indicator.
Definition: SI4844.cpp:866
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:748
void setVolume(byte)
Sets the volume level.
Definition: SI4844.cpp:452
void reset(void)
Resets the SI4844 device.
Definition: SI4844.cpp:244
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:896
char * getStereoIndicator()
Get the Stereo Indicator.
Definition: SI4844.h:394
void sendCommand(uint8_t cmd, int parameter_size, const uint8_t *parameter)
Sends a given command to the SI4844 device.
Definition: SI4844.cpp:96
char * getBandMode()
Get the Band Mode.
Definition: SI4844.h:387
void setup(uint16_t resetPin, int interruptPin, byte defaultBand)
Initiates the SI4844 instance and connect the device (SI4844) to Arduino.
Definition: SI4844.cpp:150
void powerUp(void)
Power the device up.
Definition: SI4844.cpp:286
void volumeUp(void)
Increases the volume level.
Definition: SI4844.cpp:427
void setCrystalOscillatorStabilizationWaitTime(uint8_t XOWAIT)
Sets Crystal Oscillator Stabilization Wait Time After Reset.
Definition: SI4844.cpp:315
void volumeDown(void)
Decreases the volume level.
Definition: SI4844.cpp:438
void setCrystalOscillatorEnable(uint8_t XOSCEN)
Sets Crystal Oscillator Enable.
Definition: SI4844.cpp:301
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
void debugDevice(uint16_t resetPin, uint16_t interruptPin, uint8_t defaultBand, void(*showFunc)(char *msg))
Used to debug
Definition: SI4844.cpp:201
void audioMute(uint8_t value)
Mutes the audio output.
Definition: SI4844.cpp:581
void bassTrebleDown()
Less treble, more bass.
Definition: SI4844.cpp:501
void setFmSoftMuteMaxAttenuation(uint8_t value)
FM Soft Mute Maximum Attenuation.
Definition: SI4844.cpp:813
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:544
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:938
bool hasStatusChanged(void)
Checks whether the SI4844 has its status changed.
Definition: SI4844.cpp:715
void setAudioMute(bool on)
Mutes the audio output.
Definition: SI4844.cpp:592
void setAmSoftMuteRate(uint8_t value)
Sets the attack and decay rates when entering or leaving soft mute.
Definition: SI4844.cpp:882
uint16_t getProperty(uint16_t propertyNumber)
Gets a given property from the SI4844.
Definition: SI4844.cpp:54
void powerDown(void)
Power the device down.
Definition: SI4844.cpp:265
bool detectDevice()
Checks communication with SI4844 via I2C.
Definition: SI4844.cpp:952
uint8_t scanI2CBus(uint8_t *device, uint8_t limit)
Scans the I2C bus and returns the addresses of the devices found.
Definition: SI4844.cpp:968