Fix Frame Count Bit handling
Extend mbus_send_request_frame() to set FCB Set FCB in case of primary adressing
This commit is contained in:
parent
716d712314
commit
61f6942448
@ -56,6 +56,7 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
char *device, *addr_str, *xml_result;
|
char *device, *addr_str, *xml_result;
|
||||||
int address;
|
int address;
|
||||||
|
char fcb;
|
||||||
long baudrate = 9600;
|
long baudrate = 9600;
|
||||||
|
|
||||||
memset((void *)&reply, 0, sizeof(mbus_frame));
|
memset((void *)&reply, 0, sizeof(mbus_frame));
|
||||||
@ -159,14 +160,16 @@ main(int argc, char **argv)
|
|||||||
// else MBUS_PROBE_SINGLE
|
// else MBUS_PROBE_SINGLE
|
||||||
|
|
||||||
address = MBUS_ADDRESS_NETWORK_LAYER;
|
address = MBUS_ADDRESS_NETWORK_LAYER;
|
||||||
|
fcb = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// primary addressing
|
// primary addressing
|
||||||
address = atoi(addr_str);
|
address = atoi(addr_str);
|
||||||
|
fcb = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mbus_send_request_frame(handle, address) == -1)
|
if (mbus_send_request_frame(handle, address, fcb) == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to send M-Bus request frame.\n");
|
fprintf(stderr, "Failed to send M-Bus request frame.\n");
|
||||||
mbus_disconnect(handle);
|
mbus_disconnect(handle);
|
||||||
|
@ -96,7 +96,7 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK)
|
if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK)
|
||||||
{
|
{
|
||||||
if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER) == -1)
|
if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 0) == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"Failed to send request to selected secondary device: %s\n", mbus_error_str());
|
fprintf(stderr,"Failed to send request to selected secondary device: %s\n", mbus_error_str());
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -102,7 +102,7 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
// else MBUS_PROBE_SINGLE
|
// else MBUS_PROBE_SINGLE
|
||||||
|
|
||||||
if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER) == -1)
|
if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 0) == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to send M-Bus request frame.\n");
|
fprintf(stderr, "Failed to send M-Bus request frame.\n");
|
||||||
return 1;
|
return 1;
|
||||||
@ -113,7 +113,7 @@ main(int argc, char **argv)
|
|||||||
// primary addressing
|
// primary addressing
|
||||||
|
|
||||||
address = atoi(addr_str);
|
address = atoi(addr_str);
|
||||||
if (mbus_send_request_frame(handle, address) == -1)
|
if (mbus_send_request_frame(handle, address, 1) == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to send M-Bus request frame.\n");
|
fprintf(stderr, "Failed to send M-Bus request frame.\n");
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -87,7 +87,7 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK)
|
if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK)
|
||||||
{
|
{
|
||||||
if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER) == -1)
|
if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 0) == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"Failed to send request to selected secondary device: %s\n", mbus_error_str());
|
fprintf(stderr,"Failed to send request to selected secondary device: %s\n", mbus_error_str());
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1872,7 +1872,7 @@ mbus_send_application_reset_frame(mbus_handle * handle, int address, int subcode
|
|||||||
// send a request packet to from master to slave
|
// send a request packet to from master to slave
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
int
|
int
|
||||||
mbus_send_request_frame(mbus_handle * handle, int address)
|
mbus_send_request_frame(mbus_handle * handle, int address, char frame_count_bit)
|
||||||
{
|
{
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
mbus_frame *frame;
|
mbus_frame *frame;
|
||||||
@ -1894,6 +1894,11 @@ mbus_send_request_frame(mbus_handle * handle, int address)
|
|||||||
frame->control = MBUS_CONTROL_MASK_REQ_UD2 | MBUS_CONTROL_MASK_DIR_M2S;
|
frame->control = MBUS_CONTROL_MASK_REQ_UD2 | MBUS_CONTROL_MASK_DIR_M2S;
|
||||||
frame->address = address;
|
frame->address = address;
|
||||||
|
|
||||||
|
if (frame_count_bit)
|
||||||
|
{
|
||||||
|
frame->control |= MBUS_CONTROL_MASK_FCB;
|
||||||
|
}
|
||||||
|
|
||||||
if (mbus_send_frame(handle, frame) == -1)
|
if (mbus_send_frame(handle, frame) == -1)
|
||||||
{
|
{
|
||||||
MBUS_ERROR("%s: failed to send mbus frame.\n", __PRETTY_FUNCTION__);
|
MBUS_ERROR("%s: failed to send mbus frame.\n", __PRETTY_FUNCTION__);
|
||||||
@ -2241,7 +2246,7 @@ mbus_probe_secondary_address(mbus_handle *handle, const char *mask, char *matchi
|
|||||||
if (ret == MBUS_PROBE_SINGLE)
|
if (ret == MBUS_PROBE_SINGLE)
|
||||||
{
|
{
|
||||||
/* send a data request command to find out the full address */
|
/* send a data request command to find out the full address */
|
||||||
if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER) == -1)
|
if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 0) == -1)
|
||||||
{
|
{
|
||||||
MBUS_ERROR("%s: Failed to send request to selected secondary device [mask %s]: %s.\n",
|
MBUS_ERROR("%s: Failed to send request to selected secondary device [mask %s]: %s.\n",
|
||||||
__PRETTY_FUNCTION__,
|
__PRETTY_FUNCTION__,
|
||||||
@ -2320,7 +2325,7 @@ int mbus_read_slave(mbus_handle * handle, mbus_address *address, mbus_frame * re
|
|||||||
|
|
||||||
if (address->is_primary)
|
if (address->is_primary)
|
||||||
{
|
{
|
||||||
if (mbus_send_request_frame(handle, address->primary) == -1)
|
if (mbus_send_request_frame(handle, address->primary, 1) == -1)
|
||||||
{
|
{
|
||||||
MBUS_ERROR("%s: Failed to send M-Bus request frame.\n",
|
MBUS_ERROR("%s: Failed to send M-Bus request frame.\n",
|
||||||
__PRETTY_FUNCTION__);
|
__PRETTY_FUNCTION__);
|
||||||
@ -2364,7 +2369,7 @@ int mbus_read_slave(mbus_handle * handle, mbus_address *address, mbus_frame * re
|
|||||||
}
|
}
|
||||||
/* else MBUS_PROBE_SINGLE */
|
/* else MBUS_PROBE_SINGLE */
|
||||||
|
|
||||||
if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER) == -1)
|
if (mbus_send_request_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 0) == -1)
|
||||||
{
|
{
|
||||||
MBUS_ERROR("%s: Failed to send M-Bus request frame.\n",
|
MBUS_ERROR("%s: Failed to send M-Bus request frame.\n",
|
||||||
__PRETTY_FUNCTION__);
|
__PRETTY_FUNCTION__);
|
||||||
|
@ -290,10 +290,11 @@ int mbus_send_switch_baudrate_frame(mbus_handle * handle, int address, long baud
|
|||||||
*
|
*
|
||||||
* @param handle Initialized handle
|
* @param handle Initialized handle
|
||||||
* @param address Address (0-255)
|
* @param address Address (0-255)
|
||||||
|
* @param frame_count_bit Frame Count Bit (0-1)
|
||||||
*
|
*
|
||||||
* @return Zero when successful.
|
* @return Zero when successful.
|
||||||
*/
|
*/
|
||||||
int mbus_send_request_frame(mbus_handle * handle, int address);
|
int mbus_send_request_frame(mbus_handle * handle, int address, char frame_count_bit);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends user data frame (SND_UD) to given slave using "unified" handle
|
* Sends user data frame (SND_UD) to given slave using "unified" handle
|
||||||
|
Loading…
x
Reference in New Issue
Block a user