提交SMOD ATSC IMX APP版本 V122
This commit is contained in:
+605
@@ -0,0 +1,605 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2017 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2017/11/30
|
||||
Modification ID : 253a4918e2da2cf28a9393596fa16f25024e504d
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
#include "allegro_a8290.h"
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Static Functions
|
||||
----------------------------------------------------------------------------*/
|
||||
static sony_result_t create_1st_byte (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t transmitMode,
|
||||
sony_lnbc_tone_t tone,
|
||||
uint8_t * pData);
|
||||
|
||||
static sony_result_t create_2nd_byte (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData);
|
||||
|
||||
static sony_result_t allegro_a8290_Initialize (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t allegro_a8290_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value);
|
||||
|
||||
static sony_result_t allegro_a8290_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage);
|
||||
|
||||
static sony_result_t allegro_a8290_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone);
|
||||
|
||||
static sony_result_t allegro_a8290_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode);
|
||||
|
||||
static sony_result_t allegro_a8290_Sleep (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t allegro_a8290_WakeUp (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t allegro_a8290_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported);
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Functions
|
||||
----------------------------------------------------------------------------*/
|
||||
sony_result_t allegro_a8290_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c)
|
||||
{
|
||||
SONY_TRACE_ENTER ("allegro_a8290_Create");
|
||||
|
||||
if ((!pLnbc) || (!pI2c)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->i2cAddress = i2cAddress;
|
||||
pLnbc->pI2c = pI2c;
|
||||
|
||||
pLnbc->Initialize = allegro_a8290_Initialize;
|
||||
pLnbc->SetConfig = allegro_a8290_SetConfig;
|
||||
pLnbc->SetVoltage = allegro_a8290_SetVoltage;
|
||||
pLnbc->SetTone = allegro_a8290_SetTone;
|
||||
pLnbc->SetTransmitMode = allegro_a8290_SetTransmitMode;
|
||||
pLnbc->Sleep = allegro_a8290_Sleep;
|
||||
pLnbc->WakeUp = allegro_a8290_WakeUp;
|
||||
pLnbc->GetDiagStatus = allegro_a8290_GetDiagStatus;
|
||||
|
||||
pLnbc->isInternalTone = 0;
|
||||
pLnbc->lowVoltage = ALLEGRO_A8290_CONFIG_VOLTAGE_LOW_13_042V; /* Default value */
|
||||
pLnbc->highVoltage = ALLEGRO_A8290_CONFIG_VOLTAGE_HIGH_18_042V; /* Default value */
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO;
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8290_Initialize (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("allegro_a8290_Initialize");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
|
||||
if (pLnbc->tone != SONY_LNBC_TONE_AUTO) {
|
||||
pLnbc->tone = SONY_LNBC_TONE_OFF;
|
||||
}
|
||||
|
||||
if (pLnbc->transmitMode != SONY_LNBC_TRANSMIT_MODE_AUTO) {
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
}
|
||||
|
||||
/* Read once */
|
||||
if (pLnbc->pI2c->Read(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* 1st byte */
|
||||
result = create_1st_byte (pLnbc, pLnbc->transmitMode, pLnbc->tone, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN(result);}
|
||||
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* 2nd byte */
|
||||
result = create_2nd_byte (pLnbc, 0, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN(result);}
|
||||
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8290_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("allegro_a8290_SetConfig");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(configId)
|
||||
{
|
||||
case SONY_LNBC_CONFIG_ID_TONE_INTERNAL:
|
||||
if((value != 0) && (value != 1)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->isInternalTone = value;
|
||||
result = allegro_a8290_SetTone (pLnbc, pLnbc->tone);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_LOW_VOLTAGE:
|
||||
if ((value != ALLEGRO_A8290_CONFIG_VOLTAGE_LOW_13_042V) &&
|
||||
(value != ALLEGRO_A8290_CONFIG_VOLTAGE_LOW_14_042V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->lowVoltage = value;
|
||||
result = allegro_a8290_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE:
|
||||
if ((value != ALLEGRO_A8290_CONFIG_VOLTAGE_HIGH_18_042V) &&
|
||||
(value != ALLEGRO_A8290_CONFIG_VOLTAGE_HIGH_19_042V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->highVoltage = value;
|
||||
result = allegro_a8290_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8290_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8290_SetVoltage");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* 2nd byte */
|
||||
result = create_2nd_byte (pLnbc, 1, voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN(result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->voltage = voltage;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8290_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8290_SetTone");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* 1st byte */
|
||||
result = create_1st_byte (pLnbc, pLnbc->transmitMode, tone, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN(result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->tone = tone;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8290_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8290_SetTransmitMode");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* 1st byte */
|
||||
result = create_1st_byte (pLnbc, mode, pLnbc->tone, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN(result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->transmitMode = mode;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8290_Sleep (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8290_Sleep");
|
||||
|
||||
if (!pLnbc) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* 2nd byte */
|
||||
result = create_2nd_byte (pLnbc, 0, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN(result);}
|
||||
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8290_WakeUp (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8290_WakeUp");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* 1st byte */
|
||||
result = create_1st_byte (pLnbc, pLnbc->transmitMode, pLnbc->tone, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN(result);}
|
||||
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* 2nd byte */
|
||||
result = create_2nd_byte (pLnbc, 1, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN(result);}
|
||||
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_ACTIVE;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8290_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8290_GetDiagStatus");
|
||||
|
||||
if ((!pLnbc) || (!pStatus)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pStatusSupported) {
|
||||
*pStatusSupported = SONY_LNBC_DIAG_STATUS_LNBCDISABLE | SONY_LNBC_DIAG_STATUS_OVERCURRENT
|
||||
| SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE | SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN
|
||||
| SONY_LNBC_DIAG_STATUS_VINOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->Read (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Status Register 1
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
* | VUV | TSD | - | PNG | - | OCP | - | DIS |
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
*
|
||||
* Status Register 2
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
* | - | - | - | - | - | TDET | - | CAD |
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
* Note: To activate CAD (cable disconnected) bit, the user must set this IC
|
||||
* to cable disconnect test mode.
|
||||
* This means status register 2 is unnecessary to read.
|
||||
*/
|
||||
|
||||
*pStatus = 0;
|
||||
|
||||
if (data & 0x01) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_LNBCDISABLE;
|
||||
}
|
||||
|
||||
if (data & 0x04) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_OVERCURRENT;
|
||||
}
|
||||
|
||||
if (data & 0x10) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (data & 0x40) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN;
|
||||
}
|
||||
|
||||
if (data & 0x80) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VINOUTOFRANGE;
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t create_1st_byte (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t transmitMode,
|
||||
sony_lnbc_tone_t tone,
|
||||
uint8_t * pData)
|
||||
{
|
||||
SONY_TRACE_ENTER ("create_1st_byte");
|
||||
|
||||
if ((!pLnbc) || (!pData)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/*
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | I1 | I0 |BFC2 | - | - |CADT |TGATE|TMODE|
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | 1 | 0 | ? | 0 | 0 | 0 | ? | ? |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
*/
|
||||
*pData = 0x80;
|
||||
|
||||
/*
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | I1 | I0 |BFC2 | - | - |CADT |TGATE|TMODE|
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | 1 | 0 | 1/0 | 0 | 0 | 0 | ? | ? |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
*/
|
||||
switch(transmitMode)
|
||||
{
|
||||
case SONY_LNBC_TRANSMIT_MODE_TX:
|
||||
/* BFC2 = 1 */
|
||||
*pData |= 0x20;
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TRANSMIT_MODE_RX:
|
||||
case SONY_LNBC_TRANSMIT_MODE_AUTO:
|
||||
/* BFC2 = 0 */
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/*
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | I1 | I0 |BFC2 | - | - |CADT |TGATE|TMODE|
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | 1 | 0 | 1/0 | 0 | 0 | 0 | 1/0 | ? |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
*/
|
||||
switch(tone)
|
||||
{
|
||||
case SONY_LNBC_TONE_ON:
|
||||
case SONY_LNBC_TONE_AUTO:
|
||||
/* TGATE = 1 */
|
||||
*pData |= 0x02;
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TONE_OFF:
|
||||
/* TGATE = 0 */
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/*
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | I1 | I0 |BFC2 | - | - |CADT |TGATE|TMODE|
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | 1 | 0 | 1/0 | 0 | 0 | 0 | 1/0 | 1/0 |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
*/
|
||||
if (pLnbc->isInternalTone){
|
||||
/* TMODE = 1 */
|
||||
*pData |= 0x01;
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t create_2nd_byte (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData)
|
||||
{
|
||||
SONY_TRACE_ENTER ("create_2nd_byte");
|
||||
|
||||
if ((!pLnbc) || (!pData)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/*
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | I1 | I0 | ENB | ODT |VSEL3|VSEL2|VSEL1|VSEL0|
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | 0 | 0 | ? | 1 | ? | ? | ? | ? |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
*/
|
||||
*pData = 0x10;
|
||||
|
||||
/*
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | I1 | I0 | ENB | ODT |VSEL3|VSEL2|VSEL1|VSEL0|
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | 0 | 0 | 1/0 | 1 | ? | ? | ? | ? |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
*/
|
||||
if (isEnable){
|
||||
/* ENB = 1 */
|
||||
*pData |= 0x20;
|
||||
}
|
||||
|
||||
/*
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | I1 | I0 | ENB | ODT |VSEL3|VSEL2|VSEL1|VSEL0|
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | 0 | 0 | 1/0 | 1 | 1/0 | 1/0 | 1/0 | 1/0 |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
*/
|
||||
switch(voltage)
|
||||
{
|
||||
case SONY_LNBC_VOLTAGE_LOW:
|
||||
switch(pLnbc->lowVoltage)
|
||||
{
|
||||
case ALLEGRO_A8290_CONFIG_VOLTAGE_LOW_13_042V:
|
||||
/* 13.042V : 0001 */
|
||||
*pData |= 0x01;
|
||||
break;
|
||||
|
||||
case ALLEGRO_A8290_CONFIG_VOLTAGE_LOW_14_042V:
|
||||
/* 14.042V : 0100 */
|
||||
*pData |= 0x04;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_HIGH:
|
||||
switch(pLnbc->highVoltage)
|
||||
{
|
||||
case ALLEGRO_A8290_CONFIG_VOLTAGE_HIGH_18_042V:
|
||||
/* 18.042V : 1000 */
|
||||
*pData |= 0x08;
|
||||
break;
|
||||
|
||||
case ALLEGRO_A8290_CONFIG_VOLTAGE_HIGH_19_042V:
|
||||
/* 19.042V : 1011 */
|
||||
*pData |= 0x0B;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_AUTO:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file allegro_a8290.h
|
||||
|
||||
This file provides the functions to control A8290(Allegro).
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef ALLEGRO_A8290_H
|
||||
#define ALLEGRO_A8290_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
|
||||
/**
|
||||
@brief Use 13.042V for low level output voltage.
|
||||
|
||||
If you would like to use 13.042V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8290_CONFIG_VOLTAGE_LOW_13_042V 0
|
||||
|
||||
/**
|
||||
@brief Use 14.042V for low level output voltage.
|
||||
|
||||
If you would like to use 14.042V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8290_CONFIG_VOLTAGE_LOW_14_042V 1
|
||||
|
||||
/**
|
||||
@brief Use 18.042V for high level output voltage.
|
||||
|
||||
If you would like to use 18.042V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8290_CONFIG_VOLTAGE_HIGH_18_042V 10
|
||||
|
||||
/**
|
||||
@brief Use 19.042V for high level output voltage.
|
||||
|
||||
If you would like to use 19.042V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8290_CONFIG_VOLTAGE_HIGH_19_042V 11
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create a instance for A8290(Allegro).
|
||||
|
||||
@param pLnbc LNB controller driver instance.
|
||||
@param i2cAddress I2C address.
|
||||
@param pI2c I2C instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t allegro_a8290_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c);
|
||||
|
||||
#endif /* ALLEGRO_A8290_H */
|
||||
+477
@@ -0,0 +1,477 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2017 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2017/11/30
|
||||
Modification ID : 253a4918e2da2cf28a9393596fa16f25024e504d
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
#include "allegro_a8303.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
static sony_result_t allegro_a8303_Initialize (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t allegro_a8303_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value);
|
||||
|
||||
static sony_result_t allegro_a8303_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage);
|
||||
|
||||
static sony_result_t allegro_a8303_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone);
|
||||
|
||||
static sony_result_t allegro_a8303_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode);
|
||||
|
||||
static sony_result_t allegro_a8303_Sleep (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t allegro_a8303_WakeUp (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t allegro_a8303_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported);
|
||||
|
||||
static sony_result_t create_data (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData);
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t allegro_a8303_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c)
|
||||
{
|
||||
SONY_TRACE_ENTER ("allegro_a8303_Create");
|
||||
|
||||
if ((!pI2c) || (!pLnbc)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->i2cAddress = i2cAddress;
|
||||
pLnbc->pI2c = pI2c;
|
||||
|
||||
pLnbc->Initialize = allegro_a8303_Initialize;
|
||||
pLnbc->SetConfig = allegro_a8303_SetConfig;
|
||||
pLnbc->SetVoltage = allegro_a8303_SetVoltage;
|
||||
pLnbc->SetTone = allegro_a8303_SetTone;
|
||||
pLnbc->SetTransmitMode = allegro_a8303_SetTransmitMode;
|
||||
pLnbc->Sleep = allegro_a8303_Sleep;
|
||||
pLnbc->WakeUp = allegro_a8303_WakeUp;
|
||||
pLnbc->GetDiagStatus = allegro_a8303_GetDiagStatus;
|
||||
|
||||
pLnbc->isInternalTone = 1; /* Fixed to 1 */
|
||||
pLnbc->lowVoltage = ALLEGRO_A8303_CONFIG_VOLTAGE_LOW_13_333V; /* Default value */
|
||||
pLnbc->highVoltage = ALLEGRO_A8303_CONFIG_VOLTAGE_HIGH_18_667V; /* Default value */
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO;
|
||||
/* A8303 do not have any I2C register to change TX/RX. */
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_AUTO;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_Initialize (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8303_Initialize");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO; /* Auto is only supported */
|
||||
|
||||
if (pLnbc->transmitMode != SONY_LNBC_TRANSMIT_MODE_AUTO) {
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
}
|
||||
|
||||
data = 0x00;
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN | SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
if (pLnbc->pI2c->Read (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN | SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
data = 0x00;
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN | SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
if (pLnbc->pI2c->Read (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN | SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, 0, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8303_SetConfig");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(configId)
|
||||
{
|
||||
case SONY_LNBC_CONFIG_ID_TONE_INTERNAL:
|
||||
if (value == 1) {
|
||||
pLnbc->isInternalTone = value;
|
||||
} else if (value == 0) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
} else {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_LOW_VOLTAGE:
|
||||
if ((value != ALLEGRO_A8303_CONFIG_VOLTAGE_LOW_13_333V) &&
|
||||
(value != ALLEGRO_A8303_CONFIG_VOLTAGE_LOW_14_333V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->lowVoltage = value;
|
||||
result = allegro_a8303_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE:
|
||||
if ((value != ALLEGRO_A8303_CONFIG_VOLTAGE_HIGH_18_667V) &&
|
||||
(value != ALLEGRO_A8303_CONFIG_VOLTAGE_HIGH_19_667V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->highVoltage = value;
|
||||
result = allegro_a8303_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8303_SetVoltage");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, 1, voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->voltage = voltage;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone)
|
||||
{
|
||||
SONY_TRACE_ENTER ("allegro_a8303_SetTone");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(tone)
|
||||
{
|
||||
case SONY_LNBC_TONE_ON:
|
||||
case SONY_LNBC_TONE_OFF:
|
||||
/* A8303 doesn't support this function. */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TONE_AUTO:
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->tone = tone;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode)
|
||||
{
|
||||
SONY_TRACE_ENTER ("allegro_a8303_SetTransmitMode");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
pLnbc->transmitMode = mode;
|
||||
|
||||
/* A8303 doesn't need to control something. */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_Sleep (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8303_Sleep");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, 0, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_WakeUp (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8303_WakeUp");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, 1, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_ACTIVE;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8303_GetDiagStatus");
|
||||
|
||||
if ((!pLnbc) || (!pStatus)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pStatusSupported) {
|
||||
*pStatusSupported = SONY_LNBC_DIAG_STATUS_LNBCDISABLE | SONY_LNBC_DIAG_STATUS_OVERCURRENT
|
||||
| SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE | SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN
|
||||
| SONY_LNBC_DIAG_STATUS_VINOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Cannot use repeated start */
|
||||
|
||||
if (pLnbc->pI2c->Read (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* STATUS register
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
* | UVLO | TSD | TDET | PNG | TRIMS | OCP | CPOK | DIS |
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
*/
|
||||
|
||||
*pStatus = 0;
|
||||
|
||||
if (data & 0x01) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_LNBCDISABLE;
|
||||
}
|
||||
|
||||
if (data & 0x04) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_OVERCURRENT;
|
||||
}
|
||||
|
||||
if (data & 0x10) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (data & 0x40) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN;
|
||||
}
|
||||
|
||||
if (data & 0x80) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VINOUTOFRANGE;
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t create_data (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData)
|
||||
{
|
||||
SONY_TRACE_ENTER ("create_data");
|
||||
|
||||
if ((!pLnbc) || (!pData)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
*pData = 0;
|
||||
|
||||
if (isEnable){
|
||||
*pData |= 0x08;
|
||||
}
|
||||
|
||||
switch(voltage)
|
||||
{
|
||||
case SONY_LNBC_VOLTAGE_LOW:
|
||||
switch(pLnbc->lowVoltage)
|
||||
{
|
||||
case ALLEGRO_A8303_CONFIG_VOLTAGE_LOW_13_333V:
|
||||
/* 13.333V */
|
||||
*pData |= 0x00;
|
||||
break;
|
||||
|
||||
case ALLEGRO_A8303_CONFIG_VOLTAGE_LOW_14_333V:
|
||||
/* 14.333V */
|
||||
*pData |= 0x02;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_HIGH:
|
||||
switch(pLnbc->highVoltage)
|
||||
{
|
||||
case ALLEGRO_A8303_CONFIG_VOLTAGE_HIGH_18_667V:
|
||||
/* 18.667V */
|
||||
*pData |= 0x04;
|
||||
break;
|
||||
|
||||
case ALLEGRO_A8303_CONFIG_VOLTAGE_HIGH_19_667V:
|
||||
/* 19.667V */
|
||||
*pData |= 0x06;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file allegro_a8303.h
|
||||
|
||||
This file provides the functions to control A8303(Allegro).
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef ALLEGRO_A8303_H
|
||||
#define ALLEGRO_A8303_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
|
||||
/**
|
||||
@brief Use 13.333V for low level output voltage.
|
||||
|
||||
If you would like to use 13.333V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8303_CONFIG_VOLTAGE_LOW_13_333V 0
|
||||
|
||||
/**
|
||||
@brief Use 14.333V for low level output voltage.
|
||||
|
||||
If you would like to use 14.333V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8303_CONFIG_VOLTAGE_LOW_14_333V 1
|
||||
|
||||
/**
|
||||
@brief Use 18.667V for high level output voltage.
|
||||
|
||||
If you would like to use 18.667V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8303_CONFIG_VOLTAGE_HIGH_18_667V 10
|
||||
|
||||
/**
|
||||
@brief Use 19.667V for high level output voltage.
|
||||
|
||||
If you would like to use 19.667V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8303_CONFIG_VOLTAGE_HIGH_19_667V 11
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create a instance for A8303(Allegro).
|
||||
|
||||
@param pLnbc LNB controller driver instance.
|
||||
@param i2cAddress I2C address.
|
||||
@param pI2c I2C instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t allegro_a8303_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c);
|
||||
|
||||
#endif /* ALLEGRO_A8303_H */
|
||||
+475
@@ -0,0 +1,475 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2017 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2017/11/30
|
||||
Modification ID : 253a4918e2da2cf28a9393596fa16f25024e504d
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
#include "allegro_a8303_1.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
static sony_result_t allegro_a8303_1_Initialize (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t allegro_a8303_1_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value);
|
||||
|
||||
static sony_result_t allegro_a8303_1_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage);
|
||||
|
||||
static sony_result_t allegro_a8303_1_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone);
|
||||
|
||||
static sony_result_t allegro_a8303_1_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode);
|
||||
|
||||
static sony_result_t allegro_a8303_1_Sleep (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t allegro_a8303_1_WakeUp (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t allegro_a8303_1_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported);
|
||||
|
||||
static sony_result_t create_data (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData);
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t allegro_a8303_1_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c)
|
||||
{
|
||||
SONY_TRACE_ENTER ("allegro_a8303_1_Create");
|
||||
|
||||
if ((!pI2c) || (!pLnbc)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->i2cAddress = i2cAddress;
|
||||
pLnbc->pI2c = pI2c;
|
||||
|
||||
pLnbc->Initialize = allegro_a8303_1_Initialize;
|
||||
pLnbc->SetConfig = allegro_a8303_1_SetConfig;
|
||||
pLnbc->SetVoltage = allegro_a8303_1_SetVoltage;
|
||||
pLnbc->SetTone = allegro_a8303_1_SetTone;
|
||||
pLnbc->SetTransmitMode = allegro_a8303_1_SetTransmitMode;
|
||||
pLnbc->Sleep = allegro_a8303_1_Sleep;
|
||||
pLnbc->WakeUp = allegro_a8303_1_WakeUp;
|
||||
pLnbc->GetDiagStatus = allegro_a8303_1_GetDiagStatus;
|
||||
|
||||
pLnbc->isInternalTone = 1; /* Fixed to 1 */
|
||||
pLnbc->lowVoltage = ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_13_333V; /* Default value */
|
||||
pLnbc->highVoltage = ALLEGRO_A8303_1_CONFIG_VOLTAGE_HIGH_18_667V; /* Default value */
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO;
|
||||
/* A8303-1 do not have any I2C register to change TX/RX. */
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_AUTO;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_1_Initialize (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8303_1_Initialize");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO; /* Auto is only supported */
|
||||
|
||||
if (pLnbc->transmitMode != SONY_LNBC_TRANSMIT_MODE_AUTO) {
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
}
|
||||
|
||||
data = 0x00;
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN | SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
if (pLnbc->pI2c->Read (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN | SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
data = 0x00;
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN | SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
if (pLnbc->pI2c->Read (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN | SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, 0, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_1_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8303_1_SetConfig");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(configId)
|
||||
{
|
||||
case SONY_LNBC_CONFIG_ID_TONE_INTERNAL:
|
||||
if (value == 1) {
|
||||
pLnbc->isInternalTone = value;
|
||||
} else if (value == 0) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
} else {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_LOW_VOLTAGE:
|
||||
if ((value != ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_11_667V) &&
|
||||
(value != ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_13_333V) &&
|
||||
(value != ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_13_667V) &&
|
||||
(value != ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_14_333V) &&
|
||||
(value != ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_15_667V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->lowVoltage = value;
|
||||
result = allegro_a8303_1_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE:
|
||||
if ((value != ALLEGRO_A8303_1_CONFIG_VOLTAGE_HIGH_18_667V) &&
|
||||
(value != ALLEGRO_A8303_1_CONFIG_VOLTAGE_HIGH_19_000V) &&
|
||||
(value != ALLEGRO_A8303_1_CONFIG_VOLTAGE_HIGH_19_667V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->highVoltage = value;
|
||||
result = allegro_a8303_1_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_1_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8303_1_SetVoltage");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, 1, voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->voltage = voltage;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_1_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone)
|
||||
{
|
||||
SONY_TRACE_ENTER ("allegro_a8303_1_SetTone");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(tone)
|
||||
{
|
||||
case SONY_LNBC_TONE_ON:
|
||||
case SONY_LNBC_TONE_OFF:
|
||||
/* A8303_1 doesn't support this function. */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TONE_AUTO:
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->tone = tone;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_1_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode)
|
||||
{
|
||||
SONY_TRACE_ENTER ("allegro_a8303_1_SetTransmitMode");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
pLnbc->transmitMode = mode;
|
||||
|
||||
/* A8303_1 doesn't need to control something. */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_1_Sleep (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8303_1_Sleep");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, 0, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_1_WakeUp (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8303_1_WakeUp");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, 1, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_ACTIVE;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8303_1_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8303_1_GetDiagStatus");
|
||||
|
||||
if ((!pLnbc) || (!pStatus)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pStatusSupported) {
|
||||
*pStatusSupported = SONY_LNBC_DIAG_STATUS_LNBCDISABLE | SONY_LNBC_DIAG_STATUS_OVERCURRENT
|
||||
| SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE | SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN
|
||||
| SONY_LNBC_DIAG_STATUS_VINOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Cannot use repeated start */
|
||||
|
||||
if (pLnbc->pI2c->Read (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* STATUS register
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
* | UVLO | TSD | TDET | PNG | TRIMS | OCP | CPOK | DIS |
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
*/
|
||||
|
||||
*pStatus = 0;
|
||||
|
||||
if (data & 0x01) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_LNBCDISABLE;
|
||||
}
|
||||
|
||||
if (data & 0x04) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_OVERCURRENT;
|
||||
}
|
||||
|
||||
if (data & 0x10) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (data & 0x40) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN;
|
||||
}
|
||||
|
||||
if (data & 0x80) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VINOUTOFRANGE;
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t create_data (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData)
|
||||
{
|
||||
SONY_TRACE_ENTER ("create_data");
|
||||
|
||||
if ((!pLnbc) || (!pData)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
*pData = 0;
|
||||
|
||||
if (isEnable){
|
||||
*pData |= 0x08;
|
||||
}
|
||||
|
||||
switch(voltage)
|
||||
{
|
||||
case SONY_LNBC_VOLTAGE_LOW:
|
||||
switch(pLnbc->lowVoltage)
|
||||
{
|
||||
case ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_11_667V:
|
||||
case ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_13_333V:
|
||||
case ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_13_667V:
|
||||
case ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_14_333V:
|
||||
case ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_15_667V:
|
||||
*pData |= pLnbc->lowVoltage;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_HIGH:
|
||||
switch(pLnbc->highVoltage)
|
||||
{
|
||||
case ALLEGRO_A8303_1_CONFIG_VOLTAGE_HIGH_18_667V:
|
||||
case ALLEGRO_A8303_1_CONFIG_VOLTAGE_HIGH_19_000V:
|
||||
case ALLEGRO_A8303_1_CONFIG_VOLTAGE_HIGH_19_667V:
|
||||
*pData |= pLnbc->highVoltage;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file allegro_a8303_1.h
|
||||
|
||||
This file provides the functions to control A8303_1(Allegro).
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef ALLEGRO_A8303_1_H
|
||||
#define ALLEGRO_A8303_1_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
|
||||
/**
|
||||
@brief Use 11.667V for low level output voltage.
|
||||
|
||||
If you would like to use 11.667V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_11_667V 7
|
||||
|
||||
/**
|
||||
@brief Use 13.333V for low level output voltage.
|
||||
|
||||
If you would like to use 13.333V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_13_333V 0
|
||||
|
||||
/**
|
||||
@brief Use 13.667V for low level output voltage.
|
||||
|
||||
If you would like to use 13.667V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_13_667V 1
|
||||
|
||||
/**
|
||||
@brief Use 14.333V for low level output voltage.
|
||||
|
||||
If you would like to use 14.333V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_14_333V 2
|
||||
|
||||
/**
|
||||
@brief Use 15.667V for low level output voltage.
|
||||
|
||||
If you would like to use 15.667V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8303_1_CONFIG_VOLTAGE_LOW_15_667V 3
|
||||
|
||||
/**
|
||||
@brief Use 18.667V for high level output voltage.
|
||||
|
||||
If you would like to use 18.667V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8303_1_CONFIG_VOLTAGE_HIGH_18_667V 4
|
||||
|
||||
/**
|
||||
@brief Use 19.000V for high level output voltage.
|
||||
|
||||
If you would like to use 19.000V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8303_1_CONFIG_VOLTAGE_HIGH_19_000V 5
|
||||
|
||||
/**
|
||||
@brief Use 19.667V for high level output voltage.
|
||||
|
||||
If you would like to use 19.667V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8303_1_CONFIG_VOLTAGE_HIGH_19_667V 6
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create a instance for A8303_1(Allegro).
|
||||
|
||||
@param pLnbc LNB controller driver instance.
|
||||
@param i2cAddress I2C address.
|
||||
@param pI2c I2C instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t allegro_a8303_1_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c);
|
||||
|
||||
#endif /* ALLEGRO_A8303_1_H */
|
||||
+494
@@ -0,0 +1,494 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2017 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2017/11/30
|
||||
Modification ID : 253a4918e2da2cf28a9393596fa16f25024e504d
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
#include "allegro_a8304.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
static sony_result_t allegro_a8304_Initialize (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t allegro_a8304_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value);
|
||||
|
||||
static sony_result_t allegro_a8304_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage);
|
||||
|
||||
static sony_result_t allegro_a8304_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone);
|
||||
|
||||
static sony_result_t allegro_a8304_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode);
|
||||
|
||||
static sony_result_t allegro_a8304_Sleep (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t allegro_a8304_WakeUp (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t allegro_a8304_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported);
|
||||
|
||||
static sony_result_t create_data (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData);
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t allegro_a8304_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c)
|
||||
{
|
||||
SONY_TRACE_ENTER ("allegro_a8304_Create");
|
||||
|
||||
if ((!pI2c) || (!pLnbc)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->i2cAddress = i2cAddress;
|
||||
pLnbc->pI2c = pI2c;
|
||||
|
||||
pLnbc->Initialize = allegro_a8304_Initialize;
|
||||
pLnbc->SetConfig = allegro_a8304_SetConfig;
|
||||
pLnbc->SetVoltage = allegro_a8304_SetVoltage;
|
||||
pLnbc->SetTone = allegro_a8304_SetTone;
|
||||
pLnbc->SetTransmitMode = allegro_a8304_SetTransmitMode;
|
||||
pLnbc->Sleep = allegro_a8304_Sleep;
|
||||
pLnbc->WakeUp = allegro_a8304_WakeUp;
|
||||
pLnbc->GetDiagStatus = allegro_a8304_GetDiagStatus;
|
||||
|
||||
pLnbc->isInternalTone = 1; /* Fixed to 1 */
|
||||
pLnbc->lowVoltage = ALLEGRO_A8304_CONFIG_VOLTAGE_LOW_13_333V; /* Default value */
|
||||
pLnbc->highVoltage = ALLEGRO_A8304_CONFIG_VOLTAGE_HIGH_18_667V; /* Default value */
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO;
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8304_Initialize (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8304_Initialize");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO; /* Auto is only supported */
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX; /* RX is not supported */
|
||||
|
||||
data = 0x00;
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN | SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
if (pLnbc->pI2c->Read (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN | SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
data = 0x00;
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN | SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
if (pLnbc->pI2c->Read (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN | SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, 0, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8304_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8304_SetConfig");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(configId)
|
||||
{
|
||||
case SONY_LNBC_CONFIG_ID_TONE_INTERNAL:
|
||||
if ((value != 0) && (value != 1)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->isInternalTone = value;
|
||||
result = allegro_a8304_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_LOW_VOLTAGE:
|
||||
if ((value != ALLEGRO_A8304_CONFIG_VOLTAGE_LOW_13_333V) &&
|
||||
(value != ALLEGRO_A8304_CONFIG_VOLTAGE_LOW_14_333V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->lowVoltage = value;
|
||||
result = allegro_a8304_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE:
|
||||
if ((value != ALLEGRO_A8304_CONFIG_VOLTAGE_HIGH_18_667V) &&
|
||||
(value != ALLEGRO_A8304_CONFIG_VOLTAGE_HIGH_19_667V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->highVoltage = value;
|
||||
result = allegro_a8304_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8304_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8304_SetVoltage");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, 1, voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->voltage = voltage;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8304_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone)
|
||||
{
|
||||
SONY_TRACE_ENTER ("allegro_a8304_SetTone");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(tone)
|
||||
{
|
||||
case SONY_LNBC_TONE_ON:
|
||||
case SONY_LNBC_TONE_OFF:
|
||||
/* A8304 doesn't support this function. */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TONE_AUTO:
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->tone = tone;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8304_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode)
|
||||
{
|
||||
SONY_TRACE_ENTER ("allegro_a8304_SetTransmitMode");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(mode)
|
||||
{
|
||||
case SONY_LNBC_TRANSMIT_MODE_TX:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TRANSMIT_MODE_RX:
|
||||
case SONY_LNBC_TRANSMIT_MODE_AUTO:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->transmitMode = mode;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8304_Sleep (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8304_Sleep");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, 0, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8304_WakeUp (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8304_WakeUp");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, 1, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_ACTIVE;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t allegro_a8304_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("allegro_a8304_GetDiagStatus");
|
||||
|
||||
if ((!pLnbc) || (!pStatus)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pStatusSupported) {
|
||||
*pStatusSupported = SONY_LNBC_DIAG_STATUS_LNBCDISABLE | SONY_LNBC_DIAG_STATUS_OVERCURRENT
|
||||
| SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE | SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN
|
||||
| SONY_LNBC_DIAG_STATUS_VINOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Cannot use repeated start */
|
||||
|
||||
if (pLnbc->pI2c->Read (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* STATUS register
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
* | UVLO | TSD | - | PNG | - | OCP | CPOK | DIS |
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
*/
|
||||
|
||||
*pStatus = 0;
|
||||
|
||||
if (data & 0x01) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_LNBCDISABLE;
|
||||
}
|
||||
|
||||
if (data & 0x04) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_OVERCURRENT;
|
||||
}
|
||||
|
||||
if (data & 0x10) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (data & 0x40) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN;
|
||||
}
|
||||
|
||||
if (data & 0x80) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VINOUTOFRANGE;
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t create_data (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData)
|
||||
{
|
||||
SONY_TRACE_ENTER ("create_data");
|
||||
|
||||
if ((!pLnbc) || (!pData)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
*pData = 0;
|
||||
|
||||
if (isEnable){
|
||||
*pData |= 0x10;
|
||||
}
|
||||
|
||||
if (!pLnbc->isInternalTone){
|
||||
/* TMODE = 1 */
|
||||
*pData |= 0x20;
|
||||
}
|
||||
|
||||
switch(voltage)
|
||||
{
|
||||
case SONY_LNBC_VOLTAGE_LOW:
|
||||
switch(pLnbc->lowVoltage)
|
||||
{
|
||||
case ALLEGRO_A8304_CONFIG_VOLTAGE_LOW_13_333V:
|
||||
/* 13.333V */
|
||||
*pData |= 0x02;
|
||||
break;
|
||||
|
||||
case ALLEGRO_A8304_CONFIG_VOLTAGE_LOW_14_333V:
|
||||
/* 14.333V */
|
||||
*pData |= 0x05;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_HIGH:
|
||||
switch(pLnbc->highVoltage)
|
||||
{
|
||||
case ALLEGRO_A8304_CONFIG_VOLTAGE_HIGH_18_667V:
|
||||
/* 18.667V */
|
||||
*pData |= 0x0B;
|
||||
break;
|
||||
|
||||
case ALLEGRO_A8304_CONFIG_VOLTAGE_HIGH_19_667V:
|
||||
/* 19.667V */
|
||||
*pData |= 0x0E;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file allegro_a8304.h
|
||||
|
||||
This file provides the functions to control A8304(Allegro).
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef ALLEGRO_A8304_H
|
||||
#define ALLEGRO_A8304_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
|
||||
/**
|
||||
@brief Use 13.333V for low level output voltage.
|
||||
|
||||
If you would like to use 13.333V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8304_CONFIG_VOLTAGE_LOW_13_333V 0
|
||||
|
||||
/**
|
||||
@brief Use 14.333V for low level output voltage.
|
||||
|
||||
If you would like to use 14.333V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8304_CONFIG_VOLTAGE_LOW_14_333V 1
|
||||
|
||||
/**
|
||||
@brief Use 18.667V for high level output voltage.
|
||||
|
||||
If you would like to use 18.667V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8304_CONFIG_VOLTAGE_HIGH_18_667V 10
|
||||
|
||||
/**
|
||||
@brief Use 19.667V for high level output voltage.
|
||||
|
||||
If you would like to use 19.667V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ALLEGRO_A8304_CONFIG_VOLTAGE_HIGH_19_667V 11
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create a instance for A8304(Allegro).
|
||||
|
||||
@param pLnbc LNB controller driver instance.
|
||||
@param i2cAddress I2C address.
|
||||
@param pI2c I2C instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t allegro_a8304_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c);
|
||||
|
||||
#endif /* ALLEGRO_A8304_H */
|
||||
+672
@@ -0,0 +1,672 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2017 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2017/11/30
|
||||
Modification ID : 253a4918e2da2cf28a9393596fa16f25024e504d
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
#include "intersil_isl9492.h"
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Static Functions
|
||||
----------------------------------------------------------------------------*/
|
||||
static sony_result_t create_1st_byte (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone,
|
||||
sony_lnbc_transmit_mode_t mode,
|
||||
uint8_t * pData);
|
||||
|
||||
static sony_result_t create_2nd_byte (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData);
|
||||
|
||||
static sony_result_t create_3rd_byte (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData);
|
||||
|
||||
static sony_result_t intersil_isl9492_Initialize (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t intersil_isl9492_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value);
|
||||
|
||||
static sony_result_t intersil_isl9492_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage);
|
||||
|
||||
static sony_result_t intersil_isl9492_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone);
|
||||
|
||||
static sony_result_t intersil_isl9492_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode);
|
||||
|
||||
static sony_result_t intersil_isl9492_Sleep (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t intersil_isl9492_WakeUp (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t intersil_isl9492_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported);
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Functions
|
||||
----------------------------------------------------------------------------*/
|
||||
sony_result_t intersil_isl9492_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c)
|
||||
{
|
||||
SONY_TRACE_ENTER ("intersil_isl9492_Create");
|
||||
|
||||
if ((!pLnbc) || (!pI2c)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->i2cAddress = i2cAddress;
|
||||
pLnbc->pI2c = pI2c;
|
||||
|
||||
pLnbc->Initialize = intersil_isl9492_Initialize;
|
||||
pLnbc->SetConfig = intersil_isl9492_SetConfig;
|
||||
pLnbc->SetVoltage = intersil_isl9492_SetVoltage;
|
||||
pLnbc->SetTone = intersil_isl9492_SetTone;
|
||||
pLnbc->SetTransmitMode = intersil_isl9492_SetTransmitMode;
|
||||
pLnbc->Sleep = intersil_isl9492_Sleep;
|
||||
pLnbc->WakeUp = intersil_isl9492_WakeUp;
|
||||
pLnbc->GetDiagStatus = intersil_isl9492_GetDiagStatus;
|
||||
|
||||
pLnbc->isInternalTone = 0;
|
||||
pLnbc->lowVoltage = INTERSIL_ISL9492_CONFIG_VOLTAGE_LOW_13_5V; /* Default value */
|
||||
pLnbc->highVoltage = INTERSIL_ISL9492_CONFIG_VOLTAGE_HIGH_18_5V; /* Default value */
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO;
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t intersil_isl9492_Initialize (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("intersil_isl9492_Initialize");
|
||||
|
||||
if (!pLnbc) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
|
||||
if (pLnbc->voltage != SONY_LNBC_VOLTAGE_AUTO) {
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
}
|
||||
|
||||
if (pLnbc->tone != SONY_LNBC_TONE_AUTO) {
|
||||
pLnbc->tone = SONY_LNBC_TONE_OFF;
|
||||
}
|
||||
|
||||
if (pLnbc->transmitMode != SONY_LNBC_TRANSMIT_MODE_AUTO) {
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, pLnbc->tone, pLnbc->transmitMode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = create_2nd_byte (pLnbc, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = create_3rd_byte (pLnbc, 0, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t intersil_isl9492_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("intersil_isl9492_SetConfig");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(configId)
|
||||
{
|
||||
case SONY_LNBC_CONFIG_ID_TONE_INTERNAL:
|
||||
if ((value != 0) && (value != 1)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->isInternalTone = value;
|
||||
result = intersil_isl9492_SetTone (pLnbc, pLnbc->tone);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_LOW_VOLTAGE:
|
||||
if ((value != INTERSIL_ISL9492_CONFIG_VOLTAGE_LOW_13_5V) &&
|
||||
(value != INTERSIL_ISL9492_CONFIG_VOLTAGE_LOW_14_2V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->lowVoltage = value;
|
||||
result = intersil_isl9492_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE:
|
||||
if ((value != INTERSIL_ISL9492_CONFIG_VOLTAGE_HIGH_18_5V) &&
|
||||
(value != INTERSIL_ISL9492_CONFIG_VOLTAGE_HIGH_20_0V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->highVoltage = value;
|
||||
result = intersil_isl9492_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t intersil_isl9492_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("intersil_isl9492_SetVoltage");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if (pLnbc->voltage == SONY_LNBC_VOLTAGE_AUTO){
|
||||
switch(voltage)
|
||||
{
|
||||
case SONY_LNBC_VOLTAGE_AUTO:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_LOW:
|
||||
case SONY_LNBC_VOLTAGE_HIGH:
|
||||
result = create_2nd_byte (pLnbc, voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
} else if ((pLnbc->voltage == SONY_LNBC_VOLTAGE_LOW) || (pLnbc->voltage == SONY_LNBC_VOLTAGE_HIGH)){
|
||||
switch(voltage)
|
||||
{
|
||||
case SONY_LNBC_VOLTAGE_AUTO:
|
||||
/* Low/High -> Auto */
|
||||
result = create_2nd_byte (pLnbc, voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_LOW:
|
||||
case SONY_LNBC_VOLTAGE_HIGH:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
} else {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_3rd_byte (pLnbc, 1, voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->voltage = voltage;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t intersil_isl9492_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("intersil_isl9492_SetTone");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, tone, pLnbc->transmitMode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->tone = tone;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t intersil_isl9492_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("intersil_isl9492_SetTransmitMode");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, pLnbc->tone, mode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->transmitMode = mode;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t intersil_isl9492_Sleep (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("intersil_isl9492_Sleep");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_3rd_byte (pLnbc, 0, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t intersil_isl9492_WakeUp (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("intersil_isl9492_WakeUp");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, pLnbc->tone, pLnbc->transmitMode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = create_2nd_byte (pLnbc, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = create_3rd_byte (pLnbc, 1, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->Write(pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_ACTIVE;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t intersil_isl9492_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("intersil_isl9492_GetDiagStatus");
|
||||
|
||||
if ((!pLnbc) || (!pStatus)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pStatusSupported) {
|
||||
*pStatusSupported = SONY_LNBC_DIAG_STATUS_BACKBIAS | SONY_LNBC_DIAG_STATUS_OVERCURRENT
|
||||
| SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE | SONY_LNBC_DIAG_STATUS_CABLEOPEN
|
||||
| SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN;
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->Read (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Status Register (SR1)
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
* | SR1H | SR1M | SR1L | OTF | CABF | OUVF | OLF | BCF |
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
*/
|
||||
|
||||
*pStatus = 0;
|
||||
|
||||
if (data & 0x01) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_BACKBIAS;
|
||||
}
|
||||
|
||||
if (data & 0x02) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_OVERCURRENT;
|
||||
}
|
||||
|
||||
if (data & 0x04) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (data & 0x08) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_CABLEOPEN;
|
||||
}
|
||||
|
||||
if (data & 0x10) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN;
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t create_1st_byte (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone,
|
||||
sony_lnbc_transmit_mode_t mode,
|
||||
uint8_t * pData)
|
||||
{
|
||||
SONY_TRACE_ENTER ("create_1st_byte");
|
||||
|
||||
if ((!pLnbc) || (!pData)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* SR2
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* |SR2H |SR2M |SR2L | ENT |MSEL | TTH |Res* |Res* |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | 0 | 0 | 1 | ? | ? | ? | 0 | 0 |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* ENT = 0 : Tone OFF ( or auto )
|
||||
* = 1 : Tone ON
|
||||
*
|
||||
* MSEL = 0 : Envelope (internal tone) / I2C control
|
||||
* = 1 : PWM (external tone)
|
||||
*
|
||||
* TTH = 0 : RX mode
|
||||
* = 1 : TX mode
|
||||
*/
|
||||
*pData = 0x20;
|
||||
|
||||
switch(tone)
|
||||
{
|
||||
case SONY_LNBC_TONE_OFF:
|
||||
case SONY_LNBC_TONE_AUTO:
|
||||
/* ENT = 0 */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TONE_ON:
|
||||
/* ENT = 1 */
|
||||
*pData |= 0x10;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(tone)
|
||||
{
|
||||
case SONY_LNBC_TONE_AUTO:
|
||||
if (pLnbc->isInternalTone){
|
||||
/* MSEL = 0 */
|
||||
} else {
|
||||
/* MSEL = 1 */
|
||||
*pData |= 0x08;
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TONE_OFF:
|
||||
case SONY_LNBC_TONE_ON:
|
||||
/* MSEL = 0 */
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(mode)
|
||||
{
|
||||
case SONY_LNBC_TRANSMIT_MODE_TX:
|
||||
/* TTH = 1 */
|
||||
*pData |= 0x04;
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TRANSMIT_MODE_RX:
|
||||
case SONY_LNBC_TRANSMIT_MODE_AUTO:
|
||||
/* TTH = 0 */
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t create_2nd_byte (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData)
|
||||
{
|
||||
SONY_TRACE_ENTER ("create_2nd_byte");
|
||||
|
||||
if ((!pLnbc) || (!pData)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* SR3
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* |SR3H |SR3M |SR3L |Res* |VSPEN| DCL |ISELH|ISELL|
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | 0 | 1 | 0 | 0 | ? | 0 | 0 | 0 |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* VSPEN = 0 : TXEN enable
|
||||
* = 1 : TXEN disable
|
||||
*/
|
||||
*pData = 0x40;
|
||||
|
||||
switch(voltage)
|
||||
{
|
||||
case SONY_LNBC_VOLTAGE_LOW:
|
||||
case SONY_LNBC_VOLTAGE_HIGH:
|
||||
/* VSPEN = 1 */
|
||||
*pData |= 0x08;
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_AUTO:
|
||||
/* VSPEN = 0 */
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t create_3rd_byte (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData)
|
||||
{
|
||||
SONY_TRACE_ENTER ("create_3rd_byte");
|
||||
|
||||
if ((!pLnbc) || (!pData)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* SR4
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* |SR4H |SR4M |SR4L | EN |DLIN |Res* |VTOP |VBOT |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | 0 | 1 | 1 | ? | ? | 0 | ? | ? |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* EN = 0 : SLEEP
|
||||
* = 1 : ACTIVE
|
||||
*
|
||||
* DLIN = 0 : SLEEP
|
||||
* = 1 : ACTIVE
|
||||
*
|
||||
* VTOP = 0 : Others
|
||||
* = 1 : (Auto & HIGH-20V) / (High)
|
||||
*
|
||||
* VBOT = 0 : Others
|
||||
* = 1 : (Auto & LOW-14V) / (Low & LOW-14V) / (High & HIGH-20V)
|
||||
*/
|
||||
*pData = 0x60;
|
||||
|
||||
if (isEnable){
|
||||
/* EN = 1, DLIN = 1 */
|
||||
*pData |= 0x18;
|
||||
}
|
||||
|
||||
if ((voltage == SONY_LNBC_VOLTAGE_AUTO) && (pLnbc->highVoltage == INTERSIL_ISL9492_CONFIG_VOLTAGE_HIGH_20_0V)){
|
||||
/* VTOP = 1 */
|
||||
*pData |= 0x02;
|
||||
} else if (voltage == SONY_LNBC_VOLTAGE_HIGH){
|
||||
/* VTOP = 1 */
|
||||
*pData |= 0x02;
|
||||
} else {
|
||||
/* VTOP = 0 */
|
||||
}
|
||||
|
||||
if ((voltage == SONY_LNBC_VOLTAGE_AUTO) && (pLnbc->lowVoltage == INTERSIL_ISL9492_CONFIG_VOLTAGE_LOW_14_2V)){
|
||||
/* VBOT = 1 */
|
||||
*pData |= 0x01;
|
||||
} else if ((voltage == SONY_LNBC_VOLTAGE_LOW) && (pLnbc->lowVoltage == INTERSIL_ISL9492_CONFIG_VOLTAGE_LOW_14_2V)){
|
||||
/* VBOT = 1 */
|
||||
*pData |= 0x01;
|
||||
} else if ((voltage == SONY_LNBC_VOLTAGE_HIGH) && (pLnbc->highVoltage == INTERSIL_ISL9492_CONFIG_VOLTAGE_HIGH_20_0V)){
|
||||
/* VBOT = 1 */
|
||||
*pData |= 0x01;
|
||||
} else {
|
||||
/* VBOT = 0 */
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file intersil_isl9492.h
|
||||
|
||||
This file provides the functions to control ISL9492(Intersil).
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef INTERSIL_ISL9492_H
|
||||
#define INTERSIL_ISL9492_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
|
||||
/**
|
||||
@brief Use 13.5V for low level output voltage.
|
||||
|
||||
If you would like to use 13.5V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define INTERSIL_ISL9492_CONFIG_VOLTAGE_LOW_13_5V 0
|
||||
|
||||
/**
|
||||
@brief Use 14.2V for low level output voltage.
|
||||
|
||||
If you would like to use 14.2V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define INTERSIL_ISL9492_CONFIG_VOLTAGE_LOW_14_2V 1
|
||||
|
||||
/**
|
||||
@brief Use 18.5V for high level output voltage.
|
||||
|
||||
If you would like to use 18.5V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define INTERSIL_ISL9492_CONFIG_VOLTAGE_HIGH_18_5V 10
|
||||
|
||||
/**
|
||||
@brief Use 20.0V for high level output voltage.
|
||||
|
||||
If you would like to use 20.0V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define INTERSIL_ISL9492_CONFIG_VOLTAGE_HIGH_20_0V 11
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create a instance for ISL9492(Intersil).
|
||||
|
||||
@param pLnbc LNB controller driver instance.
|
||||
@param i2cAddress I2C address.
|
||||
@param pI2c I2C instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t intersil_isl9492_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c);
|
||||
|
||||
#endif /* INTERSIL_ISL9492_H */
|
||||
@@ -0,0 +1,478 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2017 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2017/11/30
|
||||
Modification ID : 253a4918e2da2cf28a9393596fa16f25024e504d
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
#include "mps_mp8126.h"
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Static Functions
|
||||
----------------------------------------------------------------------------*/
|
||||
static sony_result_t mps_mp8126_Initialize (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t mps_mp8126_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value);
|
||||
|
||||
static sony_result_t mps_mp8126_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage);
|
||||
|
||||
static sony_result_t mps_mp8126_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone);
|
||||
|
||||
static sony_result_t mps_mp8126_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode);
|
||||
|
||||
static sony_result_t mps_mp8126_Sleep (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t mps_mp8126_WakeUp (sony_lnbc_t * pLnbc);
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Functions
|
||||
----------------------------------------------------------------------------*/
|
||||
sony_result_t mps_mp8126_Create (sony_lnbc_t * pLnbc,
|
||||
sony_demod_t * pDemod,
|
||||
sony_demod_gpio_pin_t voltagePinId,
|
||||
sony_demod_gpio_pin_t linedropPinId,
|
||||
sony_demod_gpio_pin_t enablePinId,
|
||||
mps_mp8126_t * pMP8126)
|
||||
{
|
||||
SONY_TRACE_ENTER ("mps_mp8126_Create");
|
||||
|
||||
if ((!pLnbc) || (!pDemod) || (!pMP8126)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->i2cAddress = 0;
|
||||
pLnbc->pI2c = NULL;
|
||||
|
||||
pLnbc->Initialize = mps_mp8126_Initialize;
|
||||
pLnbc->SetConfig = mps_mp8126_SetConfig;
|
||||
pLnbc->SetVoltage = mps_mp8126_SetVoltage;
|
||||
pLnbc->SetTone = mps_mp8126_SetTone;
|
||||
pLnbc->SetTransmitMode = mps_mp8126_SetTransmitMode;
|
||||
pLnbc->Sleep = mps_mp8126_Sleep;
|
||||
pLnbc->WakeUp = mps_mp8126_WakeUp;
|
||||
pLnbc->GetDiagStatus = NULL; /* Not supported */
|
||||
pLnbc->user = (void *)pMP8126;
|
||||
|
||||
pLnbc->isInternalTone = 0;
|
||||
pLnbc->lowVoltage = MPS_MP8126_CONFIG_VOLTAGE_LOW_13V; /* Default value */
|
||||
pLnbc->highVoltage = MPS_MP8126_CONFIG_VOLTAGE_HIGH_18V; /* Default value */
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO;
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
|
||||
pMP8126->pDemod = pDemod;
|
||||
pMP8126->voltagePinId = voltagePinId;
|
||||
pMP8126->linedropPinId = linedropPinId;
|
||||
pMP8126->enablePinId = enablePinId;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t mps_mp8126_Initialize (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
mps_mp8126_t * pMP8126;
|
||||
|
||||
SONY_TRACE_ENTER ("mps_mp8126_Initialize");
|
||||
|
||||
if ((!pLnbc) || (!pLnbc->user)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
|
||||
if (pLnbc->voltage != SONY_LNBC_VOLTAGE_AUTO) {
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
}
|
||||
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO; /* Auto is only supported */
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX; /* RX is not supported */
|
||||
|
||||
pMP8126 = (mps_mp8126_t *)(pLnbc->user);
|
||||
|
||||
result = sony_demod_GPIOSetConfig (pMP8126->pDemod, pMP8126->enablePinId, 1, SONY_DEMOD_GPIO_MODE_OUTPUT);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
/* Disable the LNBC. */
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->enablePinId, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (pLnbc->voltage == SONY_LNBC_VOLTAGE_AUTO) {
|
||||
result = sony_demod_GPIOSetConfig (pMP8126->pDemod, pMP8126->voltagePinId, 1, SONY_DEMOD_GPIO_MODE_DISEQC_TX_EN);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
result = sony_demod_GPIOSetConfig (pMP8126->pDemod, pMP8126->linedropPinId, 1, SONY_DEMOD_GPIO_MODE_OUTPUT);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* In auto mode, linedrop cannot be controlled by every SetVoltage call. So set fixed value. */
|
||||
if ((pLnbc->lowVoltage == MPS_MP8126_CONFIG_VOLTAGE_LOW_14V) || (pLnbc->highVoltage == MPS_MP8126_CONFIG_VOLTAGE_HIGH_19V)) {
|
||||
/* Set LineDrop Pin to high state. */
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->linedropPinId, 1);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
} else {
|
||||
/* Set LineDrop Pin to low state. */
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->linedropPinId, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
result = sony_demod_GPIOSetConfig (pMP8126->pDemod, pMP8126->voltagePinId, 1, SONY_DEMOD_GPIO_MODE_OUTPUT);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
result = sony_demod_GPIOSetConfig (pMP8126->pDemod, pMP8126->linedropPinId, 1, SONY_DEMOD_GPIO_MODE_OUTPUT);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* Set Voltage Pin to low state. */
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->voltagePinId, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* Set LineDrop Pin to low state. */
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->linedropPinId, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t mps_mp8126_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("mps_mp8126_SetConfig");
|
||||
|
||||
if ((!pLnbc) || (!pLnbc->user)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(configId)
|
||||
{
|
||||
case SONY_LNBC_CONFIG_ID_TONE_INTERNAL:
|
||||
if (value == 0) {
|
||||
pLnbc->isInternalTone = value;
|
||||
} else if (value == 1) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
} else {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_LOW_VOLTAGE:
|
||||
if ((value != MPS_MP8126_CONFIG_VOLTAGE_LOW_13V) &&
|
||||
(value != MPS_MP8126_CONFIG_VOLTAGE_LOW_14V)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->lowVoltage = value;
|
||||
result = mps_mp8126_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE:
|
||||
if ((value != MPS_MP8126_CONFIG_VOLTAGE_HIGH_18V) &&
|
||||
(value != MPS_MP8126_CONFIG_VOLTAGE_HIGH_19V)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->highVoltage = value;
|
||||
result = mps_mp8126_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
static sony_result_t mps_mp8126_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
mps_mp8126_t * pMP8126;
|
||||
|
||||
SONY_TRACE_ENTER ("mps_mp8126_SetVoltage");
|
||||
|
||||
if ((!pLnbc) || (!pLnbc->user)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pMP8126 = (mps_mp8126_t *)(pLnbc->user);
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(voltage)
|
||||
{
|
||||
case SONY_LNBC_VOLTAGE_LOW:
|
||||
if (pLnbc->voltage == SONY_LNBC_VOLTAGE_AUTO) {
|
||||
/* Configure voltage GPIO pin as an output. */
|
||||
result = sony_demod_GPIOSetConfig (pMP8126->pDemod, pMP8126->voltagePinId, 1, SONY_DEMOD_GPIO_MODE_OUTPUT);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
|
||||
if (pLnbc->lowVoltage == MPS_MP8126_CONFIG_VOLTAGE_LOW_13V) {
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->linedropPinId, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
} else if (pLnbc->lowVoltage == MPS_MP8126_CONFIG_VOLTAGE_LOW_14V) {
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->linedropPinId, 1);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
} else {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->voltagePinId, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_HIGH:
|
||||
if (pLnbc->voltage == SONY_LNBC_VOLTAGE_AUTO) {
|
||||
/* Configure voltage GPIO pin as an output. */
|
||||
result = sony_demod_GPIOSetConfig (pMP8126->pDemod, pMP8126->voltagePinId, 1, SONY_DEMOD_GPIO_MODE_OUTPUT);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
|
||||
if (pLnbc->highVoltage == MPS_MP8126_CONFIG_VOLTAGE_HIGH_18V) {
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->linedropPinId, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
} else if (pLnbc->highVoltage == MPS_MP8126_CONFIG_VOLTAGE_HIGH_19V) {
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->linedropPinId, 1);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
} else {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->voltagePinId, 1);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_AUTO:
|
||||
/* In auto mode, linedrop cannot be controlled by every SetVoltage call. So set fixed value. */
|
||||
if ((pLnbc->lowVoltage == MPS_MP8126_CONFIG_VOLTAGE_LOW_14V) || (pLnbc->highVoltage == MPS_MP8126_CONFIG_VOLTAGE_HIGH_19V)) {
|
||||
/* Set LineDrop Pin to high state. */
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->linedropPinId, 1);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
} else {
|
||||
/* Set LineDrop Pin to low state. */
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->linedropPinId, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
|
||||
/* Configure voltage GPIO pin as DISEQC TX. */
|
||||
result = sony_demod_GPIOSetConfig (pMP8126->pDemod, pMP8126->voltagePinId, 1, SONY_DEMOD_GPIO_MODE_DISEQC_TX_EN);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->voltage = voltage;
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
static sony_result_t mps_mp8126_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone)
|
||||
{
|
||||
SONY_TRACE_ENTER ("mps_mp8126_SetTone");
|
||||
|
||||
if (!pLnbc) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(tone)
|
||||
{
|
||||
case SONY_LNBC_TONE_OFF:
|
||||
case SONY_LNBC_TONE_ON:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TONE_AUTO:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->tone = tone;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t mps_mp8126_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode)
|
||||
{
|
||||
SONY_TRACE_ENTER ("mps_mp8126_SetTransmitMode");
|
||||
|
||||
if (!pLnbc) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(mode)
|
||||
{
|
||||
case SONY_LNBC_TRANSMIT_MODE_TX:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TRANSMIT_MODE_RX:
|
||||
case SONY_LNBC_TRANSMIT_MODE_AUTO:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->transmitMode = mode;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t mps_mp8126_Sleep (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
mps_mp8126_t * pMP8126;
|
||||
|
||||
SONY_TRACE_ENTER ("mps_mp8126_Sleep");
|
||||
|
||||
if ((!pLnbc) || (!pLnbc->user)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pMP8126 = (mps_mp8126_t *)(pLnbc->user);
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->enablePinId, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
static sony_result_t mps_mp8126_WakeUp (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
mps_mp8126_t * pMP8126;
|
||||
|
||||
SONY_TRACE_ENTER ("mps_mp8126_WakeUp");
|
||||
|
||||
if ((!pLnbc) || (!pLnbc->user)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pMP8126 = (mps_mp8126_t *)(pLnbc->user);
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
result = sony_demod_GPIOWrite (pMP8126->pDemod, pMP8126->enablePinId, 1);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_ACTIVE;
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file mps_mp8126.h
|
||||
|
||||
This file provides the functions to control MP8126(MPS).
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef MPS_MP8126_H
|
||||
#define MPS_MP8126_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
#include "sony_demod.h"
|
||||
|
||||
/**
|
||||
@brief Use 13V for low level output voltage.
|
||||
|
||||
If you would like to use 13V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define MPS_MP8126_CONFIG_VOLTAGE_LOW_13V 0
|
||||
|
||||
/**
|
||||
@brief Use 14V for low level output voltage.
|
||||
|
||||
If you would like to use 14V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define MPS_MP8126_CONFIG_VOLTAGE_LOW_14V 1
|
||||
|
||||
/**
|
||||
@brief Use 18V for high level output voltage.
|
||||
|
||||
If you would like to use 18V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define MPS_MP8126_CONFIG_VOLTAGE_HIGH_18V 10
|
||||
|
||||
/**
|
||||
@brief Use 19V for high level output voltage.
|
||||
|
||||
If you would like to use 19V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define MPS_MP8126_CONFIG_VOLTAGE_HIGH_19V 11
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Structs
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief structure for MPS MP8126 LNBC.
|
||||
*/
|
||||
typedef struct mps_mp8126_t {
|
||||
sony_demod_t * pDemod; /**< Instance of the demodulator. */
|
||||
sony_demod_gpio_pin_t voltagePinId; /**< Demodulator GPIO ID connected to LNBC 13V/18V pin. */
|
||||
sony_demod_gpio_pin_t linedropPinId; /**< Demodulator GPIO ID connected to LNBC LINEDROP pin. */
|
||||
sony_demod_gpio_pin_t enablePinId; /**< Demodulator GPIO ID connected to LNBC EN pin. */
|
||||
} mps_mp8126_t;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create a instance for MP8126(MPS).
|
||||
|
||||
@param pLnbc LNB controller driver instance.
|
||||
@param pDemod Demodulator driver instance.
|
||||
@param voltagePinId Demodulator GPIO ID to control LNBC 13V/18V pin.
|
||||
@param linedropPinId Demodulator GPIO ID to control LNBC LINEDROP pin.
|
||||
@param enablePinId Demodulator GPIO ID to control LNBC EN pin.
|
||||
@param pMP8126 MPS MP8126 LNBC (mps_mp8126_t) instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t mps_mp8126_Create (sony_lnbc_t * pLnbc,
|
||||
sony_demod_t * pDemod,
|
||||
sony_demod_gpio_pin_t voltagePinId,
|
||||
sony_demod_gpio_pin_t linedropPinId,
|
||||
sony_demod_gpio_pin_t enablePinId,
|
||||
mps_mp8126_t * pMP8126);
|
||||
|
||||
#endif /* MPS_MP8126_H */
|
||||
@@ -0,0 +1,217 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2017 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2017/11/30
|
||||
Modification ID : 253a4918e2da2cf28a9393596fa16f25024e504d
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_lnbc.h
|
||||
|
||||
This file provides the LNB controller control interface.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef SONY_LNBC_H
|
||||
#define SONY_LNBC_H
|
||||
|
||||
#include "../../sony_common.h"
|
||||
#include "../../sony_i2c.h"
|
||||
|
||||
/**
|
||||
@brief Definition of the state of the driver.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_LNBC_STATE_UNKNOWN, /**< Unknown */
|
||||
SONY_LNBC_STATE_SLEEP, /**< Sleep */
|
||||
SONY_LNBC_STATE_ACTIVE /**< Active */
|
||||
} sony_lnbc_state_t;
|
||||
|
||||
/**
|
||||
@brief Definition of the voltage.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_LNBC_VOLTAGE_LOW, /**< Low voltage. */
|
||||
SONY_LNBC_VOLTAGE_HIGH, /**< High voltage. */
|
||||
SONY_LNBC_VOLTAGE_AUTO, /**< Control voltage by demodulator. (For single cable, using TXEN) */
|
||||
} sony_lnbc_voltage_t;
|
||||
|
||||
/**
|
||||
@brief Definition of the tone state.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_LNBC_TONE_OFF, /**< Not output tone signal. */
|
||||
SONY_LNBC_TONE_ON, /**< Output tone signal. */
|
||||
SONY_LNBC_TONE_AUTO, /**< Control tone by demodulator. (Default) */
|
||||
} sony_lnbc_tone_t;
|
||||
|
||||
/**
|
||||
@brief Transmit mode.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_LNBC_TRANSMIT_MODE_TX, /**< TX mode. */
|
||||
SONY_LNBC_TRANSMIT_MODE_RX, /**< RX mode. */
|
||||
SONY_LNBC_TRANSMIT_MODE_AUTO, /**< Control transmit mode by demodulator. (For receiving DiSEqC2.x reply) */
|
||||
} sony_lnbc_transmit_mode_t;
|
||||
|
||||
/**
|
||||
@brief Config ID for SetConfig API.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_LNBC_CONFIG_ID_TONE_INTERNAL, /**< Tone mode (0: External tone, 1: Internal tone). */
|
||||
SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, /**< Definition of voltage for "Low voltage". */
|
||||
SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE /**< Definition of voltage for "High voltage". */
|
||||
} sony_lnbc_config_id_t;
|
||||
|
||||
/*
|
||||
* LNB controller diagnostic status bit definitions used for GetDiagStatus return value.
|
||||
*/
|
||||
#define SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN 0x00000001 /**< Thermal shutdown triggered. */
|
||||
#define SONY_LNBC_DIAG_STATUS_OVERCURRENT 0x00000002 /**< Over current protection triggered. */
|
||||
#define SONY_LNBC_DIAG_STATUS_CABLEOPEN 0x00000004 /**< Cable is not connected. */
|
||||
#define SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE 0x00000008 /**< Output voltage is out of range. */
|
||||
#define SONY_LNBC_DIAG_STATUS_VINOUTOFRANGE 0x00000010 /**< Input voltage is out of range. */
|
||||
#define SONY_LNBC_DIAG_STATUS_BACKBIAS 0x00000020 /**< Back bias is detected. */
|
||||
#define SONY_LNBC_DIAG_STATUS_LNBCDISABLE 0x00010000 /**< LNB controller is now disabled. */
|
||||
|
||||
/**
|
||||
@brief Definition of the LNB controller driver API.
|
||||
*/
|
||||
typedef struct sony_lnbc_t {
|
||||
|
||||
/* ======== Following members are NOT cleared by Initialize ======== */
|
||||
|
||||
uint8_t i2cAddress; /**< I2C address. */
|
||||
sony_i2c_t * pI2c; /**< I2C driver instance. */
|
||||
int32_t isInternalTone; /**< Tone mode flag. (0: External tone, 1: Internal tone) */
|
||||
int32_t lowVoltage; /**< Definition of low voltage. */
|
||||
int32_t highVoltage; /**< Definition of high voltage. */
|
||||
void * user; /**< User defined data. */
|
||||
|
||||
/* ======== Following members are cleared by Initialize (Temporary information) ======== */
|
||||
|
||||
/*
|
||||
* NOTE : voltage == SONY_LNBC_VOLTAGE_AUTO,
|
||||
* tone == SONY_LNBC_TONE_AUTO,
|
||||
* transmitMode == SONY_LNBC_TRANSMIT_MODE_AUTO
|
||||
* cases should not be cleared by Initialize API if they are supported.
|
||||
*/
|
||||
|
||||
sony_lnbc_state_t state; /**< The state of this driver */
|
||||
sony_lnbc_voltage_t voltage; /**< Current voltage. */
|
||||
sony_lnbc_tone_t tone; /**< Current tone status. */
|
||||
sony_lnbc_transmit_mode_t transmitMode; /**< Current transmit mode. */
|
||||
|
||||
/* ======== Following function pointer members are NOT cleared by Initialize ======== */
|
||||
|
||||
/**
|
||||
@brief Initialize the LNB controller.
|
||||
|
||||
When user call this API, the LNB controller's state is following.
|
||||
- Voltage : Low
|
||||
- Tone : Auto (Control tone by demodulator)
|
||||
- TransmitMode : TX mode
|
||||
|
||||
@param pLnbc Instance of the LNB controller driver.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t (*Initialize) (struct sony_lnbc_t * pLnbc);
|
||||
|
||||
/**
|
||||
@brief Configure to LNB controller
|
||||
|
||||
The parameters set by this API are initialized to default value by Initialize API.
|
||||
|
||||
@param pLnbc Instance of the LNB controller driver.
|
||||
@param configId Configure parameter ID.
|
||||
@param value The parameter value.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t (*SetConfig) (struct sony_lnbc_t * pLnbc, sony_lnbc_config_id_t configId, int32_t value);
|
||||
|
||||
/**
|
||||
@brief Set voltage.
|
||||
|
||||
Control output voltage. (switching low voltage (about 13V) and high voltage (about 18V))
|
||||
Normally, voltage should be controlled explicitly by this API
|
||||
and SONY_LNBC_VOLTAGE_AUTO should NOT be used.
|
||||
SONY_LNBC_VOLTAGE_AUTO can be used only for single cable 1,
|
||||
using TXEN signal from demodulator GPIO pins.
|
||||
|
||||
@param pLnbc Instance of the LNB controller driver.
|
||||
@param voltage Voltage to set.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t (*SetVoltage) (struct sony_lnbc_t * pLnbc, sony_lnbc_voltage_t voltage);
|
||||
|
||||
/**
|
||||
@brief Set tone mode.
|
||||
|
||||
Control tone output enable/disable.
|
||||
This API is NOT called from integ/demod part of code.
|
||||
All integ APIs assumes that SONY_LNBC_TONE_AUTO is always set.
|
||||
This means that demodulator DSQOUT pin should be connected to the LNB controller
|
||||
and all LNB controller can control tone ON/OFF by DSQOUT signal.
|
||||
|
||||
@param pLnbc Instance of the LNB controller driver.
|
||||
@param tone Tone mode.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t (*SetTone) (struct sony_lnbc_t * pLnbc, sony_lnbc_tone_t tone);
|
||||
|
||||
/**
|
||||
@brief Set transmit mode.
|
||||
|
||||
Switch TX (transmit) mode and RX (receive) mode.
|
||||
Note that to use RX mode, the LNB controller has to support DiSEqC2.X feature.
|
||||
SONY_LNBC_TRANSMIT_MODE_AUTO can be used if the LNB controller can switch TX/RX without calling this API.
|
||||
- If the LNB controller can switch TX/RX by RXEN signal from demodulator.
|
||||
RXEN output from GPIO pin setting will be necessary.
|
||||
- If the LNB controller can switch TX/RX automatically by DSQOUT signal from demodulator.
|
||||
|
||||
@param pLnbc Instance of the LNB controller driver.
|
||||
@param mode Transmit mode.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t (*SetTransmitMode) (struct sony_lnbc_t * pLnbc, sony_lnbc_transmit_mode_t mode);
|
||||
|
||||
/**
|
||||
@brief Sleep the LNB controller.
|
||||
|
||||
@param pLnbc Instance of the LNB controller driver.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t (*Sleep) (struct sony_lnbc_t * pLnbc);
|
||||
|
||||
/**
|
||||
@brief Return from sleep the LNB controller.
|
||||
|
||||
When user call this API, the LNB controller's state is kept before sleep.
|
||||
|
||||
@param pLnbc Instance of the LNB controller driver.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t (*WakeUp) (struct sony_lnbc_t * pLnbc);
|
||||
|
||||
/**
|
||||
@brief Read LNB controller diagnostic status.
|
||||
|
||||
Depend on LNB controller, supported status monitor is different.
|
||||
Please check each LNB controller driver code in detail.
|
||||
|
||||
@param pLnbc Instance of the LNB controller driver.
|
||||
@param pStatus ORed value of SONY_LNBC_DIAG_STATUS_XXX.
|
||||
@param pStatusSupported ORed value of supported SONY_LNBC_DIAG_STATUS_XXX. (NULL can be used)
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t (*GetDiagStatus) (struct sony_lnbc_t * pLnbc, uint32_t * pStatus, uint32_t * pStatusSupported);
|
||||
|
||||
} sony_lnbc_t;
|
||||
|
||||
#endif /* SONY_LNBC_H */
|
||||
@@ -0,0 +1,499 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2017 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2017/11/30
|
||||
Modification ID : 253a4918e2da2cf28a9393596fa16f25024e504d
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
#include "st_lnbh23.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
static sony_result_t create_1st_byte (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
uint8_t pcl,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
sony_lnbc_tone_t tone,
|
||||
sony_lnbc_transmit_mode_t mode,
|
||||
uint8_t * pData);
|
||||
|
||||
static sony_result_t st_lnbh23_Initialize (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t st_lnbh23_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value);
|
||||
|
||||
static sony_result_t st_lnbh23_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage);
|
||||
|
||||
static sony_result_t st_lnbh23_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone);
|
||||
|
||||
static sony_result_t st_lnbh23_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode);
|
||||
|
||||
static sony_result_t st_lnbh23_Sleep (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t st_lnbh23_WakeUp (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t st_lnbh23_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported);
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t st_lnbh23_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c)
|
||||
{
|
||||
SONY_TRACE_ENTER ("st_lnbh23_Create");
|
||||
|
||||
if ((!pLnbc) || (!pI2c)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->i2cAddress = i2cAddress;
|
||||
pLnbc->pI2c = pI2c;
|
||||
|
||||
pLnbc->Initialize = st_lnbh23_Initialize;
|
||||
pLnbc->SetConfig = st_lnbh23_SetConfig;
|
||||
pLnbc->SetVoltage = st_lnbh23_SetVoltage;
|
||||
pLnbc->SetTone = st_lnbh23_SetTone;
|
||||
pLnbc->SetTransmitMode = st_lnbh23_SetTransmitMode;
|
||||
pLnbc->Sleep = st_lnbh23_Sleep;
|
||||
pLnbc->WakeUp = st_lnbh23_WakeUp;
|
||||
pLnbc->GetDiagStatus = st_lnbh23_GetDiagStatus;
|
||||
|
||||
pLnbc->isInternalTone = 0; /* Not used */
|
||||
pLnbc->lowVoltage = ST_LNBH23_CONFIG_VOLTAGE_LOW_13_4V; /* Default value */
|
||||
pLnbc->highVoltage = ST_LNBH23_CONFIG_VOLTAGE_HIGH_18_5V; /* Default value */
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO;
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh23_Initialize (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("st_lnbh23_Initialize");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
|
||||
if (pLnbc->tone != SONY_LNBC_TONE_AUTO) {
|
||||
pLnbc->tone = SONY_LNBC_TONE_OFF;
|
||||
}
|
||||
|
||||
if (pLnbc->transmitMode != SONY_LNBC_TRANSMIT_MODE_AUTO) {
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, 0, 0, pLnbc->voltage, pLnbc->tone, pLnbc->transmitMode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, (SONY_I2C_START_EN|SONY_I2C_STOP_EN)) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh23_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("st_lnbh23_SetConfig");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(configId)
|
||||
{
|
||||
case SONY_LNBC_CONFIG_ID_TONE_INTERNAL:
|
||||
/* This parameter is not available */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_LOW_VOLTAGE:
|
||||
if ((value != ST_LNBH23_CONFIG_VOLTAGE_LOW_13_4V) &&
|
||||
(value != ST_LNBH23_CONFIG_VOLTAGE_LOW_14_4V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->lowVoltage = value;
|
||||
result = st_lnbh23_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE:
|
||||
if ((value != ST_LNBH23_CONFIG_VOLTAGE_HIGH_18_5V) &&
|
||||
(value != ST_LNBH23_CONFIG_VOLTAGE_HIGH_19_5V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->highVoltage = value;
|
||||
result = st_lnbh23_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh23_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data[2] = {0, 0};
|
||||
|
||||
SONY_TRACE_ENTER ("st_lnbh23_SetVoltage");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, 1, 0, voltage, pLnbc->tone, pLnbc->transmitMode, &data[1]);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
/* TTX should be "0" at changing voltage. */
|
||||
data[0] = (uint8_t)(data[1] & 0xBF);
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data[0], 1, (SONY_I2C_START_EN|SONY_I2C_STOP_EN)) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (data[0] != data[1]){
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data[1], 1, (SONY_I2C_START_EN|SONY_I2C_STOP_EN)) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->voltage = voltage;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh23_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("st_lnbh23_SetTone");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, 1, 0, pLnbc->voltage, tone, pLnbc->transmitMode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, (SONY_I2C_START_EN|SONY_I2C_STOP_EN)) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->tone = tone;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh23_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("st_lnbh23_SetTransmitMode");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, 1, 0, pLnbc->voltage, pLnbc->tone, mode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, (SONY_I2C_START_EN|SONY_I2C_STOP_EN)) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->transmitMode = mode;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh23_Sleep (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
SONY_TRACE_ENTER ("st_lnbh23_Sleep");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, 0, 0, pLnbc->voltage, pLnbc->tone, pLnbc->transmitMode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, (SONY_I2C_START_EN|SONY_I2C_STOP_EN)) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh23_WakeUp (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
SONY_TRACE_ENTER ("st_lnbh23_WakeUp");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, 1, 0, pLnbc->voltage, pLnbc->tone, pLnbc->transmitMode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->Write (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, (SONY_I2C_START_EN|SONY_I2C_STOP_EN)) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_ACTIVE;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh23_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("st_lnbh23_GetDiagStatus");
|
||||
|
||||
if ((!pLnbc) || (!pStatus)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pStatusSupported) {
|
||||
*pStatusSupported = SONY_LNBC_DIAG_STATUS_OVERCURRENT | SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN
|
||||
| SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE | SONY_LNBC_DIAG_STATUS_CABLEOPEN;
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->Read (pLnbc->pI2c, pLnbc->i2cAddress, &data, 1, SONY_I2C_START_EN|SONY_I2C_STOP_EN) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Diagnostic received data
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
* | IMON | VMON | TMON | LLC | VSEL | EN | OTF | OLF |
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
*/
|
||||
|
||||
*pStatus = 0;
|
||||
|
||||
if (data & 0x01) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_OVERCURRENT;
|
||||
}
|
||||
|
||||
if (data & 0x02) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN;
|
||||
}
|
||||
|
||||
if (data & 0x40) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (data & 0x80) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_CABLEOPEN;
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t create_1st_byte (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
uint8_t pcl,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
sony_lnbc_tone_t tone,
|
||||
sony_lnbc_transmit_mode_t mode,
|
||||
uint8_t * pData)
|
||||
{
|
||||
/*
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | PCL | TTX | TEN | LLC | VSEL| EN |ITEST| AUX |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
* | ? | ? | ? | ? | ? | ? | 0 | 0 |
|
||||
* +-----+-----+-----+-----+-----+-----+-----+-----+
|
||||
*/
|
||||
|
||||
SONY_TRACE_ENTER ("create_1st_byte");
|
||||
|
||||
if ((!pLnbc) || (!pData)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (isEnable){
|
||||
*pData = 0x04;
|
||||
} else {
|
||||
/* Set "0" to all bit. */
|
||||
*pData = 0;
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
if (pcl){
|
||||
*pData |= (uint8_t)0x80;
|
||||
}
|
||||
|
||||
switch(mode)
|
||||
{
|
||||
case SONY_LNBC_TRANSMIT_MODE_TX:
|
||||
*pData |= 0x40;
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TRANSMIT_MODE_RX:
|
||||
case SONY_LNBC_TRANSMIT_MODE_AUTO:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(tone)
|
||||
{
|
||||
case SONY_LNBC_TONE_AUTO:
|
||||
case SONY_LNBC_TONE_OFF:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TONE_ON:
|
||||
*pData |= 0x20;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(voltage)
|
||||
{
|
||||
case SONY_LNBC_VOLTAGE_LOW:
|
||||
switch(pLnbc->lowVoltage)
|
||||
{
|
||||
case ST_LNBH23_CONFIG_VOLTAGE_LOW_13_4V:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
||||
case ST_LNBH23_CONFIG_VOLTAGE_LOW_14_4V:
|
||||
*pData |= 0x10;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_HIGH:
|
||||
switch(pLnbc->highVoltage)
|
||||
{
|
||||
case ST_LNBH23_CONFIG_VOLTAGE_HIGH_18_5V:
|
||||
*pData |= 0x08;
|
||||
break;
|
||||
|
||||
case ST_LNBH23_CONFIG_VOLTAGE_HIGH_19_5V:
|
||||
*pData |= 0x18;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_AUTO:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file st_lnbh23.h
|
||||
|
||||
This file provides the functions to control LNBH23(ST).
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef ST_LNBH23_H
|
||||
#define ST_LNBH23_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
|
||||
/**
|
||||
@brief Use 13.4V for low level output voltage.
|
||||
|
||||
If you would like to use 13.4V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ST_LNBH23_CONFIG_VOLTAGE_LOW_13_4V 0
|
||||
|
||||
/**
|
||||
@brief Use 14.4V for low level output voltage.
|
||||
|
||||
If you would like to use 14.4V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ST_LNBH23_CONFIG_VOLTAGE_LOW_14_4V 1
|
||||
|
||||
/**
|
||||
@brief Use 18.5V for high level output voltage.
|
||||
|
||||
If you would like to use 18.5V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ST_LNBH23_CONFIG_VOLTAGE_HIGH_18_5V 10
|
||||
|
||||
/**
|
||||
@brief Use 19.5V for high level output voltage.
|
||||
|
||||
If you would like to use 19.5V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ST_LNBH23_CONFIG_VOLTAGE_HIGH_19_5V 11
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create a instance for LNBH23(ST).
|
||||
|
||||
@param pLnbc LNB controller driver instance.
|
||||
@param i2cAddress I2C address.
|
||||
@param pI2c I2C instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t st_lnbh23_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c);
|
||||
|
||||
#endif /* ST_LNBH23_H */
|
||||
@@ -0,0 +1,448 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/07/27
|
||||
Modification ID : ff73ffebff57618d6a5aa6e2aa9eb009b86060d1
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
#include "st_lnbh29.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
static sony_result_t st_lnbh29_Initialize (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t st_lnbh29_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value);
|
||||
|
||||
static sony_result_t st_lnbh29_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage);
|
||||
|
||||
static sony_result_t st_lnbh29_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone);
|
||||
|
||||
static sony_result_t st_lnbh29_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode);
|
||||
|
||||
static sony_result_t st_lnbh29_Sleep (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t st_lnbh29_WakeUp (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t st_lnbh29_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported);
|
||||
|
||||
static sony_result_t create_data (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData);
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t st_lnbh29_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c)
|
||||
{
|
||||
SONY_TRACE_ENTER ("st_lnbh29_Create");
|
||||
|
||||
if ((!pI2c) || (!pLnbc)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->i2cAddress = i2cAddress;
|
||||
pLnbc->pI2c = pI2c;
|
||||
|
||||
pLnbc->Initialize = st_lnbh29_Initialize;
|
||||
pLnbc->SetConfig = st_lnbh29_SetConfig;
|
||||
pLnbc->SetVoltage = st_lnbh29_SetVoltage;
|
||||
pLnbc->SetTone = st_lnbh29_SetTone;
|
||||
pLnbc->SetTransmitMode = st_lnbh29_SetTransmitMode;
|
||||
pLnbc->Sleep = st_lnbh29_Sleep;
|
||||
pLnbc->WakeUp = st_lnbh29_WakeUp;
|
||||
pLnbc->GetDiagStatus = st_lnbh29_GetDiagStatus;
|
||||
|
||||
pLnbc->isInternalTone = 1; /* Fixed to 1 */
|
||||
pLnbc->lowVoltage = ST_LNBH29_CONFIG_VOLTAGE_LOW_13_0V; /* Default value */
|
||||
pLnbc->highVoltage = ST_LNBH29_CONFIG_VOLTAGE_HIGH_18_150V; /* Default value */
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO;
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh29_Initialize (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("st_lnbh29_Initialize");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO; /* Auto is only supported */
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX; /* RX is not supported */
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x01, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh29_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("st_lnbh29_SetConfig");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(configId)
|
||||
{
|
||||
case SONY_LNBC_CONFIG_ID_TONE_INTERNAL:
|
||||
if (value == 1) {
|
||||
pLnbc->isInternalTone = value;
|
||||
} else if (value == 0) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
} else {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_LOW_VOLTAGE:
|
||||
if ((value != ST_LNBH29_CONFIG_VOLTAGE_LOW_13_0V) &&
|
||||
(value != ST_LNBH29_CONFIG_VOLTAGE_LOW_13_667V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->lowVoltage = value;
|
||||
result = st_lnbh29_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE:
|
||||
if ((value != ST_LNBH29_CONFIG_VOLTAGE_HIGH_18_150V) &&
|
||||
(value != ST_LNBH29_CONFIG_VOLTAGE_HIGH_18_817V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->highVoltage = value;
|
||||
result = st_lnbh29_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh29_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("st_lnbh29_SetVoltage");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x01, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->voltage = voltage;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh29_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone)
|
||||
{
|
||||
SONY_TRACE_ENTER ("st_lnbh29_SetTone");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(tone)
|
||||
{
|
||||
case SONY_LNBC_TONE_ON:
|
||||
case SONY_LNBC_TONE_OFF:
|
||||
/* ST LNBH29 doesn't support this function. */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TONE_AUTO:
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->tone = tone;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh29_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode)
|
||||
{
|
||||
SONY_TRACE_ENTER ("st_lnbh29_SetTransmitMode");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(mode)
|
||||
{
|
||||
case SONY_LNBC_TRANSMIT_MODE_TX:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TRANSMIT_MODE_RX:
|
||||
case SONY_LNBC_TRANSMIT_MODE_AUTO:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->transmitMode = mode;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh29_Sleep (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("st_lnbh29_Sleep");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x01, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh29_WakeUp (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("st_lnbh29_WakeUp");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_data (pLnbc, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x01, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_ACTIVE;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t st_lnbh29_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("st_lnbh29_GetDiagStatus");
|
||||
|
||||
if ((!pLnbc) || (!pStatus)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pStatusSupported) {
|
||||
*pStatusSupported = SONY_LNBC_DIAG_STATUS_OVERCURRENT | SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN
|
||||
| SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE | SONY_LNBC_DIAG_STATUS_VINOUTOFRANGE
|
||||
| SONY_LNBC_DIAG_STATUS_BACKBIAS;
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->ReadRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, &data, 1) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* STATUS register
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
* | N/A | N/A | N/A | PDO | PNG | VMON | OTF | OLF |
|
||||
* +---------+---------+---------+---------+---------+---------+---------+---------+
|
||||
*/
|
||||
|
||||
*pStatus = 0;
|
||||
|
||||
if (data & 0x01) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_OVERCURRENT;
|
||||
}
|
||||
|
||||
if (data & 0x02) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN;
|
||||
}
|
||||
|
||||
if (data & 0x04) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (data & 0x08) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VINOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (data & 0x10) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_BACKBIAS;
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t create_data (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData)
|
||||
{
|
||||
SONY_TRACE_ENTER ("create_data");
|
||||
|
||||
if ((!pLnbc) || (!pData)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
*pData = 0;
|
||||
|
||||
switch(voltage)
|
||||
{
|
||||
case SONY_LNBC_VOLTAGE_LOW:
|
||||
switch(pLnbc->lowVoltage)
|
||||
{
|
||||
case ST_LNBH29_CONFIG_VOLTAGE_LOW_13_0V:
|
||||
/* 13.0V */
|
||||
*pData |= 0x01;
|
||||
break;
|
||||
|
||||
case ST_LNBH29_CONFIG_VOLTAGE_LOW_13_667V:
|
||||
/* 13.667V */
|
||||
*pData |= 0x03;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_HIGH:
|
||||
switch(pLnbc->highVoltage)
|
||||
{
|
||||
case ST_LNBH29_CONFIG_VOLTAGE_HIGH_18_150V:
|
||||
/* 18.150V */
|
||||
*pData |= 0x05;
|
||||
break;
|
||||
|
||||
case ST_LNBH29_CONFIG_VOLTAGE_HIGH_18_817V:
|
||||
/* 18.817V */
|
||||
*pData |= 0x07;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file st_lnbh29.h
|
||||
|
||||
This file provides the functions to control LNBH29(ST).
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef ST_LNBH29_H
|
||||
#define ST_LNBH29_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
|
||||
/**
|
||||
@brief Use 13.333V for low level output voltage.
|
||||
|
||||
If you would like to use 13.0V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ST_LNBH29_CONFIG_VOLTAGE_LOW_13_0V 0
|
||||
|
||||
/**
|
||||
@brief Use 13.667V for low level output voltage.
|
||||
|
||||
If you would like to use 13.667V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define ST_LNBH29_CONFIG_VOLTAGE_LOW_13_667V 1
|
||||
|
||||
/**
|
||||
@brief Use 18.150V for high level output voltage.
|
||||
|
||||
If you would like to use 18.150V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ST_LNBH29_CONFIG_VOLTAGE_HIGH_18_150V 10
|
||||
|
||||
/**
|
||||
@brief Use 18.817V for high level output voltage.
|
||||
|
||||
If you would like to use 18.817V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define ST_LNBH29_CONFIG_VOLTAGE_HIGH_18_817V 11
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create a instance for LNBH29(ST).
|
||||
|
||||
@param pLnbc LNB controller driver instance.
|
||||
@param i2cAddress I2C address.
|
||||
@param pI2c I2C instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t st_lnbh29_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c);
|
||||
|
||||
#endif /* ST_LNBH29_H */
|
||||
+524
@@ -0,0 +1,524 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2017 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2017/11/30
|
||||
Modification ID : 253a4918e2da2cf28a9393596fa16f25024e504d
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
#include "ti_tps65235.h"
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Static Functions
|
||||
----------------------------------------------------------------------------*/
|
||||
static sony_result_t create_1st_byte (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData);
|
||||
|
||||
static sony_result_t create_2nd_byte (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
sony_lnbc_transmit_mode_t mode,
|
||||
uint8_t * pData);
|
||||
|
||||
static sony_result_t ti_tps65235_Initialize (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t ti_tps65235_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value);
|
||||
|
||||
static sony_result_t ti_tps65235_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage);
|
||||
|
||||
static sony_result_t ti_tps65235_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone);
|
||||
|
||||
static sony_result_t ti_tps65235_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode);
|
||||
|
||||
static sony_result_t ti_tps65235_Sleep (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t ti_tps65235_WakeUp (sony_lnbc_t * pLnbc);
|
||||
|
||||
static sony_result_t ti_tps65235_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported);
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Functions
|
||||
----------------------------------------------------------------------------*/
|
||||
sony_result_t ti_tps65235_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c)
|
||||
{
|
||||
SONY_TRACE_ENTER ("ti_tps65235_Create");
|
||||
|
||||
if ((!pLnbc) || (!pI2c)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->i2cAddress = i2cAddress;
|
||||
pLnbc->pI2c = pI2c;
|
||||
|
||||
pLnbc->Initialize = ti_tps65235_Initialize;
|
||||
pLnbc->SetConfig = ti_tps65235_SetConfig;
|
||||
pLnbc->SetVoltage = ti_tps65235_SetVoltage;
|
||||
pLnbc->SetTone = ti_tps65235_SetTone;
|
||||
pLnbc->SetTransmitMode = ti_tps65235_SetTransmitMode;
|
||||
pLnbc->Sleep = ti_tps65235_Sleep;
|
||||
pLnbc->WakeUp = ti_tps65235_WakeUp;
|
||||
pLnbc->GetDiagStatus = ti_tps65235_GetDiagStatus;
|
||||
|
||||
pLnbc->isInternalTone = 0;
|
||||
pLnbc->lowVoltage = TI_TPS65235_CONFIG_VOLTAGE_LOW_13_4V; /* Default value */
|
||||
pLnbc->highVoltage = TI_TPS65235_CONFIG_VOLTAGE_HIGH_18_2V; /* Default value */
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO;
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t ti_tps65235_Initialize (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("ti_tps65235_Initialize");
|
||||
|
||||
if (!pLnbc) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_UNKNOWN;
|
||||
pLnbc->voltage = SONY_LNBC_VOLTAGE_LOW;
|
||||
pLnbc->tone = SONY_LNBC_TONE_AUTO; /* Auto is only supported */
|
||||
|
||||
if (pLnbc->transmitMode != SONY_LNBC_TRANSMIT_MODE_AUTO) {
|
||||
pLnbc->transmitMode = SONY_LNBC_TRANSMIT_MODE_TX;
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = create_2nd_byte (pLnbc, 0, pLnbc->transmitMode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x01, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t ti_tps65235_SetConfig (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_config_id_t configId,
|
||||
int32_t value)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("ti_tps65235_SetConfig");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(configId)
|
||||
{
|
||||
case SONY_LNBC_CONFIG_ID_LOW_VOLTAGE:
|
||||
if ((value != TI_TPS65235_CONFIG_VOLTAGE_LOW_13_4V) &&
|
||||
(value != TI_TPS65235_CONFIG_VOLTAGE_LOW_14_6V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->lowVoltage = value;
|
||||
result = ti_tps65235_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE:
|
||||
if ((value != TI_TPS65235_CONFIG_VOLTAGE_HIGH_18_2V) &&
|
||||
(value != TI_TPS65235_CONFIG_VOLTAGE_HIGH_19_4V)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
pLnbc->highVoltage = value;
|
||||
result = ti_tps65235_SetVoltage (pLnbc, pLnbc->voltage);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_LNBC_CONFIG_ID_TONE_INTERNAL:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK); /* Internal/External tone is controlled by EXTM pin. No need to set register.
|
||||
External: gated by EXTM logic pulse, Internal: gated by EXTM logic envelop */
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t ti_tps65235_SetVoltage (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("ti_tps65235_SetVoltage");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->voltage = voltage;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t ti_tps65235_SetTone (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_tone_t tone)
|
||||
{
|
||||
SONY_TRACE_ENTER ("ti_tps65235_SetTone");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
switch(tone)
|
||||
{
|
||||
case SONY_LNBC_TONE_OFF:
|
||||
case SONY_LNBC_TONE_ON:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
|
||||
case SONY_LNBC_TONE_AUTO:
|
||||
/* Do nothing */
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pLnbc->tone = tone;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t ti_tps65235_SetTransmitMode (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_transmit_mode_t mode)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("ti_tps65235_SetTransmitMode");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pLnbc->state != SONY_LNBC_STATE_ACTIVE) &&
|
||||
(pLnbc->state != SONY_LNBC_STATE_SLEEP)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_2nd_byte (pLnbc, 1, mode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->state == SONY_LNBC_STATE_ACTIVE) {
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x01, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
pLnbc->transmitMode = mode;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t ti_tps65235_Sleep (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("ti_tps65235_Sleep");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_2nd_byte (pLnbc, 0, pLnbc->transmitMode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x01, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_SLEEP;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t ti_tps65235_WakeUp (sony_lnbc_t * pLnbc)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("ti_tps65235_WakeUp");
|
||||
|
||||
if (!pLnbc){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(pLnbc->state)
|
||||
{
|
||||
case SONY_LNBC_STATE_ACTIVE:
|
||||
/* Do nothing */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_LNBC_STATE_SLEEP:
|
||||
/* Continue */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_STATE_UNKNOWN:
|
||||
default:
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = create_1st_byte (pLnbc, pLnbc->voltage, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x00, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = create_2nd_byte (pLnbc, 1, pLnbc->transmitMode, &data);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
|
||||
if (pLnbc->pI2c->WriteOneRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x01, data) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pLnbc->state = SONY_LNBC_STATE_ACTIVE;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t ti_tps65235_GetDiagStatus (sony_lnbc_t * pLnbc,
|
||||
uint32_t * pStatus,
|
||||
uint32_t * pStatusSupported)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("ti_tps65235_GetDiagStatus");
|
||||
|
||||
if ((!pLnbc) || (!pStatus)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pStatusSupported) {
|
||||
*pStatusSupported = SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE | SONY_LNBC_DIAG_STATUS_CABLEOPEN
|
||||
| SONY_LNBC_DIAG_STATUS_OVERCURRENT | SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN;
|
||||
}
|
||||
|
||||
if (pLnbc->pI2c->ReadRegister (pLnbc->pI2c, pLnbc->i2cAddress, 0x02, &data, 1) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Status Register
|
||||
* +---------+---------+---------+---------+---------+---------+----------+----------+
|
||||
* | Reserve |TDETGOOD | LDO_ON | T125 | TSD | OCP |CABLE_GOOD|VOUT_GOOD |
|
||||
* +---------+---------+---------+---------+---------+---------+----------+----------+
|
||||
*/
|
||||
|
||||
*pStatus = 0;
|
||||
|
||||
if (!(data & 0x01)) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_VOUTOUTOFRANGE;
|
||||
}
|
||||
|
||||
if (!(data & 0x02)) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_CABLEOPEN;
|
||||
}
|
||||
|
||||
if (data & 0x04) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_OVERCURRENT;
|
||||
}
|
||||
|
||||
if (data & 0x08) {
|
||||
*pStatus |= SONY_LNBC_DIAG_STATUS_THERMALSHUTDOWN;
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t create_1st_byte (sony_lnbc_t * pLnbc,
|
||||
sony_lnbc_voltage_t voltage,
|
||||
uint8_t * pData)
|
||||
{
|
||||
SONY_TRACE_ENTER ("create_1st_byte");
|
||||
|
||||
if ((!pLnbc) || (!pData)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Control Register 1
|
||||
* +-------+-------+-------+-------+-------+-------+-------+---------+
|
||||
* |I2C_CON|PWM/PSM| - | VSET3 | VSET2 | VSET1 | VSET0 |EXTM_TONE|
|
||||
* +-------+-------+-------+-------+-------+-------+-------+---------+
|
||||
* | ? | 1 | 0 | ? | ? | ? | ? | 0 |
|
||||
* +-------+-------+-------+-------+-------+-------+-------+---------+
|
||||
* I2C_CON = 0 : I2C control disabled
|
||||
* 1 : I2C control enabled
|
||||
*
|
||||
* +------+------+------+------+------+
|
||||
* |VSET3 |VSET2 |VSET1 |VSET0 |LNB(V)|
|
||||
* +------+------+------+------+------+
|
||||
* | 0 | 1 | 0 | 0 | 13.4 |
|
||||
* +------+------+------+------+------+
|
||||
* | 0 | 1 | 1 | 0 | 14.6 |
|
||||
* +------+------+------+------+------+
|
||||
* | 1 | 1 | 0 | 0 | 18.2 |
|
||||
* +------+------+------+------+------+
|
||||
* | 1 | 1 | 1 | 0 | 19.4 |
|
||||
* +------+------+------+------+------+
|
||||
*/
|
||||
*pData = 0x40;
|
||||
|
||||
switch(voltage)
|
||||
{
|
||||
case SONY_LNBC_VOLTAGE_LOW:
|
||||
case SONY_LNBC_VOLTAGE_HIGH:
|
||||
/* I2C_CON = 1 */
|
||||
*pData |= 0x80;
|
||||
break;
|
||||
|
||||
case SONY_LNBC_VOLTAGE_AUTO:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((voltage == SONY_LNBC_VOLTAGE_LOW) && (pLnbc->lowVoltage == TI_TPS65235_CONFIG_VOLTAGE_LOW_13_4V)){
|
||||
/* VSET[3:0] = 0x4 */
|
||||
*pData |= (0x4 << 1);
|
||||
} else if ((voltage == SONY_LNBC_VOLTAGE_LOW) && (pLnbc->lowVoltage == TI_TPS65235_CONFIG_VOLTAGE_LOW_14_6V)){
|
||||
/* VSET[3:0] = 0x6 */
|
||||
*pData |= (0x6 << 1);
|
||||
} else if ((voltage == SONY_LNBC_VOLTAGE_HIGH) && (pLnbc->highVoltage == TI_TPS65235_CONFIG_VOLTAGE_HIGH_18_2V)){
|
||||
/* VSET[3:0] = 0xC */
|
||||
*pData |= (0xC << 1);
|
||||
} else if ((voltage == SONY_LNBC_VOLTAGE_HIGH) && (pLnbc->highVoltage == TI_TPS65235_CONFIG_VOLTAGE_HIGH_19_4V)){
|
||||
/* VSET[3:0] = 0xE */
|
||||
*pData |= (0xE << 1);
|
||||
} else {
|
||||
/* VSET[3:0] = 0x4 */
|
||||
*pData |= (0x4 << 1);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t create_2nd_byte (sony_lnbc_t * pLnbc,
|
||||
uint8_t isEnable,
|
||||
sony_lnbc_transmit_mode_t mode,
|
||||
uint8_t * pData)
|
||||
{
|
||||
SONY_TRACE_ENTER ("create_2nd_byte");
|
||||
|
||||
if ((!pLnbc) || (!pData)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Control Register 2
|
||||
* +---------+---------+---------+---------+---------+---------+---------+----------+
|
||||
* | TONEAMP | TIMER | l_SW | FSET | EN |DOUTMODE |TONE_AUTO|TONE_TRANS|
|
||||
* +---------+---------+---------+---------+---------+---------+---------+----------+
|
||||
* | 0 | 0 | 0 | 1 | ? | 0 | ? | ? |
|
||||
* +---------+---------+---------+---------+---------+---------+---------+----------+
|
||||
* EN = 0 : LNB output disabled
|
||||
* 1 : LNB output voltage Enabled
|
||||
* TONE_AUTO = 0 : GDR (External bypass FET control) is controlled by TONE_TRANS
|
||||
* 1 : GDR (External bypass FET control) is automatically controlled by 22kHz tones transmit
|
||||
* TONE_TRANS = 0 : GDR output with VLNB voltage. Bypass FET is OFF for tone receiving from satellite,
|
||||
* 1 : GDR output with VCP voltage. Bypass FET is ON for tone transmit from TPS65235,
|
||||
*/
|
||||
*pData = 0x10;
|
||||
|
||||
if (isEnable){
|
||||
/* EN = 1 */
|
||||
*pData |= 0x08;
|
||||
}
|
||||
|
||||
switch(mode)
|
||||
{
|
||||
case SONY_LNBC_TRANSMIT_MODE_TX:
|
||||
/* TONE_TRANS = 1 */
|
||||
*pData |= 0x01;
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TRANSMIT_MODE_RX:
|
||||
/* TONE_TRANS = 0 */
|
||||
break;
|
||||
|
||||
case SONY_LNBC_TRANSMIT_MODE_AUTO:
|
||||
/* TONE_AUTO = 1 */
|
||||
*pData |= 0x02;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2017 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2017/11/30
|
||||
Modification ID : 253a4918e2da2cf28a9393596fa16f25024e504d
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file ti_tps65235.h
|
||||
|
||||
This file provides the functions to control TPS65235(TI).
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef TI_TPS65235_H
|
||||
#define TI_TPS65235_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_lnbc.h"
|
||||
|
||||
/**
|
||||
@brief Use 13.4V for low level output voltage.
|
||||
|
||||
If you would like to use 13.4V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define TI_TPS65235_CONFIG_VOLTAGE_LOW_13_4V 0
|
||||
|
||||
/**
|
||||
@brief Use 14.6V for low level output voltage.
|
||||
|
||||
If you would like to use 14.6V as "Low level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_LOW_VOLTAGE, value).
|
||||
*/
|
||||
#define TI_TPS65235_CONFIG_VOLTAGE_LOW_14_6V 1
|
||||
|
||||
/**
|
||||
@brief Use 18.2V for high level output voltage.
|
||||
|
||||
If you would like to use 18.2V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define TI_TPS65235_CONFIG_VOLTAGE_HIGH_18_2V 10
|
||||
|
||||
/**
|
||||
@brief Use 19.4V for high level output voltage.
|
||||
|
||||
If you would like to use 19.4V as "High level voltage",
|
||||
please set this parameter by sony_lnbc_t::SetConfig(SONY_LNBC_CONFIG_ID_HIGH_VOLTAGE, value).
|
||||
*/
|
||||
#define TI_TPS65235_CONFIG_VOLTAGE_HIGH_19_4V 11
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create a instance for TPS65235(TI).
|
||||
|
||||
@param pLnbc LNB controller driver instance.
|
||||
@param i2cAddress I2C address.
|
||||
@param pI2c I2C instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t ti_tps65235_Create (sony_lnbc_t * pLnbc,
|
||||
uint8_t i2cAddress,
|
||||
sony_i2c_t * pI2c);
|
||||
|
||||
#endif /* TI_TPS65235_H */
|
||||
+1011
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,313 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_demod_sat_device_ctrl.h
|
||||
|
||||
This file provide satellite device control function for demodulator.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef SONY_DEMOD_SAT_DEVICE_CONTROL_H
|
||||
#define SONY_DEMOD_SAT_DEVICE_CONTROL_H
|
||||
|
||||
#include "../sony_common.h"
|
||||
#include "../sony_demod.h"
|
||||
|
||||
/**
|
||||
@brief Definition of length of DiSEqC / Single cable message.
|
||||
*/
|
||||
#define SONY_DISEQC_MESSAGE_LENGTH 12
|
||||
|
||||
/**
|
||||
@brief Message structure for DiSEqC / Single cable message.
|
||||
*/
|
||||
typedef struct {
|
||||
uint8_t data[SONY_DISEQC_MESSAGE_LENGTH]; /**< Data of the message. */
|
||||
uint8_t length; /**< Length of the message. */
|
||||
} sony_diseqc_message_t;
|
||||
|
||||
/**
|
||||
@brief DSQOUT signal mode.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_DSQOUT_MODE_PWM, /**< Output PWM signal from demodulator. */
|
||||
SONY_DSQOUT_MODE_ENVELOPE /**< Output envelope signal from demodulator. */
|
||||
} sony_dsqout_mode_t;
|
||||
|
||||
/**
|
||||
@brief RXEN signal mode.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_RXEN_MODE_NORMAL, /**< Normal mode. (Output "1" during device waits reply from slave device.) */
|
||||
SONY_RXEN_MODE_INV, /**< Inverted mode. (Output "0" during device waits reply from slave device.) */
|
||||
SONY_RXEN_MODE_FIXED_LOW, /**< Fixed to low always. */
|
||||
SONY_RXEN_MODE_FIXED_HIGH /**< Fixed to high always. */
|
||||
} sony_rxen_mode_t;
|
||||
|
||||
/**
|
||||
@brief TXEN signal mode.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_TXEN_MODE_NORMAL, /**< Normal mode. (Output "1" during device sends DiSEqC command.) */
|
||||
SONY_TXEN_MODE_INV, /**< Inverted mode. (Output "0" during device sends DiSEqC command.) */
|
||||
SONY_TXEN_MODE_FIXED_LOW, /**< Fixed to low always. */
|
||||
SONY_TXEN_MODE_FIXED_HIGH /**< Fixed to high always. */
|
||||
} sony_txen_mode_t;
|
||||
|
||||
/**
|
||||
@brief Tone burst mode.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_TONEBURST_MODE_OFF, /**< Not send tone burst. */
|
||||
SONY_TONEBURST_MODE_A, /**< "0" Tone burst. (Satellite A) */
|
||||
SONY_TONEBURST_MODE_B /**< "1" Data burst. (Satellite B) */
|
||||
} sony_toneburst_mode_t;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Enable/disable satellite device ctrl function.
|
||||
|
||||
Setup DSQOUT/DSQIN pin enable/disable.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param enable Enable/disable setting.
|
||||
- 0: Disable
|
||||
- 1: Enable
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_Enable (sony_demod_t * pDemod, uint8_t enable);
|
||||
|
||||
/**
|
||||
@brief Configure for "DSQOUT" signal.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param mode DSQOUT signal mode. (Default value is PWM)
|
||||
@param toneFreqKHz Tone signal frequency. Currently, only 22(KHz) and 44(KHz) are supported.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_DSQOUTSetting (sony_demod_t * pDemod,
|
||||
sony_dsqout_mode_t mode,
|
||||
uint8_t toneFreqKHz);
|
||||
|
||||
/**
|
||||
@brief Configure for "RXEN" signal.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param mode RXEN signal mode.
|
||||
@param posDelay Positive delay in ms.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_RXENSetting (sony_demod_t * pDemod,
|
||||
sony_rxen_mode_t mode,
|
||||
uint8_t posDelay);
|
||||
|
||||
/**
|
||||
@brief Configure for "TXEN" signal.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param mode TXEN signal mode.
|
||||
@param posDelay Positive delay in ms.
|
||||
@param negDelay Negative delay in ms.
|
||||
|
||||
@return
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_TXENSetting (sony_demod_t * pDemod,
|
||||
sony_txen_mode_t mode,
|
||||
uint8_t posDelay,
|
||||
uint8_t negDelay);
|
||||
|
||||
/**
|
||||
@brief Output tone signal.
|
||||
|
||||
Tone signal output status is changed after calling this function immediately.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param isEnable Continuous tone mode.
|
||||
- 0: Disable (Not output)
|
||||
- 1: Enable (Output)
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_OutputTone (sony_demod_t * pDemod,
|
||||
uint8_t isEnable);
|
||||
|
||||
/**
|
||||
@brief Set "Tone burst" mode to demodulator.
|
||||
|
||||
Tone burst signal outputs after calling sony_demod_sat_device_ctrl_StartTransmit() function.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param toneBurstMode Tone burst mode.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_SetToneBurst (sony_demod_t * pDemod,
|
||||
sony_toneburst_mode_t toneBurstMode);
|
||||
|
||||
/**
|
||||
@brief Set DiSEqC command to demodulator.
|
||||
|
||||
DiSEqC commands outputs after calling sony_demod_sat_device_ctrl_StartTransmit() function.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param isEnable DiSEqC command mode.
|
||||
- 0: Disable (Not output any DiSEqC command)
|
||||
- 1: Enable (Output)
|
||||
@param pCommand1 The address of 1st DiSEqC command.
|
||||
@param count1 Transmitting count for 1st DiSEqC command.
|
||||
@param pCommand2 The address of 2nd DiSEqC command.
|
||||
(NULL if you want to transmit only one DiSEqC command.)
|
||||
@param count2 Transmitting count for 2nd DiSEqC command.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_SetDiseqcCommand (sony_demod_t * pDemod,
|
||||
uint8_t isEnable,
|
||||
sony_diseqc_message_t * pCommand1,
|
||||
uint8_t count1,
|
||||
sony_diseqc_message_t * pCommand2,
|
||||
uint8_t count2);
|
||||
|
||||
/**
|
||||
@brief Set TxIdle time.
|
||||
- DiSEqC command.
|
||||
- Tone burst.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param idleTimeMs Idle time in ms.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_SetTxIdleTime (sony_demod_t * pDemod,
|
||||
uint8_t idleTimeMs);
|
||||
|
||||
/**
|
||||
@brief Set RxIdle time.
|
||||
- DiSEqC command with reply.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param idleTimeMs Idle time in ms.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_SetRxIdleTime (sony_demod_t * pDemod,
|
||||
uint8_t idleTimeMs);
|
||||
|
||||
/**
|
||||
@brief Set repeat to repeat time between each command.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param r2rTime Idle time in ms.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_SetR2RTime (sony_demod_t * pDemod,
|
||||
uint32_t r2rTime);
|
||||
|
||||
/**
|
||||
@brief Set DiSEqC reply parameters.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param isEnable DiSEqC reply mode.
|
||||
- 0: No reply mode.
|
||||
- 1: Reply mode.
|
||||
@param replyTimeoutMs Reply timeout time in ms.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_SetDiseqcReplyMode (sony_demod_t * pDemod,
|
||||
uint8_t isEnable,
|
||||
uint16_t replyTimeoutMs);
|
||||
|
||||
/**
|
||||
@brief Start transmit sequence.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_StartTransmit (sony_demod_t * pDemod);
|
||||
|
||||
/**
|
||||
@brief Get transmit status.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param pStatus Transmit status.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_GetTransmitStatus (sony_demod_t * pDemod,
|
||||
uint8_t * pStatus);
|
||||
|
||||
/**
|
||||
@brief Get reply message.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param pReplyMessage Reply message instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful and pMessage is valid.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_GetReplyMessage (sony_demod_t * pDemod,
|
||||
sony_diseqc_message_t * pReplyMessage);
|
||||
|
||||
/**
|
||||
@brief Get RXEN mode
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param pIsEnable RXEN mode.
|
||||
- 0: Disable
|
||||
- 1: Enable
|
||||
|
||||
@return SONY_RESULT_OK if successful and pIsEnable is valid.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_GetRXENMode (sony_demod_t * pDemod,
|
||||
uint8_t * pIsEnable);
|
||||
|
||||
/**
|
||||
@brief Get TXEN mode
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param pIsEnable TXEN mode.
|
||||
- 0: Disable
|
||||
- 1: Enable
|
||||
|
||||
@return SONY_RESULT_OK if successful and pIsEnable is valid.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_GetTXENMode (sony_demod_t * pDemod,
|
||||
uint8_t * pIsEnable);
|
||||
|
||||
/**
|
||||
@brief Set DiSEqC reply mask setting.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param pattern Pattern to allow receive as 1st byte of reply message.
|
||||
@param mask Mask for pattern data.
|
||||
|
||||
@return SONY_RESULT_OK if successful and pIsEnable is valid.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_SetDiseqcReplyMask (sony_demod_t * pDemod,
|
||||
uint8_t pattern,
|
||||
uint8_t mask);
|
||||
|
||||
/**
|
||||
@brief Change the single cable mode of demod driver.
|
||||
|
||||
@param pDemod Demodulator instance.
|
||||
@param enable Single cable mode.
|
||||
- 0: Disable
|
||||
- 1: Enable
|
||||
|
||||
@return SONY_RESULT_OK if successful and pIsEnable is valid.
|
||||
*/
|
||||
sony_result_t sony_demod_sat_device_ctrl_EnableSinglecable (sony_demod_t * pDemod,
|
||||
uint8_t enable);
|
||||
|
||||
#endif /* SONY_DEMOD_SAT_DEVICE_CONTROL_H */
|
||||
@@ -0,0 +1,54 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_diseqc_command.h
|
||||
|
||||
This file provides definitions for DiSEqC command.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef SONY_DISEQC_COMMAND_H
|
||||
#define SONY_DISEQC_COMMAND_H
|
||||
|
||||
#include "sony_demod_sat_device_ctrl.h"
|
||||
|
||||
/**
|
||||
@brief Definition of framing byte for DiSEqC message.
|
||||
*/
|
||||
typedef enum sony_diseqc_framing_t {
|
||||
SONY_DISEQC_FRAMING_MASTER_NO_REPLY_FIRST = 0xE0, /**< Command from master, no reply required. (first transmission) */
|
||||
SONY_DISEQC_FRAMING_MASTER_NO_REPLY_REPEATED = 0xE1, /**< Command from master, no reply required. (repeated transmission) */
|
||||
SONY_DISEQC_FRAMING_MASTER_REPLY_FIRST = 0xE2, /**< Command from master, reply required. (first transmission) */
|
||||
SONY_DISEQC_FRAMING_MASTER_REPLY_REPEATED = 0xE3, /**< Command from master, reply required. (repeated transmission) */
|
||||
SONY_DISEQC_FRAMING_SLAVE_REPLY_OK = 0xE4, /**< Reply from slave, command OK, no errors detected. */
|
||||
SONY_DISEQC_FRAMING_SLAVE_REPLY_CMD_UNSUPPORTED = 0xE5, /**< Reply from slave, command not supported. */
|
||||
SONY_DISEQC_FRAMING_SLAVE_REPLY_ERR_PARITY = 0xE6, /**< Reply from slave, parity error detected. */
|
||||
SONY_DISEQC_FRAMING_SLAVE_REPLY_CMD_UNKNOWN = 0xE7 /**< Reply from slave, command not recoginised/unknown. Request repeat. */
|
||||
} sony_diseqc_framing_t;
|
||||
|
||||
/**
|
||||
@brief Definition of address byte for DiSEqC message.
|
||||
*/
|
||||
typedef enum sony_diseqc_address_t {
|
||||
SONY_DISEQC_ADDRESS_ALL_DEVICES = 0x00, /**< Any device (Master to all devices) */
|
||||
SONY_DISEQC_ADDRESS_ALL_LNB_SMATV_SWITCHER = 0x10, /**< Any LNB, Switcher or SMATV (Master to all...) */
|
||||
SONY_DISEQC_ADDRESS_LNB_DEVICE = 0x11, /**< LNB devices. */
|
||||
SONY_DISEQC_ADDRESS_LNB_WITH_LOOP_THROUGH = 0x12, /**< LNB with loop-through switching. */
|
||||
SONY_DISEQC_ADDRESS_SWITCHER_DEVICE_DC_BLK = 0x14, /**< Switcher (inc. DC blocking) */
|
||||
SONY_DISEQC_ADDRESS_SWITCHER_DEVICE_DC_LOOP = 0x15, /**< Switcher with DC loop through. */
|
||||
SONY_DISEQC_ADDRESS_SMATV_DEVICE = 0x18, /**< SMATV devices. */
|
||||
SONY_DISEQC_ADDRESS_ANY_POLARISER = 0x20, /**< Any Polariser (Master to all Polarisers) */
|
||||
SONY_DISEQC_ADDRESS_LIN_POL_CONTROLLER = 0x21, /**< Linear Polarisation Controller. */
|
||||
SONY_DISEQC_ADDRESS_ANY_POSITIONER = 0x30, /**< Any Positioner (Master to all Positioners) */
|
||||
SONY_DISEQC_ADDRESS_POLAR_POSITIONER = 0x31, /**< Polar/Azimuth Positioner. */
|
||||
SONY_DISEQC_ADDRESS_ELEVATION_POSITIONER = 0x32, /**< Elevation Positioner. */
|
||||
SONY_DISEQC_ADDRESS_ANY_INSTALLER_AID = 0x40, /**< Any Installer Aid (Master to all Installer Aids). */
|
||||
SONY_DISEQC_ADDRESS_SIGNAL_STRENGTH_ANALOGUE = 0x41, /**< Signal strength 0 Analogue value. */
|
||||
SONY_DISEQC_ADDRESS_ANY_INTELLI_SLAVES = 0x70, /**< Any Intelligent Slave Interfaces (Master to all) */
|
||||
SONY_DISEQC_ADDRESS_SUBSCRIBER_CONTROLLED_HEADENDS = 0x71 /**< Interface for subscriber controlled headends. */
|
||||
} sony_diseqc_address_t;
|
||||
|
||||
#endif /* SONY_DISEQC_COMMAND_H */
|
||||
@@ -0,0 +1,288 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/12/13
|
||||
Modification ID : e402a4dcb0e51a00c34b174334c082c1211eebf1
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_diseqc_command_1_0.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t sony_diseqc_command_Reset (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_Reset");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x00;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_Standby (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_Standby");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x02;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_PowerOn (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_PowerOn");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x03;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetLo (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetLo");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x20;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetVR (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetVR");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x21;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetPosA (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetPosA");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x22;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetSOA (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetSOA");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x23;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetHi (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetHi");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x24;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetHL (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetHL");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x25;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetPosB (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetPosB");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x26;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetSOB (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetSOB");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x27;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_WriteN0 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t data)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_WriteN0");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x38;
|
||||
pMessage->data[3] = data;
|
||||
pMessage->length = 4;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
@@ -0,0 +1,180 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/12/13
|
||||
Modification ID : e402a4dcb0e51a00c34b174334c082c1211eebf1
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_diseqc_command_1_0.h
|
||||
|
||||
This file provides functions for generating "DiSEqC1.0" commands.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef SONY_DISEQC_COMMAND_1_0_H
|
||||
#define SONY_DISEQC_COMMAND_1_0_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_diseqc_command.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create DiSEqC command to reset DiSEqC microcontroller.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_Reset (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to switch peripheral power supply off.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_Standby (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to switch peripheral power supply on.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_PowerOn (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select the Low Local Oscillator frequency.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetLo (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command select Vertical Polarisation (or Right circular).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetVR (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command select Satellite position A (or position C).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetPosA (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select Switch Option A (e.g. positions A/B).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetSOA (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select the High Local Oscillator frequency.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetHi (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select Horizontal Polarisation (or Left circular).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetHL (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select Satellite position B (or position D).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetPosB (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select Switch Option B (e.g. positions C/D).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetSOB (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to write to Port group 0 (Committed switches).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
@param data Data to send.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_WriteN0 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t data);
|
||||
|
||||
#endif /* SONY_DISEQC_COMMAND_1_0_H */
|
||||
@@ -0,0 +1,284 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/12/13
|
||||
Modification ID : e402a4dcb0e51a00c34b174334c082c1211eebf1
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_diseqc_command_1_1.h"
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Static Functions
|
||||
----------------------------------------------------------------------------*/
|
||||
static uint32_t dectobcd(uint32_t decimal);
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Functions
|
||||
----------------------------------------------------------------------------*/
|
||||
sony_result_t sony_diseqc_command_SetS1A (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetS1A");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x28;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetS2A (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetS2A");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x29;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetS3A (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetS3A");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x2A;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetS4A (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetS4A");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x2B;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetS1B (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetS1B");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x2C;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetS2B (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetS2B");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x2D;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetS3B (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetS3B");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x2E;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetS4B (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetS4B");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x2F;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_WriteN1 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t data)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_WriteN1");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x39;
|
||||
pMessage->data[3] = data;
|
||||
pMessage->length = 4;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_WriteFreq (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint32_t frequency)
|
||||
{
|
||||
int32_t index = 0;
|
||||
uint32_t data = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_WriteFreq");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x58;
|
||||
|
||||
frequency = (frequency + 50) / 100;
|
||||
data = dectobcd(frequency);
|
||||
|
||||
if ((data >> 24) & 0xFF){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
pMessage->data[3] = (uint8_t)((data >> 16) & 0xFF);
|
||||
pMessage->data[4] = (uint8_t)((data >> 8) & 0xFF);
|
||||
pMessage->data[5] = (uint8_t)( data & 0xFF);
|
||||
if (pMessage->data[5] == 0x00){
|
||||
/* Don't send 6th byte data(data[5]). */
|
||||
pMessage->length = 5;
|
||||
} else {
|
||||
/* Send 6th byte data(data[5]). */
|
||||
pMessage->length = 6;
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
Static Functions
|
||||
----------------------------------------------------------------------------*/
|
||||
static uint32_t dectobcd(uint32_t decimal)
|
||||
{
|
||||
uint32_t bcd = 0;
|
||||
uint8_t r = 0;
|
||||
uint8_t index = 0;
|
||||
|
||||
for (index = 0; index < 8 ; index++)
|
||||
{
|
||||
r = (uint8_t)(decimal % 10) ;
|
||||
decimal /= 10 ;
|
||||
bcd |= ((uint32_t)(r & 0x0F) << (int32_t)(4 * index)) ;
|
||||
}
|
||||
return bcd;
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/12/13
|
||||
Modification ID : e402a4dcb0e51a00c34b174334c082c1211eebf1
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_diseqc_command_1_1.h
|
||||
|
||||
This file provides functions for generating "DiSEqC1.1" commands.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef SONY_DISEQC_COMMAND_1_1_H
|
||||
#define SONY_DISEQC_COMMAND_1_1_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_diseqc_command.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create DiSEqC command to select switch S1 input A (deselect input B).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetS1A (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select switch S2 input A (deselect input B).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetS2A (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select switch S3 input A (deselect input B).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetS3A (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select switch S4 input A (deselect input B).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetS4A (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select switch S1 input B (deselect input A).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetS1B (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select switch S2 input B (deselect input A).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetS2B (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select switch S3 input B (deselect input A).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetS3B (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to select switch S4 input B (deselect input A).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetS4B (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to write to Port group 1 (Uncommitted switches).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
@param data Data to send.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_WriteN1 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t data);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to write channel frequency (BCD string).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
@param frequency Frequency in KHz.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_WriteFreq (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint32_t frequency);
|
||||
|
||||
#endif /* SONY_DISEQC_COMMAND_1_1_H */
|
||||
@@ -0,0 +1,342 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/12/13
|
||||
Modification ID : e402a4dcb0e51a00c34b174334c082c1211eebf1
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_diseqc_command_1_2.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
static sony_result_t generateDriveXData(sony_diseqc_motor_mode_t mode,
|
||||
uint8_t amount,
|
||||
uint8_t * pData);
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t sony_diseqc_command_WriteA0 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t data)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_WriteA0");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x48;
|
||||
pMessage->data[3] = data;
|
||||
pMessage->length = 4;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_WriteA1 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t data)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_WriteA1");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x49;
|
||||
pMessage->data[3] = data;
|
||||
pMessage->length = 4;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_Halt (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_Halt");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x60;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_LimitsOff (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_LimitsOff");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x63;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_LimitE (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_LimitE");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x66;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_LimitW (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_LimitW");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x67;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_DriveEast (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
sony_diseqc_motor_mode_t mode,
|
||||
uint8_t amount)
|
||||
{
|
||||
int32_t index = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_DriveEast");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x68;
|
||||
result = generateDriveXData(mode, amount, &pMessage->data[3]);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
pMessage->length = 4;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_DriveWest (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
sony_diseqc_motor_mode_t mode,
|
||||
uint8_t amount)
|
||||
{
|
||||
int32_t index = 0;
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_DriveWest");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x69;
|
||||
result = generateDriveXData(mode, amount, &pMessage->data[3]);
|
||||
if (result != SONY_RESULT_OK){SONY_TRACE_RETURN (result);}
|
||||
pMessage->length = 4;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_Storenn (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t posNumber)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_Storenn");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x6A;
|
||||
pMessage->data[3] = posNumber;
|
||||
pMessage->length = 4;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_Gotonn (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t posNumber)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_Gotonn");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x6B;
|
||||
pMessage->data[3] = posNumber;
|
||||
pMessage->length = 4;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetPosns (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t * pData,
|
||||
uint8_t length)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetPosns");
|
||||
|
||||
if ((!pMessage) || (!pData)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x6F;
|
||||
if (length == 1){
|
||||
pMessage->data[3] = *pData;
|
||||
pMessage->length = 4;
|
||||
} else if (length == 3){
|
||||
pMessage->data[3] = *(pData);
|
||||
pMessage->data[4] = *(pData + 1);
|
||||
pMessage->data[5] = *(pData + 2);
|
||||
pMessage->length = 6;
|
||||
} else {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
static sony_result_t generateDriveXData(sony_diseqc_motor_mode_t mode,
|
||||
uint8_t amount,
|
||||
uint8_t * pData)
|
||||
{
|
||||
SONY_TRACE_ENTER ("generateDriveXData");
|
||||
|
||||
if (!pData) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
switch(mode)
|
||||
{
|
||||
case SONY_DISEQC_MOTOR_MODE_STEPPED:
|
||||
if((amount > 128) || (amount == 0)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
*pData = (uint8_t)((0xFF - amount) + 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_DISEQC_MOTOR_MODE_TIMED:
|
||||
if((amount > 127) || (amount == 0)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
} else {
|
||||
*pData = amount;
|
||||
}
|
||||
break;
|
||||
|
||||
case SONY_DISEQC_MOTOR_MODE_NONSTOP:
|
||||
/* amount value is ignored. */
|
||||
*pData = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
@@ -0,0 +1,196 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/12/13
|
||||
Modification ID : e402a4dcb0e51a00c34b174334c082c1211eebf1
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_diseqc_command_1_2.h
|
||||
|
||||
This file provides functions for generating "DiSEqC1.2" commands.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef SONY_DISEQC_COMMAND_1_2_H
|
||||
#define SONY_DISEQC_COMMAND_1_2_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_diseqc_command.h"
|
||||
|
||||
/**
|
||||
@brief Mode for motor control command.
|
||||
|
||||
This is used by sony_diseqc_command_DriveEast() and sony_diseqc_command_DriveWest().
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_DISEQC_MOTOR_MODE_STEPPED, /**< amount is "step size". */
|
||||
SONY_DISEQC_MOTOR_MODE_TIMED, /**< amount is "timeout time" in ms. */
|
||||
SONY_DISEQC_MOTOR_MODE_NONSTOP /**< amount is ignored. */
|
||||
} sony_diseqc_motor_mode_t;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create DiSEqC command to write Analogue value A0 (e.g. Skew).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
@param data Data to send.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_WriteA0 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t data);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to write Analogue value A1.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
@param data Data to send.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_WriteA1 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t data);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to stop Positioner movement.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_Halt (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to disable Limits.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_LimitsOff (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to set East Limit (& Enable recommended).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_LimitE (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to set West Limit (& Enable recommended).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_LimitW (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to drive Motor East (with optional timeout/steps).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
@param mode Motor mode.
|
||||
@param amount The amount of motor moving.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_DriveEast (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
sony_diseqc_motor_mode_t mode,
|
||||
uint8_t amount);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to drive Motor West (with optional timeout/steps).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
@param mode Motor mode.
|
||||
@param amount The amount of motor moving.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_DriveWest (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
sony_diseqc_motor_mode_t mode,
|
||||
uint8_t amount);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to store Satellite Position & Enable Limits.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
@param posNumber Position number.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_Storenn (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t posNumber);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to drive Motor to Satellite Position nn.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
@param posNumber Position number.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_Gotonn (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t posNumber);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to (re-) calculate Satellite Positions.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
@param pData Address of the data buffer.
|
||||
@param length Length of the data buffer.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetPosns (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t * pData,
|
||||
uint8_t length);
|
||||
|
||||
#endif /* SONY_DISEQC_COMMAND_1_2_H */
|
||||
@@ -0,0 +1,405 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/12/13
|
||||
Modification ID : e402a4dcb0e51a00c34b174334c082c1211eebf1
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_diseqc_command_2_0.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t sony_diseqc_command_ClrReset (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_ClrReset");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x01;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_SetContend (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_SetContend");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x04;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_Contend (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_Contend");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x05;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_ClrContend (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_ClrContend");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x06;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_Address (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_Address");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x07;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_MoveC (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t data)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_MoveC");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x08;
|
||||
pMessage->data[3] = data;
|
||||
pMessage->length = 4;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_Move (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t data)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_Move");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x09;
|
||||
pMessage->data[3] = data;
|
||||
pMessage->length = 4;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_Status (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_Status");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x10;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_Config (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_Config");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x11;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_Switch0 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_Switch0");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x14;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_Switch1 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_Switch1");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x15;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_ReadA0 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_ReadA0");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x40;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_ReadA1 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_ReadA1");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x41;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_LOstring (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_LOstring");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x50;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_LOnow (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_LOnow");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x51;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_LOLo (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_LOLo");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x52;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_diseqc_command_LOHi (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_LOHi");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x53;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
@@ -0,0 +1,247 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/12/13
|
||||
Modification ID : e402a4dcb0e51a00c34b174334c082c1211eebf1
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_diseqc_command_2_0.h
|
||||
|
||||
This file provides functions for generating "DiSEqC2.0" commands.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef SONY_DISEQC_COMMAND_2_0_H
|
||||
#define SONY_DISEQC_COMMAND_2_0_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_diseqc_command.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create DiSEqC command to clear the "Reset" flag.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_ClrReset (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to set Contention flag.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_SetContend (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to return address only if Contention flag is set.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_Contend (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to clear Contention flag.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_ClrContend (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to return address unless Contention flag is set.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_Address (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to change address only if Contention flag is set.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
@param data Data to send.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_MoveC (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t data);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to change address unless Contention flag is set.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
@param data Data to send.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_Move (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address,
|
||||
uint8_t data);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to read Status register flags.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_Status (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to read Configuration flags (peripheral hardware).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_Config (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to read Switching state flags (Committed port).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_Switch0 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to read Switching state flags (Uncommitted port).
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_Switch1 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to read Analogue value A0.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_ReadA0 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to read Analogue value A1.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_ReadA1 (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to read current frequency [Reply = BCD string].
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_LOstring (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to read current frequency table entry number.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_LOnow (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to read Lo frequency table entry number.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_LOLo (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create DiSEqC command to read Hi frequency table entry number.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_LOHi (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
#endif /* SONY_DISEQC_COMMAND_2_0_H */
|
||||
@@ -0,0 +1,33 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/12/13
|
||||
Modification ID : e402a4dcb0e51a00c34b174334c082c1211eebf1
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_diseqc_command_2_2.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t sony_diseqc_command_PosStat (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_diseqc_command_PosStat");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = (uint8_t)framing;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x64;
|
||||
pMessage->length = 3;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/12/13
|
||||
Modification ID : e402a4dcb0e51a00c34b174334c082c1211eebf1
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_diseqc_command_2_2.h
|
||||
|
||||
This file provides functions for generating "DiSEqC2.2" commands.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef SONY_DISEQC_COMMAND_2_2_H
|
||||
#define SONY_DISEQC_COMMAND_2_2_H
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_diseqc_command.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create DiSEqC command to read Positioner Status Register.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param framing Framing byte.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_diseqc_command_PosStat (sony_diseqc_message_t * pMessage,
|
||||
sony_diseqc_framing_t framing,
|
||||
sony_diseqc_address_t address);
|
||||
|
||||
#endif /* SONY_DISEQC_COMMAND_2_2_H */
|
||||
+1443
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,449 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/12/13
|
||||
Modification ID : e402a4dcb0e51a00c34b174334c082c1211eebf1
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_integ_sat_device_ctrl.h
|
||||
|
||||
This file provide functions which control satellite device.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef SONY_INTEG_SAT_DEVICE_CTRL_H
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_H
|
||||
|
||||
#include "../sony_integ.h"
|
||||
#include "sony_demod_sat_device_ctrl.h"
|
||||
#include "sony_singlecable_command.h"
|
||||
#include "sony_singlecable2_command.h"
|
||||
|
||||
/**
|
||||
@brief LNB controller wakeup time in ms.
|
||||
|
||||
The time that LNB controller wake up.
|
||||
In common, LNB controller needs time to output stable voltage after waking up.
|
||||
In addition, connected DiSEqC / Single Cable switches may need additional time to start up.
|
||||
The user can change it depends on LNB controller and other situation.
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_LNBC_WAKEUP_TIME_MS 500
|
||||
|
||||
/**
|
||||
@brief Device voltage change time in ms.
|
||||
|
||||
The time between "return from sony_lnbc_t::SetVoltage()" and completing voltage change.
|
||||
This value depends on the LNB controller device, circuit, etc.
|
||||
Please confirm with your implementation/environment and change it accordingly.
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_DEVICE_VOLTAGE_CHANGE_TIME 15
|
||||
|
||||
/**
|
||||
@brief Pre transmission wait time defined in DiSEqC1 standard.
|
||||
|
||||
For one shot DiSEqC transmissions, the required wait time is >15ms, whilst for repeated messages the required wait time is >25ms.
|
||||
This timing definition is used for both transmission modes so the greater of the two times has been used.
|
||||
Please refer to "DiSEqC Update and Recommendations for Implementation Version 2.1" Figure 3 for more information.
|
||||
|
||||
There is no need to modify this value.
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_DISEQC1_SPEC_PRE_TX_WAIT 26
|
||||
|
||||
/**
|
||||
@brief Pre transmission wait time defined in DiSEqC2 standard.
|
||||
|
||||
This value is selected as the same value as pre transmission wait time defined in DiSEqC1 standard,
|
||||
because there is no clear timing description about DiSEqC2 in DiSEqC standard documents.
|
||||
|
||||
There is no need to modify this value.
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_DISEQC2_SPEC_PRE_TX_WAIT 26
|
||||
|
||||
/**
|
||||
@brief HW setting for wait time between each event(DiSEqC command, tone burst and continuous tone) in ms for DiSEqC1 sequence.
|
||||
|
||||
If SONY_INTEG_SAT_DEVICE_CTRL_DEVICE_VOLTAGE_CHANGE_TIME is set correctly,
|
||||
then there is no need to modify this value.
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_DISEQC1_TXIDLE_MS (SONY_INTEG_SAT_DEVICE_CTRL_DISEQC1_SPEC_PRE_TX_WAIT + SONY_INTEG_SAT_DEVICE_CTRL_DEVICE_VOLTAGE_CHANGE_TIME)
|
||||
|
||||
|
||||
/**
|
||||
@brief HW setting for wait time between each event(DiSEqC command, tone burst and continuous tone) in ms for DiSEqC2 sequence.
|
||||
|
||||
If SONY_INTEG_SAT_DEVICE_CTRL_DEVICE_VOLTAGE_CHANGE_TIME is set correctly,
|
||||
then there is no need to modify this value.
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_DISEQC2_TXIDLE_MS (SONY_INTEG_SAT_DEVICE_CTRL_DISEQC2_SPEC_PRE_TX_WAIT + SONY_INTEG_SAT_DEVICE_CTRL_DEVICE_VOLTAGE_CHANGE_TIME)
|
||||
|
||||
/**
|
||||
@brief HW setting for wait time between finish to receive reply message and start continuous tone.
|
||||
|
||||
There is no need to modify this value.
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_DISEQC2_RXIDLE_MS 5
|
||||
|
||||
/**
|
||||
@brief HW setting for wait time between finish to receive reply message and start continuous tone.
|
||||
|
||||
There is no need to modify this value.
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_SINGLECABLE_RXIDLE_MS 5
|
||||
|
||||
/**
|
||||
@brief HW setting for wait time between each event(Voltage change and Single cable command) in ms for Single cable sequence.
|
||||
|
||||
This value(X) should be "4 < X < 22" from Singlecable standard EN50494.
|
||||
And it should be "X > SONY_INTEG_SAT_DEVICE_CTRL_DEVICE_VOLTAGE_CHANGE_TIME".
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_SINGLECABLE_TXIDLE_MS ((SONY_INTEG_SAT_DEVICE_CTRL_DEVICE_VOLTAGE_CHANGE_TIME < 5) ? 5 : SONY_INTEG_SAT_DEVICE_CTRL_DEVICE_VOLTAGE_CHANGE_TIME)
|
||||
#if SONY_INTEG_SAT_DEVICE_CTRL_DEVICE_VOLTAGE_CHANGE_TIME >= 22
|
||||
#error "SONY_INTEG_SAT_DEVICE_CTRL_DEVICE_VOLTAGE_CHANGE_TIME exceeds single cable standard timing requirement."
|
||||
#endif /* SONY_INTEG_SAT_DEVICE_CTRL_DEVICE_VOLTAGE_CHANGE_TIME >= 22 */
|
||||
|
||||
/**
|
||||
@brief HW setting for wait time between repeated DiSEqC1 messages (Repeat To Repeat Time) in ms.
|
||||
|
||||
This value specifies time between the end of the first message and the start of the repeated message.
|
||||
There is no need to modify this value.
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_DISEQC1_R2R_TIME_MS 400
|
||||
|
||||
/**
|
||||
@brief HW setting for wait time between repeated Single cable messages (Repeat To Repeat Time) in ms.
|
||||
|
||||
This value specifies time between the end of the first message and the top of the repeated message.
|
||||
There is no need to modify this value.
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_SINGLECABLE_R2R_TIME_MS 0
|
||||
|
||||
/**
|
||||
@brief HW setting for DiSEqC2 reply wait time out(RTO) in ms.
|
||||
|
||||
There is no need to modify this value.
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_DISEQC2_RTO_TIME_MS 400
|
||||
|
||||
/**
|
||||
@brief HW setting for Singlecable2 reply wait time out(RTO) in ms.
|
||||
|
||||
There is no need to modify this value.
|
||||
*/
|
||||
#define SONY_INTEG_SAT_DEVICE_CTRL_SINGLECABLE2REPLY_RTO_TIME_MS 100
|
||||
|
||||
/**
|
||||
@brief Polling interval for sony_integ_sat_device_ctrl_TransmitToneBurst() in ms.
|
||||
*/
|
||||
#define SONY_INTEG_DISEQC_TB_POL 100
|
||||
|
||||
/**
|
||||
@brief Polling interval for sony_integ_sat_device_ctrl_TransmitDiseqcCommand()
|
||||
and sony_integ_sat_device_ctrl_TransmitDiseqcCommandWithReply() in ms.
|
||||
*/
|
||||
#define SONY_INTEG_DISEQC_DISEQC_TRANSMIT_POL 10
|
||||
|
||||
/**
|
||||
@brief Polling interval for sony_integ_sat_device_ctrl_TransmitSinglecableCommand() in ms.
|
||||
*/
|
||||
#define SONY_INTEG_DISEQC_SINGLECABLE_TRANSMIT_POL 10
|
||||
|
||||
/**
|
||||
@brief Version of single cable standard
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_SINGLECABLE_VERSION_1_EN50494, /**< Single cable 1 (EN50494) */
|
||||
SONY_SINGLECABLE_VERSION_2_EN50607, /**< Single cable 2 (EN50607) */
|
||||
SONY_SINGLECABLE_VERSION_UNKNOWN
|
||||
} sony_singlecable_version_t;
|
||||
|
||||
/**
|
||||
@brief Parameters for tuning in single cable environment.
|
||||
*/
|
||||
typedef struct {
|
||||
sony_integ_t * pInteg; /**< Integ part. */
|
||||
sony_tuner_t * pTunerReal; /**< Tuner instance. */
|
||||
|
||||
sony_singlecable_version_t version; /**< Single cable version. */
|
||||
|
||||
sony_singlecable_address_t address; /**< Address byte. */
|
||||
sony_singlecable_bank_t bank; /**< Signal bank. */
|
||||
uint8_t ubSlot; /**< UB slot number. (1-8) */
|
||||
uint32_t ubSlotFreqKHz; /**< UB slot center frequency in KHz. */
|
||||
uint8_t enableMDUMode; /**< MDU mode enable/disable. */
|
||||
uint8_t PINCode; /**< PIN Code for MDU commands. */
|
||||
|
||||
uint8_t scd2_ubSlot; /**< UB slot number. (1-32) (for SCD2) */
|
||||
uint32_t scd2_ubSlotFreqMHz; /**< UB slot center frequency in *MHz*. (for SCD2) */
|
||||
uint8_t scd2_uncommittedSwitches; /**< Uncommitted switches setting. (for SCD2) */
|
||||
uint8_t scd2_committedSwitches; /**< Committed switches setting. (for SCD2) */
|
||||
uint8_t scd2_enableMDUMode; /**< MDU mode enable/disable. (for SCD2) */
|
||||
uint8_t scd2_PINCode; /**< PIN Code for MDU commands. (for SCD2) */
|
||||
|
||||
/**
|
||||
* Pointer to the function which sends the DiSEqC message by the other demodulator.
|
||||
* If this is null, this demodulator will send the DiSEqC message for the single cable control.
|
||||
* This will be used for the case when there is only one LNB controller shared between multiple tuners.
|
||||
*/
|
||||
sony_result_t (*pTransmitByOtherDemod)(sony_diseqc_message_t * pMessage);
|
||||
} sony_integ_singlecable_tuner_data_t;
|
||||
|
||||
/**
|
||||
@brief The data for single cable sequence.
|
||||
*/
|
||||
typedef struct {
|
||||
sony_tuner_t tunerSinglecable; /**< Tuner instance for single cable. */
|
||||
sony_integ_singlecable_tuner_data_t tunerSinglecableData; /**< Single cable tuner data. */
|
||||
} sony_integ_singlecable_data_t;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Enable/disable satellite device control function.
|
||||
|
||||
@note LNB controller will be set to Active/Sleep state.
|
||||
Note that satellite device control functions like ::sony_integ_sat_device_ctrl_SetVoltageTone
|
||||
automatically enable satellite device control function.
|
||||
|
||||
@param pInteg The integration part instance.
|
||||
@param enable Enable/disable setting.
|
||||
- 0: Disable
|
||||
- 1: Enable
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_sat_device_ctrl_Enable (sony_integ_t * pInteg, uint8_t enable);
|
||||
|
||||
/**
|
||||
@brief Change voltage and tone.
|
||||
|
||||
@note LNB controller and satellite device control function will be automatically enabled.
|
||||
|
||||
@param pInteg The integration part instance which already created.
|
||||
@param isVoltageHigh Voltage.
|
||||
- 0: Low voltage.
|
||||
- 1: High voltage.
|
||||
@param isContinuousToneOn Continuous tone state.
|
||||
- 0: Don't output continuous tone.
|
||||
- 1: Output continuous tone.
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_sat_device_ctrl_SetVoltageTone (sony_integ_t * pInteg,
|
||||
uint8_t isVoltageHigh,
|
||||
uint8_t isContinuousToneOn);
|
||||
|
||||
/**
|
||||
@brief Transmit a tone burst.
|
||||
|
||||
@note LNB controller and satellite device control function will be automatically enabled.
|
||||
|
||||
This API does following flow.
|
||||
- Stop continuous tone.
|
||||
- Change voltage.
|
||||
- Output tone burst.
|
||||
- Output continuous tone if required.
|
||||
|
||||
@param pInteg The integration part instance which already created.
|
||||
@param isVoltageHigh Voltage.
|
||||
- 0: Low voltage.
|
||||
- 1: High voltage.
|
||||
@param toneBurstMode Tone burst mode.
|
||||
@param isContinuousToneOn Continuout tone value.
|
||||
- 0: Don't output continuous tone.
|
||||
- 1: Output continuous tone.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_sat_device_ctrl_TransmitToneBurst (sony_integ_t * pInteg,
|
||||
uint8_t isVoltageHigh,
|
||||
sony_toneburst_mode_t toneBurstMode,
|
||||
uint8_t isContinuousToneOn);
|
||||
|
||||
/**
|
||||
@brief Transmit DiSEqC command.
|
||||
|
||||
@note LNB controller and satellite device control function will be automatically enabled.
|
||||
|
||||
This API does following flow.
|
||||
- Stop continuous tone.
|
||||
- Change voltage.
|
||||
- Output DiSEqC command1.
|
||||
- Output DiSEqC command2 if required.
|
||||
- (Repeat DiSEqC commands if required.)
|
||||
- Output tone burst.
|
||||
- Output continuous tone if required.
|
||||
|
||||
@param pInteg The integration part instance which already created.
|
||||
@param isVoltageHigh Voltage.
|
||||
- 0: Low voltage.
|
||||
- 1: High voltage.
|
||||
@param toneBurstMode Tone burst mode.
|
||||
@param isContinuousToneOn Continuout tone value.
|
||||
- 0: Don't output continuous tone.
|
||||
- 1: Output continuous tone.
|
||||
@param pCommand1 1st DiSEqC command.
|
||||
@param repeatCount1 Repeat count for 1st DiSEqC command.
|
||||
@param pCommand2 2nd DiSEqC command.
|
||||
@param repeatCount2 Repeat count for 2nd DiSEqC command.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_sat_device_ctrl_TransmitDiseqcCommand (sony_integ_t * pInteg,
|
||||
uint8_t isVoltageHigh,
|
||||
sony_toneburst_mode_t toneBurstMode,
|
||||
uint8_t isContinuousToneOn,
|
||||
sony_diseqc_message_t * pCommand1,
|
||||
uint8_t repeatCount1,
|
||||
sony_diseqc_message_t * pCommand2,
|
||||
uint8_t repeatCount2);
|
||||
|
||||
/**
|
||||
@brief Transmit DiSEqC command and receive reply from device.
|
||||
|
||||
@note LNB controller and satellite device control function will be automatically enabled.
|
||||
|
||||
This API does following flow.
|
||||
- Stop continuous tone.
|
||||
- Change voltage.
|
||||
- Output DiSEqC command.
|
||||
- Receive reply message from slave device.
|
||||
- Output tone burst.
|
||||
- Output continuous tone if required.
|
||||
|
||||
@param pInteg The integration part instance which already created.
|
||||
@param isVoltageHigh Voltage.
|
||||
- 0: Low voltage.
|
||||
- 1: High voltage.
|
||||
@param toneBurstMode Tone burst mode.
|
||||
@param isContinuousToneOn Continuout tone value.
|
||||
- 0: Don't output continuous tone.
|
||||
- 1: Output continuous tone.
|
||||
@param pCommand DiSEqC command.
|
||||
@param pReply DiSEqC reply from slave device.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_sat_device_ctrl_TransmitDiseqcCommandWithReply (sony_integ_t * pInteg,
|
||||
uint8_t isVoltageHigh,
|
||||
sony_toneburst_mode_t toneBurstMode,
|
||||
uint8_t isContinuousToneOn,
|
||||
sony_diseqc_message_t * pCommand,
|
||||
sony_diseqc_message_t * pReply);
|
||||
|
||||
/**
|
||||
@brief Transmit a single cable command.
|
||||
|
||||
@note LNB controller and satellite device control function will be automatically enabled.
|
||||
|
||||
@param pInteg The integration part instance which already created.
|
||||
@param pCommand The single cable command instance.
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_sat_device_ctrl_TransmitSinglecableCommand (sony_integ_t * pInteg,
|
||||
sony_diseqc_message_t * pCommand);
|
||||
|
||||
|
||||
/**
|
||||
@brief Transmit a single cable2 command.
|
||||
|
||||
@note LNB controller and satellite device control function will be automatically enabled.
|
||||
|
||||
@param pInteg The integration part instance which already created.
|
||||
@param pCommand The single cable command instance.
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_sat_device_ctrl_TransmitSinglecable2Command (sony_integ_t * pInteg,
|
||||
sony_diseqc_message_t * pCommand);
|
||||
|
||||
/**
|
||||
@brief Transmit a single cable2 command and receive reply from device.
|
||||
|
||||
@note LNB controller and satellite device control function will be automatically enabled.
|
||||
|
||||
@param pInteg The integration part instance which already created.
|
||||
@param pCommand The single cable command instance.
|
||||
@param pReply Reply from slave device.
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_sat_device_ctrl_TransmitSinglecable2CommandWithReply (sony_integ_t * pInteg,
|
||||
sony_diseqc_message_t * pCommand,
|
||||
sony_diseqc_message_t * pReply);
|
||||
|
||||
/**
|
||||
@brief Enable Single cable mode.
|
||||
|
||||
If the Single cable mode is set, Tune, TuneSRS, BlindScan functions automatically
|
||||
generate and send single cable commands.
|
||||
sony_integ_sat_device_ctrl_SetSinglecableTunerParams or sony_integ_sat_device_ctrl_SetSinglecable2TunerParams
|
||||
should be called before calling Tune, TuneSRS, BlindScan functions.
|
||||
|
||||
@param pInteg The integration part instance which already created.
|
||||
@param pSinglecableData The data for single cable mode.
|
||||
Note that this instance should be kept allocated while single cable function is enabled.
|
||||
@param pTransmitByOtherDemod User registered callback is required only when the LNB controller
|
||||
is controlled by the other demodulator. This allows the user to
|
||||
transmit the single cable commands to the LNBC through the other
|
||||
demodulator while taking care of the multi-threaded situations.
|
||||
Set this parameter to NULL, when the LNB controller is controlled
|
||||
by the current demodulator.
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_sat_device_ctrl_EnableSinglecable (sony_integ_t * pInteg,
|
||||
sony_integ_singlecable_data_t * pSinglecableData,
|
||||
sony_result_t (*pTransmitByOtherDemod)(sony_diseqc_message_t * pMessage));
|
||||
|
||||
/**
|
||||
@brief Disable Single cable mode.
|
||||
|
||||
@param pInteg The integration part instance which already created.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_sat_device_ctrl_DisableSinglecable (sony_integ_t * pInteg);
|
||||
|
||||
/**
|
||||
@brief Change tuning parameters for single cable command.
|
||||
|
||||
@param pInteg The integration part instance.
|
||||
@param address Address byte.
|
||||
@param bank Signal bank.
|
||||
@param ubSlot UB slot number. (1-8)
|
||||
@param ubSlotFreqKHz UB slot center frequency in KHz.
|
||||
@param enableMDUMode Enable/Disable MDU mode.
|
||||
- 0: Disable.
|
||||
- 1: Enable.
|
||||
@param PINCode The valid Pin Code for MDU commands. This value is ignored when the argument enableMDUMode is 0.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_sat_device_ctrl_SetSinglecableTunerParams (sony_integ_t * pInteg,
|
||||
sony_singlecable_address_t address,
|
||||
sony_singlecable_bank_t bank,
|
||||
uint8_t ubSlot,
|
||||
uint32_t ubSlotFreqKHz,
|
||||
uint8_t enableMDUMode,
|
||||
uint8_t PINCode);
|
||||
|
||||
/**
|
||||
@brief Change tuning parameters for SingleCable2 command.
|
||||
|
||||
@param pInteg The integration part instance.
|
||||
@param ubSlot UB slot number. (1-32)
|
||||
@param ubSlotFreqMHz UB slot center frequency in *MHz*.
|
||||
@param uncommittedSwitches Uncommitted switches setting.
|
||||
@param committedSwitches Committed switches setting.
|
||||
@param enableMDUMode Enable/Disable MDU mode.
|
||||
- 0: Disable.
|
||||
- 1: Enable.
|
||||
@param PINCode The valid Pin Code for MDU commands. This value is ignored when the argument enableMDUMode is 0.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_sat_device_ctrl_SetSinglecable2TunerParams (sony_integ_t * pInteg,
|
||||
uint8_t ubSlot,
|
||||
uint32_t ubSlotFreqMHz,
|
||||
uint8_t uncommittedSwitches,
|
||||
uint8_t committedSwitches,
|
||||
uint8_t enableMDUMode,
|
||||
uint8_t PINCode);
|
||||
|
||||
#endif /* SONY_INTEG_SAT_DEVICE_CTRL_H */
|
||||
@@ -0,0 +1,270 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_common.h"
|
||||
#include "sony_demod_sat_device_ctrl.h"
|
||||
#include "sony_singlecable_command.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
static sony_result_t addPINCode (sony_diseqc_message_t * pMessage,
|
||||
uint8_t pin);
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t sony_singlecable2_command_ODU_Channel_change (sony_diseqc_message_t * pMessage,
|
||||
uint8_t userbandId,
|
||||
uint32_t ifFreqMHz,
|
||||
uint8_t uncommittedSwitches,
|
||||
uint8_t committedSwitches)
|
||||
{
|
||||
int32_t index = 0;
|
||||
uint16_t T = 0;
|
||||
SONY_TRACE_ENTER ("sony_singlecable2_command_ODU_Channel_change");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId < 1) || (userbandId > 32) || (uncommittedSwitches > 0x0F) || (committedSwitches > 0x0F)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
if (ifFreqMHz <= 9) {
|
||||
/* Special value */
|
||||
T = (uint16_t)ifFreqMHz;
|
||||
} else {
|
||||
/* Calculation T */
|
||||
T = (uint16_t)(ifFreqMHz - 100);
|
||||
}
|
||||
|
||||
if (T > 0x7FF){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
pMessage->data[0] = 0x70;
|
||||
pMessage->data[1] = (uint8_t)(((userbandId - 1) << 3) | ((T >> 8) & 0x07));
|
||||
pMessage->data[2] = (uint8_t)(T & 0xFF);
|
||||
pMessage->data[3] = (uint8_t)((uncommittedSwitches << 4) | (committedSwitches));
|
||||
pMessage->length = 4;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable2_command_ODU_Channel_change_PIN (sony_diseqc_message_t * pMessage,
|
||||
uint8_t userbandId,
|
||||
uint32_t ifFreqMHz,
|
||||
uint8_t uncommittedSwitches,
|
||||
uint8_t committedSwitches,
|
||||
uint8_t pin)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("sony_singlecable2_command_ODU_Channel_change_PIN");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId < 1) || (userbandId > 32)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
result = sony_singlecable2_command_ODU_Channel_change (pMessage, userbandId, ifFreqMHz, uncommittedSwitches, committedSwitches);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* Overwrite command ID */
|
||||
pMessage->data[0] = 0x71;
|
||||
|
||||
result = addPINCode (pMessage, pin);
|
||||
if (result != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable2_command_ODU_PowerOFF (sony_diseqc_message_t * pMessage,
|
||||
uint8_t userbandId)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("sony_singlecable2_command_ODU_PowerOFF");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId < 1) || (userbandId > 32)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
result = sony_singlecable2_command_ODU_Channel_change (pMessage, userbandId, 0, 0, 0);
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable2_command_ODU_PowerOFF_PIN (sony_diseqc_message_t * pMessage,
|
||||
uint8_t userbandId, uint8_t pin)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("sony_singlecable2_command_ODU_PowerOFF_PIN");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId < 1) || (userbandId > 32)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
result = sony_singlecable2_command_ODU_Channel_change_PIN (pMessage, userbandId, 0, 0, 0, pin);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
result = addPINCode (pMessage, pin);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable2_command_ODU_UB_avail (sony_diseqc_message_t * pMessage)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_singlecable2_command_ODU_UB_avail");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = 0x7A;
|
||||
pMessage->length = 1;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable2_command_ODU_UB_freq (sony_diseqc_message_t * pMessage,
|
||||
uint8_t userbandId)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_singlecable2_command_ODU_UB_freq");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId < 1) || (userbandId > 32)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = 0x7D;
|
||||
pMessage->data[1] = (uint8_t)(((userbandId - 1) & 0x1F) << 3);
|
||||
pMessage->length = 2;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable2_command_ODU_UB_inuse (sony_diseqc_message_t * pMessage)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_singlecable2_command_ODU_UB_inuse");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = 0x7C;
|
||||
pMessage->length = 1;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable2_command_ODU_UB_PIN (sony_diseqc_message_t * pMessage)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_singlecable2_command_ODU_UB_PIN");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = 0x7B;
|
||||
pMessage->length = 1;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable2_command_ODU_UB_switches (sony_diseqc_message_t * pMessage,
|
||||
uint8_t userbandId)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_singlecable2_command_ODU_UB_switches");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId < 1) || (userbandId > 32)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = 0x7E;
|
||||
pMessage->data[1] = (uint8_t)(((userbandId - 1) & 0x1F) << 3);
|
||||
pMessage->length = 2;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
static sony_result_t addPINCode (sony_diseqc_message_t * pMessage,
|
||||
uint8_t pin)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("addPIN");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pMessage->length < (SONY_DISEQC_MESSAGE_LENGTH - 1)){
|
||||
pMessage->data[pMessage->length] = pin;
|
||||
pMessage->length++;
|
||||
} else {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_singlecable2_command.h
|
||||
|
||||
This file provides the function to generate "single cable2 commands".
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef SONY_SINGLECABLE2_COMMAND_H
|
||||
#define SONY_SINGLECABLE2_COMMAND_H
|
||||
|
||||
#include "../sony_common.h"
|
||||
#include "sony_demod_sat_device_ctrl.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Enumerations
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Structs
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create "ODU_Channel_change" command, addressing a Single Outdoor Unit. This is used
|
||||
to retune a specific user band to a new centre frequency.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param userbandId Userband-ID (1 - 32)
|
||||
@param ifFreqMHz IF frequency in MHz.(0 - 9 is special value.)
|
||||
@param uncommittedSwitches Switch selection for uncommitted switch.
|
||||
@param committedSwitches Switch selection for committed switch.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable2_command_ODU_Channel_change (sony_diseqc_message_t * pMessage,
|
||||
uint8_t userbandId,
|
||||
uint32_t ifFreqMHz,
|
||||
uint8_t uncommittedSwitches,
|
||||
uint8_t committedSwitches);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_Channel_change_PIN" command, addressing a Multi-Dwelling Unit. This is used
|
||||
to retune a specific user band to a new centre frequency.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param userbandId Userband-ID (1 - 32)
|
||||
@param ifFreqMHz IF frequency in MHz.(0 - 9 is special value.)
|
||||
@param uncommittedSwitches Switch selection for uncommitted switch.
|
||||
@param committedSwitches Switch selection for committed switch.
|
||||
@param pin PIN code.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable2_command_ODU_Channel_change_PIN (sony_diseqc_message_t * pMessage,
|
||||
uint8_t userbandId,
|
||||
uint32_t ifFreqMHz,
|
||||
uint8_t uncommittedSwitches,
|
||||
uint8_t committedSwitches,
|
||||
uint8_t pin);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_PowerOFF" command, addressing a Single Outdoor Unit. This is used to reduce
|
||||
power consumption and release a user band when the corresponding demodulator is turned off.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param userbandId Userband-Id (1 - 32)
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable2_command_ODU_PowerOFF (sony_diseqc_message_t * pMessage, uint8_t userbandId);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_PowerOFF_PIN" command, addressing a Multi-Dwelling Unit. This is used to reduce
|
||||
power consumption and release a user band when the corresponding demodulator is turned off.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param userbandId Userband-Id (1 - 32)
|
||||
@param pin PIN code.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable2_command_ODU_PowerOFF_PIN (sony_diseqc_message_t * pMessage,
|
||||
uint8_t userbandId,
|
||||
uint8_t pin);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_UB_avail" command.
|
||||
|
||||
@param pMessage The message instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable2_command_ODU_UB_avail (sony_diseqc_message_t * pMessage);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_UB_freq" command.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param userbandId Userband-Id (1 - 32)
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable2_command_ODU_UB_freq (sony_diseqc_message_t * pMessage,
|
||||
uint8_t userbandId);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_UB_inuse" command.
|
||||
|
||||
@param pMessage The message instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable2_command_ODU_UB_inuse (sony_diseqc_message_t * pMessage);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_UB_PIN" command.
|
||||
|
||||
@param pMessage The message instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable2_command_ODU_UB_PIN (sony_diseqc_message_t * pMessage);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_UB_switches" command.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param userbandId Userband-Id (1 - 32)
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable2_command_ODU_UB_switches (sony_diseqc_message_t * pMessage,
|
||||
uint8_t userbandId);
|
||||
|
||||
#endif /* SONY_SINGLECABLE_COMMAND_H */
|
||||
@@ -0,0 +1,375 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_common.h"
|
||||
#include "sony_demod_sat_device_ctrl.h"
|
||||
#include "sony_singlecable_command.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
static sony_result_t addPINCode (sony_diseqc_message_t * pMessage,
|
||||
uint8_t pin);
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t sony_singlecable_command_ODU_Channel_change (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
uint32_t ubSlotFreqKHz,
|
||||
sony_singlecable_bank_t bank,
|
||||
uint32_t centerFreqKHz)
|
||||
{
|
||||
int32_t index = 0;
|
||||
uint16_t T = 0;
|
||||
uint8_t data = 0;
|
||||
SONY_TRACE_ENTER ("sony_singlecable_command_ODU_Channel_change");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId <= 0) || (9 <= userbandId)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
/* Calculation T */
|
||||
T = (uint16_t)(((centerFreqKHz + ubSlotFreqKHz + 2000) / 4000) - 350);
|
||||
|
||||
if (T > 0x3FFF){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
pMessage->data[0] = 0xE0;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x5A;
|
||||
|
||||
data = (uint8_t)(((uint32_t)(userbandId - 1) & 0x07) << 5);
|
||||
data |= (uint8_t)(((uint32_t)bank & 0x07) << 2);
|
||||
data |= (uint8_t)((T >> 8) & 0x03);
|
||||
pMessage->data[3] = data;
|
||||
|
||||
pMessage->data[4] = (uint8_t)(T & 0xFF);
|
||||
pMessage->length = 5;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable_command_ODU_PowerOFF (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_singlecable_command_ODU_PowerOFF");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId <= 0) || (9 <= userbandId)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = 0xE0;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x5A;
|
||||
pMessage->data[3] = (uint8_t)((((uint32_t)(userbandId - 1)) & 0x07) << 5);
|
||||
pMessage->data[4] = 0x00;
|
||||
pMessage->length = 5;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable_command_ODU_UbxSignal_ON (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_singlecable_command_ODU_UbxSignal_ON");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = 0xE0;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x5B;
|
||||
pMessage->data[3] = 0x00;
|
||||
pMessage->data[4] = 0x00;
|
||||
pMessage->length = 5;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable_command_ODU_Config (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
sony_singlecable_num_of_sat_pos_t numberOfSatPos,
|
||||
sony_singlecable_rf_band_t rfBand,
|
||||
sony_singlecable_num_of_ub_slots_t numberOfUBSlots)
|
||||
{
|
||||
int32_t index = 0;
|
||||
|
||||
static const struct{
|
||||
sony_singlecable_num_of_sat_pos_t numberOfSatPos;
|
||||
sony_singlecable_rf_band_t rfBand;
|
||||
sony_singlecable_num_of_ub_slots_t numberOfUBSlots;
|
||||
uint8_t Config_Nb;
|
||||
} ODU_Config_table[] = {
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_1, SONY_SINGLECABLE_RF_BAND_STANDARD, SONY_SINGLECABLE_NUM_OF_UB_2, 0x10},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_1, SONY_SINGLECABLE_RF_BAND_STANDARD, SONY_SINGLECABLE_NUM_OF_UB_4, 0x11},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_1, SONY_SINGLECABLE_RF_BAND_STANDARD, SONY_SINGLECABLE_NUM_OF_UB_6, 0x12},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_1, SONY_SINGLECABLE_RF_BAND_STANDARD, SONY_SINGLECABLE_NUM_OF_UB_8, 0x13},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_1, SONY_SINGLECABLE_RF_BAND_WIDE, SONY_SINGLECABLE_NUM_OF_UB_2, 0x14},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_1, SONY_SINGLECABLE_RF_BAND_WIDE, SONY_SINGLECABLE_NUM_OF_UB_4, 0x15},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_1, SONY_SINGLECABLE_RF_BAND_WIDE, SONY_SINGLECABLE_NUM_OF_UB_6, 0x16},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_1, SONY_SINGLECABLE_RF_BAND_WIDE, SONY_SINGLECABLE_NUM_OF_UB_8, 0x17},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_2, SONY_SINGLECABLE_RF_BAND_STANDARD, SONY_SINGLECABLE_NUM_OF_UB_2, 0x18},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_2, SONY_SINGLECABLE_RF_BAND_STANDARD, SONY_SINGLECABLE_NUM_OF_UB_4, 0x19},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_2, SONY_SINGLECABLE_RF_BAND_STANDARD, SONY_SINGLECABLE_NUM_OF_UB_6, 0x1A},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_2, SONY_SINGLECABLE_RF_BAND_STANDARD, SONY_SINGLECABLE_NUM_OF_UB_8, 0x1B},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_2, SONY_SINGLECABLE_RF_BAND_WIDE, SONY_SINGLECABLE_NUM_OF_UB_2, 0x1C},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_2, SONY_SINGLECABLE_RF_BAND_WIDE, SONY_SINGLECABLE_NUM_OF_UB_4, 0x1D},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_2, SONY_SINGLECABLE_RF_BAND_WIDE, SONY_SINGLECABLE_NUM_OF_UB_6, 0x1E},
|
||||
{SONY_SINGLECABLE_NUM_OF_SAT_POS_2, SONY_SINGLECABLE_RF_BAND_WIDE, SONY_SINGLECABLE_NUM_OF_UB_8, 0x1F}
|
||||
};
|
||||
|
||||
SONY_TRACE_ENTER ("sony_singlecable_command_ODU_Config");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId <= 0) || (9 <= userbandId)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = 0xE0;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x5B;
|
||||
pMessage->data[3] = (uint8_t)(((((uint32_t)(userbandId - 1)) & 0x07) << 5) | (uint32_t)0x01);
|
||||
|
||||
for(index = 0; index < (int32_t)(sizeof(ODU_Config_table)/sizeof(ODU_Config_table[0])); index++)
|
||||
{
|
||||
if((numberOfSatPos == ODU_Config_table[index].numberOfSatPos) &&
|
||||
(rfBand == ODU_Config_table[index].rfBand) &&
|
||||
(numberOfUBSlots == ODU_Config_table[index].numberOfUBSlots))
|
||||
{
|
||||
pMessage->data[4] = ODU_Config_table[index].Config_Nb;
|
||||
pMessage->length = 5;
|
||||
/* Success */
|
||||
SONY_TRACE_RETURN(SONY_RESULT_OK);
|
||||
}
|
||||
}
|
||||
/* Error */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable_command_ODU_LoFreq (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
sony_singlecable_lofreq_t loFreq)
|
||||
{
|
||||
int32_t index = 0;
|
||||
SONY_TRACE_ENTER ("sony_singlecable_command_ODU_LoFreq");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId <= 0) || (9 <= userbandId)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
for(index = 0; index < SONY_DISEQC_MESSAGE_LENGTH; index++){
|
||||
pMessage->data[index] = 0;
|
||||
}
|
||||
|
||||
pMessage->data[0] = 0xE0;
|
||||
pMessage->data[1] = (uint8_t)address;
|
||||
pMessage->data[2] = 0x5B;
|
||||
pMessage->data[3] = (uint8_t)(((((uint32_t)(userbandId - 1)) & 0x07) << 5) | 0x02);
|
||||
pMessage->data[4] = (uint8_t)loFreq;
|
||||
pMessage->length = 5;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable_command_ODU_Channel_change_MDU (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
uint32_t ubSlotFreqKHz,
|
||||
sony_singlecable_bank_t bank,
|
||||
uint32_t centerFreqKHz,
|
||||
uint8_t pin)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("sony_singlecable_command_ODU_Channel_change_MDU");
|
||||
|
||||
if (!pMessage) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId <= 0) || (9 <= userbandId)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
result = sony_singlecable_command_ODU_Channel_change (pMessage, address, userbandId, ubSlotFreqKHz, bank, centerFreqKHz);
|
||||
if (result != SONY_RESULT_OK) {SONY_TRACE_RETURN (result);}
|
||||
|
||||
pMessage->data[2] = 0x5C;
|
||||
|
||||
result = addPINCode (pMessage, pin);
|
||||
if (result != SONY_RESULT_OK) {SONY_TRACE_RETURN (result);}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable_command_ODU_PowerOFF_MDU (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
uint8_t pin)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("sony_singlecable_command_ODU_PowerOFF_MDU");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId <= 0) || (9 <= userbandId)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
result = sony_singlecable_command_ODU_PowerOFF (pMessage, address, userbandId);
|
||||
if (result != SONY_RESULT_OK) {SONY_TRACE_RETURN (result);}
|
||||
|
||||
pMessage->data[2] = 0x5C;
|
||||
|
||||
result = addPINCode (pMessage, pin);
|
||||
if (result != SONY_RESULT_OK) {SONY_TRACE_RETURN (result);}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable_command_ODU_UbxSignal_ON_MDU (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t pin)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("sony_singlecable_command_ODU_UbxSignal_ON_MDU");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
result = sony_singlecable_command_ODU_UbxSignal_ON (pMessage, address);
|
||||
if (result != SONY_RESULT_OK) {SONY_TRACE_RETURN (result);}
|
||||
|
||||
pMessage->data[2] = 0x5D;
|
||||
|
||||
result = addPINCode (pMessage, pin);
|
||||
if (result != SONY_RESULT_OK) {SONY_TRACE_RETURN (result);}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable_command_ODU_Config_MDU (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
sony_singlecable_num_of_sat_pos_t numberOfSatPos,
|
||||
sony_singlecable_rf_band_t rfBand,
|
||||
sony_singlecable_num_of_ub_slots_t numberOfUBSlots,
|
||||
uint8_t pin)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("sony_singlecable_command_ODU_Config_MDU");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId <= 0) || (9 <= userbandId)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
result = sony_singlecable_command_ODU_Config (pMessage, address, userbandId, numberOfSatPos, rfBand, numberOfUBSlots);
|
||||
if (result != SONY_RESULT_OK) {SONY_TRACE_RETURN (result);}
|
||||
|
||||
pMessage->data[2] = 0x5D;
|
||||
|
||||
result = addPINCode (pMessage, pin);
|
||||
if (result != SONY_RESULT_OK) {SONY_TRACE_RETURN (result);}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_singlecable_command_ODU_LoFreq_MDU (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
sony_singlecable_lofreq_t loFreq,
|
||||
uint8_t pin)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("sony_singlecable_command_ODU_LoFreq_MDU");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((userbandId <= 0) || (9 <= userbandId)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_RANGE);
|
||||
}
|
||||
|
||||
result = sony_singlecable_command_ODU_LoFreq (pMessage, address, userbandId, loFreq);
|
||||
if (result != SONY_RESULT_OK) {SONY_TRACE_RETURN (result);}
|
||||
|
||||
pMessage->data[2] = 0x5D;
|
||||
|
||||
result = addPINCode (pMessage, pin);
|
||||
if (result != SONY_RESULT_OK) {SONY_TRACE_RETURN (result);}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
static sony_result_t addPINCode (sony_diseqc_message_t * pMessage,
|
||||
uint8_t pin)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("addPIN");
|
||||
|
||||
if (!pMessage){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pMessage->length < (SONY_DISEQC_MESSAGE_LENGTH - 1)){
|
||||
pMessage->data[pMessage->length] = pin;
|
||||
pMessage->length++;
|
||||
} else {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
@@ -0,0 +1,286 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/06/24
|
||||
Modification ID : 3b74e280b7ad8ce430b6a9419ac53e8f2e3737f9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_singlecable_command.h
|
||||
|
||||
This file provides the function to generate "single cable commands".
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#ifndef SONY_SINGLECABLE_COMMAND_H
|
||||
#define SONY_SINGLECABLE_COMMAND_H
|
||||
|
||||
#include "../sony_common.h"
|
||||
#include "sony_demod_sat_device_ctrl.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Enumerations
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Definition of address byte for Single cable message.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_SINGLECABLE_ADDRESS_ALL_DEVICES = 0x00, /**< Any device (Master to all devices) */
|
||||
SONY_SINGLECABLE_ADDRESS_ALL_LNB_SMATV_SWITCHER = 0x10, /**< Any LNB, Switcher or SMATV (Master to all...) */
|
||||
SONY_SINGLECABLE_ADDRESS_LNB_DEVICE = 0x11 /**< LNB devices. */
|
||||
} sony_singlecable_address_t;
|
||||
|
||||
/**
|
||||
@brief Definition of bank.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_SINGLECABLE_BANK_0 = 0, /**< Position A, Vertical, Low band. */
|
||||
SONY_SINGLECABLE_BANK_1 = 1, /**< Position A, Vertical, High band. */
|
||||
SONY_SINGLECABLE_BANK_2 = 2, /**< Position A, Horizontal, Low band. */
|
||||
SONY_SINGLECABLE_BANK_3 = 3, /**< Position A, Horizontal, High band. */
|
||||
SONY_SINGLECABLE_BANK_4 = 4, /**< Position B, Vertical, Low band. */
|
||||
SONY_SINGLECABLE_BANK_5 = 5, /**< Position B, Vertical, High band. */
|
||||
SONY_SINGLECABLE_BANK_6 = 6, /**< Position B, Horizontal, Low band. */
|
||||
SONY_SINGLECABLE_BANK_7 = 7 /**< Position B, Horizontal, High band. */
|
||||
} sony_singlecable_bank_t;
|
||||
|
||||
/**
|
||||
@brief Number of Satellite Positions definition.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_SINGLECABLE_NUM_OF_SAT_POS_1, /**< 1 Satellite Position */
|
||||
SONY_SINGLECABLE_NUM_OF_SAT_POS_2 /**< 2 Satellite Positions */
|
||||
} sony_singlecable_num_of_sat_pos_t;
|
||||
|
||||
/**
|
||||
@brief RF Band
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_SINGLECABLE_RF_BAND_STANDARD, /**< Standard RF */
|
||||
SONY_SINGLECABLE_RF_BAND_WIDE /**< Wide band RF */
|
||||
} sony_singlecable_rf_band_t;
|
||||
|
||||
/**
|
||||
@brief Number of User band (UB) slots definition.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_SINGLECABLE_NUM_OF_UB_2, /**< 2 UB slots */
|
||||
SONY_SINGLECABLE_NUM_OF_UB_4, /**< 4 UB slots */
|
||||
SONY_SINGLECABLE_NUM_OF_UB_6, /**< 6 UB slots */
|
||||
SONY_SINGLECABLE_NUM_OF_UB_8 /**< 8 UB slots */
|
||||
} sony_singlecable_num_of_ub_slots_t;
|
||||
|
||||
/**
|
||||
@brief Definition of local oscillator frequency.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_SINGLECABLE_LOFREQ_NONE = 0x00, /**< None (switcher) */
|
||||
SONY_SINGLECABLE_LOFREQ_UNKNOWN = 0x01, /**< Unknown */
|
||||
SONY_SINGLECABLE_LOFREQ_9750_MHZ = 0x02, /**< 9750MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_10000_MHZ = 0x03, /**< 10000MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_10600_MHZ = 0x04, /**< 10600MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_10750_MHZ = 0x05, /**< 10750MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_11000_MHZ = 0x06, /**< 11000MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_11250_MHZ = 0x07, /**< 11250MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_11475_MHZ = 0x08, /**< 11475MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_20250_MHZ = 0x09, /**< 20250MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_5150_MHZ = 0x0A, /**< 5150MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_1585_MHZ = 0x0B, /**< 1585MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_13850_MHZ = 0x0C, /**< 13850MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_WB_NONE = 0x10, /**< Wide band RF, None(switcher) */
|
||||
SONY_SINGLECABLE_LOFREQ_WB_10000_MHZ = 0x11, /**< Wide band RF, 10000MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_WB_10200_MHZ = 0x12, /**< Wide band RF, 10200MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_WB_13250_MHZ = 0x13, /**< Wide band RF, 13250MHz */
|
||||
SONY_SINGLECABLE_LOFREQ_WB_13450_MHZ = 0x14 /**< Wide band RF, 13450MHz */
|
||||
} sony_singlecable_lofreq_t;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Structs
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief structure for Single cable Config_Nb table.
|
||||
*/
|
||||
typedef struct {
|
||||
sony_singlecable_num_of_sat_pos_t numberOfSatPos; /**< Number of Satellite Positions. */
|
||||
sony_singlecable_rf_band_t rfBand; /**< RF Band(Standard or Wide). */
|
||||
sony_singlecable_num_of_ub_slots_t numberOfUBSlots; /**< Number of User band (UB) slots. */
|
||||
} sony_singlecable_config_nb_t;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Create "ODU_Channel_change" command, addressing a Single Outdoor Unit. This is used
|
||||
to retune a specific user band to a new centre frequency.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param address Address byte.
|
||||
@param userbandId User band slot number allocated to the user. (1-8)
|
||||
@param ubSlotFreqKHz User band slot center frequency allocated to the user in KHz.
|
||||
@param bank Target bank to tune.
|
||||
@param centerFreqKHz Frequency to tune in KHz.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable_command_ODU_Channel_change (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
uint32_t ubSlotFreqKHz,
|
||||
sony_singlecable_bank_t bank,
|
||||
uint32_t centerFreqKHz);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_PowerOFF" command, addressing a Single Outdoor Unit. This is used to reduce
|
||||
power consumption and release a user band when the corresponding demodulator is turned off.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param address Address byte.
|
||||
@param userbandId User band slot number allocated to the user. (1-8)
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable_command_ODU_PowerOFF (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_UbxSignal_ON" command, addressing a Single Outdoor Unit. This is used to output
|
||||
an RF tone at the centre frequency of each user band on the cable. This is primarily used
|
||||
for the receiver to scan the cable and detect the user band frequencies.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param address Address byte.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable_command_ODU_UbxSignal_ON (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_Config" command, addressing a Single Outdoor Unit. This is primarily used to
|
||||
identify useful parameters of the installation and of the SCIF device.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param address Address byte.
|
||||
@param userbandId User band slot number allocated to the user.(1-8)
|
||||
@param numberOfSatPos The number of satellite position.
|
||||
@param rfBand The RF band(Standard(S) or Wide band(WB)).
|
||||
@param numberOfUBSlots The number of user band slots.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable_command_ODU_Config (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
sony_singlecable_num_of_sat_pos_t numberOfSatPos,
|
||||
sony_singlecable_rf_band_t rfBand,
|
||||
sony_singlecable_num_of_ub_slots_t numberOfUBSlots);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_LoFreq" command, addressing a Single Outdoor Unit. This is used to determine
|
||||
the value of the local oscillator frequency used in the LNB of the installation.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param address Address byte.
|
||||
@param userbandId User band slot number allocated to the user.(1-8)
|
||||
@param loFreq Local oscillator frequency.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable_command_ODU_LoFreq (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
sony_singlecable_lofreq_t loFreq);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_Channel_change_MDU" command, addressing a Multi-Dwelling Unit. This is used
|
||||
to retune a specific user band to a new centre frequency.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param address Address byte.
|
||||
@param userbandId User band slot number allocated to the user.(1-8)
|
||||
@param ubSlotFreqKHz User band slot center frequency allocated to the user in KHz.
|
||||
@param bank Target bank to tune.
|
||||
@param centerFreqKHz Center frequency to tune in KHz.
|
||||
@param pin PIN code.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable_command_ODU_Channel_change_MDU (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
uint32_t ubSlotFreqKHz,
|
||||
sony_singlecable_bank_t bank,
|
||||
uint32_t centerFreqKHz,
|
||||
uint8_t pin);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_PowerOFF_MDU" command, addressing a Multi-Dwelling Unit. This is used to reduce
|
||||
power consumption and release a user band when the corresponding demodulator is turned off.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param address Address byte.
|
||||
@param userbandId User band slot allocated to the user.(1-8)
|
||||
@param pin PIN code.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable_command_ODU_PowerOFF_MDU (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
uint8_t pin);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_UbxSignal_ON_MDU" command, addressing a Multi-Dwelling Unit. This is used to output
|
||||
an RF tone at the centre frequency of each user band on the cable. This is primarily used
|
||||
for the receiver to scan the cable and detect the user band frequencies.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param address Address byte.
|
||||
@param pin PIN code.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable_command_ODU_UbxSignal_ON_MDU (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t pin);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_Config_MDU" command, addressing a Multi-Dwelling Unit. This is primarily used to
|
||||
identify useful parameters of the installation and of the SCIF device.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param address Address byte.
|
||||
@param userbandId User band allocated to the user.(1-8)
|
||||
@param numberOfSatPos The number of satellite position.
|
||||
@param rfBand The RF band(Standard(S) or Wide band(WB)).
|
||||
@param numberOfUBSlots The number of user band slots.
|
||||
@param pin PIN code.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable_command_ODU_Config_MDU (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
sony_singlecable_num_of_sat_pos_t numberOfSatPos,
|
||||
sony_singlecable_rf_band_t rfBand,
|
||||
sony_singlecable_num_of_ub_slots_t numberOfUBSlots,
|
||||
uint8_t pin);
|
||||
|
||||
/**
|
||||
@brief Create "ODU_LoFreq_MDU" command, addressing a Multi-Dwelling Unit. This is used to determine
|
||||
the value of the local oscillator frequency used in the LNB of the installation.
|
||||
|
||||
@param pMessage The message instance.
|
||||
@param address Address byte.
|
||||
@param userbandId User band slot allocated to the user.(1-8)
|
||||
@param loFreq Local oscillator frequency.
|
||||
@param pin PIN code.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_singlecable_command_ODU_LoFreq_MDU (sony_diseqc_message_t * pMessage,
|
||||
sony_singlecable_address_t address,
|
||||
uint8_t userbandId,
|
||||
sony_singlecable_lofreq_t loFreq,
|
||||
uint8_t pin);
|
||||
|
||||
#endif /* SONY_SINGLECABLE_COMMAND_H */
|
||||
Reference in New Issue
Block a user