implement register request
This commit is contained in:
parent
e6487845b4
commit
1c766cbc27
@ -169,7 +169,7 @@ struct _register_response
|
||||
* - data_num is button number or channel ID
|
||||
* - data is for abs values, width is encoded in ctrl_type
|
||||
*/
|
||||
struct _event_indication
|
||||
struct _event_indication
|
||||
{
|
||||
uint8_t data_type;
|
||||
uint8_t data_num;
|
||||
|
111
funkstuff.c
111
funkstuff.c
@ -38,17 +38,35 @@
|
||||
/* *********************************************************************** */
|
||||
|
||||
static const struct _description_response control_desc[] PROGMEM = {
|
||||
{ DESCRIPTION_TYPE_CONTROL, 0xFF, 0xFF, EVENT_TYPE_PWM_COMMAND, EVENT_NUM_PWM_CH0, "Door Light Cmd" },
|
||||
{ DESCRIPTION_TYPE_CONTROL, 0xFF, 0xFF, EVENT_TYPE_PWM_COMMAND, EVENT_NUM_PWM_CH1, "Wall Light Cmd" },
|
||||
{ DESCRIPTION_TYPE_CONTROL, 0xFF, 0xFF, EVENT_TYPE_PWM_VALUE, EVENT_NUM_PWM_CH0, "Door Light Val" },
|
||||
{ DESCRIPTION_TYPE_CONTROL, 0xFF, 0xFF, EVENT_TYPE_PWM_VALUE, EVENT_NUM_PWM_CH1, "Wall Light Val" },
|
||||
{ DESCRIPTION_TYPE_CONTROL, 0xFF, 0xFF, EVENT_TYPE_PWM_COMMAND, EVENT_NUM_PWM_CH0, "door/pwm_cmd" },
|
||||
{ DESCRIPTION_TYPE_CONTROL, 0xFF, 0xFF, EVENT_TYPE_PWM_COMMAND, EVENT_NUM_PWM_CH1, "wall/pwm_cmd" },
|
||||
{ DESCRIPTION_TYPE_CONTROL, 0xFF, 0xFF, EVENT_TYPE_PWM_VALUE, EVENT_NUM_PWM_CH0, "door/pwm_set" },
|
||||
{ DESCRIPTION_TYPE_CONTROL, 0xFF, 0xFF, EVENT_TYPE_PWM_VALUE, EVENT_NUM_PWM_CH1, "wall/pwm_set" },
|
||||
};
|
||||
|
||||
static const struct _description_response event_desc[] PROGMEM = {
|
||||
{ DESCRIPTION_TYPE_EVENT, 0xFF, 0xFF, EVENT_TYPE_INPUT_BUTTON, EVENT_NUM_INPUT_BUTTON, "Wall Button" },
|
||||
{ DESCRIPTION_TYPE_EVENT, 0xFF, 0xFF, EVENT_TYPE_INPUT_SWITCH, EVENT_NUM_INPUT_DOOR, "Door Switch" },
|
||||
// { DESCRIPTION_TYPE_EVENT, 0xFF, 0xFF, EVENT_TYPE_INPUT_BUTTON, EVENT_NUM_INPUT_BUTTON, "wall/input" },
|
||||
// { DESCRIPTION_TYPE_EVENT, 0xFF, 0xFF, EVENT_TYPE_INPUT_SWITCH, EVENT_NUM_INPUT_DOOR, "door/input" },
|
||||
{ DESCRIPTION_TYPE_EVENT, 0xFF, 0xFF, EVENT_TYPE_PWM_STATUS, EVENT_NUM_PWM_CH0, "door/pwm" },
|
||||
{ DESCRIPTION_TYPE_EVENT, 0xFF, 0xFF, EVENT_TYPE_PWM_STATUS, EVENT_NUM_PWM_CH1, "wall/pwm" },
|
||||
};
|
||||
|
||||
#define EVT_DATA_STATE_FREE 0x00
|
||||
#define EVT_DATA_STATE_REGISTERED 0x01
|
||||
#define EVT_DATA_STATE_UPDATE 0x02
|
||||
#define EVT_DATA_STATE_WAIT4CONF 0x04
|
||||
|
||||
struct _event_data
|
||||
{
|
||||
uint8_t state; // free/registered/wait4conf/retrigger
|
||||
uint8_t dest_address;
|
||||
uint16_t data_value; // type/num via event_desc with same idx
|
||||
};
|
||||
|
||||
static struct _event_data event_data[2];
|
||||
static uint8_t event_idx;
|
||||
static uint8_t rtx_count;
|
||||
|
||||
/* *********************************************************************** */
|
||||
|
||||
#define LED_RX 0
|
||||
@ -140,9 +158,6 @@ int main(void)
|
||||
pwm_event_handler(event);
|
||||
break;
|
||||
|
||||
case EVENT_TYPE_PWM_STATUS:
|
||||
break;
|
||||
|
||||
case EVENT_TYPE_INPUT_INCDEC:
|
||||
if (event->num == EVENT_NUM_INPUT_QUAD)
|
||||
{
|
||||
@ -150,15 +165,13 @@ int main(void)
|
||||
{
|
||||
event_queue(EVENT_TYPE_PWM_COMMAND,
|
||||
EVENT_NUM_PWM_CH1,
|
||||
EVENT_VALUE_PWM_DEC
|
||||
);
|
||||
EVENT_VALUE_PWM_DEC);
|
||||
}
|
||||
else if (event->value == EVENT_VALUE_INPUT_QUAD_INC)
|
||||
{
|
||||
event_queue(EVENT_TYPE_PWM_COMMAND,
|
||||
EVENT_NUM_PWM_CH1,
|
||||
EVENT_VALUE_PWM_INC
|
||||
);
|
||||
EVENT_VALUE_PWM_INC);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -170,8 +183,7 @@ int main(void)
|
||||
{
|
||||
event_queue(EVENT_TYPE_PWM_COMMAND,
|
||||
EVENT_NUM_PWM_CH1,
|
||||
EVENT_VALUE_PWM_TOGGLE
|
||||
);
|
||||
EVENT_VALUE_PWM_TOGGLE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -183,25 +195,21 @@ int main(void)
|
||||
{
|
||||
event_queue(EVENT_TYPE_PWM_COMMAND,
|
||||
EVENT_NUM_PWM_CH0,
|
||||
EVENT_VALUE_PWM_KEEP
|
||||
);
|
||||
EVENT_VALUE_PWM_KEEP);
|
||||
|
||||
event_queue(EVENT_TYPE_TIMER_SET,
|
||||
EVENT_NUM_TIMER_DOOR_CLOSE_DELAY,
|
||||
2000
|
||||
);
|
||||
2000);
|
||||
}
|
||||
else if (event->value == EVENT_VALUE_INPUT_DOOR_OPEN)
|
||||
{
|
||||
event_queue(EVENT_TYPE_PWM_COMMAND,
|
||||
EVENT_NUM_PWM_CH0,
|
||||
EVENT_VALUE_PWM_FADE_MAX
|
||||
);
|
||||
EVENT_VALUE_PWM_FADE_MAX);
|
||||
|
||||
event_queue(EVENT_TYPE_TIMER_SET,
|
||||
EVENT_NUM_TIMER_DOOR_CLOSE_DELAY,
|
||||
0
|
||||
);
|
||||
0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -211,12 +219,17 @@ int main(void)
|
||||
break;
|
||||
|
||||
case EVENT_TYPE_TIMER_ELAPSED:
|
||||
if (event->num == EVENT_NUM_TIMER_DOOR_CLOSE_DELAY)
|
||||
if ((event->num == EVENT_NUM_TIMER_DEBOUNCE1) ||
|
||||
(event->num == EVENT_NUM_TIMER_DEBOUNCE2)
|
||||
)
|
||||
{
|
||||
input_event_handler(event);
|
||||
}
|
||||
else if (event->num == EVENT_NUM_TIMER_DOOR_CLOSE_DELAY)
|
||||
{
|
||||
event_queue(EVENT_TYPE_PWM_COMMAND,
|
||||
EVENT_NUM_PWM_CH0,
|
||||
EVENT_VALUE_PWM_FADE_MIN
|
||||
);
|
||||
EVENT_VALUE_PWM_FADE_MIN);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -224,6 +237,22 @@ int main(void)
|
||||
break;
|
||||
}
|
||||
|
||||
uint8_t i;
|
||||
for (i = 0; i < ARRAY_SIZE(event_desc); i++)
|
||||
{
|
||||
if ((pgm_read_byte(&event_desc[i].data_type) == event->type) &&
|
||||
(pgm_read_byte(&event_desc[i].data_num) == event->num)
|
||||
)
|
||||
{
|
||||
event_data[i].data_value = event->value;
|
||||
|
||||
if (event_data[i].state & EVT_DATA_STATE_REGISTERED)
|
||||
{
|
||||
event_data[i].state |= EVT_DATA_STATE_UPDATE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
event_clear();
|
||||
}
|
||||
|
||||
@ -335,6 +364,35 @@ int main(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case MSG_CMD_REGISTER_REQUEST:
|
||||
rsp_msg->cause = CAUSE_INVALID_PARAMETER;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(control_desc); i++)
|
||||
{
|
||||
if ((pgm_read_byte(&event_desc[i].data_type) == req_msg->p.reg_req.data_type) &&
|
||||
(pgm_read_byte(&event_desc[i].data_num) == req_msg->p.reg_req.data_num)
|
||||
)
|
||||
{
|
||||
if (req_msg->p.reg_req.enable)
|
||||
{
|
||||
event_data[i].state |= EVT_DATA_STATE_REGISTERED;
|
||||
event_data[i].dest_address = req_pkt->source_address;
|
||||
}
|
||||
else
|
||||
{
|
||||
event_data[i].state |= ~(EVT_DATA_STATE_REGISTERED | EVT_DATA_STATE_UPDATE);
|
||||
}
|
||||
|
||||
rsp_msg->cause = CAUSE_SUCCESS;
|
||||
rsp_msg->p.reg_rsp.data_type = req_msg->p.reg_req.data_type;
|
||||
rsp_msg->p.reg_rsp.data_num = req_msg->p.reg_req.data_num;
|
||||
rsp_msg->p.reg_rsp.data_value = event_data[i].data_value;
|
||||
rsp_pkt->data_length += sizeof(struct _register_response);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
rsp_msg->cause = CAUSE_NOT_SUPPORTED;
|
||||
break;
|
||||
@ -350,5 +408,6 @@ int main(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
} /* main */
|
||||
|
Loading…
Reference in New Issue
Block a user