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
54
55
56
57
58
59
60
61
65
66
67
68
69
78} si4844_arg_band_index;
81
82
83
84
85
92 uint16_t BANDBOT : 16;
93 uint16_t BANDTOP : 16;
104
105
106
107
123
124
125
126
127
147
148
149
150
154} si4844_status_response;
157
158
159
160
172} si4844_firmware_info;
175
176
177
181} si4844_firmware_response;
184
185
186
190 uint8_t AUDIOMODE : 2;
192 uint8_t ADJPT_ATTN : 1;
193 uint8_t ADJPT_STEO : 1;
194 uint8_t Reserved : 2;
201
202
203
208 uint8_t ADJPT_ATTN:1;
209 uint8_t ADJPT_STEO:1;
215} si4844_audiomode_status_response;
218
219
220
221
232
233
234
235
236volatile static bool data_from_device;
239
240
241
242
243
244
245
246
247static void interrupt_hundler()
249 data_from_device =
true;
254
255
256
257
264 si4844_status_response status_response;
265 si4844_firmware_response firmware_response;
267 uint16_t interruptPin;
268 uint8_t currentBand = 0;
274 inline void setClockLow(
void) { Wire.setClock(10000); };
275 inline void setClockHigh(
void) { Wire.setClock(50000); };
276 inline void waitInterrupt(
void);
277 inline bool isClearToSend(
void);
278 inline void waitToSend(
void);
281 const char *bandmode_table[3] = {
"FM",
"AM",
"SW"};
282 const char *stereo_indicator_table[2] = {
"Off",
"On "};
285 uint8_t bassTreble = 4;
289
290
291
292
293
294
295
298
299
300
301
302
306 void setProperty(uint16_t propertyNumber, uint16_t parameter);
308 void sendCommand(uint8_t cmd,
int parameter_size,
const uint8_t *parameter);
311 void setup(uint16_t resetPin,
int interruptPin, byte defaultBand);
312 void debugDevice(uint16_t resetPin, uint16_t interruptPin, uint8_t defaultBand,
void (*showFunc)(
char *msg));
340 si4844_audiomode_status_response
341 setAudioMode(uint8_t audiomode, uint8_t fm_mono, uint8_t adjpt_attn, uint8_t adjpt_steo, uint8_t opcode);
346 void setCustomBand(uint8_t bandIndex, uint16_t botton, uint16_t top, uint8_t bandSpace);
347 void setCustomBand(uint8_t bandIndex, uint16_t botton, uint16_t top, uint8_t bandSpace, uint8_t dfband, uint8_t uni_am, uint8_t tvreq );
359
360
361
362
363
368
369
370
371
372 inline char *
getBandMode(){
return (
char *) bandmode_table[status_response.refined.BANDMODE]; };
375
376
377
378
379 inline char *
getStereoIndicator(){
return (
char *) stereo_indicator_table[status_response.refined.STATION]; };
#define FM_SOFT_MUTE_RATE
Definition: SI4844.h:43
uint16_t value
Definition: SI4844.h:228
#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:179
uint8_t raw[9]
Definition: SI4844.h:180
#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 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:260
uint16_t getFirmwareComponentMajorRevision()
Definition: SI4844.h:400
uint16_t getStatusBCFG0()
Definition: SI4844.h:382
uint16_t getStatusHostPowerUp()
Definition: SI4844.h:387
uint16_t getFirmwareCTS()
Definition: SI4844.h:396
uint16_t getStatusBandMode()
Definition: SI4844.h:389
uint16_t getStatusCTS()
Definition: SI4844.h:391
uint16_t getStatusBandIndex()
Definition: SI4844.h:390
uint16_t getStatusStationIndicator()
Definition: SI4844.h:385
uint16_t getFirmwareChipRevision()
Definition: SI4844.h:402
uint16_t getFirmwareErr()
Definition: SI4844.h:395
uint16_t getFirmwareMinorRevision()
Definition: SI4844.h:399
uint16_t getStatusStereo()
Definition: SI4844.h:384
uint16_t getStatusHostReset()
Definition: SI4844.h:388
uint16_t getFirmwareComponentMinorRevision()
Definition: SI4844.h:401
uint16_t getFirmwareMajorRevision()
Definition: SI4844.h:398
uint16_t getFirmwarePartNumber()
Definition: SI4844.h:397
void setResetPin(uint16_t resetPin)
Definition: SI4844.cpp:180
uint16_t getStatusInformationReady()
Definition: SI4844.h:386
uint16_t getStatusBCFG1()
Definition: SI4844.h:383
void setDefaultBandIndx(uint8_t bandidx)
Definition: SI4844.cpp:276
void setInterruptPin(int interruptPin)
Definition: SI4844.cpp:187
uint16_t getFirmwareReserved()
Definition: SI4844.h:394
uint8_t raw
Definition: SI4844.h:197
uint8_t BCFG1
Definition: SI4844.h:131
uint8_t raw
Definition: SI4844.h:119
uint8_t CHIPREV
Definition: SI4844.h:171
uint8_t CMPMINOR
Definition: SI4844.h:170
uint8_t HOSTPWRUP
Definition: SI4844.h:135
uint8_t FWMAJOR
Definition: SI4844.h:167
uint8_t STEREO
Definition: SI4844.h:132
uint8_t PN
Definition: SI4844.h:166
uint8_t CMPMAJOR
Definition: SI4844.h:169
uint8_t raw[4]
Definition: SI4844.h:153
uint8_t d1
Definition: SI4844.h:141
uint8_t raw[7]
Definition: SI4844.h:100
uint8_t ERR
Definition: SI4844.h:164
uint8_t RESERVED
Definition: SI4844.h:163
uint8_t d3
Definition: SI4844.h:143
uint8_t HOSTRST
Definition: SI4844.h:136
uint8_t BANDMODE
Definition: SI4844.h:139
uint8_t d4
Definition: SI4844.h:142
si4844_get_status refined
Definition: SI4844.h:152
uint8_t raw
Definition: SI4844.h:214
uint8_t raw
Definition: SI4844.h:77
uint8_t STATION
Definition: SI4844.h:133
uint8_t BANDIDX
Definition: SI4844.h:138
uint8_t CTS
Definition: SI4844.h:165
uint8_t FWMINOR
Definition: SI4844.h:168
uint8_t d2
Definition: SI4844.h:140
uint8_t INFORDY
Definition: SI4844.h:134
uint8_t CTS
Definition: SI4844.h:137
uint8_t BCFG0
Definition: SI4844.h:130
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:669
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:402
void setStatusInterruptFromDevice(bool value)
Set the Data Status From Device.
Definition: SI4844.h:296
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:891
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
bool getDataStatusInterruptFromDevice()
Get the Data Status From Device.
Definition: SI4844.h:303
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:364
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:933
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:919
void setVolume(byte)
Sets the volume level.
Definition: SI4844.cpp:452
void setCustomBand(uint8_t bandIndex, uint16_t botton, uint16_t top, uint8_t bandSpace)
This method allows you to customize the frequency range of a band.
Definition: SI4844.cpp:744
void reset(void)
Resets the SI4844 device.
Definition: SI4844.cpp:244
char * getStereoIndicator()
Get the Stereo Indicator.
Definition: SI4844.h:379
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 setCustomBand(uint8_t bandIndex, uint16_t botton, uint16_t top, uint8_t bandSpace, uint8_t dfband, uint8_t uni_am, uint8_t tvreq)
This method allows you to customize the frequency range of a band.
Definition: SI4844.cpp:802
char * getBandMode()
Get the Band Mode.
Definition: SI4844.h:372
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: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: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:948
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
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:962
uint8_t scanI2CBus(uint8_t *device, uint8_t limit)
Scans the I2C bus and returns the addresses of the devices found.
Definition: SI4844.cpp:978