mirror of
https://github.com/arduino/Arduino.git
synced 2024-11-30 11:24:12 +01:00
130 lines
3.4 KiB
C
Executable File
130 lines
3.4 KiB
C
Executable File
/*! \file erp.c \brief Emerald Radio Protocol System. */
|
|
//*****************************************************************************
|
|
//
|
|
// File Name : 'erp.c'
|
|
// Title : Emerald Radio Protocol System
|
|
// Author : Pascal Stang - Copyright (C) 2003
|
|
// Created : 2003.09.10
|
|
// Revised : 2003.09.10
|
|
// Version : 0.1
|
|
// Target MCU : Atmel AVR series
|
|
// Editor Tabs : 4
|
|
//
|
|
// This code is distributed under the GNU Public License
|
|
// which can be found at http://www.gnu.org/licenses/gpl.txt
|
|
//
|
|
//*****************************************************************************
|
|
|
|
//----- Include Files ---------------------------------------------------------
|
|
#include "global.h" // include our global settings
|
|
#include "debug.h" // include debug function library
|
|
#include "rprintf.h" // include printf function library
|
|
|
|
#include "erp.h"
|
|
#include "edpdebug.h"
|
|
|
|
// globals
|
|
|
|
// functions
|
|
void erpDisplayHeader(ErpPacket* erpPacket)
|
|
{
|
|
// show ERP packet header
|
|
rprintf("ERP Header: Callsign=");
|
|
rprintfStrLen(erpPacket->CallSign,0,CALLSIGN_FIELD_LEN);
|
|
rprintf(", Trg=0x%x, Src=0x%x, Seq#=%d, Type=",
|
|
erpPacket->ToAddress,
|
|
erpPacket->FromAddress,
|
|
erpPacket->SequenceNum);
|
|
// try to decode packet type
|
|
switch(erpPacket->Type)
|
|
{
|
|
case ERP_ECHO: rprintf("ECHO"); break;
|
|
case ERP_ECHOREPLY: rprintf("ECHOREPLY"); break;
|
|
case ERP_TEST: rprintf("TEST"); break;
|
|
case ERP_EDPCOMMAND: rprintf("EDPCOMMAND"); break;
|
|
case ERP_EDPREPLY: rprintf("EDPREPLY"); break;
|
|
case ERP_EDPREPLYNODEV: rprintf("EDPREPLYNODEV"); break;
|
|
default: rprintf("0x%x", erpPacket->Type); break;
|
|
}
|
|
rprintfCRLF();
|
|
}
|
|
|
|
void erpDisplayPacket(ErpPacket* erpPacket, u08 pktLength)
|
|
{
|
|
u08 i;
|
|
u08 flag;
|
|
|
|
// show ERP packet header
|
|
erpDisplayHeader(erpPacket);
|
|
|
|
// dump complete raw packet data
|
|
if(pktLength)
|
|
{
|
|
// check if all characters are printable
|
|
flag = TRUE;
|
|
for(i=0; i<pktLength; i++)
|
|
{
|
|
if( ((u08*)erpPacket)[i] < 0x20 ) flag = FALSE;
|
|
}
|
|
|
|
// print packet data
|
|
rprintf("Data:\r\n");
|
|
if(flag)
|
|
{
|
|
// print as string
|
|
rprintfStrLen(((u08*)erpPacket), 0, pktLength);
|
|
}
|
|
else
|
|
{
|
|
// print as hex
|
|
debugPrintHexTable(pktLength, ((u08*)erpPacket));
|
|
}
|
|
rprintfCRLF();
|
|
}
|
|
}
|
|
|
|
void erpDisplayEdpCommand(u08 length, ErpEdpCommand* erpEdpCommand)
|
|
{
|
|
// print ERP-specific fields
|
|
rprintf("EDP DestAddr: 0x%x\r\n", erpEdpCommand->EdpDestAddr);
|
|
// print embedded EDP command
|
|
edpDisplayCommand(length-1, &erpEdpCommand->EdpCommand);
|
|
}
|
|
|
|
void erpDisplayEdpReply(u08 length, ErpEdpReply* erpEdpReply)
|
|
{
|
|
// print embedded EDP reply
|
|
edpDisplayReply(erpEdpReply->EdpResponse, &erpEdpReply->EdpReply);
|
|
}
|
|
|
|
|
|
/*
|
|
void ErpPacketCreate(u08 targetI2cAddr, u08 pktType, u08 datalength, u08* data)
|
|
{
|
|
// make packet structure in TxPacket memory
|
|
struct ErpPacket* erpPacket
|
|
= (struct ErpPacket*)TxPacket;
|
|
|
|
// prepare Emerald packet header
|
|
memcpy(erpPacket->CallSign, MYCALLSIGN, CALLSIGN_FIELD_LEN);
|
|
erpPacket->ToAddress = targetI2cAddr;
|
|
erpPacket->FromAddress = LocalI2cAddr;
|
|
erpPacket->SequenceNum = SequenceNum++;
|
|
erpPacket->Type = pktType;
|
|
// copy data
|
|
for(i=0; i<datalength; i++)
|
|
{
|
|
erpPacket->Data[i] = *data++;
|
|
}
|
|
}
|
|
|
|
void ErpPacketTx(void)
|
|
{
|
|
// STX/ETX header
|
|
u08 stxetxStatus = 0x5A;
|
|
u08 stxetxType = 0xA5;
|
|
rprintf("Sending Packet: Status: 0x%x Type: 0x%x\r\n", stxetxStatus, stxetxType);
|
|
radioSend(stxetxStatus, stxetxType, EMRADIOHEADER_LEN+(len/2), packet);
|
|
}
|
|
*/
|