⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 app.c

📁 adhoc信息节点程序源代码(点对多点)——for atmega128
💻 C
字号:
/*
****************************************************************************   
*                        宁波市科技园区创业大厦六楼
*              宁波中科集成电路设计中心  版权所有 Copyright 2005
*
*文件名:  llc.c
*程序员:
*主要内容:定时采集数据,并通过CC1000发送
*完成日期:2005.3.28
****************************************************************************
*/

#include "os.h"
#include "sensor.h"
#include "message.h"
#include "led.h"
#include "macClock.h"
#include "mac.h"

extern uint8_t OS_LOCAL_ADDRESS;
extern uint8_t  OS_BCAST_ADDR;
uint8_t OS_GROUP = OS_DEFAULT_GROUP;

uint8_t  LLCpacketReadingNumber;
uint8_t  LLCPacketNumber;
OSMACMsg LLCmsg[2];
uint8_t  LLCcurrentMsg;

/*************************************************************************
*功能描述:初始化
*参数说明:无
*返回值:  无
**************************************************************************/
result_t LLCStdControlInit(void)
{
	LedInit();
	LedRedOff();
	LedGreenOff();
	LedYellowOff();
	
	SensorPhoOStdControlInit();
	
	MACInit();
	
	{ uint8_t atomicState = AtomicStart();
    {
		LLCcurrentMsg = 0;
		LLCpacketReadingNumber = 0;
		LLCPacketNumber = 0;
    }
    AtomicEnd(atomicState); }
	
	return SUCCESS;
}

/*************************************************************************
*功能描述:设置1号定时器的定时类型和间隔,并启动
*参数说明:定时器类型,时间间隔(ms)
*返回值:  执行结果
**************************************************************************/
result_t LLCTimerStart(uint8_t interval)
{
	ClockSet(interval);
	return SUCCESS;
}

/*************************************************************************
*功能描述:启动底层
*参数说明:
*返回值:  
**************************************************************************/
result_t LLCStdControlStart(void)
{
	SensorPhoOStdControlStart();
	LLCTimerStart(125);
	
	return SUCCESS;
}

result_t LLCADCGetData(void)
{
	unsigned char result;
	result = SensorExternalPhotoADCGetData();
	return result;
}

/*************************************************************************
*功能描述:由设定的定时器时钟到达触发,调用采集函数
*参数说明:无
*返回值:  
**************************************************************************/
result_t LLCTimerFired(void)
{
	return LLCADCGetData();
}

/*************************************************************************
*功能描述:打包数据,并调用MAC进行广播发送
*参数说明:目的节点号,数据长度,数据包地址
*返回值:  
**************************************************************************/
result_t LLCDataMsgSend(uint8_t addr, uint8_t length, OSMACMsgPtr data)
{
	unsigned char result;

	if (length > APP_PKT_LEN)
	{
		return FALSE;
	}
	
	if (addr == OS_BCAST_ADDR)
	{
		result = MACBroadcastMsg(data, length);
	}
	else
		result = 1;
	return result;
}

/*************************************************************************
*功能描述:发送任务处理
*参数说明:
*返回值:  
**************************************************************************/
void LLCdataTask(void)
{
	SensorMsg *pack;
	
	{ uint8_t atomicState = AtomicStart();
    {
		pack = (SensorMsg *)LLCmsg[LLCcurrentMsg].data;
		LLCpacketReadingNumber = 0;
		pack->seqNo = LLCPacketNumber;
    }
    AtomicEnd(atomicState); }
	
	if (LLCDataMsgSend(OS_BCAST_ADDR, 
		sizeof(SensorMsg), &LLCmsg[LLCcurrentMsg])) 
    {
		
		{ uint8_t atomicState = AtomicStart();
        {
			LLCcurrentMsg ^= 0x1;
        }
        AtomicEnd(atomicState); }
    }
}

/*************************************************************************
*功能描述:从ADC获得数据,并进行缓存,调用发送处理函数
*参数说明:传感采集到的数据
*返回值:  
**************************************************************************/
result_t LLCADCDataReady(uint16_t data)
{
	SensorMsg *pack;
	{ uint8_t atomicState = AtomicStart();
    {
		pack = (SensorMsg *)LLCmsg[LLCcurrentMsg].data;
		pack->data[LLCpacketReadingNumber++] = data;
		
		if (LLCpacketReadingNumber == BUFFER_LEN) {
			OSPostTask(LLCdataTask);							// 如果缓存区已满,则发送
			LLCPacketNumber++;
		}
    }
    AtomicEnd(atomicState); }
	
	if (data > 0x0270) {
		LedRedOn();
    }
	else {
		LedRedOff();
    }
	if (data < 0x0230) {
		LedGreenOn();
    }
	else {
		LedGreenOff();
    }
	return SUCCESS;
}

result_t LLCDataMsgSendDone(OSMACMsgPtr sent, result_t success)
{
	return SUCCESS;
}

OSMACMsgPtr LLCResetCounterMsgReceive(OSMACMsgPtr m)
{
	{ uint8_t atomicState = AtomicStart();
    {
		LLCPacketNumber = 0;
    }
    AtomicEnd(atomicState); }
	return m;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -