?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{FILE START}

library

?curdirlinks? - Rev 6

?prevdifflink? - Blame - ?getfile?

//*****************************************************************************
// File Name    : stxetxtest.c
// Title                : Example usage of STX/ETX packet protocol and library code
// Revision             : 0.1
// Notes                : 
// Target MCU   : Atmel AVR series
// Editor Tabs  : 4
// 
// Revision History:
// When                 Who                     Description of change
// -----------  -----------     -----------------------
// 20-Nov-2002  pstang          Created the program
//*****************************************************************************

//----- Include Files ---------------------------------------------------------
#include <avr/io.h>             // include I/O definitions (port names, pin names, etc)
#include <avr/interrupt.h>      // include interrupt support
#include <avr/pgmspace.h>

#include "global.h"             // include our global settings
#include "uart.h"               // include uart function library
#include "rprintf.h"    // include printf function library
#include "timer.h"              // include timer function library
#include "lcd.h"                // include LCD support
#include "stxetx.h"             // include STX/ETX packet support


// make a transmitting packet buffer area in memory
// where we can assemble the data we wish to transmit
// using stx/etx
unsigned char TxPacket[20];

// function prototypes
void receiveStxEtx(void);
void transmitStxEtx(void);
u08 getSw(void);

// main code
int main(void)
{
        // initialize the AVRlib libraries
        timerInit();                            // initialize the timer system
        uartInit();                             // initialize the UART (serial port)
        lcdInit();
        rprintfInit(lcdDataWrite);      // init rprintf

        // we will be using the AVR UART to communicate the
        // STX/ETX protocol to another AVR board or to a PC
        
        // initialize stxetx to use the UART for sending data
        stxetxInit(uartSendByte);

        // set baud rate to 4800 (less than 5000) if communicating using
        // the Linx LC radio modules
        uartSetBaudRate(4800);

        // choose to either transmit or receive
        transmitStxEtx();
        //receiveStxEtx();

        return 0;
}

void transmitStxEtx(void)
{
        u16 packetNum=0;

        lcdClear();

        while(1)
        {
                // assemble the data I wish to send inside a STX/ETX packet
                // send the string "ALOHA"
                TxPacket[0] = 'A';
                TxPacket[1] = 'L';
                TxPacket[2] = 'O';
                TxPacket[3] = 'H';
                TxPacket[4] = 'A';
                // send the packet number
                TxPacket[5] = packetNum>>8;             // high byte
                TxPacket[6] = packetNum;                // low byte
                // send the current state of PORTA
                TxPacket[7] = inb(PINA);

                // send the packet with:
                // packet status = 0
                // packet type = 0x55
                // (the packet type and status may be, and mean, anything the user wishes)
                // 8-bytes of user data
                stxetxSend(0, 0x55, 8, TxPacket);

                // output our packet data to the LCD
                lcdGotoXY(0,0);         rprintf("Sending..."); 
                lcdGotoXY(20,0);        rprintf("PORTA: "); rprintfu08(inb(PINA));
                lcdGotoXY(0,1);         rprintf("String: ALOHA");
                lcdGotoXY(20,1);        rprintf("PacketNum: "); rprintfu16(packetNum);

                // increment our packet number
                packetNum++;
                // pause for a moment
                timerPause(10);
        }
}

void receiveStxEtx(void)
{
        u16 packetNum=0;
        u08* dataPtr;

        lcdClear();

        while(1)
        {
                lcdGotoXY(0,0);         rprintf("Receiving..."); 

                // here we get the UART's receive buffer and give it to the STX/ETX
                // packet processing function.  If the packet processor finds a valid
                // packet in the buffer, it will return true.
                if(stxetxProcess(uartGetRxBuffer()))
                {
                        // sxtetxProcess has reported that it found a packet
                        // let's get the data...

                        // (NOTE: although I discard the status, type, and datalength
                        // below, it would be important if I were sending more than one
                        // kind of packet)

                        // get the packet's status
                        stxetxGetRxPacketStatus();
                        // get the packet's type
                        stxetxGetRxPacketType();
                        // get the packet's datalength
                        stxetxGetRxPacketDatalength();
                        // get a pointer to the place where the received data is stored
                        dataPtr = stxetxGetRxPacketData();

                        // decode packet number
                        packetNum = (dataPtr[5]<<8) | dataPtr[6];

                        // output our packet data to the LCD
                        lcdGotoXY(20,0);        rprintf("PORTA: "); rprintfu08( dataPtr[7] );
                        lcdGotoXY(0,1);         rprintf("String: ");
                        // print out the string
                        rprintfChar( dataPtr[0] );
                        rprintfChar( dataPtr[1] );
                        rprintfChar( dataPtr[2] );
                        rprintfChar( dataPtr[3] );
                        rprintfChar( dataPtr[4] );
                        lcdGotoXY(20,1);        rprintf("PacketNum: "); rprintfu16(packetNum);
                }
        }
}
{FILE END}
{FOOTER START}

Powered by WebSVN v2.8.3