13
0
Fork 1

type III support.

we have observations, if you have some either, let us know on the ML.


git-svn-id: https://dedected.org/svn/trunk@69 8d8ab74c-27aa-4a3d-9bde-523a2bc1f624
This commit is contained in:
mazzoo 2009-02-11 20:45:15 +00:00
parent 4361119a7a
commit 906597056f
13 changed files with 1216 additions and 628 deletions

View File

@ -82,6 +82,14 @@ int dect_compare_RFPI(unsigned char *packet, unsigned char* RFPI)
return 0;
}
int dect_has_b_field(unsigned char *packet)
{
if ((packet[5] & DECT_A_BA) != DECT_A_BA)
return 1;
return 0;
}
int dect_get_slot(unsigned char *packet)
{
int slot = -1;
@ -133,7 +141,7 @@ int dect_update_slottable(struct dect_slot_info *slottable, int slot, unsigned c
{
if (slottable[slot].type == DECT_SLOTTYPE_SCAN)
{
printk("received packet on scanslot %u on carrier %u\n", slot, slottable[slot].channel);
//printk("received packet on scanslot %u on carrier %u\n", slot, slottable[slot].channel);
slottable[slot].type = DECT_SLOTTYPE_CARRIER;
if (slottable[slot].channel == 0)
slottable[slot].channel = 9;
@ -170,10 +178,8 @@ int dect_update_slottable(struct dect_slot_info *slottable, int slot, unsigned c
switch(packet[5] & DECT_A_TA)
{
case DECT_P_TYPE:
if ( ( (packet[6] & DECT_P_HEAD) ==
DECT_P_HEAD_ZEROLP) ||
( (packet[6] & DECT_P_HEAD) ==
DECT_P_HEAD_SHORTLP) )
if ( ( (packet[6] & DECT_P_HEAD) == DECT_P_HEAD_ZEROLP) ||
( (packet[6] & DECT_P_HEAD) == DECT_P_HEAD_SHORTLP) )
{
switch((packet[9] & DECT_P_INFOTYPE))
{
@ -192,7 +198,7 @@ int dect_update_slottable(struct dect_slot_info *slottable, int slot, unsigned c
slottable[newslot+12].errcnt = 0;
slottable[newslot+12].update = 1;
/*printk("\n\nstation switching to slot %u channel %u\n\n",newslot, packet[10] & DECT_P_IT_BEARERPOS_CN); */
//printk("\n\nstation switching to slot %u channel %u\n\n",newslot, packet[10] & DECT_P_IT_BEARERPOS_CN);
return 1;
}
@ -208,7 +214,7 @@ int dect_update_slottable(struct dect_slot_info *slottable, int slot, unsigned c
if (x && (!slottable[i].active))
{
printk("scanning on slot %u\n", i);
//printk("scanning on slot %u\n", i);
slottable[i].active = 1;
slottable[i].channel = 0; /* channel unknown at this position */
slottable[i].type = DECT_SLOTTYPE_SCAN;
@ -219,7 +225,7 @@ int dect_update_slottable(struct dect_slot_info *slottable, int slot, unsigned c
if (x && (!slottable[i+12].active))
{
printk("scanning on slot %u\n", i + 12);
//printk("scanning on slot %u\n", i + 12);
slottable[i+12].active = 1;
slottable[i+12].channel = 0; /* channel unknown at this position */
slottable[i+12].type = DECT_SLOTTYPE_SCAN;
@ -273,6 +279,9 @@ int dect_update_slottable(struct dect_slot_info *slottable, int slot, unsigned c
int dect_receive_error(struct dect_slot_info *slottable, int slot)
{
//printk("slot:%u,errcnt:%u,type:%u,channel:%u\n",slot,slottable[slot].errcnt,slottable[slot].type,slottable[slot].channel);
slottable[slot].errcnt++;
if (slottable[slot].type != DECT_SLOTTYPE_SCAN)
@ -282,7 +291,7 @@ int dect_receive_error(struct dect_slot_info *slottable, int slot)
slottable[slot].active = 0;
slottable[slot].update = 1;
printk("slot %u on channel %u died\n", slot, slottable[slot].channel);
//printk("slot %u on channel %u died\n", slot, slottable[slot].channel);
return 1;
}
@ -309,7 +318,7 @@ int dect_update_scanchannels(struct dect_slot_info *slottable)
ret = 1;
/*printk("slot %u will now scan on carrier %u\n", i, slottable[i].channel); */
//printk("slot %u will now scan on carrier %u\n", i, slottable[i].channel);
}
}
}

View File

@ -32,6 +32,7 @@ struct dect_slot_info
int dect_is_RFPI_Packet(unsigned char *packet);
int dect_compare_RFPI(unsigned char *packet, unsigned char* RFPI);
int dect_has_b_field(unsigned char *packet);
int dect_get_slot(unsigned char *packet);
int dect_is_multiframe_number(unsigned char *packet);
int dect_is_fp_packet(unsigned char *packet);

View File

@ -4,8 +4,10 @@ FW=sc14421_firmware
FW1=sc14421_II_sniff_scan
FW2=sc14421_II_sniff_sync
FW3=sc14421_III_sniff_scan
FW4=sc14421_III_sniff_sync
ALL_FW=$(FW1) $(FW2)
ALL_FW=$(FW1) $(FW2) $(FW3) $(FW4)
BIN2C=./bin2c
@ -33,8 +35,11 @@ $(foreach f,$(ALL_FW),$f.c): $(foreach f,$(ALL_FW),$f.bin) $(BIN2C)
$(foreach f,$(ALL_FW),$f.decl):
@echo "extern unsigned char $(@:.decl=)_fw[509];" > $@
mrproper:
rm -f ../$(FW).h ../$(FW).c
$(MAKE) clean
clean:
rm -f ../$(FW).h ../$(FW).c $(BIN2C)
rm -f $(BIN2C)
rm -f $(foreach f,$(ALL_FW),$f.c)
rm -f $(foreach f,$(ALL_FW),$f.p)
rm -f $(foreach f,$(ALL_FW),$f.decl)

View File

@ -0,0 +1,129 @@
CPU SC14421
ORG 0
BR Start
PB_LED EQU 0x80
PB_RX_ON EQU 0x40
PB_TX_ON EQU 0x10
PB_RADIOPOWER EQU 0x04
PB_DCTHRESHOLD EQU 0x02
PB_RSSI EQU 0x01
;-------------------------------------------------------------
Start: B_RST
BK_C 0x00
C_LD 0x10
WT 10
B_RC 0x00
WT 8
B_RST
C_ON
WT 10
P_EN
P_LD 0x00
RCK_INT
RFEN
;-------------------------------------------------------------
BK_C 0x20
TryAgain: JMP RFInit
JMP RFDKnow1
MEN2N
WT 250
P_SC 0x60
P_LDH PB_RX_ON|PB_DCTHRESHOLD
UNLCK
WT 64
B_XOFF
B_SR
WNT 20
JMP1 SFieldFound
B_RST
WT 22
BR TryAgain
;-------------------------------------------------------------
SFieldFound: WNT 23
P_SC 0x00
JMP RecvSlot
U_INT0
BR TryAgain
;-------------------------------------------------------------
RecvSlot: JMP RFDKnow1
JMP RecvPP
WT 1
B_BRFU 0x0E
WT 255
WT 73
P_LDH PB_RSSI
P_LDL 0x20|PB_DCTHRESHOLD;|PB_RADIOPOWER
B_WRS 0x00
WT 7
B_RST
MEN1N
WNT 1
RTN
;-------------------------------------------------------------
RecvPP: MEN2
P_LDL PB_RSSI
WT 1
RFDIS
WNT 1
WT 5
B_XON
WT 14
B_SR
EN_SL_ADJ
WT 13
P_LDH PB_DCTHRESHOLD
WT 32
B_AR2 0x06
WT 61
RTN
;-------------------------------------------------------------
RFInit: RFEN
WT 1
WT 1
M_WR 0x4A
WT 9
M_RST
JMP label_C0
M_WR 0x4B
WT 17
M_RST
JMP label_C0
M_WR 0x4D
WT 25
M_RST
RTN
;-------------------------------------------------------------
RFDKnow1: JMP label_C0
BR RFDKnow3
;-------------------------------------------------------------
RFDKnow2: JMP label_C3
RFDKnow3: B_RST
B_RC 0x58
WT 8
MEN2N
P_LDH PB_RADIOPOWER
WT 208
RTN
;-------------------------------------------------------------
label_C0: MEN1
MEN1N
RTN
;-------------------------------------------------------------
label_C3: MEN1
RTN
;-------------------------------------------------------------

View File

@ -0,0 +1,301 @@
CPU SC14421
ORG 0
BR Start
PB_LED EQU 0x80
PB_RX_ON EQU 0x40
PB_TX_ON EQU 0x10
PB_RADIOPOWER EQU 0x04
PB_DCTHRESHOLD EQU 0x02
PB_RSSI EQU 0x01
;-------------------------------------------------------------
Start: BR InitDIP
;-------------------------------------------------------------
SlotTable: SLOTZERO
JP0III: BK_C 0x20
PP0III: WNT 2
JP2III: BK_C 0x30
PP2III: WNT 2
JP4III: BK_C 0x40
PP4III: WNT 2
JP6III: BK_C 0x50
PP6III: WNT 2
JP8III: BK_C 0x60
PP8III: WNT 2
JP10III: BK_C 0x70
PP10III: WNT 2
U_INT0
JP12III: BK_C 0x80
PP12III: WNT 2
JP14III: BK_C 0x90
PP14III: WNT 2
JP16III: BK_C 0xA0
PP16III: WNT 2
JP18III: BK_C 0xB0
PP18III: WNT 2
JP20III: BK_C 0xC0
PP20III: WNT 2
JP22III: BK_C 0xD0
PP22III: WNT 2
U_INT3
P_LDH PB_LED
BR SlotTable
;-------------------------------------------------------------
RecvIII: JMP RFInit
JMP RFDKnow1
BR label_2D
;-------------------------------------------------------------
JMP RFInit
JMP RFDKnow2
label_2D: JMP RecvPP
WT 1
B_BRFU 0x0E
JMP label_6B
BR label_51
;-------------------------------------------------------------
JMP RFInit
JMP RFDKnow1
BR label_37
;-------------------------------------------------------------
JMP RFInit
JMP RFDKnow2
label_37: JMP RecvPP
BR label_1
;-------------------------------------------------------------
JMP RFInit
JMP RFDKnow1
BR label_3E
;-------------------------------------------------------------
JMP RFInit
JMP RFDKnow2
label_3E: JMP label_2
WT 1
B_BTFU 0x0E
JMP label_3
BR label_54
;-------------------------------------------------------------
JMP RFInit
JMP RFDKnow2
JMP label_2
WT 1
B_BT 0x0E
JMP label_4
BR label_53
;-------------------------------------------------------------
JMP RFInit
JMP RFDKnow1
BR label_4F
;-------------------------------------------------------------
JMP RFInit
JMP RFDKnow2
label_4F: JMP label_2
BR label_5
;-------------------------------------------------------------
label_51: B_WRS 0x00
WT 7
label_53: B_RST
label_54: MEN1N
WNT 1
label_6: RTN
;-------------------------------------------------------------
label_7: B_RST
MEN1N
BR label_6
;-------------------------------------------------------------
RecvPP: MEN2
P_LDL PB_RSSI
WT 1
RFDIS
WNT 1
WT 5
B_XON
WT 14
B_SR
EN_SL_ADJ
WT 13
P_LDH PB_DCTHRESHOLD
WT 32
B_AR2 0x06
WT 61
RTN
;-------------------------------------------------------------
label_6B: WT 249
WT 79
label_10: P_LDH PB_RSSI
P_LDL 0x20|PB_RADIOPOWER|PB_DCTHRESHOLD
RTN
;-------------------------------------------------------------
label_2: MEN2
WT 2
RFDIS
B_RST
B_RC 0x50
WT 8
WNT 1
WT 4
P_LDH PB_RX_ON
WT 3
P_LDH PB_TX_ON
WT 3
B_ST2
WT 31
B_AT2 0x06
WT 61
RTN
;-------------------------------------------------------------
label_3: WT 249
WT 84
B_RST
label_4: P_LDL PB_TX_ON
WT 8
P_LDL PB_RX_ON|PB_RADIOPOWER
RTN
;-------------------------------------------------------------
label_8: B_XON
WT 15
B_XOFF
WT 61
RTN
;-------------------------------------------------------------
label_9: WT 61
JMP label_8
JMP label_8
JMP label_8
JMP label_8
JMP label_8
WT 1
B_XON
WT 11
RTN
;-------------------------------------------------------------
label_1: B_BR 0x0E
JMP label_9
WT 3
B_XR
WT 6
JMP label_10
B_WRS 0x00
WT 6
BR label_7
;-------------------------------------------------------------
label_5: B_BT 0x0E
WT 3
JMP label_9
B_XT
WT 13
B_RST
JMP label_4
BR label_7
;-------------------------------------------------------------
RFInit: RFEN
WT 1
WT 1
M_WR 0x4A
WT 9
M_RST
JMP label_C0
M_WR 0x4B
WT 17
M_RST
JMP label_C0
M_WR 0x4D
WT 25
M_RST
RTN
;-------------------------------------------------------------
RFDKnow1: JMP label_C0
BR RFDKnow3
;-------------------------------------------------------------
RFDKnow2: JMP label_C3
RFDKnow3: B_RST
B_RC 0x58
WT 8
MEN2N
P_LDH PB_RADIOPOWER
WT 208
RTN
;-------------------------------------------------------------
label_C0: MEN1
MEN1N
RTN
;-------------------------------------------------------------
label_C3: MEN1
RTN
;-------------------------------------------------------------
PPSync: BK_C 0x20
; P_LDL PB_LED
PPSearchIII: JMP RFInit
JMP RFDKnow1
MEN2N
WT 250
P_SC 0x60
P_LDH PB_DCTHRESHOLD
UNLCK
WT 64
B_XOFF
B_SR
WNT 20
JMP1 SFieldFound
B_RST
U_INT1
WNT 23
BR PPSearchIII
;-------------------------------------------------------------
SFieldFound:WNT 23
P_SC 0x00
RecvNextIII: JMP RecvIII
U_INT0
WNT 22
PPFoundIII: BR PPSearchIII
;-------------------------------------------------------------
InitDIP: B_RST
BK_C 0x00
C_LD 0x10
WT 10
B_RC 0x00
WT 8
B_RST
C_ON
WT 10
P_EN
P_LD 0x00
RCK_INT
RFEN
BR PPSync
;-------------------------------------------------------------
SHARED PP0III,PP2III,PP4III,PP6III,PP8III,PP10III,PP12III,PP14III,PP16III,PP18III,PP20III,PP22III
SHARED JP0III,JP2III,JP4III,JP6III,JP8III,JP10III,JP12III,JP14III,JP16III,JP18III,JP20III,JP22III
SHARED RecvNextIII,PPFoundIII,RecvIII

View File

@ -9,102 +9,107 @@ PB_RX_ON EQU 0x40
PB_TX_ON EQU 0x10
PB_RADIOPOWER EQU 0x04
PB_DCTHRESHOLD EQU 0x02
PB_RSSI EQU 0x01
PB_RSSI EQU 0x01
;-------------------------------------------------------------
Start: B_RST
BK_C 0x00
C_LD 0x10
WT 10
B_RC 0x00
WT 8
B_RST
C_ON
WT 10
P_EN
P_LD PB_RADIOPOWER
RCK_INT
RFEN
BK_C 0x00
C_LD 0x10
WT 10
B_RC 0x00
WT 8
B_RST
C_ON
WT 10
P_EN
P_LD PB_RADIOPOWER
RCK_INT
RFEN
;-------------------------------------------------------------
BK_C 0x20
JMP RFInit
TryAgain: JMP label_B1
WT 250
P_SC 0x20
P_LDH PB_RX_ON|PB_DCTHRESHOLD
UNLCK
WT 64
B_XOFF
B_SR
WNT 20
JMP1 SFieldFound
BR TryAgain
BK_C 0x20
JMP RFInit
TryAgain: JMP RFDKnow1
WT 250
P_SC 0x20
P_LDH PB_RX_ON|PB_DCTHRESHOLD
UNLCK
WT 64
B_XOFF
B_SR
WNT 20
JMP1 SFieldFound
BR TryAgain
;-------------------------------------------------------------
SFieldFound: WNT 23
P_SC 0x00
JMP ReceiveSlot
U_INT0
BR TryAgain
SFieldFound:WNT 23
P_SC 0x00
JMP RecvSlot
U_INT0
BR TryAgain
;-------------------------------------------------------------
ReceiveSlot: JMP label_B1
JMP RecvPP
WT 1
B_BRFU 0x0e
WT 255
WT 73
P_LDH PB_RSSI
P_LDL PB_RX_ON
B_WRS 0x00
WT 6
B_RST
P_LDL PB_RX_ON|PB_TX_ON
WT 5
RTN
RecvSlot: JMP RFDKnow1
JMP RecvPP
WT 1
B_BRFU 0x0E
WT 255
WT 73
P_LDH PB_RSSI
P_LDL PB_RX_ON
B_WRS 0x00
WT 6
B_RST
P_LDL PB_RX_ON|PB_TX_ON
WT 5
RTN
;-------------------------------------------------------------
RecvPP: P_LDH PB_RX_ON
P_LDL PB_RSSI
WT 34
WNT 1
B_XON
P_LDH PB_DCTHRESHOLD
WT 5
B_SR
EN_SL_ADJ
WT 12
P_LDL PB_DCTHRESHOLD
WT 33
B_AR2 0x06
WT 61
RTN
P_LDL PB_RSSI
WT 34
WNT 1
B_XON
P_LDH PB_DCTHRESHOLD
WT 5
B_SR
EN_SL_ADJ
WT 12
P_LDL PB_DCTHRESHOLD
WT 33
B_AR2 0x06
WT 61
RTN
;-------------------------------------------------------------
RFInit: RFEN
MEN1N
WT 2
M_WR 0x4A
WT 25
M_RST
MEN1
MEN1N
M_WR 0x4D
WT 10
M_RST
MEN1
RTN
MEN1N
WT 2
M_WR 0x4A
WT 25
M_RST
MEN1
MEN1N
M_WR 0x4D
WT 10
M_RST
MEN1
RTN
;-------------------------------------------------------------
label_B1: B_RST
B_RC 0x58
WT 8
MEN2
WT 182
MEN2N
WT 16
RTN
RFDKnow1: B_RST
B_RC 0x58
WT 8
MEN2
WT 182
MEN2N
WT 16
RTN
;-------------------------------------------------------------

View File

@ -1,15 +1,15 @@
CPU SC14421
ORG 0
BR Start
BR Start
PB_LED EQU 0x80
PB_RX_ON EQU 0x40
PB_TX_ON EQU 0x10
PB_RADIOPOWER EQU 0x04
PB_DCTHRESHOLD EQU 0x02
PB_RSSI EQU 0x01
PB_RSSI EQU 0x01
;-------------------------------------------------------------
@ -17,282 +17,275 @@ Start: BR InitDIP
;-------------------------------------------------------------
SlotTable: SLOTZERO
JP0: BK_C 0x20
PP0: WNT 2
JP2: BK_C 0x30
PP2: WNT 2
JP4: BK_C 0x40
PP4: WNT 2
JP6: BK_C 0x50
PP6: WNT 2
JP8: BK_C 0x60
PP8: WNT 2
JP10: BK_C 0x70
PP10: WNT 2
U_INT0
JP12: BK_C 0x80
PP12: WNT 2
JP14: BK_C 0x90
PP14: WNT 2
JP16: BK_C 0xA0
PP16: WNT 2
JP18: BK_C 0xB0
PP18: WNT 2
JP20: BK_C 0xC0
PP20: WNT 2
JP22: BK_C 0xD0
PP22: WNT 2
U_INT3
P_LDL 0x80
BR SlotTable
JP0II: BK_C 0x20
PP0II: WNT 2
JP2II: BK_C 0x30
PP2II: WNT 2
JP4II: BK_C 0x40
PP4II: WNT 2
JP6II: BK_C 0x50
PP6II: WNT 2
JP8II: BK_C 0x60
PP8II: WNT 2
JP10II: BK_C 0x70
PP10II: WNT 2
U_INT0
JP12II: BK_C 0x80
PP12II: WNT 2
JP14II: BK_C 0x90
PP14II: WNT 2
JP16II: BK_C 0xA0
PP16II: WNT 2
JP18II: BK_C 0xB0
PP18II: WNT 2
JP20II: BK_C 0xC0
PP20II: WNT 2
JP22II: BK_C 0xD0
PP22II: WNT 2
U_INT3
P_LDL 0x80
BR SlotTable
;-------------------------------------------------------------
sync_label_28: JMP RFInit
JMP label_B1
BR label_2D
RecvII: JMP RFInit
JMP RFDKnow1
BR label_2D
;-------------------------------------------------------------
JMP RFInit
JMP label_B3
JMP RFInit
JMP RFDKnow2
label_2D: JMP RecvPP
WT 1
B_BRFU 0x0E
JMP label_6B
BR label_51
WT 1
B_BRFU 0x0E
JMP label_6B
BR label_51
;-------------------------------------------------------------
JMP RFInit
JMP label_B1
BR label_37
JMP RFInit
JMP RFDKnow1
BR label_37
;-------------------------------------------------------------
JMP RFInit
JMP label_B3
JMP RFInit
JMP RFDKnow2
label_37: JMP RecvPP
BR label_92
BR label_1
;-------------------------------------------------------------
JMP RFInit
JMP label_B1
BR label_3E
JMP RFInit
JMP RFDKnow1
BR label_3E
;-------------------------------------------------------------
JMP RFInit
JMP label_B3
label_3E: JMP label_70
WT 1
B_BTFU 0x0E
JMP label_7C
BR label_54
JMP RFInit
JMP RFDKnow2
label_3E: JMP label_2
WT 1
B_BTFU 0x0E
JMP label_3
BR label_54
;-------------------------------------------------------------
JMP RFInit
JMP label_B3
JMP label_70
WT 1
B_BT 0x0E
JMP label_7F
BR label_53
JMP RFInit
JMP RFDKnow2
JMP label_2
WT 1
B_BT 0x0E
JMP label_4
BR label_53
;-------------------------------------------------------------
JMP RFInit
JMP label_B1
BR label_4F
JMP RFInit
JMP RFDKnow1
BR label_4F
;-------------------------------------------------------------
JMP RFInit
JMP label_B3
label_4F: JMP label_70
BR label_9B
JMP RFInit
JMP RFDKnow2
label_4F: JMP label_2
BR label_5
;-------------------------------------------------------------
label_51: B_WRS 0x00
WT 6
WT 6
label_53: B_RST
label_54: P_LDL 0x50
WT 5
WNT 1
label_57: RTN
label_54: P_LDL PB_RX_ON|PB_TX_ON
WT 5
WNT 1
label_6: RTN
;-------------------------------------------------------------
label_58: B_RST
P_LDL 0x50
BR label_57
label_7: B_RST
P_LDL PB_RX_ON|PB_TX_ON
BR label_6
;-------------------------------------------------------------
RecvPP: P_LDH 0x40
P_LDL PB_RSSI
WT 25
WNT 1
WT 9
B_XON
P_LDH 0x02
WT 5
B_SR
EN_SL_ADJ
WT 12
P_LDL 0x02
WT 33
B_AR2 0x06
WT 61
RTN
RecvPP: P_LDH PB_RX_ON
P_LDL PB_RSSI
WT 25
WNT 1
WT 9
B_XON
P_LDH PB_DCTHRESHOLD
WT 5
B_SR
EN_SL_ADJ
WT 12
P_LDL PB_DCTHRESHOLD
WT 33
B_AR2 0x06
WT 61
RTN
;-------------------------------------------------------------
label_6B: WT 249
WT 79
label_6D: P_LDH PB_RSSI
P_LDL 0x40
RTN
WT 79
label_10: P_LDH PB_RSSI
P_LDL PB_RX_ON
RTN
;-------------------------------------------------------------
label_70: P_LDH 0x00
WT 40
B_RST
B_RC 0x50
WNT 1
B_ST 0x00
WT 1
P_LDH 0x10
WT 37
B_AT2 0x06
WT 61
RTN
label_2: P_LDH 0x00
WT 40
B_RST
B_RC 0x50
WNT 1
B_ST 0x00
WT 1
P_LDH PB_TX_ON
WT 37
B_AT2 0x06
WT 61
RTN
;-------------------------------------------------------------
label_7C: WT 249
WT 84
B_RST
label_7F: P_LDL 0x10
WT 8
P_LDL 0x00
RTN
label_3: WT 249
WT 84
B_RST
label_4: P_LDL PB_TX_ON
WT 8
P_LDL 0x00
RTN
;-------------------------------------------------------------
label_83: B_XON
WT 15
B_XOFF
WT 61
RTN
label_8: B_XON
WT 15
B_XOFF
WT 61
RTN
;-------------------------------------------------------------
label_88: WT 61
JMP label_83
JMP label_83
JMP label_83
JMP label_83
JMP label_83
WT 1
B_XON
WT 11
RTN
label_9: WT 61
JMP label_8
JMP label_8
JMP label_8
JMP label_8
JMP label_8
WT 1
B_XON
WT 11
RTN
;-------------------------------------------------------------
label_92: B_BR 0x0E
JMP label_88
WT 3
B_XR
WT 6
JMP label_6D
B_WRS 0x00
WT 6
BR label_58
label_1: B_BR 0x0E
JMP label_9
WT 3
B_XR
WT 6
JMP label_10
B_WRS 0x00
WT 6
BR label_7
;-------------------------------------------------------------
label_9B: B_BT 0x0E
WT 3
JMP label_88
B_XT
WT 13
B_RST
JMP label_7F
BR label_58
label_5: B_BT 0x0E
WT 3
JMP label_9
B_XT
WT 13
B_RST
JMP label_4
BR label_7
;-------------------------------------------------------------
RFInit: RFEN
MEN1N
WT 1
WT 1
M_WR 0x4A
WT 25
M_RST
MEN1
MEN1N
M_WR 0x4D
WT 10
M_RST
MEN1
RTN
MEN1N
WT 1
WT 1
M_WR 0x4A
WT 25
M_RST
MEN1
MEN1N
M_WR 0x4D
WT 10
M_RST
MEN1
RTN
;-------------------------------------------------------------
label_B1: P_LDL 0x20
BR label_B5
RFDKnow1: P_LDL 0x20
BR RFDKnow3
;-------------------------------------------------------------
label_B3: P_LDH 0x20
BR label_B5
RFDKnow2: P_LDH 0x20
BR RFDKnow3
;-------------------------------------------------------------
label_B5: B_RST
B_RC 0x58
WT 8
MEN2
WT 118
WT 64
MEN2N
P_LDH 0x00
WT 16
RTN
RFDKnow3: B_RST
B_RC 0x58
WT 8
MEN2
WT 118
WT 64
MEN2N
P_LDH 0x00
WT 16
RTN
;-------------------------------------------------------------
PPSync: BK_C 0x20
label_C0: JMP RFInit
JMP label_B1
WT 250
P_SC 0x20
P_LDH PB_RX_ON|PB_DCTHRESHOLD
UNLCK
WT 64
B_XOFF
B_SR
WNT 20
JMP1 SFieldFound
B_RST
U_INT1
WNT 23
BR label_C0
PPSearchII: JMP RFInit
JMP RFDKnow1
WT 250
P_SC 0x20
P_LDH PB_RX_ON|PB_DCTHRESHOLD
UNLCK
WT 64
B_XOFF
B_SR
WNT 20
JMP1 SFieldFound
B_RST
U_INT1
WNT 23
BR PPSearchII
;-------------------------------------------------------------
SFieldFound: WNT 23
P_SC 0x00
sync_label_D1: JMP sync_label_28
U_INT0
WNT 22
sync_label_D4: BR label_C0
P_SC 0x00
RecvNextII: JMP RecvII
U_INT0
WNT 22
PPFoundII: BR PPSearchII
;-------------------------------------------------------------
InitDIP: B_RST
BK_C 0x00
C_LD 0x10
WT 10
B_RC 0x00
WT 8
B_RST
BK_A 0x00
A_LDR 0x8C
A_LDW 0xB4
BK_A1 0x00
A_LDR1 0x0C
A_LDW1 0x34
C_ON
A_NORM
WT 10
P_EN
P_LD 0x04
RCK_INT
RFEN
BR PPSync
BK_C 0x00
C_LD 0x10
WT 10
B_RC 0x00
WT 8
B_RST
C_ON
WT 10
P_EN
P_LD PB_RADIOPOWER
RCK_INT
RFEN
BR PPSync
;-------------------------------------------------------------
SHARED PP0,PP2,PP4,PP6,PP8,PP10,PP12,PP14,PP16,PP18,PP20,PP22
SHARED JP0,JP2,JP4,JP6,JP8,JP10,JP12,JP14,JP16,JP18,JP20,JP22
SHARED sync_label_D1,sync_label_D4,sync_label_28
SHARED PP0II,PP2II,PP4II,PP6II,PP8II,PP10II,PP12II,PP14II,PP16II,PP18II,PP20II,PP22II
SHARED JP0II,JP2II,JP4II,JP6II,JP8II,JP10II,JP12II,JP14II,JP16II,JP18II,JP20II,JP22II
SHARED RecvNextII,PPFoundII,RecvII

View File

@ -128,11 +128,153 @@ unsigned char sc14421_II_sniff_sync_fw[] = {
0x08, 0x17, 0x01, 0xb7, 0x08, 0x17, 0xea, 0x00,
0x02, 0x1f, 0x61, 0x00, 0x08, 0x16, 0x01, 0xb7,
0x20, 0x00, 0x0f, 0x00, 0xfa, 0x10, 0x09, 0x0a,
0x33, 0x00, 0x09, 0x08, 0x20, 0x00, 0x0e, 0x00,
0xc6, 0x8c, 0xc7, 0xb4, 0x05, 0x00, 0xce, 0x0c,
0xcf, 0x34, 0xee, 0x00, 0xc5, 0x00, 0x09, 0x0a,
0xe9, 0x00, 0xe8, 0x04, 0x62, 0x00, 0x0b, 0x00,
0x01, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x33, 0x00, 0x09, 0x08, 0x20, 0x00, 0xee, 0x00,
0x09, 0x0a, 0xe9, 0x00, 0xe8, 0x04, 0x62, 0x00,
0x0b, 0x00, 0x01, 0xb6, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff};
/* automatically generated file
* DO NOT EDIT
* edit firmware/filename.asm instead */
unsigned char sc14421_III_sniff_scan_fw[] = {
0x01, 0x01, 0x20, 0x00, 0x0f, 0x00, 0xfa, 0x10,
0x09, 0x0a, 0x33, 0x00, 0x09, 0x08, 0x20, 0x00,
0xee, 0x00, 0x09, 0x0a, 0xe9, 0x00, 0xe8, 0x00,
0x62, 0x00, 0x0b, 0x00, 0x0f, 0x20, 0x02, 0x41,
0x02, 0x50, 0xa6, 0x00, 0x09, 0xfa, 0xea, 0x60,
0xed, 0x42, 0x28, 0x00, 0x09, 0x40, 0x26, 0x00,
0x29, 0x00, 0x08, 0x14, 0x03, 0x1e, 0x20, 0x00,
0x09, 0x16, 0x01, 0x0f, 0x08, 0x17, 0xea, 0x00,
0x02, 0x23, 0x61, 0x00, 0x01, 0x0f, 0x02, 0x50,
0x02, 0x31, 0x09, 0x01, 0x2d, 0x0e, 0x09, 0xff,
0x09, 0x49, 0xed, 0x01, 0xec, 0x22, 0x39, 0x00,
0x09, 0x07, 0x20, 0x00, 0xa4, 0x00, 0x08, 0x01,
0x04, 0x00, 0xa7, 0x00, 0xec, 0x01, 0x09, 0x01,
0x0a, 0x00, 0x08, 0x01, 0x09, 0x05, 0x27, 0x00,
0x09, 0x0e, 0x29, 0x00, 0x2c, 0x00, 0x09, 0x0d,
0xed, 0x02, 0x09, 0x20, 0x3f, 0x06, 0x09, 0x3d,
0x04, 0x00, 0x0b, 0x00, 0x09, 0x01, 0x09, 0x01,
0xb9, 0x4a, 0x09, 0x09, 0xa9, 0x00, 0x02, 0x5a,
0xb9, 0x4b, 0x09, 0x11, 0xa9, 0x00, 0x02, 0x5a,
0xb9, 0x4d, 0x09, 0x19, 0xa9, 0x00, 0x04, 0x00,
0x02, 0x5a, 0x01, 0x53, 0x02, 0x5d, 0x20, 0x00,
0x33, 0x58, 0x09, 0x08, 0xa6, 0x00, 0xed, 0x04,
0x09, 0xd0, 0x04, 0x00, 0xa5, 0x00, 0xa4, 0x00,
0x04, 0x00, 0xa5, 0x00, 0x04, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff};
/* automatically generated file
* DO NOT EDIT
* edit firmware/filename.asm instead */
unsigned char sc14421_III_sniff_sync_fw[] = {
0x01, 0x01, 0x01, 0xd3, 0x0d, 0x00, 0x0f, 0x20,
0x08, 0x02, 0x0f, 0x30, 0x08, 0x02, 0x0f, 0x40,
0x08, 0x02, 0x0f, 0x50, 0x08, 0x02, 0x0f, 0x60,
0x08, 0x02, 0x0f, 0x70, 0x08, 0x02, 0x61, 0x00,
0x0f, 0x80, 0x08, 0x02, 0x0f, 0x90, 0x08, 0x02,
0x0f, 0xa0, 0x08, 0x02, 0x0f, 0xb0, 0x08, 0x02,
0x0f, 0xc0, 0x08, 0x02, 0x0f, 0xd0, 0x08, 0x02,
0x6f, 0x00, 0xed, 0x80, 0x01, 0x02, 0x02, 0x9e,
0x02, 0xad, 0x01, 0x24, 0x02, 0x9e, 0x02, 0xaf,
0x02, 0x51, 0x09, 0x01, 0x2d, 0x0e, 0x02, 0x61,
0x01, 0x48, 0x02, 0x9e, 0x02, 0xad, 0x01, 0x2e,
0x02, 0x9e, 0x02, 0xaf, 0x02, 0x51, 0x01, 0x8d,
0x02, 0x9e, 0x02, 0xad, 0x01, 0x35, 0x02, 0x9e,
0x02, 0xaf, 0x02, 0x66, 0x09, 0x01, 0x25, 0x0e,
0x02, 0x77, 0x01, 0x4b, 0x02, 0x9e, 0x02, 0xaf,
0x02, 0x66, 0x09, 0x01, 0x34, 0x0e, 0x02, 0x7a,
0x01, 0x4a, 0x02, 0x9e, 0x02, 0xad, 0x01, 0x46,
0x02, 0x9e, 0x02, 0xaf, 0x02, 0x66, 0x01, 0x96,
0x39, 0x00, 0x09, 0x07, 0x20, 0x00, 0xa4, 0x00,
0x08, 0x01, 0x04, 0x00, 0x20, 0x00, 0xa4, 0x00,
0x01, 0x4d, 0xa7, 0x00, 0xec, 0x01, 0x09, 0x01,
0x0a, 0x00, 0x08, 0x01, 0x09, 0x05, 0x27, 0x00,
0x09, 0x0e, 0x29, 0x00, 0x2c, 0x00, 0x09, 0x0d,
0xed, 0x02, 0x09, 0x20, 0x3f, 0x06, 0x09, 0x3d,
0x04, 0x00, 0x09, 0xf9, 0x09, 0x4f, 0xed, 0x01,
0xec, 0x26, 0x04, 0x00, 0xa7, 0x00, 0x09, 0x02,
0x0a, 0x00, 0x20, 0x00, 0x33, 0x50, 0x09, 0x08,
0x08, 0x01, 0x09, 0x04, 0xed, 0x40, 0x09, 0x03,
0xed, 0x10, 0x09, 0x03, 0x21, 0x00, 0x09, 0x1f,
0x37, 0x06, 0x09, 0x3d, 0x04, 0x00, 0x09, 0xf9,
0x09, 0x54, 0x20, 0x00, 0xec, 0x10, 0x09, 0x08,
0xec, 0x44, 0x04, 0x00, 0x27, 0x00, 0x09, 0x0f,
0x26, 0x00, 0x09, 0x3d, 0x04, 0x00, 0x09, 0x3d,
0x02, 0x7e, 0x02, 0x7e, 0x02, 0x7e, 0x02, 0x7e,
0x02, 0x7e, 0x09, 0x01, 0x27, 0x00, 0x09, 0x0b,
0x04, 0x00, 0x3c, 0x0e, 0x02, 0x83, 0x09, 0x03,
0x2b, 0x00, 0x09, 0x06, 0x02, 0x63, 0x39, 0x00,
0x09, 0x06, 0x01, 0x4e, 0x34, 0x0e, 0x09, 0x03,
0x02, 0x83, 0x24, 0x00, 0x09, 0x0d, 0x20, 0x00,
0x02, 0x7a, 0x01, 0x4e, 0x0b, 0x00, 0x09, 0x01,
0x09, 0x01, 0xb9, 0x4a, 0x09, 0x09, 0xa9, 0x00,
0x02, 0xb7, 0xb9, 0x4b, 0x09, 0x11, 0xa9, 0x00,
0x02, 0xb7, 0xb9, 0x4d, 0x09, 0x19, 0xa9, 0x00,
0x04, 0x00, 0x02, 0xb7, 0x01, 0xb0, 0x02, 0xba,
0x20, 0x00, 0x33, 0x58, 0x09, 0x08, 0xa6, 0x00,
0xed, 0x04, 0x09, 0xd0, 0x04, 0x00, 0xa5, 0x00,
0xa4, 0x00, 0x04, 0x00, 0xa5, 0x00, 0x04, 0x00,
0x0f, 0x20, 0x02, 0x9e, 0x02, 0xad, 0xa6, 0x00,
0x09, 0xfa, 0xea, 0x60, 0xed, 0x02, 0x28, 0x00,
0x09, 0x40, 0x26, 0x00, 0x29, 0x00, 0x08, 0x14,
0x03, 0xcd, 0x20, 0x00, 0x6b, 0x00, 0x08, 0x17,
0x01, 0xbd, 0x08, 0x17, 0xea, 0x00, 0x02, 0x1f,
0x61, 0x00, 0x08, 0x16, 0x01, 0xbd, 0x20, 0x00,
0x0f, 0x00, 0xfa, 0x10, 0x09, 0x0a, 0x33, 0x00,
0x09, 0x08, 0x20, 0x00, 0xee, 0x00, 0x09, 0x0a,
0xe9, 0x00, 0xe8, 0x00, 0x62, 0x00, 0x0b, 0x00,
0x01, 0xbc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,

View File

@ -6,33 +6,66 @@ extern unsigned char sc14421_II_sniff_scan_fw[509];
/* Ende Includefile für C-Programm */
extern unsigned char sc14421_II_sniff_sync_fw[509];
/* sc14421_II_sniff_sync.asm-Includefile für C-Programm */
#define PP0 0x4
#define PP2 0x6
#define PP4 0x8
#define PP6 0xA
#define PP8 0xC
#define PP10 0xE
#define PP12 0x11
#define PP14 0x13
#define PP16 0x15
#define PP18 0x17
#define PP20 0x19
#define PP22 0x1B
#define JP0 0x3
#define JP2 0x5
#define JP4 0x7
#define JP6 0x9
#define JP8 0xB
#define JP10 0xD
#define JP12 0x10
#define JP14 0x12
#define JP16 0x14
#define JP18 0x16
#define JP20 0x18
#define JP22 0x1A
#define sync_label_D1 0xC8
#define sync_label_D4 0xCB
#define sync_label_28 0x1F
#define PP0II 0x4
#define PP2II 0x6
#define PP4II 0x8
#define PP6II 0xA
#define PP8II 0xC
#define PP10II 0xE
#define PP12II 0x11
#define PP14II 0x13
#define PP16II 0x15
#define PP18II 0x17
#define PP20II 0x19
#define PP22II 0x1B
#define JP0II 0x3
#define JP2II 0x5
#define JP4II 0x7
#define JP6II 0x9
#define JP8II 0xB
#define JP10II 0xD
#define JP12II 0x10
#define JP14II 0x12
#define JP16II 0x14
#define JP18II 0x16
#define JP20II 0x18
#define JP22II 0x1A
#define RecvNextII 0xC8
#define PPFoundII 0xCB
#define RecvII 0x1F
/* Ende Includefile für C-Programm */
extern unsigned char sc14421_III_sniff_scan_fw[509];
/* sc14421_III_sniff_scan.asm-Includefile für C-Programm */
/* Ende Includefile für C-Programm */
extern unsigned char sc14421_III_sniff_sync_fw[509];
/* sc14421_III_sniff_sync.asm-Includefile für C-Programm */
#define PP0III 0x4
#define PP2III 0x6
#define PP4III 0x8
#define PP6III 0xA
#define PP8III 0xC
#define PP10III 0xE
#define PP12III 0x11
#define PP14III 0x13
#define PP16III 0x15
#define PP18III 0x17
#define PP20III 0x19
#define PP22III 0x1B
#define JP0III 0x3
#define JP2III 0x5
#define JP4III 0x7
#define JP6III 0x9
#define JP8III 0xB
#define JP10III 0xD
#define JP12III 0x10
#define JP14III 0x12
#define JP16III 0x14
#define JP18III 0x16
#define JP20III 0x18
#define JP22III 0x1A
#define RecvNextIII 0xCF
#define PPFoundIII 0xD2
#define RecvIII 0x1F
/* Ende Includefile für C-Programm */
#endif

View File

@ -24,30 +24,18 @@
/* dip config register control */
unsigned char scan_init1[] = {0x27,0x00,0xff,0x00,0x5f,0x04,0x00};
unsigned char scan_init2[] = {0xc2,0x05,0x00,0x03,0x00,0x00};
unsigned char dip_ctrl[] = {0xc2,0x05,0x00,0x03,0x00,0x00};
/* hf register type II card */
unsigned char radio_II_chan[] = {0x54,0x80,0x09/* patch */,0xa0,0x00,0x00};
/* hf register type III card */
unsigned char scan_III_init3[] = {0x54,0x80,0x09/* patch */,0xa0,0x00,0x00};
/* rf register type II card */
unsigned char radio_II_chan[] = {0x54,0x80,0x09/* patch */,0xa0,0x00,0x00};
/* rf register type III card */
unsigned char radio_III_chan[] = {0x32,0x20,0x28,0x01,0xc1,0x1b};
/* hf register */
unsigned char scan_init4[] = {0x15,0xa0,0xff,0x00/* &0x3f */,0x5f,0x04,0x00};
/* dip register */
unsigned char dip_register[] = {0x15,0xa0,0xff,0x00/* &0x3f */,0x5f,0x04,0x00};
/* dip control */
unsigned char scan_init5[] = {0x27,0x00,0xff,0x00,0x5f,0x05,0x00};
/* dip control */
unsigned char sync_init1[] = {0x27,0x00,0xff,0x00,0x5f,0x04,0x00};
unsigned char sync_init2[] = {0xc2,0x05,0x00,0x03,0x00,0x00};
/* hf register type III card */
unsigned char sync_III_init3[] = {0x54,0x80,0x09/* patch */,0xa0,0x00,0x00};
/* hf register */
unsigned char sync_init4[] = {0x15,0xa0,0xff,0x00/* &0x3f */,0x5f,0x04,0x00};
/* dip control */
unsigned char sync_init5[] = {0x27,0x00,0xff,0x00,0x5f,0x05,0x00};
unsigned char dip_mode_fp_pp[] = {0x27,0x00,0xff,0x00,0x5f,0x05,0x00};
unsigned char fppacket[53] = {0xAA,0xAA,0xAA,0xE9,0x8A};
@ -57,32 +45,32 @@ unsigned char pppacket[53] = {0x55,0x55,0x55,0x16,0x75};
/* FIXME:auto-generate all this stuff */
int sync_jumptable[] = {
JP0, 0,
JP2, 0,
JP4, 0,
JP6, 0,
JP8, 0,
JP10, 0,
JP12, 0,
JP14, 0,
JP16, 0,
JP18, 0,
JP20, 0,
JP22, 0
JP0II, 0,
JP2II, 0,
JP4II, 0,
JP6II, 0,
JP8II, 0,
JP10II, 0,
JP12II, 0,
JP14II, 0,
JP16II, 0,
JP18II, 0,
JP20II, 0,
JP22II, 0
};
int sync_patchtable[] = {
PP0, 0,
PP2, 0,
PP4, 0,
PP6, 0,
PP8, 0,
PP10, 0,
PP12, 0,
PP14, 0,
PP16, 0,
PP18, 0,
PP20, 0,
PP22, 0
PP0II, 0,
PP2II, 0,
PP4II, 0,
PP6II, 0,
PP8II, 0,
PP10II, 0,
PP12II, 0,
PP14II, 0,
PP16II, 0,
PP18II, 0,
PP20II, 0,
PP22II, 0
};
/* FIXME:end */
@ -139,90 +127,106 @@ void sniffer_init(struct coa_info *dev)
}
}
void set_channel(struct coa_info *dev, int ch)
void set_channel(struct coa_info *dev, int ch, int sync_slot, int sync_frame, unsigned char dipmode , unsigned char bank)
{
int channel;
int channel,memofs;
unsigned short *sc14421_base = dev->sc14421_base;
// printk("set channel:%u slot:%u frame#:%u dipmode:%u bank:%x\n",ch,sync_slot,sync_frame,dipmode,bank);
if ( (sync_slot/2) % 2)
memofs = 0x80;
else
memofs = 0x00;
if (ch<10)
channel = 10 - ch;
else
channel = ch;
SC14421_switch_to_bank(sc14421_base, dipmode | SC14421_RAMBANK0);
to_dip(sc14421_base + 0x10, dip_ctrl, ARRAY_SIZE(dip_ctrl));
SC14421_switch_to_bank(sc14421_base, dipmode | bank);
switch(dev->sniffer_config->snifftype)
{
case SNIFF_SYNC:
if (sync_slot > 11)
{
dip_mode_fp_pp[0] &= 0xFE;
dip_mode_fp_pp[6] = sync_frame;
}else{
dip_mode_fp_pp[0] |= 0x01;
dip_mode_fp_pp[6] = sync_frame;
}
break;
case SNIFF_SCANFP:
dip_mode_fp_pp[0] |= 0x01;
break;
case SNIFF_SCANPP:
dip_mode_fp_pp[0] &= 0xFE;
break;
default:
printk("ERROR: this snifftype is currently not "
"supported. please update the driver\n");
}
switch(dev->radio_type)
{
case COA_RADIO_TYPE_II:
radio_II_chan[0] =
(radio_II_chan[0] & 0xC1) |
(channel << 1);
radio_II_chan[0] = (radio_II_chan[0] & 0xC1) | (channel << 1);
dip_mode_fp_pp[0] &= 0xF7;
to_dip(sc14421_base + memofs + 0x4A, radio_II_chan, ARRAY_SIZE(radio_II_chan));
break;
case COA_RADIO_TYPE_III:
radio_III_chan[2] = channel << 2;
dip_mode_fp_pp[0] |= 0x08;
to_dip(sc14421_base + memofs + 0x4A, radio_III_chan, ARRAY_SIZE(radio_III_chan));
break;
default:
printk("ERROR: this radio type is currently not "
"supported. please update the driver\n");
}
to_dip(sc14421_base + memofs + 0x58, dip_mode_fp_pp, ARRAY_SIZE(dip_mode_fp_pp));
to_dip(sc14421_base + memofs + 0x50, dip_register, ARRAY_SIZE(dip_register));
}
void sniffer_init_sniff_scan(struct coa_info *dev)
{
volatile uint16_t *sc14421_base = dev->sc14421_base;
/* printk("loading sniff_scan firmware\n"); */
/* printk("loading sniff_scan firmware"); */
SC14421_switch_to_bank(
sc14421_base,
SC14421_DIPSTOPPED | SC14421_CODEBANK
);
to_dip(
sc14421_base,
sc14421_II_sniff_scan_fw,
ARRAY_SIZE(sc14421_II_sniff_scan_fw));
SC14421_switch_to_bank(sc14421_base, SC14421_DIPSTOPPED | SC14421_CODEBANK);
switch(dev->radio_type)
{
case COA_RADIO_TYPE_II:
/* printk(" for type II\n"); */
to_dip(sc14421_base, sc14421_II_sniff_scan_fw, ARRAY_SIZE(sc14421_II_sniff_scan_fw));
break;
case COA_RADIO_TYPE_III:
/* printk(" for type III\n"); */
to_dip(sc14421_base, sc14421_III_sniff_scan_fw, ARRAY_SIZE(sc14421_III_sniff_scan_fw));
break;
default:
printk("ERROR: this radio type is currently not "
"supported. please update the driver\n");
}
/* printk("clear interrupt\n"); */
SC14421_clear_interrupt(sc14421_base);
set_channel(dev, dev->sniffer_config->channel);
set_channel(dev, dev->sniffer_config->channel, -1, -1, SC14421_DIPSTOPPED, SC14421_RAMBANK1);
if (dev->sniffer_config->snifftype == SNIFF_SCANPP)
{
scan_init1[0] &= 0xFE;
scan_init5[0] &= 0xFE;
}
else
{
scan_init1[0] |= 0x01;
scan_init5[0] |= 0x01;
}
SC14421_switch_to_bank(
sc14421_base,
SC14421_DIPSTOPPED | SC14421_RAMBANK0
);
to_dip(
sc14421_base + 0x00,
scan_init1,
ARRAY_SIZE(scan_init1));
to_dip(
sc14421_base + 0x10,
scan_init2,
ARRAY_SIZE(scan_init2)
);
SC14421_switch_to_bank(
sc14421_base,
SC14421_DIPSTOPPED | SC14421_RAMBANK1
);
to_dip(
sc14421_base + 0x4A,
radio_II_chan,
ARRAY_SIZE(radio_II_chan)
);
to_dip(
sc14421_base + 0x58,
scan_init5,
ARRAY_SIZE(scan_init5)
);
to_dip(
sc14421_base + 0x50,
scan_init4,
ARRAY_SIZE(scan_init4));
/* printk("starting dip\n"); */
/* printk("starting dip\n"); */
SC14421_switch_to_bank(sc14421_base, SC14421_RAMBANK0);
}
@ -232,64 +236,33 @@ void sniffer_init_sniff_sync(struct coa_info *dev)
{
volatile uint16_t *sc14421_base = dev->sc14421_base;
printk("loading sniff_sync firmware\n");
/* printk("loading sniff_sync firmware"); */
SC14421_switch_to_bank(
sc14421_base,
SC14421_DIPSTOPPED | SC14421_CODEBANK
);
to_dip(
sc14421_base,
sc14421_II_sniff_sync_fw,
ARRAY_SIZE(sc14421_II_sniff_sync_fw));
SC14421_switch_to_bank(sc14421_base, SC14421_DIPSTOPPED | SC14421_CODEBANK);
switch(dev->radio_type)
{
case COA_RADIO_TYPE_II:
/* printk(" for type II\n"); */
to_dip(sc14421_base, sc14421_II_sniff_sync_fw, ARRAY_SIZE(sc14421_II_sniff_sync_fw));
break;
case COA_RADIO_TYPE_III:
/* printk(" for type III\n"); */
to_dip(sc14421_base, sc14421_III_sniff_sync_fw, ARRAY_SIZE(sc14421_III_sniff_sync_fw));
break;
default:
printk("ERROR: this radio type is currently not "
"supported. please update the driver\n");
}
printk("clear interrupt\n");
/* printk("clear interrupt\n"); */
SC14421_clear_interrupt(sc14421_base);
SC14421_switch_to_bank(
sc14421_base,
SC14421_DIPSTOPPED | SC14421_RAMBANK0
);
to_dip(
sc14421_base + 0x00,
sync_init1,
ARRAY_SIZE(sync_init1)
);
to_dip(
sc14421_base + 0x10,
sync_init2,
ARRAY_SIZE(sync_init2));
set_channel(dev, dev->sniffer_config->channel);
sync_init5[0] |= 0x01;
SC14421_switch_to_bank(
sc14421_base,
SC14421_DIPSTOPPED | SC14421_RAMBANK1
);
to_dip(
sc14421_base + 0x4A,
radio_II_chan,
ARRAY_SIZE(radio_II_chan)
);
to_dip(
sc14421_base + 0x58,
sync_init5,
ARRAY_SIZE(sync_init5)
);
to_dip(
sc14421_base + 0x50,
sync_init4,
ARRAY_SIZE(sync_init4)
);
set_channel(dev, dev->sniffer_config->channel, -1, -1, SC14421_DIPSTOPPED, SC14421_RAMBANK1);
dev->sniffer_config->status = 0;
sniffer_clear_slottable(dev->sniffer_config->slottable);
printk("starting dip\n");
/* printk("starting dip\n"); */
SC14421_switch_to_bank(sc14421_base, SC14421_RAMBANK0);
}
@ -329,10 +302,7 @@ void sniffer_sniff_scan_irq(struct coa_info *dev, int irq)
if ( (SC14421_READ(1) & 0xc0) == 0xc0) /* Checksum ok */
{
uint8_t rssi = SC14421_READ(0);
from_dip(
fppacket + 5,
sc14421_base + 6,
6);
from_dip(fppacket + 5, sc14421_base + 6, 6);
SC14421_WRITE(1, 0); /* Clear Checksum-Flag */
@ -373,8 +343,8 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
{
#if 0
printk("N:");
for (r=0; r<16; r++)
printk("%.2x ", SC14421_READ(r));
for (i=0; i<16; i++)
printk("%.2x ", SC14421_READ(i));
printk("\n");
#endif
@ -382,27 +352,27 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
{
SC14421_WRITE(1, 0); /* clear checksum flag */
from_dip(
fppacket + 5,
sc14421_base + 6,
6);
from_dip(fppacket + 5,sc14421_base + 6, 6);
if (dect_compare_RFPI(fppacket, config->RFPI))
{
{
printk("found station for sync\n");
config->status |=
SNIFF_STATUS_FOUNDSTATION;
config->status |= SNIFF_STATUS_FOUNDSTATION;
SC14421_switch_to_bank(
sc14421_base,
SC14421_CODEBANK
);
SC14421_write_cmd(
sc14421_base,
sync_label_D4,
BR,
sync_label_D1
);
SC14421_switch_to_bank(sc14421_base,SC14421_CODEBANK);
switch(dev->radio_type)
{
case COA_RADIO_TYPE_II:
SC14421_write_cmd(sc14421_base, PPFoundII, BR, RecvNextII);
break;
case COA_RADIO_TYPE_III:
SC14421_write_cmd(sc14421_base, PPFoundIII, BR, RecvNextIII);
break;
default:
printk("ERROR: this radio type is currently not "
"supported. please update the driver\n");
}
}
}
}
@ -421,51 +391,41 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
if ( (SC14421_READ(1) & 0xc0) == 0xc0) /* Checksum ok */
{
SC14421_WRITE(1, 0); /* clear checksum flag */
from_dip(
fppacket + 5,
sc14421_base + 6,
48);
from_dip(fppacket + 5, sc14421_base + 6, 48);
slot = dect_get_slot(fppacket);
if (slot != -1)
{
/* printk("station in slot %u\n", slot); */
printk("station in slot %u\n", slot);
config->status |= SNIFF_STATUS_INSYNC;
slot %= 12;
if (slot%2)
printk("slot not possible "
"with this firmware\n");
printk("slot not possible with this firmware\n");
config->slottable[slot].active = 1;
config->slottable[slot].channel =
config->channel;
config->slottable[slot].type =
DECT_SLOTTYPE_CARRIER;
config->slottable[slot].channel = config->channel;
config->slottable[slot].type = DECT_SLOTTYPE_CARRIER;
config->slottable[slot].errcnt = 0;
sniffer_sync_patchloop(
dev,
config->slottable,
SNIFF_SLOTPATCH_FP
);
sniffer_sync_patchloop(
dev,
config->slottable,
SNIFF_SLOTPATCH_PP
);
sniffer_sync_patchloop(dev,config->slottable,SNIFF_SLOTPATCH_FP);
sniffer_sync_patchloop(dev,config->slottable,SNIFF_SLOTPATCH_PP);
SC14421_switch_to_bank(
sc14421_base,
SC14421_CODEBANK
);
printk("set jump to %u\n",
sync_jumptable[slot]);
SC14421_write_cmd(
sc14421_base,
sync_label_D4,
BR,
sync_jumptable[slot]
);
SC14421_switch_to_bank(sc14421_base,SC14421_CODEBANK);
printk("set jump to %u\n",sync_jumptable[slot]);
switch(dev->radio_type)
{
case COA_RADIO_TYPE_II:
SC14421_write_cmd(sc14421_base,PPFoundII,BR,sync_jumptable[slot]);
break;
case COA_RADIO_TYPE_III:
SC14421_write_cmd(sc14421_base,PPFoundIII,BR,sync_jumptable[slot]);
break;
default:
printk("ERROR: this radio type is currently not "
"supported. please update the driver\n");
}
printk("we are in sync :)\n");
@ -476,12 +436,8 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
packet.slot = slot;
memcpy(packet.data, fppacket, 53);
packet.timestamp =
dev->irq_timestamp;
ret = kfifo_put(
dev->rx_fifo,
(unsigned char*) &packet,
sizeof(struct sniffed_packet));
packet.timestamp = dev->irq_timestamp;
ret = kfifo_put(dev->rx_fifo,(unsigned char*) &packet,sizeof(struct sniffed_packet));
if (ret <= 0)
printk("com_on_air_cs: rx fifo "
"full? kfifo_put() "
@ -493,7 +449,7 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
else
{
if ( (irq & 0x09) == 0x09)
printk("interrupt too slow , lost packets!\n");
printk("com_on_air-cs: interrupt processing too slow , lost packets!\n");
if (irq & 0x01)
{
@ -502,53 +458,56 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
{
if (config->slottable[a].active)
{
SC14421_switch_to_bank(
sc14421_base,
sync_banktable[a]);
SC14421_switch_to_bank(sc14421_base,sync_banktable[a]);
if ( (a/2) % 2)
memofs = 0x80;
else
memofs = 0x00;
if ( (SC14421_READ(1+memofs) & 0xc0) ==
0xc0) /* Checksum ok */
#if 0
printk("F:");
for (i=0; i<16; i++)
printk("%.2x ",(unsigned char) SC14421_READ(i+memofs));
printk(" : %.2x : %x\n", irq, a);
#endif
if ( (SC14421_READ(1+memofs) & 0xc0) == 0xc0) /* Checksum ok */
{
struct sniffed_packet packet;
/* fixing indention / coding style is useless beyond here
* need to talk to krater about where to cut in functions
* - mazzoo */
packet.rssi =
SC14421_READ(memofs);
packet.channel =
config->slottable[a].channel;
packet.rssi = SC14421_READ(memofs);
packet.bfok = ((SC14421_READ(1+memofs) & 0x03) == 0x03);
packet.channel = config->slottable[a].channel;
packet.slot = a;
packet.framenumber = config->framenumber;
memcpy(
packet.data,
fppacket,
5);
from_dip(
&packet.data[5],
sc14421_base+memofs+6,
48);
memcpy(packet.data,fppacket,5);
if (config->slottable[a].type ==
DECT_SLOTTYPE_SCAN)
/* we received data on a scan-slot , channel is incemented before , but we want hear the old channel */
from_dip(&packet.data[5],sc14421_base+memofs+6, 48);
if (config->slottable[a].type == DECT_SLOTTYPE_SCAN)
/* we received data on a scan-slot,
* channel is incemented before,
* but we want hear the old channel */
{
packet.channel--;
printk("slot in scanmode\n");
//printk("slot in scanmode\n");
}
if (dect_is_multiframe_number(packet.data)) /* if there was a multiframe number , then this packet was in frame 8 (0) */
if (dect_is_multiframe_number(packet.data))
/* if there was a multiframe number,
* then this packet was in frame 8 (0) */
{
/* printk("found multiframe number\n"); */
//printk("found multiframe number\n");
config->framenumber = 1;
}
/* if (dev->open) */
{
if(config->framenumber)
packet.framenumber = config->framenumber-1;
else
packet.framenumber = 7;
packet.timestamp = dev->irq_timestamp;
ret = kfifo_put(dev->rx_fifo, (unsigned char*) &packet, sizeof(struct sniffed_packet));
if (ret <= 0)
@ -559,7 +518,7 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
#if 0
#if 0
printk("F:");
for (i=0; i<16; i++)
printk("%.2x ", SC14421_READ(i+memofs));
@ -573,7 +532,7 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
{
config->updateppslots = 1;
config->updatefpslots = 1;
/* printk("new slot , must update slots\n"); */
//printk("new slot , must update slots\n");
}
}
@ -583,7 +542,7 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
{
config->updateppslots = 1;
config->updatefpslots = 1;
printk("died slot , must update slots\n");
//printk("1:died slot , must update slots\n");
}
}
}
@ -591,7 +550,7 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
if ( (!(irq & 0x08)) && (config->updatefpslots) )
{
/* printk("patching fp slots\n"); */
//printk("patching fp slots\n");
sniffer_sync_patchloop(dev, config->slottable, SNIFF_SLOTPATCH_FP);
config->updatefpslots = 0;
}
@ -618,22 +577,29 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
struct sniffed_packet packet;
packet.rssi = SC14421_READ(memofs);
/* FIXME DECT6.0 channels */
packet.bfok = ((SC14421_READ(1+memofs) & 0x03) == 0x03);
packet.channel = config->slottable[a].channel;
packet.slot = a;
packet.framenumber = config->framenumber;
memcpy(packet.data, pppacket, 5);
from_dip(&packet.data[5], sc14421_base+memofs+6, 48);
if (config->slottable[a].type == DECT_SLOTTYPE_SCAN)
{
packet.channel--;
printk("slot in scanmode\n");
//printk("slot in scanmode\n");
}
/* if (dev->open) */
{
if(config->framenumber)
packet.framenumber = config->framenumber-1;
else
packet.framenumber = 7;
packet.timestamp = dev->irq_timestamp;
ret = kfifo_put(dev->rx_fifo, (unsigned char*) &packet, sizeof(struct sniffed_packet));
ret = kfifo_put(
dev->rx_fifo,
(unsigned char*) &packet,
sizeof(struct sniffed_packet));
if (ret <= 0)
{
printk("com_on_air_cs: rx fifo full? kfifo_put() = %d\n", ret);
@ -656,7 +622,7 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
{
config->updateppslots = 1;
config->updatefpslots = 1;
/* printk("new slot , must update slots\n"); */
//printk("new slot , must update slots\n");
}
}
@ -666,7 +632,7 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
{
config->updateppslots = 1;
config->updatefpslots = 1;
/* printk("died slot , must update slots\n"); */
//printk("8:died slot , must update slots\n");
}
}
@ -676,7 +642,7 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
if ( (!(irq & 0x01)) && (config->updateppslots) )
{
/* printk("patching pp slots\n"); */
//printk("patching pp slots\n");
sniffer_sync_patchloop(dev, config->slottable, SNIFF_SLOTPATCH_PP);
config->updateppslots = 0;
}
@ -685,7 +651,7 @@ void sniffer_sniff_sync_irq(struct coa_info *dev, int irq)
{
config->updateppslots = 1;
config->updatefpslots = 1;
/* printk("new slot , must update slots\n"); */
//printk("new slot , must update slots\n");
}
if (config->framenumber >= 7)
@ -707,12 +673,17 @@ void sniffer_sync_patchloop(struct coa_info *dev, struct dect_slot_info *slottab
struct sniffer_cfg *config = dev->sniffer_config;
int memofs;
if (type == SNIFF_SLOTPATCH_PP)
offset = 12;
for (slot = offset; slot < (offset+12); slot++)
{
if ( (slot/2) % 2)
memofs = 0x80;
else
memofs = 0x00;
if (slottable[slot].update)
{
slottable[slot].update = 0;
@ -731,46 +702,34 @@ void sniffer_sync_patchloop(struct coa_info *dev, struct dect_slot_info *slottab
if (slottable[slot].active)
{
set_channel(dev, slottable[slot].channel);
set_channel(dev,slottable[slot].channel,slot,config->framenumber%8,0,sync_banktable[slot]);
if (slot > 11)
sync_init5[0] &= 0xFE;
else
sync_init5[0] |= 0x01;
if ( (slot/2) % 2)
memofs = 0x80;
else
memofs = 0x00;
sync_init5[6] = config->framenumber%8;
SC14421_switch_to_bank(sc14421_base, sync_banktable[slot]);
to_dip(sc14421_base + 0x4A + memofs, radio_II_chan, ARRAY_SIZE(radio_II_chan));
to_dip(sc14421_base + 0x58 + memofs, sync_init5, ARRAY_SIZE(sync_init5));
to_dip(sc14421_base + 0x50 + memofs, sync_init4, ARRAY_SIZE(sync_init4));
/* printk("patching slot %u at addr %u\n", slot, sync_patchtable[slot]); */
// printk("patching slot %u at addr %u\n", slot, sync_patchtable[slot]);
SC14421_switch_to_bank(sc14421_base, SC14421_CODEBANK);
SC14421_write_cmd(sc14421_base, sync_patchtable[slot], JMP, sync_label_28);
}
else
{
switch(dev->radio_type)
{
case COA_RADIO_TYPE_II:
/* printk(" for type II\n"); */
SC14421_write_cmd(sc14421_base, sync_patchtable[slot], JMP, RecvII);
break;
case COA_RADIO_TYPE_III:
/* printk(" for type III\n"); */
SC14421_write_cmd(sc14421_base, sync_patchtable[slot], JMP, RecvIII);
break;
default:
printk("ERROR: this radio type is currently not "
"supported. please update the driver\n");
}
}else{
SC14421_switch_to_bank(sc14421_base, SC14421_CODEBANK);
SC14421_write_cmd(sc14421_base, sync_patchtable[slot], WNT, 2);
/* printk("patching addr %u for wait\n", sync_patchtable[slot]); */
// printk("patching addr %u for wait\n", sync_patchtable[slot]);
}
}
else if (slottable[slot].active && (slottable[slot].type == DECT_SLOTTYPE_CARRIER))
{
if ( (slot/2) % 2)
memofs = 0x80;
else
memofs = 0x00;
SC14421_switch_to_bank(sc14421_base, sync_banktable[slot]);
SC14421_WRITE(0x5e + memofs, config->framenumber%8);
}
@ -789,3 +748,8 @@ void sniffer_clear_slottable(struct dect_slot_info *slottable)
}

View File

@ -57,6 +57,7 @@ struct sniffed_packet
unsigned char channel;
unsigned char slot;
unsigned char framenumber;
unsigned char bfok;
struct timespec timestamp;
unsigned char data[53];
};

View File

@ -382,6 +382,10 @@ void do_chan(char * str_chan)
LOG("!!! please enter a valid channel number [0-14]\n");
return;
}
if(channel<10)
channel = 9 - channel;
cli.channel = channel;
set_channel(cli.channel);
}

View File

@ -41,6 +41,7 @@ struct sniffed_packet
unsigned char channel;
unsigned char slot;
unsigned char framenumber;
unsigned char bfok;
struct timespec timestamp;
unsigned char data[53];
};