u8 RequestSequenceNumber = 0x00;
+int fbus_decoding=0;
+
#ifdef DEBUG
char *N61_PrintDevice(int Device)
{
void N61_RX_DisplayMessage()
{
#ifdef DEBUG
+ hexdump(MessageLength-2,MessageBuffer);
+
fprintf(stdout, _("Msg Dest: %s\n"), N61_PrintDevice(MessageDestination));
fprintf(stdout, _("Msg Source: %s\n"), N61_PrintDevice(MessageSource));
fprintf(stdout, _("Msg Type: %02x\n"), MessageType);
-
- hexdump(MessageLength-2,MessageBuffer);
+ fprintf(stdout, _("Msg Seq: %d\n"), MessageBuffer[MessageLength-1] & 0x0f);
#endif
AppendLog(MessageBuffer,MessageLength-2,true);
unsigned char request[6];
+ if (fbus_decoding)
+ return 0;
+
request[0] = message_type;
request[1] = message_seq;
void FBUS_RX_StateMachine(unsigned char rx_byte) {
+#if 0
static struct timeval time_now, time_last, time_diff;
+#endif
static int checksum[2];
case FBUS_RX_Discarding:
+#if 0
#ifndef VC6
gettimeofday(&time_now, NULL);
timersub(&time_now, &time_last, &time_diff);
}
/* else fall through to... */
#endif
+#endif
- case FBUS_RX_Sync:
+ case FBUS_RX_Sync: {
+static int discarded=0,discarded55=0;
if ((CurrentConnectionType==GCT_FBUS && rx_byte == FBUS_FRAME_ID) ||
((CurrentConnectionType==GCT_Infrared ||
CurrentConnectionType==GCT_Tekram) && rx_byte == FBUS_IR_FRAME_ID)) {
+ if (discarded) {
+ printf("[discarded %d bytes, %d were NOT 0x55]\n",discarded,discarded-discarded55);
+ discarded=0;
+ discarded55=0;
+ }
+
BufferCount = 0;
RX_State = FBUS_RX_GetDestination;
} else {
/* Lost frame sync */
RX_State = FBUS_RX_Discarding;
+#if 0
#ifndef VC6
gettimeofday(&time_last, NULL);
#endif
+#endif
+ discarded++;
+ if (rx_byte == 0x55)
+ discarded55++;
}
- break;
+ } break;
case FBUS_RX_GetDestination:
/* Is the checksum correct? */
if (checksum[0] == checksum[1]) {
+u8 msgseq;
if (RX_Multiple) {
}
MultiMessageLength=MultiMessageLength+MessageLength-2;
- FBUS_SendAck(MessageType, MessageBuffer[MessageLength-1] & 0x0f);
+ msgseq=MessageBuffer[MessageLength-1] & 0x0f;
if ((MessageLength > 1) && (MessageBuffer[MessageLength-2] != 0x01))
{
/* Do not debug Ack and RLP frames to detail. */
if (MessageType != FBUS_FRTYPE_ACK && MessageType != 0xf1)
N61_RX_DisplayMessage();
+ else {
+ if (MessageType == FBUS_FRTYPE_ACK)
+ puts("[ignoring print of ACK]");
+ else
+ puts("[ignoring print of RLP]");
+ }
GSM->DispatchMessage(MessageLength-2, MessageBuffer, MessageType);
}
+ FBUS_SendAck(MessageType, msgseq);
+
} else {
/* We do not want to send ACK of ACKs and ACK of RLP frames. */
if (MessageType != FBUS_FRTYPE_ACK && MessageType != 0xf1) {
- FBUS_SendAck(MessageType, MessageBuffer[MessageLength-1] & 0x0f);
if ((MessageLength > 1) && (MessageBuffer[MessageLength-2] != 0x01))
{
#endif
RX_State = FBUS_RX_Sync;
}
+
+ msgseq=MessageBuffer[MessageLength-1] & 0x0f;
+ FBUS_SendAck(MessageType, msgseq);
}
}
} else {
+ msgseq=MessageBuffer[MessageLength-1] & 0x0f;
/* We do not want to send ACK of ACKs and ACK of RLP frames. */
if (MessageType != FBUS_FRTYPE_ACK && MessageType != 0xf1) {
- FBUS_SendAck(MessageType, MessageBuffer[MessageLength-1] & 0x0f);
if ((MessageLength > 1) && (MessageBuffer[MessageLength-2] != 0x01))
{
}
}
- if (!RX_Multiple && MessageDestination!=FBUS_DEVICE_PHONE ) {
+ if (!RX_Multiple /* && MessageDestination!=FBUS_DEVICE_PHONE */ ) {
/* Do not debug Ack and RLP frames to detail. */
if (MessageType != FBUS_FRTYPE_ACK && MessageType != 0xf1)
N61_RX_DisplayMessage();
+ else {
+ if (MessageType == FBUS_FRTYPE_ACK)
+ puts("[ignoring print of ACK]");
+ else
+ puts("[ignoring print of RLP]");
+ }
GSM->DispatchMessage(MessageLength-2, MessageBuffer, MessageType);
}
#ifdef DEBUG
/* When make debug and message is to phone display it */
- if (MessageDestination==FBUS_DEVICE_PHONE) {
+ if (MessageDestination==FBUS_DEVICE_PHONE && !fbus_decoding) {
for (i=MessageLength;i>=0;i--)
MessageBuffer[i+6]=MessageBuffer[i];
MessageBuffer[0]=FBUS_FRAME_ID;
NULL_TX_DisplayMessage(MessageLength, MessageBuffer);
}
#endif
+ if (MessageType != FBUS_FRTYPE_ACK && MessageType != 0xf1)
+ FBUS_SendAck(MessageType, msgseq);
}
+#ifdef DEBUG
+ putchar('\n');
+#endif
} else {
#ifdef DEBUG
fprintf(stdout, _("Bad checksum %02x (should be %02x), msg len=%i !\n"),checksum[0],checksum[1],MessageLength);