Egen Nexa Sändare/Mottagare/Sniffer :)

Allmänna frågor och synpunkter.
pajn
1 star
1 star
Posts: 2
Joined: Sun 13 Feb 2011, 16:10

Re: Egen Nexa Sändare/Mottagare/Sniffer :)

Post by pajn » Sun 13 Feb 2011, 17:04

Skickade PM men det kanske är bättre att fråga "publikt" så...

Stort tack för sändarkoden! Efter lite modifiering funkar den perfekt (la till absolutdimning bla.)
Undrar om det är nån spec. licens på koden? (om jag vill sprida vidare eller sälja till kompisar/arbetskamrater)
Och vill du dela med dig av mottagarkoden? Självklart delar jag med mig om jag får den att funka bättre (om licensen tillåter det dvs.).

Korak
3 stars
3 stars
Posts: 69
Joined: Mon 22 Nov 2010, 22:26
Location: Luleå

Re: Egen Nexa Sändare/Mottagare/Sniffer :)

Post by Korak » Mon 14 Feb 2011, 01:39

Inga problem med koden, använd den som du vill :wave:
Men "absolut dimmnings" protokollet skulle jag gärna vilja ha ;) , har inte hittat det på nätet nånstans... :?
Självfallet får du mottagarkoden åxå, inga problem, postar den asap.
________________________________________________________________________
   // Sonny //              ( If assembler looks blurry....try 2 C# ;)

Korak
3 stars
3 stars
Posts: 69
Joined: Mon 22 Nov 2010, 22:26
Location: Luleå

Re: Egen Nexa Sändare/Mottagare/Sniffer :)

Post by Korak » Mon 14 Feb 2011, 08:40

Här kommer koden, kom i håg att den är fett exprimentiell (men fullt fungerande) ;) ,+ att den kräver en licensierad kompilator då resultat hexen överstiger 2k :geek:
Denna kod styr både sändning och mottagning, typ "repeater".

Code: Select all

/*
 *
 *  ß-SoftWare By Sonny K. for NEXA (Self-Learning protocol) repeater.
 *  Please note that the timing routines probably need adjustment for a specific processor!
 *  This code also have been a testbed for my own thoughts on how to solve repeating signals
 *  with a special "repeater" -ID.
 *  
 * H/W:
    Processor: PIC18LF2420  w. internal oscillator
    Config words:
    CONFIG1H   :$300001 : 0x0008
    CONFIG2L   :$300002 : 0x001E
    CONFIG2H   :$300003 : 0x001E
    CONFIG3H   :$300005 : 0x0081
    CONFIG4L   :$300006 : 0x0081
    CONFIG5L   :$300008 : 0x0003
    CONFIG5H   :$300009 : 0x00C0
    CONFIG6L   :$30000A : 0x0003
    CONFIG6H   :$30000B : 0x00E0
    CONFIG7L   :$30000C : 0x0003
    CONFIG7H   :$30000D : 0x0040
    
    Radio transciever chip: RFM TR3000
 *
 */
 
//#define byte unsigned short

#include <built_in.h>
#include <Repeater.h>
/*
   Repeater.h file:

void setup( void );
unsigned int PulseIn( short Polarity, unsigned int MaxTime, unsigned short Test );
void RadioMode( char mode );
void sendPairNEXA(unsigned short b);
void sendBitNEXA(unsigned short b);
void transmitNEXA( unsigned long SenderID, unsigned short RecCh, unsigned short Group, unsigned short Enabled, unsigned short Repeats );
void TimerSetup( void );
void printResult(unsigned long sender, unsigned short group, unsigned short on, unsigned short recipient, unsigned short numOfPackets, unsigned short messageType);
void Serialprintln( char *uart_text );
void delay( unsigned int msdelay );
*/

#define PACKETS       6      // Number of packets to send in one transmission
#define BLOCK_PACKETS 6      //   -"-     blocking packets to send
#define REPEATER_ID   0      // The ID of this repeater
#define WAIT_TIME     1000
#define BLOCK_TIME    ((WAIT_TIME * 2) + (PACKETS * 80))
#define MIN_FRAMES    3

//
// Från ClicStic
//
// Processor-pin defines
//
#define ExtIn2 PORTA.F0    // External input pin ,on u-processor
#define ONSW   PORTA.F1    // On/Off Switch
#define OUT2   PORTA.F2    // Output/Relay 2
#define OUT1   PORTA.F3    // Output/Relay 1
#define onPin  PORTA.F4    // Radio Input -> moved to RB0 !! (This HAS to be connected to RB0!)
#define txPin  PORTA.F5    // Radio Output
#define PU_IN2 PORTA.F7

#define rxPin  PORTB.F0    // Radio Input  ( earlier "ExtIn1" , External input pin ,on u-processor )
#define BZVCC  PORTB.F1    // Output buzzer
#define LEDBT  PORTB.F2    // Input = pullup/hi, low on button press, or if output = controls LED.
#define CTRL1  PORTB.F3    // RFM chip control
#define CTRL0  PORTB.F4    // RFM chip control

#define PU_IN1 PORTC.F2
#define SLEDR  PORTC.F3    // RED Status LED on board
#define SLEDG  PORTC.F4    // GREEN Status LED on board
//
#define BTN    TRISB.B2 = 1
#define LED    TRISB.B2 = 0
// PORTA 0b01010011
// PORTB 0b11100001
// PORTC 0b11100011
//

//  Various defines
//
#define TX_LO  txPin=0
#define TX_HI  txPin=1
#define ONOFF  ~ONSW
#define LEDbtn ~LEDBT

#define HIGH   1
#define LOW    0

#define TIF0    INTCON.TMR0IF
#define P_RISE  INTCON2.INTEDG0 = 1    // Pulse
#define P_FALL  INTCON2.INTEDG0 = 0
#define P_FLANK INTCON2.INTEDG0
#define P_ON    INTCON.INT0IE  = 1
#define P_OFF   INTCON.INT0IE  = 0
#define P_CLEAR INTCON.INT0IF  = 0
#define T_IOFF  INTCON.TMR0IE = 0    // Timer
#define T_ION   INTCON.TMR0IE = 1
#define T_OFF   T0CON.TMR0ON = 0
#define T_CLEAR INTCON.TMR0IF = 0
#define GIEN    INTCON.GIE
//
#define Wdog   asm { clrwdt }
#define Serialprint Uart1_Write_Text
//
//
//#define Tone1 Sound_Play(659, 250)
//#define Tone2 Sound_Play(698, 250)
//#define Tone3 Sound_Play(784, 250)
//
//
//  END ClicStic
//
//
unsigned short by_Capture;
unsigned short by_Passive;
//unsigned int totUS;
unsigned short TIML,TIMH;
unsigned int trace;
unsigned long bfr = 0;
unsigned long repeater = REPEATER_ID;
unsigned int cnt = 0;
unsigned short TRUE =  1;
unsigned short FALSE = 0;
char txt80[80];
enum RFM_states { S_IDLE = 0, S_RXDATA, S_TXDATA };



void interrupt( void ){
    INTCON.GIE = 0;          // turn off all interrupts for a moment ...
    if (INTCON.INT0IF) {     // check if interrupt
        INTCON.INT0IF = 0;   // clear the interrupt-flag ...
        by_Capture = 1;
    }
    INTCON.GIE = 1;
}


void RadioMode( char mode ) {    //
    //
    switch ( mode ) {
        case S_IDLE: {       // RFM chip to IDLE mode
             //
             SLEDR = 0;
             SLEDG = 0;
             CTRL0 = 0;
             CTRL1 = 0;
             break;
        }
        case S_RXDATA: {
             //
             SLEDR = 0;      // RFM chip to RECEIVE mode
             //SLEDG = 1;
             CTRL0 = 1;
             CTRL1 = 1;
             break;
        }
        case S_TXDATA: {     // // RFM chip to SEND mode
             //
             SLEDG = 0;
             SLEDR = 1;
             if (( CTRL0 == 0 ) && ( CTRL1 == 0 )) {
                CTRL0 = 1;
                //CTRL1 = 0;
                Delay_ms(20);  // time for the RFM chip to wake-up from idle
             } else {
                CTRL0 = 1;
                CTRL1 = 0;
                delay_ms(1);
             }
             break;
        }
    }
    return;
}


void setup()    //
{
  // If on "int.osc" , run full speed!
  OSCCON = 0;
  OSCCON.IRCF0 = 1;
  OSCCON.IRCF1 = 1;
  OSCCON.IRCF2 = 1;
  OSCTUNE = 0;
  OSCTUNE.PLLEN = 1;
  Delay_ms(100);   // stabilize ...

  CMCON = 0x07;    // turn off comparators
  ADCON1 = 0x0F;   // turn off analog inputs
  -
  porta = 0;
  portb = 4; //0;
  portc = 0;
  trisa = 0b01001111;         // Direction of ports ...
  trisb = 0b11100001;
  trisc = 0b11100011;
  //
  // Timer0 Registers:  // 16-Bit Mode; Prescaler=1:256; TMRH Preset=0; TMRL Preset=0; Freq=0,11921Hz; Period=8 388,608 ms
  T0CON.TMR0ON = 0;     // Timer0 On/Off Control bit:1=Enables Timer0 / 0=Stops Timer0
  T0CON.T08BIT = 0;     // Timer0 8-bit/16-bit Control bit: 1=8-bit timer/counter / 0=16-bit timer/counter
  T0CON.T0CS   = 0;     // TMR0 Clock Source Select bit: 0=Internal Clock (CLKO) / 1=Transition on T0CKI pin
  T0CON.T0SE   = 0;     // TMR0 Source Edge Select bit: 0=low/high / 1=high/low
  T0CON.PSA    = 0;     // Prescaler Assignment bit: 0=Prescaler is assigned; 1=NOT assigned/bypassed
  T0CON.T0PS2  = 1;     // bits 2-0  PS2:PS0: Prescaler Select bits
  T0CON.T0PS1  = 0;     // 0,524 sek. timeout vid 32MHz
  T0CON.T0PS0  = 0;     // 1;
  TMR0H        = 0x0;   // preset for Timer0 MSB register
  TMR0L        = 0x0;   // preset for Timer0 LSB register
  //
  RCON = 0;
  INTCON = 0;
  INTCON.PEIE = 1;
  INTCON.INT0IE = 1;    // PORTB.F0 change
  INTCON.INT0IF = 0;
  //INTCON2 = 0;
  INTCON2.RBPU = 1;
  INTCON2.INTEDG0 = 1;  // 1=rising   (T_RISE)
  T1CON = 0;
  //
  INTCON.GIE = 0;
  //T0CON.TMR0ON = 0;
  //
  RadioMode( S_IDLE );
  //
  if ( ! RCON.F3 ) {
      // WatchDog Reset!
      RCON.F3 = 1;
      return;
  }
  //
  uart1_init(115200);
  //
  SLEDG = 1;
  delay_ms(500);
  SLEDG = 0;
  SLEDR = 1;
  delay_ms(500);
  SLEDR = 0;
  //delay_ms(500);
  LED;
  LEDBT = 0;
  delay_ms(500);
  LEDBT = 1;
  BTN;
  //
  WDTCON.SWDTEN = 1;
  INTCON.GIE = 1;
  //
  return;
}

void TimerSetup( void ) {
     //
     // Configure and run
     //
     LED;
     LEDBT = 0;
     TMR0H = 0;
     TMR0L = 0;
     INTCON.TMR0IE = 0;
     INTCON.TMR0IF = 0;
     T0CON.TMR0ON = 1;
     //
     return;
}


/*
void Preamble( void ) {
 // Do the latch sequence..
  TX_HI;
  delay_us(275);
  TX_LO;
  delay_us(9900);
  TX_HI;
  delay_us(275);
  TX_LO;
  delay_us(2675);
  TX_HI;
  //
  return;
}
*/


unsigned int totUS = 0;
unsigned int PulseIn( short Polarity, unsigned int MaxTime, unsigned short Test ) {
     // Set Polarity
     // Rig time
     // Rig INT to check change
     Wdog;
     //Serialprint("\r\n-PulseIN...");

     if ( Polarity == 1 ) {
        P_FLANK = 0;
     } else {
        P_FLANK = 1;
     }

     P_CLEAR;
     by_Capture = 0;
     P_ON;
     GIEN = 1;
     //SLED = 1;
     totUS = 6;
     if ( MaxTime > 0 ) {
         if (( rxPin == Polarity ) || ( Test == 1 )) {
             while ( by_Capture == 0 ) {   // 40Mhz = 100nS instruktionstid, 32MHZ = 125nS
                   asm {
                   nop;        // Very crucial timing (nop) loops, may need adjustment to specific processor :-/
                   nop;
                   nop;
                   nop;
                   nop;
                   nop;
                   nop;
                   nop;
                   nop;
                   }
                   totUS += 3;
                   if ( totUS > MaxTime ) {
                      //trace = totUS;
                      //INTCON.INT0IF = 0;
                      //SLED = 0;
                      P_OFF;
                      by_Capture = 0;
                      return 0xFFFF;
                   }
             }
         }
     } else {
        while ( rxPin != Polarity ) {
              Wdog;
        }
        //totUS += 1;
        while ( by_Capture == 0 ) {         // 2.9 uS after "PulseIn" we are here!// 32MHz 1:a=5,25  2:a=8,75   3:e=12,25
               asm {                                                                    // Adjusted  6         9          12         15
                   nop;     //            8 instr./uS
                   nop;
                   nop;
                   nop;
                   nop;
                   nop;
                   nop;
                   nop;
                   nop;
               }
               totUS += 3;
               if ( totUS > 0xFFFC ) {       //
                  //trace = totUS;
                  //INTCON.INT0IF = 0;
                  //SLED = 0;
                  P_OFF;
                  by_Capture = 0;
                  return 0xFFFF;
               }
        }
     }
     //SLED = 0;
     //trace = totUS;
     //INTCON.INT0IF = 0;
     P_OFF;
     by_Capture = 0;
     //
     return totUS;
}

    int imess = 1;
    unsigned int tt = 0;
    unsigned int pT = 0;
    unsigned long sender, saved_sender, prev_sender = 0;
    unsigned short group, saved_group, prev_group = 0;
    unsigned short on, saved_on, prev_on = 0;
    unsigned short recipient, saved_recipient, prev_recipient = 0;
    
void main() {           // ************ MAIN ***************
    //
    unsigned long TXID = 3952286;      // Transmitter ID
    unsigned int ii = 0;

    short prevBit = 0;
    short bbit = 0;

    short res;
    char str[8];
    //
    Setup();
    //
    GIEN = 1;
    memset(str,0x00,sizeof(str));
    WDTCON.SWDTEN = 1;
    //
ERROUT:
    tt = 0;
NOSYNC:
    //STEP = STEP & 0xE0;
    //goto LOOPSTART;
DATAERR:
    //STEP.F4 = 1; // STEP | 31;
LOOPSTART:
    while ( 1 ) {
        //
        while( ONSW == 0 ) {
            if ( TIF0 == 1 ) {
               T_OFF;
               T_CLEAR;
               LEDBT = 1;
               BTN;
               LEDBT = 1;
               imess = 1;
            }
            //
            RadioMode( S_RXDATA );
            SLEDG = 0;
            //LEDBT = 1;
            sender = 0;
            recipient = 0;
            group = 0;
            on = 0;
            tt = 0;
            // latch 1
            //while(( tt < 9480 ) || ( tt > 10350)) {
            while(( tt < 9500 ) || ( tt > 10000)) {
                    tt = pulseIn( LOW, 0, 0 );
                    if ( tt == 0xFFFF ) goto NOSYNC;
            }
            SLEDG = 1;
            //STEP.F0 = 1; //  STEP | 1;
            //Uart1_Write_Text("\r\n#"); //-First Latch Passed!");
            //
            // latch 2
            /*
            while(( tt < 250 ) || ( tt > 400)) {
                    tt = pulseIn( HIGH, 500 );
                    if (( tt == 0xFFFF ) || ( TIF0 )) goto ERROUT;
            }
            */
            tt = pulseIn( HIGH, 500, 0 );
            if (( tt < 250 ) || ( tt > 400 ) || ( tt == 0xFFFF ) || ( TIF0 )) goto ERROUT;
            SLEDR = 1;
            //LEDBT = 0;
            //STEP.F1 = 1; // = STEP | 3;
            //Uart1_Write_Text("#"); //\r\n-Second Latch Passed!");
            //
            // latch 3
            /*
            //while(( tt < 2550 ) || ( tt > 2700)) {
            while(( tt < 2300 ) || ( tt > 2600)) {
                    tt = pulseIn( LOW, 3500 );
                    if (( tt == 0xFFFF ) || ( TIF0 )) goto ERROUT;
            }
            */
            tt = pulseIn( LOW, 3500, 0 );
            if (( tt < 2300 ) || ( tt > 2600 ) || ( tt == 0xFFFF ) || ( TIF0 )) goto ERROUT;
            //Uart1_Write_Text("#\r\n"); //-Third Latch Passed!");
            //STEP.F2 = 1; //  STEP | 7;
            //SLEDG = 1;
            // data
            ii = 0;
            bfr = 0;
            //
            do {  //while( ii < 64 ) {
                    //delay_us(pT);
                    tt = pulseIn( HIGH, 0, 0);                         // mät HI pulsen och positionera oss på början av LOW
                    if ( tt == 0xFFFF ) goto DATAERR;
                    //SLEDG = 1;
                    tt = pulseIn( LOW, 1800, 0 );
                    if ( tt == 0xFFFF ) goto DATAERR;
                    //SLEDG = 1;
                    //STEP.F3 = 1; // STEP | 15;
                    //
                    //if(( tt > 200) && (tt < 365 )) {
                    //
                    if(( tt > 170) && (tt < 250 )) {
                            bbit = 0;  // '1'
                            //
                    } else if(( tt > 1000 ) && ( tt < 1300)) {  //else if(( tt > 1000 ) && ( tt < 1360)) {
                            //
                            bbit = 1;  // '0'
                    } else {
                            ii = 0;
                            break;
                    }
                    //
                    if( ii % 2 == 1 ) {
                            if(( prevBit ^ bbit ) == 0) {
                                    // must be either 01 or 10, cannot be 00 or 11
                                    ii = 0;
                                    break;
                            }
                            if( ii < 53 ) {
                                    // 0 to 25 data bits
                                    sender <<= 1;
                                    sender |= prevBit;
                            } else if( ii == 53 ) {        // 26th data bit
                                    group = prevBit;
                            } else if( ii == 55 ) {        // 27th data bit
                                    on = prevBit;
                            } else {        // last 4 data bits
                                    recipient <<= 1;
                                    recipient |= prevBit;
                            }
                    }
                    prevBit = bbit;
                    //++ii;
                    //
            } while ( ++ii < 64 );
            //
            //SLEDG = 1;
            //LEDBT = 1;
            // interpret message
            if( ii = 64 ) {
                //printResult(sender, group, on, recipient);
                if (( prev_sender == sender ) && ( prev_group == group ) && ( prev_on == on ) && ( prev_recipient == recipient )) {
                    imess += 1;
                    saved_sender = sender;
                    saved_group = group;
                    saved_on = on;
                    saved_recipient = recipient;
                    TimerSetup();
                } else {
                    prev_sender = sender;
                    prev_group = group;
                    prev_on = on;
                    prev_recipient = recipient;
                    imess = 1;
                    //T_CLEAR;
                    //T_OFF;
                    TimerSetup();
                }
                if ( imess > 1 ) { //MIN_FRAMES ) {   // OK, two equal frames received .... send!
                    T_CLEAR;
                    T_OFF;
                    LEDBT = 1;
                    BTN;
                    //imess = 1;
                    //TimerSetup();
                    SLEDG = 0;
                    SLEDR = 0;
                    /*
                    if ( sender == repeater ) {
                        RadioMode( S_IDLE );
                        delay(BLOCK_TIME);
                    } else {
                        delay(WAIT_TIME);
                        // Send "REPEATER" packet-id so that other repeaters don't repeat this!
                        transmitNEXA(repeater, 15, 0, 0, BLOCK_PACKETS); //recipient, group, on, BLOCK_PACKETS);
                        delay_ms(100);
                        // Repeat the message ...
                        transmitNEXA(sender, recipient, group, on, PACKETS);
                    }
                    eeprom_write(0x00,Highest(saved_sender));
                    eeprom_write(0x01,Higher(saved_sender));
                    eeprom_write(0x02,Hi(saved_sender));
                    eeprom_write(0x03,Lo(saved_sender));
                    eeprom_write(0x04,saved_recipient);
                    eeprom_write(0x05,saved_group);
                    eeprom_write(0x06,saved_on);
                    eeprom_write(0x07,PACKETS);
                    */
                    GIEN = 0;
                    delay( 1500 );
                    printResult(saved_sender, saved_group, saved_on, saved_recipient, PACKETS, 0);
                    //Wdog;
                    transmitNEXA(saved_sender, saved_recipient, saved_group, saved_on, PACKETS);
                    //transmitNEXA(TXID, 2, 0, 1, 6); //recipient, group, on, PACKETS);
                    //
                    imess = 1;
                }   // messages
            }  // 64
        }   // While ON
        //if  ( ONSW == 0 ) goto LOOPSTART;    // If switch is in 'ON' pos (0) then loop ...
        //
        RadioMode( S_IDLE );
        SLEDG = 0;
        SLEDR = 0;
        //LEDBT = 1;
        Wdog;
        //
        BTN;
        delay_us(1);
        if ( LEDBT == 0 ) {     // If "button" is pressed, send test signal ...
             //SLEDG = 0;
             //transmitNEXA(repeater, 15, 0, 0, BLOCK_PACKETS); //recipient, group, on, PACKETS);
             transmitNEXA(TXID, 2, 0, 1, 6);
             /*
             while( 1 ) {
                  tt = pulseIn( LOW, 1000, 1 );
                  PORTA.F4 = ~PORTA.F4;
                  SLEDG = ~SLEDG;
                  //delay_us(1000);
             }
             */
        }
        //LED;
    }   // Loop
}

void delay( unsigned int msdelay ) {
    unsigned int dloop;
    //
    for ( dloop = 0; dloop < msdelay; dloop++) {
         Wdog;
         delay_ms(1);
    }
}


void transmitNEXA( unsigned long TN_SenderID, unsigned short TN_RecCh, unsigned short TN_Group, unsigned short TN_Enabled, unsigned short TN_Repeats ){
  //
  // Takes approx. 80mS / packet
  //
  unsigned short i,cnt;
  unsigned long DA, CID;
  unsigned short RCP, REC, GRP, ACT, REP;
  //char txt[20];
  //memset(txt80,0x00,sizeof(txt80));
  //
  CID = TN_SenderID;
  REC = TN_RecCh;
  GRP = TN_Group;
  ACT = TN_Enabled;
  REP = TN_Repeats;
  GIEN = 0;
  
  /*
  for ( cnt = 0; cnt < 0x08; cnt++ ) {
      eeprom_write(cnt,0xFF);
  }
  cnt = 0;
  eeprom_write(0x00,Highest(CID));
  eeprom_write(0x01,Higher(CID));
  eeprom_write(0x02,Hi(CID));
  eeprom_write(0x03,Lo(CID));
  eeprom_write(0x04,RCP);
  eeprom_write(0x05,GRP);
  eeprom_write(0x06,ACT);
  eeprom_write(0x07,REP);

  Highest(CID) = eeprom_read(0x00);
  Higher(CID)  = eeprom_read(0x01);
  Hi(CID) = eeprom_read(0x02);
  Lo(CID) = eeprom_read(0x03);
  REC = eeprom_read(0x04);
  GRP = eeprom_read(0x05);
  ACT = eeprom_read(0x06);
  REP = eeprom_read(0x07);
  */
  
  printResult(CID, GRP, ACT, REC, REP, 1);
  //Preamble();
  RadioMode( S_TXDATA );
  //
  //TN_SenderID =
  //
  for (cnt = 0;cnt < REP;cnt++) {
      //
      Wdog;
      DA = CID; //TN_SenderID;
      RCP = REC; //TN_RecCh;
      //
      TX_HI;
      delay_us(320);
      TX_LO;
      delay_us(2510);
      //
      for(i=0; i<26;i++) {               // Send Device Address..
        //
         if((DA & 0x02000000)==0x02000000) {
         //if ((Highest(DA) & 0x02)==0x02) {
             sendPairNEXA(TRUE);
         } else {
             sendPairNEXA(FALSE);
         }
         DA <<= 1;
         //DA >>= 1;
      }

      // Send 26th bit - group 1/0
      sendPairNEXA(GRP);

      // Send 27th bit - on/off 1/0
      sendPairNEXA(ACT);

      // last 4 bits - recipient
      //
       for(i=0; i<4;i++) {
         //
         if((RCP & 0x8)==0x8) {
             sendPairNEXA(TRUE);
         } else {
             sendPairNEXA(FALSE);
         }
         RCP <<= 1;
      }
      //
      // Send "EndOfMessage" ...
      //
      TX_HI;
      delay_us(310);
      TX_LO;
      delay_us(9810);  // put low for at least this time :)
  }
  //
  RadioMode( S_IDLE );
  //
  return;
}


void sendPairNEXA(unsigned short SPN_b) {
    // Send the Manchester Encoded data 01 or 10, never 11 or 00
    //static int counter = 0;
    //char text[12];
    //
    //wordtostr(counter++,text);
    //Serialprint("\r\nSendPairNEXA:");

    if(SPN_b == TRUE) {
        //Serialprint(" TRUE / ");
        sendBitNEXA(FALSE);
        sendBitNEXA(TRUE);
    } else {
        //Serialprint(" FALSE / ");
        sendBitNEXA(TRUE);
        sendBitNEXA(FALSE);
    }
    //Serialprint(text);
    return;
}


void sendBitNEXA(unsigned short SBN_b) {
    //static int counter = 0;
    //char text[12];
    //
    //wordtostr(counter++,text);
    //Serialprint("\r\nSendBitNEXA:");
    if (SBN_b == TRUE) {
        //Serialprint(" 1 / ");
        TX_HI;
        delay_us(335); //320);
        TX_LO;
        delay_us(215); //200);
    } else {
        //Serialprint(" 0 / ");
        TX_HI;
        delay_us(335); //320);
        TX_LO;
        delay_us(1225); //1210);
    }
    //Serialprint(text);
    return;
}


void printResult(unsigned long sender, unsigned short group, unsigned short on, unsigned short recipient, unsigned short messages, unsigned short mType)
{       //
        char txt[15];
        //static unsigned int cnt = 0;
        memset(txt,0x00,sizeof(txt));
        /*
        wordtostr(bfr,txt);
        Serialprintln(txt);
        */
        Serialprint("\r\n");
        if ( mType == 0 ) {
             SerialPrintln("Received:");
        } else if ( mType == 1 ) {
             SerialPrintln("Transmit:");
        }
        wordtostr(++cnt,txt);
        Serialprint("\r\n");
        Serialprint(txt);
        //
        longwordtostr(sender,txt);
        Serialprint(":\tsender id    ");
        Serialprintln(txt);
        //
        Serialprint("\tgroup cmd.\t");
        if(group)
        {        Serialprintln("YES");
        }
        else
        {        Serialprintln("NO");
        }
        Serialprint("\taction\t        ");
        if(on)
        {        Serialprintln("<ON>");
        }
        else
        {        Serialprintln("<OFF>");
        }

        shorttostr(recipient,txt);
        Serialprint("\trecipient   ");
        Serialprintln(txt);

        shorttostr(messages,txt);
        Serialprint("\tpackets     ");
        Serialprintln(txt);


        Serialprint("\n\r");
        //
}

void Serialprintln( char *uart_text ) {
     //
     Serialprint( uart_text );
     Serialprint("\n\r");
     return;
}
________________________________________________________________________
   // Sonny //              ( If assembler looks blurry....try 2 C# ;)

Korak
3 stars
3 stars
Posts: 69
Joined: Mon 22 Nov 2010, 22:26
Location: Luleå

Re: Egen Nexa Sändare/Mottagare/Sniffer :)

Post by Korak » Tue 15 Feb 2011, 23:03

Har löst absolut-dimmnings biten, nu lirar både sändare och mottagare :)
________________________________________________________________________
   // Sonny //              ( If assembler looks blurry....try 2 C# ;)

pajn
1 star
1 star
Posts: 2
Joined: Sun 13 Feb 2011, 16:10

Re: Egen Nexa Sändare/Mottagare/Sniffer :)

Post by pajn » Tue 15 Feb 2011, 23:10

Fick inget mail som man brukar få på forum när nån svarar i tråden, och missade därför att du postade igår. Tack väldigt mycket för koden! :D
Kul att du fick igång absolutdimningen, rätt enkelt egentligen men väldigt bra vid centralstyrning.

Post Reply

Who is online

Users browsing this forum: Google [Bot] and 16 guests