📄 testislc.nc
字号:
#include "Timer.h"
#include "I2C.h"
#include "TestISLMsg.h"
module TestISLC @safe()
{
uses
{
interface Leds;
interface Boot;
interface Timer<TMilli> as Timer;
interface SplitControl as SerialControl;
interface Packet;
interface AMSend;
interface I2CPacket<TI2CBasicAddr>;
interface Resource;
interface GeneralIO as PD_Enable;
}
}
implementation
{
uint8_t test[8];
message_t packet;
event void Boot.booted()
{
call PD_Enable.makeOutput();
call PD_Enable.clr();
call SerialControl.start();
}
event void SerialControl.startDone(error_t error)
{
//test[0]=0x00;
//test[1]=0x00;
test[0]=0x00;
call Resource.request();
//call Timer.startOneShot(5000);
}
event void SerialControl.stopDone(error_t error){ }
event void Timer.fired()
{
int i;
for(i=0;i<8;i++)
{
test[i] = 0;
}
call Resource.request();
}
event void Resource.granted()
{
//uint8_t len;
//len = sizeof(test);
if(call I2CPacket.write(I2C_START | I2C_STOP, ISL_ADDR, 1, test) == SUCCESS)
{
call Leds.led0Toggle();
return;
}
}
task void ReadDone()
{
TestISLMsg *ptr = (TestISLMsg *)call Packet.getPayload(&packet, sizeof(TestISLMsg));
if (call Packet.maxPayloadLength() < sizeof(TestISLMsg))
{
return;
}
ptr->Imote_light[0] = test[1];
ptr->Imote_light[1] = test[2];
ptr->Imote_light[2] = test[3];
ptr->Imote_light[3] = test[4];
//ptr->Imote_light[2] = test[5];
//ptr->Imote_light[2] = test[6];
call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(TestISLMsg));
call Leds.led1Toggle();
return;
}
async event void I2CPacket.readDone(error_t error, uint16_t addr, uint8_t length, uint8_t* data)
{
post ReadDone();
//这个功能如果直接实现就会报警告,
/*
TestISLC.nc:69: warning: `Packet.getPayload' called asynchronously from `I2CPacket.writeDone'
TestISLC.nc:69: warning: `Packet.getPayload' called asynchronously from `I2CPacket.writeDone'
TestISLC.nc:70: warning: `Packet.maxPayloadLength' called asynchronously from `I2CPacket.writeDone'
TestISLC.nc:80: warning: `AMSend.send' called asynchronously from `I2CPacket.writeDone'
*/
call Resource.release();
call Leds.led2Toggle();
return;
}
task void I2CRead()
{
call I2CPacket.read(I2C_START | I2C_STOP, ISL_ADDR, 4, test);
}
async event void I2CPacket.writeDone(error_t error, uint16_t addr, uint8_t length, uint8_t* data)
{
post I2CRead();
return;
}
task void StartTimerOneShot()
{
call Timer.startOneShot(1000);
}
event void AMSend.sendDone(message_t* bufPtr, error_t error)
{
post StartTimerOneShot();
return;
}
//首先向I2C做write,writeDone触发read,readDone中完成向串口的发送?那么Timer应该怎么保证?
//writeDone,readDone的参数data已经可以把数据对应到定义的格式里吗?具体传值?
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -