OutputPacket *packet = output_create_packet();
packet->bit_duration = 4;
packet->repeat_count = 1;
- packet->final_delay = 0;
+ packet->final_delay = 128;
packet->length = 10;
packet->data[0] = 0x9B;
packet->data[1] = 0;
mfx_encode_bits8_raw(packet, state, state->crc8, 8);
mfx_encode_flag_pairs(packet, 11);
mfx_encode_bits8_raw(packet, state, 0x3, 4);
+ packet->final_delay = 0;
uint8_t fill = (1-mfx_get_output_level(packet))*0xFF;
for(uint8_t i=0; i<2; ++i)
}
mfx_ensure_low_level(packet);
+ packet->final_delay = 128;
}
-static void mfx_receive_feedback()
+static void mfx_receive_feedback(uint8_t type)
{
/* The decoder should activate a 52.6 kHz carrier to indicate positive
acknowledgement, but so far I've been unable to build a circuit that detects
}
uint8_t reply[2];
- reply[0] = MFX_FEEDBACK;
+ reply[0] = type;
if(current[1]>feedback_threshold)
{
current[1] -= feedback_threshold;
mask_bits <<= 16;
mask_bits |= (uint16_t)(cmd[3]<<8)|cmd[4];
mfx_search_packet(mask_bits, mask_size);
- mfx_receive_feedback();
+ mfx_receive_feedback(MFX_SEARCH_FEEDBACK);
}
else if(cmd[0]==MFX_ASSIGN_ADDRESS || cmd[0]==MFX_PING)
{
else
{
mfx_ping_packet(addr, id);
- mfx_receive_feedback();
+ mfx_receive_feedback(MFX_PING_FEEDBACK);
}
}
else if(cmd[0]==MFX_SPEED || cmd[0]==MFX_SPEED_FUNCS8 || cmd[0]==MFX_SPEED_FUNCS16)
uint8_t speed_dir = cmd[3];
if((speed_dir&0x7F)==0x7F)
return INVALID_VALUE;
- ++speed_dir;
+ // Skip emergency stop
+ if(speed_dir>0)
+ ++speed_dir;
if(cmd[0]==MFX_SPEED)
mfx_speed_packet(addr, speed_dir);