xe1205patternconfp.nc

来自「tinyos-2.0源代码!转载而已!要的尽管拿!」· NC 代码 · 共 152 行

NC
152
字号
/*  * Copyright (c) 2006, Ecole Polytechnique Federale de Lausanne (EPFL), * Switzerland. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * - Redistributions of source code must retain the above copyright notice, *   this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright *   notice, this list of conditions and the following disclaimer in the *   documentation and/or other materials provided with the distribution. * - Neither the name of the Ecole Polytechnique Federale de Lausanne (EPFL)  *   nor the names of its contributors may be used to  *   endorse or promote products derived from this software without  *   specific prior written permission. *  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ======================================================================== *//** * Implementation of XE1205PatternConf interface. * * @author Henri Dubois-Ferriere */module XE1205PatternConfP {  provides interface XE1205PatternConf;  provides interface Init @atleastonce();  uses interface Resource as SpiResource;  uses interface XE1205Register as RXParam10;  uses interface XE1205Register as Pattern13;  uses interface XE1205Register as Pattern14;  uses interface XE1205Register as Pattern15;  uses interface XE1205Register as Pattern16;} implementation {#include "xe1205debug.h"  task void initTask() {    atomic {      xe1205check(1, call SpiResource.immediateRequest()); // should always succeed: task happens after softwareInit, before interrupts are enabled      call RXParam10.write(0x10 | 2 << 2); // pattern detection enabled, error tolerance=0, pattern length 3      call Pattern13.write((data_pattern >> 16) & 0xff);      call Pattern14.write((data_pattern >> 8) & 0xff);      call Pattern15.write(data_pattern & 0xff);      call SpiResource.release();    }  }  command error_t Init.init()   {    post initTask();    return SUCCESS;  }    event void SpiResource.granted() {  }  async command error_t XE1205PatternConf.setDetectLen(uint8_t len)   {    uint8_t reg;    error_t status;    if (len == 0 || len > 4)  return EINVAL;    if (call SpiResource.isOwner()) return EBUSY;    status = call SpiResource.immediateRequest();    xe1205check(2, status);    if (status != SUCCESS) return status;    call RXParam10.read(&reg);        reg &= ~(3 << 2);    reg |= (len << 2);        call RXParam10.write(reg);    call SpiResource.release();    return SUCCESS;  }      async command error_t XE1205PatternConf.loadPattern(uint8_t* pattern, uint8_t len)   {    error_t status;    if (len == 0 || len > 4) return EINVAL;    if (call SpiResource.isOwner()) return EBUSY;    status = call SpiResource.immediateRequest();    xe1205check(3, status);    if (status != SUCCESS) return status;    call Pattern13.write(*pattern++);    if (len == 1) goto done;    call Pattern14.write(*pattern++);    if (len == 2) goto done;    call Pattern15.write(*pattern++);    if (len == 3) goto done;    call Pattern16.write(*pattern);  done:      call SpiResource.release();      return SUCCESS;  }      async command error_t XE1205PatternConf.setDetectErrorTol(uint8_t nerrors)   {    uint8_t reg;    error_t status;    if (nerrors > 3) return EINVAL;        if (call SpiResource.isOwner()) return EBUSY;    status = call SpiResource.immediateRequest();    xe1205check(4, status);    if (status != SUCCESS) return status;    call RXParam10.read(&reg);        reg &= ~(0x03);    reg |= nerrors;        call RXParam10.write(reg);    call SpiResource.release();    return SUCCESS;  }}

⌨️ 快捷键说明

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