/** * @brief Gets the FSK center frequency F0 * * * @param[in] trx_id Transceiver identifier * @param[in] freq_band Frequency band * @param[in] option FSK operating mode * @param[out] freq Pointer to frequency F0 * @param[out] spacing Pointer to Channel spacing * * @return */ void get_fsk_freq_f0(trx_id_t trx_id, sun_freq_band_t freq_band, fsk_op_mode_t option, uint32_t *freq, uint32_t *spacing) { for (uint8_t i = 0; i < FSK_CH_CENTER_FREQ0_MAP_ROW_SIZE; i++) { if (freq_band == (uint32_t)PGM_READ_DWORD(&fsk_freq0_map[i][0])) { *freq = (uint32_t)PGM_READ_DWORD( &fsk_freq0_map[i][option]); break; } } *spacing = (uint32_t)PGM_READ_DWORD(&fsk_ch_spacing_table[option - 1]); }
/** * @brief Gets the Legacy OQPSK center frequency F0 * * * @param[in] trx_id Transceiver identifier * @param[in] freq_band Frequency band * @param[out] freq Pointer to frequency F0 * @param[out] spacing Pointer to Channel spacing * * @return */ void get_leg_oqpsk_freq_f0(trx_id_t trx_id, sun_freq_band_t freq_band, uint32_t *freq, uint32_t *spacing) { for (uint8_t i = 0; i < LEG_OQPSK_CH_CENTER_FREQ0_MAP_ROW_SIZE; i++) { if (freq_band == (uint32_t)PGM_READ_DWORD(&leg_oqpsk_freq0_map[i] [0])) { *freq = (uint32_t)PGM_READ_DWORD( &leg_oqpsk_freq0_map[i][1]); *spacing = (uint32_t)PGM_READ_DWORD( &leg_oqpsk_freq0_map[i][2]); break; } } }
/** * @brief Gets the OFDM center frequency F0 * * * @param[in] trx_id Transceiver identifier * @param[in] freq_band Frequency band * @param[in] option OFDM option * @param[out] freq Pointer to frequency F0 * @param[out] spacing Pointer to Channel spacing * * @return */ void get_ofdm_freq_f0(trx_id_t trx_id, sun_freq_band_t freq_band, ofdm_option_t option, uint32_t *freq, uint32_t *spacing) { for (uint8_t i = 0; i < OFDM_CH_CENTER_FREQ0_MAP_ROW_SIZE; i++) { if (freq_band == (uint32_t)PGM_READ_DWORD(&ofdm_freq0_map[i][0])) { *freq = (uint32_t)PGM_READ_DWORD(&ofdm_freq0_map[i][ option + 1]); break; } } *spacing = (uint32_t)PGM_READ_DWORD(&ofdm_ch_spacing_table[option]); }
/** * @brief Gets the OQPSK center frequency F0 * * * @param[in] trx_id Transceiver identifier * @param[in] freq_band Frequency band * @param[out] freq Pointer to frequency F0 * @param[out] spacing Pointer to Channel spacing * * @return */ void get_oqpsk_freq_f0(trx_id_t trx_id, sun_freq_band_t freq_band, uint32_t *freq, uint32_t *spacing) { for (uint8_t i = 0; i < OQPSK_CH_CENTER_FREQ0_MAP_ROW_SIZE; i++) { if (freq_band == (uint32_t)PGM_READ_DWORD(&oqpsk_freq0_map[i][0])) { *freq = (uint32_t)PGM_READ_DWORD( &oqpsk_freq0_map[i][1]); if (freq_band == EU_863) { *spacing = 0; /* ? */ } else { *spacing = (uint32_t)PGM_READ_DWORD( &oqpsk_ch_spac_table[i][1]); } break; } } }
uint8_t init_api(void) { if (api_version > 0) return XB_SUCCESS; struct xboot_jump_table_s jp; *((uint32_t *)(&jp)) = PGM_READ_DWORD(JUMP_TABLE_LOCATION); if ((jp.id[0] == 'X') && (jp.id[1] == 'B') && (jp.id[2] == 'j')) { api_version = jp.ver; return XB_SUCCESS; } return XB_ERR_NO_API; }
/** * @brief Gets Maximum no of channel supported by each modulation * * * @param[in] trx_id Transceiver identifier * * @return No of channels supported */ uint16_t get_sun_max_ch_no(trx_id_t trx_id) { uint16_t max_ch = 0; switch (tal_pib[trx_id].phy.modulation) { case OFDM: for (uint8_t i = 0; i < OFDM_CH_CENTER_FREQ0_MAP_ROW_SIZE; i++) { if (tal_pib[trx_id].phy.freq_band == (uint32_t)PGM_READ_DWORD(&ofdm_freq0_map [i][0])) { max_ch = (uint32_t)PGM_READ_DWORD( &ofdm_max_ch_map[i][tal_pib[ trx_id].phy.phy_mode. ofdm.option + 1]); break; } } break; case OQPSK: for (uint8_t i = 0; i < OQPSK_CH_CENTER_FREQ0_MAP_ROW_SIZE; i++) { if (tal_pib[trx_id].phy.freq_band == (uint32_t)PGM_READ_DWORD(& oqpsk_freq0_map[i][0])) { max_ch = (uint32_t)PGM_READ_DWORD( &oqpsk_max_ch_map[i][1]); break; } } break; case FSK: for (uint8_t i = 0; i < FSK_CH_CENTER_FREQ0_MAP_ROW_SIZE; i++) { if (tal_pib[trx_id].phy.freq_band == (uint32_t)PGM_READ_DWORD(&fsk_freq0_map[ i][0])) { max_ch = (uint32_t)PGM_READ_DWORD( &fsk_max_ch_map[i][tal_pib[ trx_id].phy.phy_mode.fsk .op_mode]); break; } } break; default: break; } return max_ch; }