app.c
上传用户:joranyuan
上传日期:2022-06-23
资源大小:3306k
文件大小:273k
源码类别:

网络

开发平台:

Others

  1.     }
  2. #line 199
  3.   TimerM$queue_head++;
  4.   TimerM$queue_size--;
  5.   return TimerM$queue[(uint8_t )TimerM$queue_head];
  6. }
  7. static inline  void TimerM$signalOneTimer(void)
  8. #line 204
  9. {
  10.   uint8_t itimer = TimerM$dequeue();
  11. #line 206
  12.   if (itimer < NUM_TIMERS) {
  13.     TimerM$Timer$fired(itimer);
  14.     }
  15. }
  16. static inline  
  17. #line 210
  18. void TimerM$HandleFire(void)
  19. #line 210
  20. {
  21.   uint8_t i;
  22.   uint16_t int_out;
  23. #line 213
  24.   TimerM$setIntervalFlag = 1;
  25.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  26. #line 216
  27.     {
  28.       int_out = TimerM$interval_outstanding;
  29.       TimerM$interval_outstanding = 0;
  30.     }
  31. #line 219
  32.     __nesc_atomic_end(__nesc_atomic); }
  33.   if (TimerM$mState) {
  34.       for (i = 0; i < NUM_TIMERS; i++) {
  35.           if (TimerM$mState & (0x1L << i)) {
  36.               TimerM$mTimerList[i].ticksLeft -= int_out;
  37.               if (TimerM$mTimerList[i].ticksLeft <= 2) {
  38.                   if (TOS_post(TimerM$signalOneTimer)) {
  39.                       if (TimerM$mTimerList[i].type == TIMER_REPEAT) {
  40.                           TimerM$mTimerList[i].ticksLeft += TimerM$mTimerList[i].ticks;
  41.                         }
  42.                       else 
  43. #line 230
  44.                         {
  45.                           TimerM$mState &= ~(0x1L << i);
  46.                         }
  47.                       TimerM$enqueue(i);
  48.                     }
  49.                   else {
  50.                       {
  51.                       }
  52. #line 236
  53.                       ;
  54.                       TimerM$mTimerList[i].ticksLeft = TimerM$mInterval;
  55.                     }
  56.                 }
  57.             }
  58.         }
  59.     }
  60.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  61. #line 247
  62.     int_out = TimerM$interval_outstanding;
  63. #line 247
  64.     __nesc_atomic_end(__nesc_atomic); }
  65.   if (int_out == 0) {
  66.     TimerM$adjustInterval();
  67.     }
  68. }
  69. static inline   result_t TimerM$Clock$fire(void)
  70. #line 253
  71. {
  72.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  73. #line 254
  74.     {
  75.       if (TimerM$interval_outstanding == 0) {
  76.         TOS_post(TimerM$HandleFire);
  77.         }
  78.       else {
  79.         }
  80. #line 261
  81.       ;
  82.       TimerM$interval_outstanding += TimerM$Clock$getInterval() + 1;
  83.     }
  84. #line 264
  85.     __nesc_atomic_end(__nesc_atomic); }
  86.   return SUCCESS;
  87. }
  88. # 180 "/home/testuser/tinyos-1.x/tos/interfaces/Clock.nc"
  89. inline static   result_t HPLClock$Clock$fire(void){
  90. #line 180
  91.   unsigned char result;
  92. #line 180
  93. #line 180
  94.   result = TimerM$Clock$fire();
  95. #line 180
  96. #line 180
  97.   return result;
  98. #line 180
  99. }
  100. #line 180
  101. static inline 
  102. # 321 "../../tos/system/DrandM.nc"
  103. void DrandM$fillGrantSendInfo(uint8_t *array)
  104. #line 321
  105. {
  106.   uint8_t i;
  107. #line 322
  108.   uint8_t j;
  109. #line 323
  110.   for (i = 0, j = 0; i < MAX_NBR && DrandM$nbrInfo[i].nodeID != 0xFF; i++) 
  111.     if (DrandM$nbrInfo[i].bitMap & ONE_HOP && !(DrandM$nbrInfo[i].bitMap & GRANT_SENT)) {
  112.       array[j++] = DrandM$nbrInfo[i].nodeID;
  113.       }
  114. #line 326
  115.   for (; j < MAX_NBR; j++) 
  116.     array[j] = 0xFF;
  117. }
  118. # 48 "/home/testuser/tinyos-1.x/tos/interfaces/SendMsg.nc"
  119. inline static  result_t DrandM$SendRequestMsg$send(uint16_t arg_0x857ab18, uint8_t arg_0x857ac60, TOS_MsgPtr arg_0x857adb0){
  120. #line 48
  121.   unsigned char result;
  122. #line 48
  123. #line 48
  124.   result = AMStandard$SendMsg$send(AM_REQUEST, arg_0x857ab18, arg_0x857ac60, arg_0x857adb0);
  125. #line 48
  126. #line 48
  127.   return result;
  128. #line 48
  129. }
  130. #line 48
  131. # 42 "../../tos/platform/mica2/SpiByteFifo.nc"
  132. inline static   result_t HPLSpiM$SpiByteFifo$dataReady(uint8_t arg_0x8713520){
  133. #line 42
  134.   unsigned char result;
  135. #line 42
  136. #line 42
  137.   result = CC1000RadioIntM$SpiByteFifo$dataReady(arg_0x8713520);
  138. #line 42
  139. #line 42
  140.   return result;
  141. #line 42
  142. }
  143. #line 42
  144. # 53 "../../tos/platform/mica2/HPLSpiM.nc"
  145. void __attribute((signal))   __vector_17(void)
  146. #line 53
  147. {
  148.   register uint8_t temp = * (volatile uint8_t *)(0x0F + 0x20);
  149. #line 55
  150.   * (volatile uint8_t *)(0x0F + 0x20) = HPLSpiM$OutgoingByte;
  151.   HPLSpiM$SpiByteFifo$dataReady(temp);
  152. }
  153. static inline    
  154. # 1789 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  155. void CC1000RadioIntM$RadioSendCoordinator$default$blockTimer(void)
  156. #line 1789
  157. {
  158. }
  159. # 43 "../../tos/platform/mica2/RadioCoordinator.nc"
  160. inline static   void CC1000RadioIntM$RadioSendCoordinator$blockTimer(void){
  161. #line 43
  162.   CC1000RadioIntM$RadioSendCoordinator$default$blockTimer();
  163. #line 43
  164. }
  165. #line 43
  166. static inline    
  167. # 1794 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  168. void CC1000RadioIntM$RadioReceiveCoordinator$default$blockTimer(void)
  169. #line 1794
  170. {
  171. }
  172. # 43 "../../tos/platform/mica2/RadioCoordinator.nc"
  173. inline static   void CC1000RadioIntM$RadioReceiveCoordinator$blockTimer(void){
  174. #line 43
  175.   CC1000RadioIntM$RadioReceiveCoordinator$default$blockTimer();
  176. #line 43
  177. }
  178. #line 43
  179. static inline    
  180. # 1786 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  181. void CC1000RadioIntM$RadioSendCoordinator$default$startSymbol(uint8_t bitsPerBlock, uint8_t offset, 
  182. TOS_MsgPtr msgBuff)
  183. #line 1787
  184. {
  185. }
  186. # 31 "../../tos/platform/mica2/RadioCoordinator.nc"
  187. inline static   void CC1000RadioIntM$RadioSendCoordinator$startSymbol(uint8_t arg_0x86d4858, uint8_t arg_0x86d49a0, TOS_MsgPtr arg_0x86d4af0){
  188. #line 31
  189.   CC1000RadioIntM$RadioSendCoordinator$default$startSymbol(arg_0x86d4858, arg_0x86d49a0, arg_0x86d4af0);
  190. #line 31
  191. }
  192. #line 31
  193. static inline 
  194. # 264 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  195. void CC1000RadioIntM$AddTime(GTime *C, GTime *A, GTime *B)
  196. #line 264
  197. {
  198.   if (CC1000RadioIntM$MAX_VAL - B->sticks < A->sticks) {
  199.       C->sticks = A->sticks - (CC1000RadioIntM$MAX_VAL - B->sticks);
  200.       C->mticks = A->mticks + B->mticks + 1;
  201.     }
  202.   else {
  203.       C->sticks = A->sticks + B->sticks;
  204.       C->mticks = A->mticks + B->mticks;
  205.     }
  206. }
  207. static inline    
  208. #line 1788
  209. void CC1000RadioIntM$RadioSendCoordinator$default$byte(TOS_MsgPtr msg, uint8_t byteCount)
  210. #line 1788
  211. {
  212. }
  213. # 36 "../../tos/platform/mica2/RadioCoordinator.nc"
  214. inline static   void CC1000RadioIntM$RadioSendCoordinator$byte(TOS_MsgPtr arg_0x86d4f68, uint8_t arg_0x86d50b8){
  215. #line 36
  216.   CC1000RadioIntM$RadioSendCoordinator$default$byte(arg_0x86d4f68, arg_0x86d50b8);
  217. #line 36
  218. }
  219. #line 36
  220. static inline  
  221. # 210 "/home/testuser/tinyos-1.x/tos/system/AMStandard.nc"
  222. result_t AMStandard$RadioSend$sendDone(TOS_MsgPtr msg, result_t success)
  223. #line 210
  224. {
  225.   return AMStandard$reportSendDone(msg, success);
  226. }
  227. # 67 "/home/testuser/tinyos-1.x/tos/interfaces/BareSendMsg.nc"
  228. inline static  result_t CC1000RadioIntM$Send$sendDone(TOS_MsgPtr arg_0x86bed88, result_t arg_0x86beed8){
  229. #line 67
  230.   unsigned char result;
  231. #line 67
  232. #line 67
  233.   result = AMStandard$RadioSend$sendDone(arg_0x86bed88, arg_0x86beed8);
  234. #line 67
  235. #line 67
  236.   return result;
  237. #line 67
  238. }
  239. #line 67
  240. static inline  
  241. # 506 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  242. void CC1000RadioIntM$PacketSent(void)
  243. #line 506
  244. {
  245.   TOS_MsgPtr pBuf;
  246. #line 508
  247.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  248. #line 508
  249.     {
  250.       CC1000RadioIntM$txbufptr->time = 0;
  251.       pBuf = CC1000RadioIntM$txbufptr;
  252.     }
  253. #line 511
  254.     __nesc_atomic_end(__nesc_atomic); }
  255.   if (CC1000RadioIntM$txbufptr->type != 222 && CC1000RadioIntM$txbufptr->type != 223) {
  256.       CC1000RadioIntM$Send$sendDone((TOS_MsgPtr )pBuf, SUCCESS);
  257.     }
  258.   else {
  259. #line 517
  260.     if (CC1000RadioIntM$txbufptr->type == 223) {
  261.       }
  262.     else {
  263.       if (CC1000RadioIntM$txbufptr->type == 222) {
  264.         }
  265.       }
  266.     }
  267.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  268. #line 527
  269.     CC1000RadioIntM$bTxBusy = FALSE;
  270. #line 527
  271.     __nesc_atomic_end(__nesc_atomic); }
  272.   if (CC1000RadioIntM$pktsLastSync > 100) {
  273.       { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  274. #line 529
  275.         {
  276.           CC1000RadioIntM$ackOrig = CC1000RadioIntM$bAckEnable;
  277.           CC1000RadioIntM$bAckEnable = FALSE;
  278.         }
  279. #line 532
  280.         __nesc_atomic_end(__nesc_atomic); }
  281.       CC1000RadioIntM$Send$send(&CC1000RadioIntM$syncMsgHdr);
  282.       CC1000RadioIntM$pktsLastSync = 0;
  283.     }
  284.   else {
  285. #line 535
  286.     if (CC1000RadioIntM$currentMAC == CC1000RadioIntM$ZMAC && CC1000RadioIntM$ecnforward == TRUE) {
  287.         { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  288. #line 536
  289.           {
  290.             CC1000RadioIntM$ackOrig = CC1000RadioIntM$bAckEnable;
  291.             CC1000RadioIntM$bAckEnable = FALSE;
  292.           }
  293. #line 539
  294.           __nesc_atomic_end(__nesc_atomic); }
  295.         CC1000RadioIntM$Send$send(&CC1000RadioIntM$ecnForwardMsgHdr);
  296.         { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  297. #line 541
  298.           CC1000RadioIntM$ecnforward = FALSE;
  299. #line 541
  300.           __nesc_atomic_end(__nesc_atomic); }
  301.       }
  302.     else {
  303.       if (CC1000RadioIntM$currentMAC == CC1000RadioIntM$ZMAC && CC1000RadioIntM$ecnPending == TRUE) {
  304.           { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  305. #line 546
  306.             {
  307.               CC1000RadioIntM$ackOrig = CC1000RadioIntM$bAckEnable;
  308.               CC1000RadioIntM$bAckEnable = FALSE;
  309.             }
  310. #line 549
  311.             __nesc_atomic_end(__nesc_atomic); }
  312.           CC1000RadioIntM$Send$send(&CC1000RadioIntM$ecnMsgHdr);
  313.           { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  314. #line 551
  315.             CC1000RadioIntM$ecnPending = FALSE;
  316. #line 551
  317.             __nesc_atomic_end(__nesc_atomic); }
  318.           { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  319. #line 552
  320.             CC1000RadioIntM$slots_since_ecnsend = 0;
  321. #line 552
  322.             __nesc_atomic_end(__nesc_atomic); }
  323.         }
  324.       }
  325.     }
  326. }
  327. static inline 
  328. #line 329
  329. bool CC1000RadioIntM$IsHCL(uint32_t gSlot)
  330. #line 329
  331. {
  332.   uint32_t tempHCL = 0x1;
  333.   bool flag;
  334. #line 332
  335.   tempHCL = tempHCL << gSlot;
  336.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  337. #line 333
  338.     {
  339.       if (tempHCL & CC1000RadioIntM$curHCLlist) {
  340.         flag = TRUE;
  341.         }
  342.       else {
  343. #line 337
  344.         flag = FALSE;
  345.         }
  346.     }
  347. #line 339
  348.     __nesc_atomic_end(__nesc_atomic); }
  349. #line 339
  350.   return flag;
  351. }
  352. static inline   
  353. # 63 "/home/testuser/tinyos-1.x/tos/system/NoLeds.nc"
  354. result_t NoLeds$Leds$redToggle(void)
  355. #line 63
  356. {
  357.   return SUCCESS;
  358. }
  359. # 81 "/home/testuser/tinyos-1.x/tos/interfaces/Leds.nc"
  360. inline static   result_t CC1000RadioIntM$Leds$redToggle(void){
  361. #line 81
  362.   unsigned char result;
  363. #line 81
  364. #line 81
  365.   result = NoLeds$Leds$redToggle();
  366. #line 81
  367. #line 81
  368.   return result;
  369. #line 81
  370. }
  371. #line 81
  372. static inline    
  373. # 1791 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  374. void CC1000RadioIntM$RadioReceiveCoordinator$default$startSymbol(uint8_t bitsPerBlock, uint8_t offset, 
  375. TOS_MsgPtr msgBuff)
  376. #line 1792
  377. {
  378. }
  379. # 31 "../../tos/platform/mica2/RadioCoordinator.nc"
  380. inline static   void CC1000RadioIntM$RadioReceiveCoordinator$startSymbol(uint8_t arg_0x86d4858, uint8_t arg_0x86d49a0, TOS_MsgPtr arg_0x86d4af0){
  381. #line 31
  382.   CC1000RadioIntM$RadioReceiveCoordinator$default$startSymbol(arg_0x86d4858, arg_0x86d49a0, arg_0x86d4af0);
  383. #line 31
  384. }
  385. #line 31
  386. static inline    
  387. # 1793 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  388. void CC1000RadioIntM$RadioReceiveCoordinator$default$byte(TOS_MsgPtr msg, uint8_t byteCount)
  389. #line 1793
  390. {
  391. }
  392. # 36 "../../tos/platform/mica2/RadioCoordinator.nc"
  393. inline static   void CC1000RadioIntM$RadioReceiveCoordinator$byte(TOS_MsgPtr arg_0x86d4f68, uint8_t arg_0x86d50b8){
  394. #line 36
  395.   CC1000RadioIntM$RadioReceiveCoordinator$default$byte(arg_0x86d4f68, arg_0x86d50b8);
  396. #line 36
  397. }
  398. #line 36
  399. static inline 
  400. # 253 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  401. void CC1000RadioIntM$DivTime2(GTime *B, GTime *A)
  402. #line 253
  403. {
  404.   if (A->mticks % 2 == 1) {
  405.       B->mticks = A->mticks >> 1;
  406.       B->sticks = (A->sticks >> 1) + (CC1000RadioIntM$MAX_VAL >> 1);
  407.     }
  408.   else {
  409.       B->mticks = A->mticks >> 1;
  410.       B->sticks = A->sticks >> 1;
  411.     }
  412. }
  413. static inline 
  414. #line 306
  415. uint8_t CC1000RadioIntM$ModSubTime(GTime *C, GTime *A, GTime *B)
  416. #line 306
  417. {
  418.   uint8_t retval;
  419. #line 308
  420.   if (A->mticks > B->mticks) {
  421.     retval = CC1000RadioIntM$POSITIVE;
  422.     }
  423.   else {
  424. #line 310
  425.     if (A->mticks < B->mticks) {
  426.       retval = CC1000RadioIntM$NEGATIVE;
  427.       }
  428.     else 
  429. #line 312
  430.       {
  431.         if (A->sticks > B->sticks) {
  432.           retval = CC1000RadioIntM$POSITIVE;
  433.           }
  434.         else {
  435. #line 315
  436.           if (A->sticks < B->sticks) {
  437.             retval = CC1000RadioIntM$NEGATIVE;
  438.             }
  439.           else {
  440. #line 318
  441.             retval = CC1000RadioIntM$ZERO;
  442.             }
  443.           }
  444.       }
  445.     }
  446. #line 320
  447.   if (retval == CC1000RadioIntM$POSITIVE) {
  448. #line 320
  449.     CC1000RadioIntM$SubTime(C, A, B);
  450.     }
  451.   else {
  452. #line 321
  453.     if (retval == CC1000RadioIntM$NEGATIVE) {
  454. #line 321
  455.       CC1000RadioIntM$SubTime(C, B, A);
  456.       }
  457.     else 
  458. #line 322
  459.       {
  460.         C->sticks = 0;
  461.         C->mticks = 0;
  462.       }
  463.     }
  464. #line 326
  465.   return retval;
  466. }
  467. # 63 "../../tos/interfaces/SClock.nc"
  468. inline static   void CC1000RadioIntM$SClock$getTime(GTime *arg_0x8584228){
  469. #line 63
  470.   HPLSClock$SClock$getTime(arg_0x8584228);
  471. #line 63
  472. }
  473. #line 63
  474. static inline 
  475. # 387 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  476. void CC1000RadioIntM$getTimeDiff(void)
  477. #line 387
  478. {
  479.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  480. #line 388
  481.     {
  482.       uint16_t i;
  483. #line 389
  484.       uint16_t trust;
  485.       GTime loctime;
  486. #line 390
  487.       GTime timeStamp;
  488.       syncMsgType *syncMsgPtr = (syncMsgType *)CC1000RadioIntM$rxbufptr->data;
  489. #line 392
  490.       timeStamp.mticks = syncMsgPtr->mticks;
  491.       timeStamp.sticks = syncMsgPtr->sticks;
  492.       trust = syncMsgPtr->trust;
  493.       CC1000RadioIntM$currentSender = syncMsgPtr->sender;
  494.       CC1000RadioIntM$SClock$getTime(&loctime);
  495.       CC1000RadioIntM$currentSign = CC1000RadioIntM$ModSubTime(&CC1000RadioIntM$currentDiff, &timeStamp, &loctime);
  496.       if (trust < 1) {
  497.         trust = 1;
  498.         }
  499. #line 401
  500.       if (trust < 8) {
  501.           for (i = 0; i < trust; i++) {
  502.               CC1000RadioIntM$DivTime2(&CC1000RadioIntM$currentDiff, &CC1000RadioIntM$currentDiff);
  503.             }
  504.         }
  505.     }
  506. #line 406
  507.     __nesc_atomic_end(__nesc_atomic); }
  508. }
  509. static inline   
  510. # 107 "../../tos/platform/mica2/HPLSClock.nc"
  511. void HPLSClock$SClock$setTime(uint8_t PosOrNeg, GTime *t)
  512. #line 107
  513. {
  514.   HPLSClock$sign = PosOrNeg;
  515.   HPLSClock$Update.mticks = t->mticks;
  516.   HPLSClock$Update.sticks = t->sticks;
  517.   HPLSClock$needupdate = 1;
  518. }
  519. # 69 "../../tos/interfaces/SClock.nc"
  520. inline static   void CC1000RadioIntM$SClock$setTime(uint8_t arg_0x8584670, GTime *arg_0x85847d0){
  521. #line 69
  522.   HPLSClock$SClock$setTime(arg_0x8584670, arg_0x85847d0);
  523. #line 69
  524. }
  525. #line 69
  526. static inline  
  527. # 424 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  528. void CC1000RadioIntM$adjustTime(void)
  529. #line 424
  530. {
  531.   CC1000RadioIntM$needTimeSync = TRUE;
  532.   CC1000RadioIntM$SClock$setTime(CC1000RadioIntM$currentSign, &CC1000RadioIntM$currentDiff);
  533. }
  534. static inline  
  535. # 252 "/home/testuser/tinyos-1.x/tos/system/AMStandard.nc"
  536. TOS_MsgPtr AMStandard$RadioReceive$receive(TOS_MsgPtr packet)
  537. #line 252
  538. {
  539.   return received(packet);
  540. }
  541. # 75 "/home/testuser/tinyos-1.x/tos/interfaces/ReceiveMsg.nc"
  542. inline static  TOS_MsgPtr CC1000RadioIntM$Receive$receive(TOS_MsgPtr arg_0x856c0f0){
  543. #line 75
  544.   struct TOS_Msg *result;
  545. #line 75
  546. #line 75
  547.   result = AMStandard$RadioReceive$receive(arg_0x856c0f0);
  548. #line 75
  549. #line 75
  550.   return result;
  551. #line 75
  552. }
  553. #line 75
  554. static inline   
  555. # 1601 "../../tos/system/DrandM.nc"
  556. result_t DrandM$SClock$syncDone(void)
  557. #line 1601
  558. {
  559. #line 1601
  560.   return SUCCESS;
  561. }
  562. static inline   
  563. # 1806 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  564. result_t CC1000RadioIntM$SClock$syncDone(void)
  565. #line 1806
  566. {
  567.   if (CC1000RadioIntM$needTimeSync) {
  568.       GTime loctime;
  569.       uint32_t globalTimeStamp;
  570. #line 1809
  571.       uint32_t slotOffset;
  572. #line 1810
  573.       CC1000RadioIntM$SClock$getTime(&loctime);
  574.       globalTimeStamp = (uint32_t )(loctime.mticks * 568.889 + loctime.sticks * 0.00868056);
  575.       slotOffset = (uint32_t )(1.024 * (CC1000RadioIntM$slotSize - globalTimeStamp % CC1000RadioIntM$slotSize));
  576.       CC1000RadioIntM$slotNum = (uint32_t )(globalTimeStamp / CC1000RadioIntM$slotSize);
  577.       CC1000RadioIntM$currentSlot = CC1000RadioIntM$slotNum & (CC1000RadioIntM$localFrameLength - 1);
  578.       CC1000RadioIntM$globalSlot = CC1000RadioIntM$slotNum & (CC1000RadioIntM$globalFrameLength - 1);
  579.       if (CC1000RadioIntM$currentMAC == CC1000RadioIntM$ZMAC) {
  580.         CC1000RadioIntM$TDMATimer$start(TIMER_ONE_SHOT, slotOffset);
  581.         }
  582. #line 1819
  583.       CC1000RadioIntM$needTimeSync = FALSE;
  584.     }
  585.   return SUCCESS;
  586. }
  587. # 94 "../../tos/interfaces/SClock.nc"
  588. inline static   result_t HPLSClock$SClock$syncDone(void){
  589. #line 94
  590.   unsigned char result;
  591. #line 94
  592. #line 94
  593.   result = CC1000RadioIntM$SClock$syncDone();
  594. #line 94
  595.   result = rcombine(result, DrandM$SClock$syncDone());
  596. #line 94
  597. #line 94
  598.   return result;
  599. #line 94
  600. }
  601. #line 94
  602. # 66 "/home/testuser/tinyos-1.x/tos/interfaces/ByteComm.nc"
  603. inline static   result_t UARTM$ByteComm$rxByteReady(uint8_t arg_0x8978308, bool arg_0x8978450, uint16_t arg_0x89785a8){
  604. #line 66
  605.   unsigned char result;
  606. #line 66
  607. #line 66
  608.   result = FramerM$ByteComm$rxByteReady(arg_0x8978308, arg_0x8978450, arg_0x89785a8);
  609. #line 66
  610. #line 66
  611.   return result;
  612. #line 66
  613. }
  614. #line 66
  615. static inline   
  616. # 77 "/home/testuser/tinyos-1.x/tos/system/UARTM.nc"
  617. result_t UARTM$HPLUART$get(uint8_t data)
  618. #line 77
  619. {
  620.   UARTM$ByteComm$rxByteReady(data, FALSE, 0);
  621.   {
  622.   }
  623. #line 83
  624.   ;
  625.   return SUCCESS;
  626. }
  627. # 88 "/home/testuser/tinyos-1.x/tos/interfaces/HPLUART.nc"
  628. inline static   result_t HPLUART0M$UART$get(uint8_t arg_0x89be800){
  629. #line 88
  630.   unsigned char result;
  631. #line 88
  632. #line 88
  633.   result = UARTM$HPLUART$get(arg_0x89be800);
  634. #line 88
  635. #line 88
  636.   return result;
  637. #line 88
  638. }
  639. #line 88
  640. # 90 "../../tos/platform/mica2/HPLUART0M.nc"
  641. void __attribute((signal))   __vector_18(void)
  642. #line 90
  643. {
  644.   if (* (volatile uint8_t *)(0x0B + 0x20) & (1 << 7)) {
  645.     HPLUART0M$UART$get(* (volatile uint8_t *)(0x0C + 0x20));
  646.     }
  647. }
  648. static inline  
  649. # 202 "/home/testuser/tinyos-1.x/tos/system/FramerM.nc"
  650. void FramerM$PacketUnknown(void)
  651. #line 202
  652. {
  653.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  654. #line 203
  655.     {
  656.       FramerM$gFlags |= FramerM$FLAGS_UNKNOWN;
  657.     }
  658. #line 205
  659.     __nesc_atomic_end(__nesc_atomic); }
  660.   FramerM$StartTx();
  661. }
  662. static inline  
  663. # 246 "/home/testuser/tinyos-1.x/tos/system/AMStandard.nc"
  664. TOS_MsgPtr AMStandard$UARTReceive$receive(TOS_MsgPtr packet)
  665. #line 246
  666. {
  667.   packet->group = TOS_AM_GROUP;
  668.   return received(packet);
  669. }
  670. # 75 "/home/testuser/tinyos-1.x/tos/interfaces/ReceiveMsg.nc"
  671. inline static  TOS_MsgPtr FramerAckM$ReceiveCombined$receive(TOS_MsgPtr arg_0x856c0f0){
  672. #line 75
  673.   struct TOS_Msg *result;
  674. #line 75
  675. #line 75
  676.   result = AMStandard$UARTReceive$receive(arg_0x856c0f0);
  677. #line 75
  678. #line 75
  679.   return result;
  680. #line 75
  681. }
  682. #line 75
  683. static inline  
  684. # 91 "/home/testuser/tinyos-1.x/tos/system/FramerAckM.nc"
  685. TOS_MsgPtr FramerAckM$ReceiveMsg$receive(TOS_MsgPtr Msg)
  686. #line 91
  687. {
  688.   TOS_MsgPtr pBuf;
  689.   pBuf = FramerAckM$ReceiveCombined$receive(Msg);
  690.   return pBuf;
  691. }
  692. # 75 "/home/testuser/tinyos-1.x/tos/interfaces/ReceiveMsg.nc"
  693. inline static  TOS_MsgPtr FramerM$ReceiveMsg$receive(TOS_MsgPtr arg_0x856c0f0){
  694. #line 75
  695.   struct TOS_Msg *result;
  696. #line 75
  697. #line 75
  698.   result = FramerAckM$ReceiveMsg$receive(arg_0x856c0f0);
  699. #line 75
  700. #line 75
  701.   return result;
  702. #line 75
  703. }
  704. #line 75
  705. static inline  
  706. # 328 "/home/testuser/tinyos-1.x/tos/system/FramerM.nc"
  707. result_t FramerM$TokenReceiveMsg$ReflectToken(uint8_t Token)
  708. #line 328
  709. {
  710.   result_t Result = SUCCESS;
  711.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  712. #line 331
  713.     {
  714.       if (!(FramerM$gFlags & FramerM$FLAGS_TOKENPEND)) {
  715.           FramerM$gFlags |= FramerM$FLAGS_TOKENPEND;
  716.           FramerM$gTxTokenBuf = Token;
  717.         }
  718.       else {
  719.           Result = FAIL;
  720.         }
  721.     }
  722. #line 339
  723.     __nesc_atomic_end(__nesc_atomic); }
  724.   if (Result == SUCCESS) {
  725.       Result = FramerM$StartTx();
  726.     }
  727.   return Result;
  728. }
  729. # 88 "/home/testuser/tinyos-1.x/tos/interfaces/TokenReceiveMsg.nc"
  730. inline static  result_t FramerAckM$TokenReceiveMsg$ReflectToken(uint8_t arg_0x897a0e8){
  731. #line 88
  732.   unsigned char result;
  733. #line 88
  734. #line 88
  735.   result = FramerM$TokenReceiveMsg$ReflectToken(arg_0x897a0e8);
  736. #line 88
  737. #line 88
  738.   return result;
  739. #line 88
  740. }
  741. #line 88
  742. static inline  
  743. # 74 "/home/testuser/tinyos-1.x/tos/system/FramerAckM.nc"
  744. void FramerAckM$SendAckTask(void)
  745. #line 74
  746. {
  747.   FramerAckM$TokenReceiveMsg$ReflectToken(FramerAckM$gTokenBuf);
  748. }
  749. static inline  TOS_MsgPtr FramerAckM$TokenReceiveMsg$receive(TOS_MsgPtr Msg, uint8_t token)
  750. #line 79
  751. {
  752.   TOS_MsgPtr pBuf;
  753.   FramerAckM$gTokenBuf = token;
  754.   TOS_post(FramerAckM$SendAckTask);
  755.   pBuf = FramerAckM$ReceiveCombined$receive(Msg);
  756.   return pBuf;
  757. }
  758. # 75 "/home/testuser/tinyos-1.x/tos/interfaces/TokenReceiveMsg.nc"
  759. inline static  TOS_MsgPtr FramerM$TokenReceiveMsg$receive(TOS_MsgPtr arg_0x897f970, uint8_t arg_0x897fab8){
  760. #line 75
  761.   struct TOS_Msg *result;
  762. #line 75
  763. #line 75
  764.   result = FramerAckM$TokenReceiveMsg$receive(arg_0x897f970, arg_0x897fab8);
  765. #line 75
  766. #line 75
  767.   return result;
  768. #line 75
  769. }
  770. #line 75
  771. static inline  
  772. # 210 "/home/testuser/tinyos-1.x/tos/system/FramerM.nc"
  773. void FramerM$PacketRcvd(void)
  774. #line 210
  775. {
  776.   FramerM$MsgRcvEntry_t *pRcv = &FramerM$gMsgRcvTbl[FramerM$gRxTailIndex];
  777.   TOS_MsgPtr pBuf = pRcv->pMsg;
  778.   if (pRcv->Length >= (size_t )& ((TOS_Msg *)0)->data) {
  779.       switch (pRcv->Proto) {
  780.           case FramerM$PROTO_ACK: 
  781.             break;
  782.           case FramerM$PROTO_PACKET_ACK: 
  783.             pBuf->crc = 1;
  784.           pBuf = FramerM$TokenReceiveMsg$receive(pBuf, pRcv->Token);
  785.           break;
  786.           case FramerM$PROTO_PACKET_NOACK: 
  787.             pBuf->crc = 1;
  788.           pBuf = FramerM$ReceiveMsg$receive(pBuf);
  789.           break;
  790.           default: 
  791.             FramerM$gTxUnknownBuf = pRcv->Proto;
  792.           TOS_post(FramerM$PacketUnknown);
  793.           break;
  794.         }
  795.     }
  796.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  797. #line 235
  798.     {
  799.       if (pBuf) {
  800.           pRcv->pMsg = pBuf;
  801.         }
  802.       pRcv->Length = 0;
  803.       pRcv->Token = 0;
  804.       FramerM$gRxTailIndex++;
  805.       FramerM$gRxTailIndex %= FramerM$HDLC_QUEUESIZE;
  806.     }
  807. #line 243
  808.     __nesc_atomic_end(__nesc_atomic); }
  809. }
  810. # 96 "/home/testuser/tinyos-1.x/tos/interfaces/HPLUART.nc"
  811. inline static   result_t HPLUART0M$UART$putDone(void){
  812. #line 96
  813.   unsigned char result;
  814. #line 96
  815. #line 96
  816.   result = UARTM$HPLUART$putDone();
  817. #line 96
  818. #line 96
  819.   return result;
  820. #line 96
  821. }
  822. #line 96
  823. # 100 "../../tos/platform/mica2/HPLUART0M.nc"
  824. void __attribute((interrupt))   __vector_20(void)
  825. #line 100
  826. {
  827.   HPLUART0M$UART$putDone();
  828. }
  829. static inline   
  830. # 552 "/home/testuser/tinyos-1.x/tos/system/FramerM.nc"
  831. result_t FramerM$ByteComm$txDone(void)
  832. #line 552
  833. {
  834.   if (FramerM$gTxState == FramerM$TXSTATE_FINISH) {
  835.       FramerM$gTxState = FramerM$TXSTATE_IDLE;
  836.       TOS_post(FramerM$PacketSent);
  837.     }
  838.   return SUCCESS;
  839. }
  840. # 83 "/home/testuser/tinyos-1.x/tos/interfaces/ByteComm.nc"
  841. inline static   result_t UARTM$ByteComm$txDone(void){
  842. #line 83
  843.   unsigned char result;
  844. #line 83
  845. #line 83
  846.   result = FramerM$ByteComm$txDone();
  847. #line 83
  848. #line 83
  849.   return result;
  850. #line 83
  851. }
  852. #line 83
  853. #line 55
  854. inline static   result_t FramerM$ByteComm$txByte(uint8_t arg_0x897bdd8){
  855. #line 55
  856.   unsigned char result;
  857. #line 55
  858. #line 55
  859.   result = UARTM$ByteComm$txByte(arg_0x897bdd8);
  860. #line 55
  861. #line 55
  862.   return result;
  863. #line 55
  864. }
  865. #line 55
  866. static inline 
  867. # 66 "/home/testuser/tinyos-1.x/tos/platform/avrmote/crc.h"
  868. uint16_t crcByte(uint16_t oldCrc, uint8_t byte)
  869. {
  870.   uint16_t *table = crcTable;
  871.   uint16_t newCrc;
  872.    __asm ("eor %1,%B3n"
  873.   "tlsl %1n"
  874.   "tadc %B2, __zero_reg__n"
  875.   "tadd %A2, %1n"
  876.   "tadc %B2, __zero_reg__n"
  877.   "tlpmn"
  878.   "tmov %B0, %A3n"
  879.   "tmov %A0, r0n"
  880.   "tadiw r30,1n"
  881.   "tlpmn"
  882.   "teor %B0, r0" : 
  883.   "=r"(newCrc), "+r"(byte), "+z"(table) : "r"(oldCrc));
  884.   return newCrc;
  885. }
  886. static inline   
  887. # 482 "/home/testuser/tinyos-1.x/tos/system/FramerM.nc"
  888. result_t FramerM$ByteComm$txByteReady(bool LastByteSuccess)
  889. #line 482
  890. {
  891.   result_t TxResult = SUCCESS;
  892.   uint8_t nextByte;
  893.   if (LastByteSuccess != TRUE) {
  894.       { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  895. #line 487
  896.         FramerM$gTxState = FramerM$TXSTATE_ERROR;
  897. #line 487
  898.         __nesc_atomic_end(__nesc_atomic); }
  899.       TOS_post(FramerM$PacketSent);
  900.       return SUCCESS;
  901.     }
  902.   switch (FramerM$gTxState) {
  903.       case FramerM$TXSTATE_PROTO: 
  904.         FramerM$gTxState = FramerM$TXSTATE_INFO;
  905.       FramerM$gTxRunningCRC = crcByte(FramerM$gTxRunningCRC, (uint8_t )(FramerM$gTxProto & 0x0FF));
  906.       TxResult = FramerM$ByteComm$txByte((uint8_t )(FramerM$gTxProto & 0x0FF));
  907.       break;
  908.       case FramerM$TXSTATE_INFO: 
  909.         nextByte = FramerM$gpTxBuf[FramerM$gTxByteCnt];
  910.       FramerM$gTxRunningCRC = crcByte(FramerM$gTxRunningCRC, nextByte);
  911.       FramerM$gTxByteCnt++;
  912.       if (FramerM$gTxByteCnt >= FramerM$gTxLength) {
  913.           FramerM$gTxState = FramerM$TXSTATE_FCS1;
  914.         }
  915.       TxResult = FramerM$TxArbitraryByte(nextByte);
  916.       break;
  917.       case FramerM$TXSTATE_ESC: 
  918.         TxResult = FramerM$ByteComm$txByte(FramerM$gTxEscByte ^ 0x20);
  919.       FramerM$gTxState = FramerM$gPrevTxState;
  920.       break;
  921.       case FramerM$TXSTATE_FCS1: 
  922.         nextByte = (uint8_t )(FramerM$gTxRunningCRC & 0xff);
  923.       FramerM$gTxState = FramerM$TXSTATE_FCS2;
  924.       TxResult = FramerM$TxArbitraryByte(nextByte);
  925.       break;
  926.       case FramerM$TXSTATE_FCS2: 
  927.         nextByte = (uint8_t )((FramerM$gTxRunningCRC >> 8) & 0xff);
  928.       FramerM$gTxState = FramerM$TXSTATE_ENDFLAG;
  929.       TxResult = FramerM$TxArbitraryByte(nextByte);
  930.       break;
  931.       case FramerM$TXSTATE_ENDFLAG: 
  932.         FramerM$gTxState = FramerM$TXSTATE_FINISH;
  933.       TxResult = FramerM$ByteComm$txByte(FramerM$HDLC_FLAG_BYTE);
  934.       break;
  935.       case FramerM$TXSTATE_FINISH: 
  936.         case FramerM$TXSTATE_ERROR: 
  937.           default: 
  938.             break;
  939.     }
  940.   if (TxResult != SUCCESS) {
  941.       FramerM$gTxState = FramerM$TXSTATE_ERROR;
  942.       TOS_post(FramerM$PacketSent);
  943.     }
  944.   return SUCCESS;
  945. }
  946. # 75 "/home/testuser/tinyos-1.x/tos/interfaces/ByteComm.nc"
  947. inline static   result_t UARTM$ByteComm$txByteReady(bool arg_0x8978ad8){
  948. #line 75
  949.   unsigned char result;
  950. #line 75
  951. #line 75
  952.   result = FramerM$ByteComm$txByteReady(arg_0x8978ad8);
  953. #line 75
  954. #line 75
  955.   return result;
  956. #line 75
  957. }
  958. #line 75
  959. # 102 "/home/testuser/tinyos-1.x/tos/system/sched.c"
  960. bool  TOS_post(void (*tp)(void))
  961. #line 102
  962. {
  963.   __nesc_atomic_t fInterruptFlags;
  964.   uint8_t tmp;
  965.   fInterruptFlags = __nesc_atomic_start();
  966.   tmp = TOSH_sched_free;
  967.   if (TOSH_queue[tmp].tp == (void *)0) {
  968.       TOSH_sched_free = (tmp + 1) & TOSH_TASK_BITMASK;
  969.       TOSH_queue[tmp].tp = tp;
  970.       __nesc_atomic_end(fInterruptFlags);
  971.       return TRUE;
  972.     }
  973.   else {
  974.       __nesc_atomic_end(fInterruptFlags);
  975.       return FALSE;
  976.     }
  977. }
  978. # 54 "/home/testuser/tinyos-1.x/tos/system/RealMain.nc"
  979. int   main(void)
  980. #line 54
  981. {
  982.   RealMain$hardwareInit();
  983.   RealMain$Pot$init(10);
  984.   TOSH_sched_init();
  985.   RealMain$StdControl$init();
  986.   RealMain$StdControl$start();
  987.   __nesc_enable_interrupt();
  988.   while (1) {
  989.       TOSH_run_task();
  990.     }
  991. }
  992. static  
  993. # 77 "/home/testuser/tinyos-1.x/tos/system/TimerM.nc"
  994. result_t TimerM$StdControl$init(void)
  995. #line 77
  996. {
  997.   TimerM$mState = 0;
  998.   TimerM$setIntervalFlag = 0;
  999.   TimerM$queue_head = TimerM$queue_tail = -1;
  1000.   TimerM$queue_size = 0;
  1001.   TimerM$mScale = 3;
  1002.   TimerM$mInterval = TimerM$maxTimerInterval;
  1003.   return TimerM$Clock$setRate(TimerM$mInterval, TimerM$mScale);
  1004. }
  1005. static 
  1006. # 268 "/home/testuser/tinyos-1.x/tos/system/FramerM.nc"
  1007. void FramerM$HDLCInitialize(void)
  1008. #line 268
  1009. {
  1010.   int i;
  1011. #line 270
  1012.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1013. #line 270
  1014.     {
  1015.       for (i = 0; i < FramerM$HDLC_QUEUESIZE; i++) {
  1016.           FramerM$gMsgRcvTbl[i].pMsg = &FramerM$gMsgRcvBuf[i];
  1017.           FramerM$gMsgRcvTbl[i].Length = 0;
  1018.           FramerM$gMsgRcvTbl[i].Token = 0;
  1019.         }
  1020.       FramerM$gTxState = FramerM$TXSTATE_IDLE;
  1021.       FramerM$gTxByteCnt = 0;
  1022.       FramerM$gTxLength = 0;
  1023.       FramerM$gTxRunningCRC = 0;
  1024.       FramerM$gpTxMsg = (void *)0;
  1025.       FramerM$gRxState = FramerM$RXSTATE_NOSYNC;
  1026.       FramerM$gRxHeadIndex = 0;
  1027.       FramerM$gRxTailIndex = 0;
  1028.       FramerM$gRxByteCnt = 0;
  1029.       FramerM$gRxRunningCRC = 0;
  1030.       FramerM$gpRxBuf = (uint8_t *)FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].pMsg;
  1031.     }
  1032. #line 288
  1033.     __nesc_atomic_end(__nesc_atomic); }
  1034. }
  1035. static   
  1036. # 75 "../../tos/platform/mica2/HPLCC1000M.nc"
  1037. result_t HPLCC1000M$HPLCC1000$write(uint8_t addr, uint8_t data)
  1038. #line 75
  1039. {
  1040.   char cnt = 0;
  1041.   addr <<= 1;
  1042.   TOSH_CLR_CC_PALE_PIN();
  1043.   for (cnt = 0; cnt < 7; cnt++) 
  1044.     {
  1045.       if (addr & 0x80) {
  1046.         TOSH_SET_CC_PDATA_PIN();
  1047.         }
  1048.       else {
  1049. #line 86
  1050.         TOSH_CLR_CC_PDATA_PIN();
  1051.         }
  1052. #line 87
  1053.       TOSH_CLR_CC_PCLK_PIN();
  1054.       TOSH_SET_CC_PCLK_PIN();
  1055.       addr <<= 1;
  1056.     }
  1057.   TOSH_SET_CC_PDATA_PIN();
  1058.   TOSH_CLR_CC_PCLK_PIN();
  1059.   TOSH_SET_CC_PCLK_PIN();
  1060.   TOSH_SET_CC_PALE_PIN();
  1061.   for (cnt = 0; cnt < 8; cnt++) 
  1062.     {
  1063.       if (data & 0x80) {
  1064.         TOSH_SET_CC_PDATA_PIN();
  1065.         }
  1066.       else {
  1067. #line 103
  1068.         TOSH_CLR_CC_PDATA_PIN();
  1069.         }
  1070. #line 104
  1071.       TOSH_CLR_CC_PCLK_PIN();
  1072.       TOSH_SET_CC_PCLK_PIN();
  1073.       data <<= 1;
  1074.     }
  1075.   TOSH_SET_CC_PALE_PIN();
  1076.   TOSH_SET_CC_PDATA_PIN();
  1077.   TOSH_SET_CC_PCLK_PIN();
  1078.   return SUCCESS;
  1079. }
  1080. static   
  1081. #line 128
  1082. uint8_t HPLCC1000M$HPLCC1000$read(uint8_t addr)
  1083. #line 128
  1084. {
  1085.   int cnt;
  1086.   uint8_t din;
  1087.   uint8_t data = 0;
  1088.   addr <<= 1;
  1089.   TOSH_CLR_CC_PALE_PIN();
  1090.   for (cnt = 0; cnt < 7; cnt++) 
  1091.     {
  1092.       if (addr & 0x80) {
  1093.         TOSH_SET_CC_PDATA_PIN();
  1094.         }
  1095.       else {
  1096. #line 141
  1097.         TOSH_CLR_CC_PDATA_PIN();
  1098.         }
  1099. #line 142
  1100.       TOSH_CLR_CC_PCLK_PIN();
  1101.       TOSH_SET_CC_PCLK_PIN();
  1102.       addr <<= 1;
  1103.     }
  1104.   TOSH_CLR_CC_PDATA_PIN();
  1105.   TOSH_CLR_CC_PCLK_PIN();
  1106.   TOSH_SET_CC_PCLK_PIN();
  1107.   TOSH_MAKE_CC_PDATA_INPUT();
  1108.   TOSH_SET_CC_PALE_PIN();
  1109.   for (cnt = 7; cnt >= 0; cnt--) 
  1110.     {
  1111.       TOSH_CLR_CC_PCLK_PIN();
  1112.       din = TOSH_READ_CC_PDATA_PIN();
  1113.       if (din) {
  1114.         data = (data << 1) | 0x01;
  1115.         }
  1116.       else {
  1117. #line 161
  1118.         data = (data << 1) & 0xfe;
  1119.         }
  1120. #line 162
  1121.       TOSH_SET_CC_PCLK_PIN();
  1122.     }
  1123.   TOSH_SET_CC_PALE_PIN();
  1124.   TOSH_MAKE_CC_PDATA_OUTPUT();
  1125.   TOSH_SET_CC_PDATA_PIN();
  1126.   return data;
  1127. }
  1128. static 
  1129. # 63 "../../tos/platform/mica2/HPLADCM.nc"
  1130. void HPLADCM$init_portmap(void)
  1131. #line 63
  1132. {
  1133.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1134. #line 65
  1135.     {
  1136.       if (HPLADCM$init_portmap_done == FALSE) {
  1137.           int i;
  1138. #line 68
  1139.           for (i = 0; i < TOSH_ADC_PORTMAPSIZE; i++) 
  1140.             HPLADCM$TOSH_adc_portmap[i] = i;
  1141.           HPLADCM$TOSH_adc_portmap[TOS_ADC_BANDGAP_PORT] = TOSH_ACTUAL_BANDGAP_PORT;
  1142.           HPLADCM$TOSH_adc_portmap[TOS_ADC_GND_PORT] = TOSH_ACTUAL_GND_PORT;
  1143.           HPLADCM$init_portmap_done = TRUE;
  1144.         }
  1145.     }
  1146. #line 76
  1147.     __nesc_atomic_end(__nesc_atomic); }
  1148. }
  1149. static   
  1150. # 95 "../../tos/platform/mica2/HPLSClock.nc"
  1151. void HPLSClock$SClock$getTime(GTime *t)
  1152. #line 95
  1153. {
  1154.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1155. #line 96
  1156.     {
  1157.       t->sticks = * (volatile uint16_t *)0x88;
  1158.       if (* (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)0x7C & (1 << 4)) {
  1159.           HPLSClock$MTicks++;
  1160.           * (volatile uint8_t *)0x7C |= 1 << 4;
  1161.           HPLSClock$SClock$fire(HPLSClock$MTicks);
  1162.         }
  1163.       t->mticks = HPLSClock$MTicks;
  1164.     }
  1165. #line 104
  1166.     __nesc_atomic_end(__nesc_atomic); }
  1167. }
  1168. static   
  1169. # 435 "../../tos/platform/mica2/CC1000ControlM.nc"
  1170. result_t CC1000ControlM$CC1000Control$RxMode(void)
  1171. #line 435
  1172. {
  1173.   CC1000ControlM$HPLChipcon$write(0x09, CC1000ControlM$gCurrentParameters[0x09]);
  1174.   CC1000ControlM$HPLChipcon$write(0x0B, 0x00);
  1175.   CC1000ControlM$HPLChipcon$write(0x00, (
  1176.   1 << 4) | (1 << 0));
  1177.   TOSH_uwait(125);
  1178.   return SUCCESS;
  1179. }
  1180. static  
  1181. # 98 "/home/testuser/tinyos-1.x/tos/system/TimerM.nc"
  1182. result_t TimerM$Timer$start(uint8_t id, char type, 
  1183. uint32_t interval)
  1184. #line 99
  1185. {
  1186.   uint8_t diff;
  1187. #line 101
  1188.   if (id >= NUM_TIMERS) {
  1189. #line 101
  1190.     return FAIL;
  1191.     }
  1192. #line 102
  1193.   if (type > TIMER_ONE_SHOT) {
  1194. #line 102
  1195.     return FAIL;
  1196.     }
  1197.   if (type == TIMER_REPEAT && interval <= 2) {
  1198. #line 109
  1199.     return FAIL;
  1200.     }
  1201.   TimerM$mTimerList[id].ticks = interval;
  1202.   TimerM$mTimerList[id].type = type;
  1203.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1204. #line 114
  1205.     {
  1206.       diff = TimerM$Clock$readCounter();
  1207.       interval += diff;
  1208.       TimerM$mTimerList[id].ticksLeft = interval;
  1209.       TimerM$mState |= 0x1L << id;
  1210.       if (interval < TimerM$mInterval) {
  1211.           TimerM$mInterval = interval;
  1212.           TimerM$Clock$setInterval(TimerM$mInterval);
  1213.           TimerM$setIntervalFlag = 0;
  1214.           TimerM$PowerManagement$adjustPower();
  1215.         }
  1216.     }
  1217. #line 125
  1218.     __nesc_atomic_end(__nesc_atomic); }
  1219.   return SUCCESS;
  1220. }
  1221. static   
  1222. # 102 "../../tos/platform/mica2/HPLPowerManagementM.nc"
  1223. uint8_t HPLPowerManagementM$PowerManagement$adjustPower(void)
  1224. #line 102
  1225. {
  1226.   uint8_t mcu;
  1227. #line 104
  1228.   if (HPLPowerManagementM$disableCount <= 0) {
  1229.     TOS_post(HPLPowerManagementM$doAdjustment);
  1230.     }
  1231.   else 
  1232. #line 106
  1233.     {
  1234.       mcu = * (volatile uint8_t *)(0x35 + 0x20);
  1235.       mcu &= 0xe3;
  1236.       mcu |= HPLPowerManagementM$IDLE;
  1237.       * (volatile uint8_t *)(0x35 + 0x20) = mcu;
  1238.       * (volatile uint8_t *)(0x35 + 0x20) |= 1 << 5;
  1239.     }
  1240.   return 0;
  1241. }
  1242. static 
  1243. # 501 "../../tos/system/DrandM.nc"
  1244. uint16_t DrandM$randNew(void)
  1245. #line 501
  1246. {
  1247.   bool endbit;
  1248.   uint16_t tmpShiftReg;
  1249. #line 504
  1250.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1251. #line 504
  1252.     {
  1253.       tmpShiftReg = DrandM$shiftReg;
  1254.       endbit = (tmpShiftReg & 0x8000) != 0;
  1255.       tmpShiftReg <<= 1;
  1256.       if (endbit) {
  1257.         tmpShiftReg ^= 0x100b;
  1258.         }
  1259. #line 510
  1260.       tmpShiftReg++;
  1261.       DrandM$shiftReg = tmpShiftReg;
  1262.       tmpShiftReg = tmpShiftReg ^ DrandM$mask;
  1263.     }
  1264. #line 513
  1265.     __nesc_atomic_end(__nesc_atomic); }
  1266.   return tmpShiftReg;
  1267. }
  1268. # 215 "/home/testuser/tinyos-1.x/tos/system/AMStandard.nc"
  1269. TOS_MsgPtr   received(TOS_MsgPtr packet)
  1270. #line 215
  1271. {
  1272.   uint16_t addr = TOS_LOCAL_ADDRESS;
  1273. #line 217
  1274.   AMStandard$counter++;
  1275.   {
  1276.   }
  1277. #line 218
  1278.   ;
  1279.   if (
  1280. #line 220
  1281.   packet->crc == 1 && 
  1282.   packet->group == TOS_AM_GROUP && (
  1283.   packet->addr == TOS_BCAST_ADDR || 
  1284.   packet->addr == addr)) 
  1285.     {
  1286.       uint8_t type = packet->type;
  1287.       TOS_MsgPtr tmp;
  1288.       {
  1289.       }
  1290. #line 229
  1291.       ;
  1292.       AMStandard$dbgPacket(packet);
  1293.       {
  1294.       }
  1295. #line 231
  1296.       ;
  1297.       tmp = AMStandard$ReceiveMsg$receive(type, packet);
  1298.       if (tmp) {
  1299.         packet = tmp;
  1300.         }
  1301.     }
  1302. #line 238
  1303.   return packet;
  1304. }
  1305. static 
  1306. # 204 "../../tos/system/DrandM.nc"
  1307. int DrandM$isPresentHelloID(uint8_t node, uint8_t *array, uint8_t max)
  1308. #line 204
  1309. {
  1310.   uint8_t i;
  1311. #line 207
  1312.   for (i = 0; i < max; i++) 
  1313.     if (array[i] == node) {
  1314.       return i;
  1315.       }
  1316. #line 210
  1317.   return -1;
  1318. }
  1319. static 
  1320. #line 366
  1321. void DrandM$addHelloID(uint8_t node, uint8_t *array)
  1322. #line 366
  1323. {
  1324.   uint8_t i;
  1325. #line 368
  1326.   if (node == TOS_LOCAL_ADDRESS) {
  1327. #line 368
  1328.     return;
  1329.     }
  1330. #line 369
  1331.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1332. #line 369
  1333.     {
  1334.       for (i = 0; i < MAX_NBR && array[i] != 0xFF && array[i] != node; i++) ;
  1335.       if (i == MAX_NBR) {
  1336.           {
  1337. #line 373
  1338.             char bStatus;
  1339. #line 373
  1340.             if (DBG_USR2 != 0) {
  1341. #line 373
  1342.                 bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  1343. #line 373
  1344.                  __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "addNode: No space to add noden");
  1345. #line 373
  1346.                 DrandM$writedebug();
  1347. #line 373
  1348.                 if (bStatus) {
  1349. #line 373
  1350.                    __asm volatile ("sei");
  1351.                   }
  1352.               }
  1353.           }
  1354. #line 373
  1355.           ;
  1356.         }
  1357.       else {
  1358. #line 375
  1359.         if (array[i] != node) {
  1360.           array[i] = node;
  1361.           }
  1362.         }
  1363.     }
  1364. #line 379
  1365.     __nesc_atomic_end(__nesc_atomic); }
  1366. }
  1367. static 
  1368. # 52 "../../tos/interfaces/SODebug.h"
  1369. int DrandM$sprintf(uint8_t *buf, const uint8_t *format, ...)
  1370. {
  1371.   uint8_t scratch[64];
  1372.   uint8_t format_flag;
  1373.   uint16_t u_val = 0;
  1374. #line 57
  1375.   uint16_t base;
  1376.   uint8_t *ptr;
  1377.   DrandM$va_list ap;
  1378.   bool b_ChkForNegInt = FALSE;
  1379.   __builtin_va_start(ap, format);
  1380.   for (; ; ) {
  1381.       while ((format_flag = * format++) != '%') {
  1382.           if (!format_flag) {
  1383. #line 65
  1384.               __builtin_va_end(ap);
  1385. #line 65
  1386.               return 0;
  1387.             }
  1388. #line 66
  1389.           *buf = format_flag;
  1390. #line 66
  1391.           buf++;
  1392. #line 66
  1393.           *buf = 0;
  1394.         }
  1395.       b_ChkForNegInt = FALSE;
  1396.       switch ((format_flag = * format++)) {
  1397.           case 'c': 
  1398.             format_flag = (__builtin_va_arg(ap, int ));
  1399.           default: 
  1400.             *buf = format_flag;
  1401. #line 74
  1402.           buf++;
  1403. #line 74
  1404.           *buf = 0;
  1405.           continue;
  1406.           case 'S': 
  1407.             case 's': 
  1408.               ptr = (__builtin_va_arg(ap, char *));
  1409.           strcat(buf, ptr);
  1410.           continue;
  1411.           case 'o': 
  1412.             base = 8;
  1413.           *buf = '0';
  1414. #line 83
  1415.           buf++;
  1416. #line 83
  1417.           *buf = 0;
  1418.           goto CONVERSION_LOOP;
  1419.           case 'i': 
  1420.             b_ChkForNegInt = TRUE;
  1421.           case 'u': 
  1422.             base = 10;
  1423.           goto CONVERSION_LOOP;
  1424.           case 'x': 
  1425.             base = 16;
  1426.           CONVERSION_LOOP: 
  1427.             u_val = (__builtin_va_arg(ap, int ));
  1428.           if (b_ChkForNegInt) {
  1429.               if ((int )u_val < 0) {
  1430.                   u_val = -u_val;
  1431.                   *buf = '-';
  1432. #line 103
  1433.                   buf++;
  1434. #line 103
  1435.                   *buf = 0;
  1436.                 }
  1437.             }
  1438.           ptr = scratch + 64;
  1439.           * --ptr = 0;
  1440.           do {
  1441.               char ch = u_val % base + '0';
  1442. #line 111
  1443.               if (ch > '9') {
  1444.                 ch += 'a' - '9' - 1;
  1445.                 }
  1446. #line 113
  1447.               * --ptr = ch;
  1448.               u_val /= base;
  1449.             }
  1450.           while (
  1451. #line 115
  1452.           u_val);
  1453.           strcat(buf, ptr);
  1454.           buf += strlen(ptr);
  1455.         }
  1456.     }
  1457. }
  1458. static 
  1459. #line 42
  1460. void DrandM$writedebug(void)
  1461. #line 42
  1462. {
  1463.   int i = 0;
  1464. #line 44
  1465.   DrandM$UARTPutChar('n');
  1466.   while (DrandM$debugbuf[i] != 'n') 
  1467.     DrandM$UARTPutChar(DrandM$debugbuf[i++]);
  1468. }
  1469. static 
  1470. #line 35
  1471. void DrandM$UARTPutChar(char c)
  1472. #line 35
  1473. {
  1474.   if (c == 'n') {
  1475.     DrandM$UARTPutChar('r');
  1476.     }
  1477. #line 38
  1478.   do {
  1479.     }
  1480.   while (
  1481. #line 38
  1482.   !(* (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x0B + 0x20) & (1 << 5)));
  1483.   * (volatile uint8_t *)(0x0C + 0x20) = c;
  1484. }
  1485. static 
  1486. # 380 "../../tos/system/DrandM.nc"
  1487. void DrandM$removeHelloID(uint8_t node, uint8_t *array)
  1488. #line 380
  1489. {
  1490.   uint8_t i;
  1491. #line 382
  1492.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1493. #line 382
  1494.     {
  1495.       for (i = 0; i < MAX_NBR && array[i] != 0xFF && array[i] != node; i++) ;
  1496.       if (i != MAX_NBR && array[i] == node) {
  1497.           for (; i < MAX_NBR - 1; i++) 
  1498.             array[i] = array[i + 1];
  1499.           array[MAX_NBR - 1] = 0xFF;
  1500.         }
  1501.     }
  1502. #line 389
  1503.     __nesc_atomic_end(__nesc_atomic); }
  1504. }
  1505. static 
  1506. #line 579
  1507. void DrandM$sendHelloMsg(void)
  1508. #line 579
  1509. {
  1510.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1511. #line 580
  1512.     {
  1513.       if (!DrandM$sendBusy) {
  1514.           uint8_t i = 0;
  1515. #line 582
  1516.           uint8_t j = 0;
  1517.           helloMsg *helloMsgData = (helloMsg *)DrandM$DataPkt.data;
  1518. #line 584
  1519.           helloMsgData->sendID = TOS_LOCAL_ADDRESS;
  1520.           for (i = 0; i < MAX_NBR; i++) 
  1521.             helloMsgData->OneWayId[i] = 0xFF;
  1522.           for (i = 0; i < MAX_NBR && DrandM$OneWayId[i] != 0xFF; i++) 
  1523.             helloMsgData->OneWayId[i] = DrandM$OneWayId[i];
  1524.           if (i == MAX_NBR) {
  1525.               {
  1526. #line 592
  1527.                 char bStatus;
  1528. #line 592
  1529.                 if (DBG_USR2 != 0) {
  1530. #line 592
  1531.                     bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  1532. #line 592
  1533.                      __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "SendHelloMsg: Too many neighbors, abort !!!!n");
  1534. #line 592
  1535.                     DrandM$writedebug();
  1536. #line 592
  1537.                     if (bStatus) {
  1538. #line 592
  1539.                        __asm volatile ("sei");
  1540.                       }
  1541.                   }
  1542.               }
  1543. #line 592
  1544.               ;
  1545.             }
  1546.           helloMsgData->OneWayLen = i;
  1547.           for (j = 0; j < MAX_NBR && i < MAX_NBR && DrandM$TwoWayId[j] != 0xFF; j++, i++) 
  1548.             helloMsgData->OneWayId[i] = DrandM$TwoWayId[j];
  1549.           if (DrandM$SendHelloMsg$send(TOS_BCAST_ADDR, sizeof(helloMsg ), &DrandM$DataPkt) == SUCCESS) {
  1550.             DrandM$sendBusy = TRUE;
  1551.             }
  1552.           else 
  1553. #line 601
  1554.             {
  1555.               DrandM$reXTimer$start(TIMER_ONE_SHOT, DrandM$randNew() % HELLO_INTERVAL);
  1556.             }
  1557.         }
  1558.       else 
  1559. #line 607
  1560.         {
  1561.           DrandM$reXTimer$start(TIMER_ONE_SHOT, DrandM$randNew() % HELLO_INTERVAL);
  1562.         }
  1563.     }
  1564. #line 613
  1565.     __nesc_atomic_end(__nesc_atomic); }
  1566. }
  1567. static  
  1568. # 179 "/home/testuser/tinyos-1.x/tos/system/AMStandard.nc"
  1569. result_t AMStandard$SendMsg$send(uint8_t id, uint16_t addr, uint8_t length, TOS_MsgPtr data)
  1570. #line 179
  1571. {
  1572.   if (!AMStandard$state) {
  1573.       AMStandard$state = TRUE;
  1574.       if (length > DATA_LENGTH) {
  1575.           {
  1576.           }
  1577. #line 183
  1578.           ;
  1579.           AMStandard$state = FALSE;
  1580.           return FAIL;
  1581.         }
  1582.       if (!TOS_post(AMStandard$sendTask)) {
  1583.           {
  1584.           }
  1585. #line 188
  1586.           ;
  1587.           AMStandard$state = FALSE;
  1588.           return FAIL;
  1589.         }
  1590.       else {
  1591.           AMStandard$buffer = data;
  1592.           data->length = length;
  1593.           data->addr = addr;
  1594.           data->type = id;
  1595.           AMStandard$buffer->group = TOS_AM_GROUP;
  1596.           {
  1597.           }
  1598. #line 198
  1599.           ;
  1600.           AMStandard$dbgPacket(data);
  1601.         }
  1602.       return SUCCESS;
  1603.     }
  1604.   return FAIL;
  1605. }
  1606. static 
  1607. # 158 "/home/testuser/tinyos-1.x/tos/system/FramerM.nc"
  1608. result_t FramerM$StartTx(void)
  1609. #line 158
  1610. {
  1611.   result_t Result = SUCCESS;
  1612.   bool fInitiate = FALSE;
  1613.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1614. #line 162
  1615.     {
  1616.       if (FramerM$gTxState == FramerM$TXSTATE_IDLE) {
  1617.           if (FramerM$gFlags & FramerM$FLAGS_TOKENPEND) {
  1618.               FramerM$gpTxBuf = (uint8_t *)&FramerM$gTxTokenBuf;
  1619.               FramerM$gTxProto = FramerM$PROTO_ACK;
  1620.               FramerM$gTxLength = sizeof FramerM$gTxTokenBuf;
  1621.               fInitiate = TRUE;
  1622.               FramerM$gTxState = FramerM$TXSTATE_PROTO;
  1623.             }
  1624.           else {
  1625. #line 171
  1626.             if (FramerM$gFlags & FramerM$FLAGS_DATAPEND) {
  1627.                 FramerM$gpTxBuf = (uint8_t *)FramerM$gpTxMsg;
  1628.                 FramerM$gTxProto = FramerM$PROTO_PACKET_NOACK;
  1629.                 FramerM$gTxLength = FramerM$gpTxMsg->length + (MSG_DATA_SIZE - DATA_LENGTH - 2);
  1630.                 fInitiate = TRUE;
  1631.                 FramerM$gTxState = FramerM$TXSTATE_PROTO;
  1632.               }
  1633.             else {
  1634. #line 178
  1635.               if (FramerM$gFlags & FramerM$FLAGS_UNKNOWN) {
  1636.                   FramerM$gpTxBuf = (uint8_t *)&FramerM$gTxUnknownBuf;
  1637.                   FramerM$gTxProto = FramerM$PROTO_UNKNOWN;
  1638.                   FramerM$gTxLength = sizeof FramerM$gTxUnknownBuf;
  1639.                   fInitiate = TRUE;
  1640.                   FramerM$gTxState = FramerM$TXSTATE_PROTO;
  1641.                 }
  1642.               }
  1643.             }
  1644.         }
  1645.     }
  1646. #line 188
  1647.     __nesc_atomic_end(__nesc_atomic); }
  1648. #line 188
  1649.   if (fInitiate) {
  1650.       { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1651. #line 189
  1652.         {
  1653.           FramerM$gTxRunningCRC = 0;
  1654. #line 190
  1655.           FramerM$gTxByteCnt = 0;
  1656.         }
  1657. #line 191
  1658.         __nesc_atomic_end(__nesc_atomic); }
  1659.       Result = FramerM$ByteComm$txByte(FramerM$HDLC_FLAG_BYTE);
  1660.       if (Result != SUCCESS) {
  1661.           { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1662. #line 194
  1663.             FramerM$gTxState = FramerM$TXSTATE_ERROR;
  1664. #line 194
  1665.             __nesc_atomic_end(__nesc_atomic); }
  1666.           TOS_post(FramerM$PacketSent);
  1667.         }
  1668.     }
  1669.   return Result;
  1670. }
  1671. static   
  1672. # 110 "/home/testuser/tinyos-1.x/tos/system/UARTM.nc"
  1673. result_t UARTM$ByteComm$txByte(uint8_t data)
  1674. #line 110
  1675. {
  1676.   bool oldState;
  1677.   {
  1678.   }
  1679. #line 113
  1680.   ;
  1681.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1682. #line 115
  1683.     {
  1684.       oldState = UARTM$state;
  1685.       UARTM$state = TRUE;
  1686.     }
  1687. #line 118
  1688.     __nesc_atomic_end(__nesc_atomic); }
  1689.   if (oldState) {
  1690.     return FAIL;
  1691.     }
  1692.   UARTM$HPLUART$put(data);
  1693.   return SUCCESS;
  1694. }
  1695. static  
  1696. # 246 "/home/testuser/tinyos-1.x/tos/system/FramerM.nc"
  1697. void FramerM$PacketSent(void)
  1698. #line 246
  1699. {
  1700.   result_t TxResult = SUCCESS;
  1701.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1702. #line 249
  1703.     {
  1704.       if (FramerM$gTxState == FramerM$TXSTATE_ERROR) {
  1705.           TxResult = FAIL;
  1706.           FramerM$gTxState = FramerM$TXSTATE_IDLE;
  1707.         }
  1708.     }
  1709. #line 254
  1710.     __nesc_atomic_end(__nesc_atomic); }
  1711.   if (FramerM$gTxProto == FramerM$PROTO_ACK) {
  1712.       { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1713. #line 256
  1714.         FramerM$gFlags ^= FramerM$FLAGS_TOKENPEND;
  1715. #line 256
  1716.         __nesc_atomic_end(__nesc_atomic); }
  1717.     }
  1718.   else {
  1719.       { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1720. #line 259
  1721.         FramerM$gFlags ^= FramerM$FLAGS_DATAPEND;
  1722. #line 259
  1723.         __nesc_atomic_end(__nesc_atomic); }
  1724.       FramerM$BareSendMsg$sendDone((TOS_MsgPtr )FramerM$gpTxMsg, TxResult);
  1725.       { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1726. #line 261
  1727.         FramerM$gpTxMsg = (void *)0;
  1728. #line 261
  1729.         __nesc_atomic_end(__nesc_atomic); }
  1730.     }
  1731.   FramerM$StartTx();
  1732. }
  1733. static 
  1734. # 143 "/home/testuser/tinyos-1.x/tos/system/AMStandard.nc"
  1735. result_t AMStandard$reportSendDone(TOS_MsgPtr msg, result_t success)
  1736. #line 143
  1737. {
  1738.   AMStandard$state = FALSE;
  1739.   AMStandard$SendMsg$sendDone(msg->type, msg, success);
  1740.   AMStandard$sendDone();
  1741.   return SUCCESS;
  1742. }
  1743. static  
  1744. # 1102 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  1745. result_t CC1000RadioIntM$Send$send(TOS_MsgPtr pMsg)
  1746. #line 1102
  1747. {
  1748.   result_t Result = SUCCESS;
  1749.   uint8_t currentRadioState = 0;
  1750.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1751. #line 1106
  1752.     {
  1753.       if (CC1000RadioIntM$bTxBusy) {
  1754.           Result = FAIL;
  1755.         }
  1756.       else 
  1757.         {
  1758.           CC1000RadioIntM$bTxBusy = TRUE;
  1759.           CC1000RadioIntM$txbufptr = pMsg;
  1760.           CC1000RadioIntM$txlength = pMsg->length + (MSG_DATA_SIZE - DATA_LENGTH - 2);
  1761.           if (CC1000RadioIntM$bCCAEnable) {
  1762.               if (CC1000RadioIntM$currentMAC == CC1000RadioIntM$BMAC) {
  1763.                 CC1000RadioIntM$sMacDelay = CC1000RadioIntM$MacBackoff$initialBackoff(pMsg);
  1764.                 }
  1765.               else {
  1766. #line 1121
  1767.                 CC1000RadioIntM$sMacDelay = CC1000RadioIntM$getZMACBackoff(0);
  1768.                 }
  1769.             }
  1770.           else {
  1771. #line 1123
  1772.             CC1000RadioIntM$sMacDelay = 0;
  1773.             }
  1774.           CC1000RadioIntM$bTxPending = TRUE;
  1775.         }
  1776.       currentRadioState = CC1000RadioIntM$RadioState;
  1777.     }
  1778. #line 1131
  1779.     __nesc_atomic_end(__nesc_atomic); }
  1780.   if (Result) {
  1781.       if (currentRadioState == CC1000RadioIntM$POWER_DOWN_STATE) {
  1782.           { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1783. #line 1135
  1784.             CC1000RadioIntM$RadioState = CC1000RadioIntM$IDLE_STATE;
  1785. #line 1135
  1786.             __nesc_atomic_end(__nesc_atomic); }
  1787.           CC1000RadioIntM$WakeupTimer$stop();
  1788.           CC1000RadioIntM$CC1000StdControl$start();
  1789.           CC1000RadioIntM$CC1000Control$BIASOn();
  1790.           CC1000RadioIntM$CC1000Control$RxMode();
  1791.           CC1000RadioIntM$SpiByteFifo$rxMode();
  1792.           CC1000RadioIntM$SpiByteFifo$enableIntr();
  1793.           if (CC1000RadioIntM$iSquelchCount > 30) {
  1794.             CC1000RadioIntM$SquelchTimer$start(TIMER_REPEAT, 2560);
  1795.             }
  1796.           else {
  1797. #line 1145
  1798.             CC1000RadioIntM$SquelchTimer$start(TIMER_REPEAT, 128);
  1799.             }
  1800. #line 1146
  1801.           CC1000RadioIntM$WakeupTimer$start(TIMER_ONE_SHOT, 16 * 2);
  1802.         }
  1803.     }
  1804.   return Result;
  1805. }
  1806. static   
  1807. # 70 "/home/testuser/tinyos-1.x/tos/system/RandomLFSR.nc"
  1808. uint16_t RandomLFSR$Random$rand(void)
  1809. #line 70
  1810. {
  1811.   bool endbit;
  1812.   uint16_t tmpShiftReg;
  1813. #line 73
  1814.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1815. #line 73
  1816.     {
  1817.       tmpShiftReg = RandomLFSR$shiftReg;
  1818.       endbit = (tmpShiftReg & 0x8000) != 0;
  1819.       tmpShiftReg <<= 1;
  1820.       if (endbit) {
  1821.         tmpShiftReg ^= 0x100b;
  1822.         }
  1823. #line 79
  1824.       tmpShiftReg++;
  1825.       RandomLFSR$shiftReg = tmpShiftReg;
  1826.       tmpShiftReg = tmpShiftReg ^ RandomLFSR$mask;
  1827.     }
  1828. #line 82
  1829.     __nesc_atomic_end(__nesc_atomic); }
  1830.   return tmpShiftReg;
  1831. }
  1832. static 
  1833. # 286 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  1834. uint16_t CC1000RadioIntM$getZMACBackoff(uint16_t residualBackoff)
  1835. #line 286
  1836. {
  1837.   if (residualBackoff > 0) {
  1838.       CC1000RadioIntM$congBackOffs++;
  1839.       if (CC1000RadioIntM$currentSlot == CC1000RadioIntM$ownSlot && residualBackoff >= 8) {
  1840.           return CC1000RadioIntM$getOwnerBackoff();
  1841.         }
  1842.       else {
  1843. #line 291
  1844.         if (CC1000RadioIntM$currentSlot != CC1000RadioIntM$ownSlot && residualBackoff < 8) {
  1845.             if (residualBackoff + 8 < 8 + 32) {
  1846.               return residualBackoff + 8;
  1847.               }
  1848.             else {
  1849. #line 295
  1850.               return CC1000RadioIntM$getNonOwnerBackoff();
  1851.               }
  1852.           }
  1853.         else {
  1854. #line 297
  1855.           return residualBackoff;
  1856.           }
  1857.         }
  1858.     }
  1859.   else 
  1860. #line 298
  1861.     {
  1862.       if (CC1000RadioIntM$currentSlot == CC1000RadioIntM$ownSlot) {
  1863.         return CC1000RadioIntM$getOwnerBackoff();
  1864.         }
  1865.       else {
  1866. #line 302
  1867.         return CC1000RadioIntM$getNonOwnerBackoff();
  1868.         }
  1869.     }
  1870. }
  1871. static  
  1872. # 168 "/home/testuser/tinyos-1.x/tos/system/TimerM.nc"
  1873. result_t TimerM$Timer$stop(uint8_t id)
  1874. #line 168
  1875. {
  1876.   if (id >= NUM_TIMERS) {
  1877. #line 170
  1878.     return FAIL;
  1879.     }
  1880. #line 171
  1881.   if (TimerM$mState & (0x1L << id)) {
  1882.       { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1883. #line 172
  1884.         TimerM$mState &= ~(0x1L << id);
  1885. #line 172
  1886.         __nesc_atomic_end(__nesc_atomic); }
  1887.       if (!TimerM$mState) {
  1888.           TimerM$setIntervalFlag = 1;
  1889.         }
  1890.       return SUCCESS;
  1891.     }
  1892.   return FAIL;
  1893. }
  1894. static 
  1895. # 253 "../../tos/system/DrandM.nc"
  1896. void DrandM$addNode(uint8_t nodeID, uint8_t type)
  1897. #line 253
  1898. {
  1899.   uint8_t i;
  1900. #line 255
  1901.   if (nodeID == TOS_LOCAL_ADDRESS || nodeID == 0xFF) {
  1902. #line 255
  1903.     return;
  1904.     }
  1905. #line 256
  1906.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1907. #line 256
  1908.     {
  1909.       for (i = 0; i < MAX_NBR && DrandM$nbrInfo[i].nodeID != 0xFF && DrandM$nbrInfo[i].nodeID != nodeID; i++) ;
  1910.       if (i == MAX_NBR) {
  1911.           {
  1912. #line 260
  1913.             char bStatus;
  1914. #line 260
  1915.             if (DBG_USR2 != 0) {
  1916. #line 260
  1917.                 bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  1918. #line 260
  1919.                  __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "addNode: No space to add noden");
  1920. #line 260
  1921.                 DrandM$writedebug();
  1922. #line 260
  1923.                 if (bStatus) {
  1924. #line 260
  1925.                    __asm volatile ("sei");
  1926.                   }
  1927.               }
  1928.           }
  1929. #line 260
  1930.           ;
  1931.         }
  1932.       else {
  1933. #line 262
  1934.         if (DrandM$nbrInfo[i].nodeID != nodeID) {
  1935.             DrandM$nbrInfo[i].nodeID = nodeID;
  1936.             DrandM$nbrInfo[i].bitMap = type;
  1937.             DrandM$nbrInfo[i].slot = 0xFF;
  1938.             DrandM$nbrInfo[i].frame = 0xFF;
  1939.           }
  1940.         }
  1941.     }
  1942. #line 269
  1943.     __nesc_atomic_end(__nesc_atomic); }
  1944. }
  1945. static 
  1946. #line 271
  1947. void DrandM$removeNode(uint8_t nodeID, uint8_t type)
  1948. #line 271
  1949. {
  1950.   uint8_t i;
  1951. #line 273
  1952.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1953. #line 273
  1954.     {
  1955.       for (i = 0; i < MAX_NBR && DrandM$nbrInfo[i].nodeID != 0xFF && DrandM$nbrInfo[i].nodeID != nodeID; i++) ;
  1956.       if (i != MAX_NBR && DrandM$nbrInfo[i].nodeID == nodeID && DrandM$nbrInfo[i].bitMap & type) {
  1957.           for (; i < MAX_NBR - 1; i++) 
  1958.             DrandM$nbrInfo[i] = DrandM$nbrInfo[i + 1];
  1959.           DrandM$nbrInfo[MAX_NBR - 1].nodeID = 0xFF;
  1960.         }
  1961.     }
  1962. #line 280
  1963.     __nesc_atomic_end(__nesc_atomic); }
  1964. }
  1965. static 
  1966. #line 392
  1967. int DrandM$isPresent(uint8_t nodeID, uint8_t type)
  1968. #line 392
  1969. {
  1970.   uint8_t i;
  1971. #line 394
  1972.   if (nodeID == 0xFF) {
  1973. #line 394
  1974.     return -1;
  1975.     }
  1976. #line 395
  1977.   for (i = 0; i < MAX_NBR && DrandM$nbrInfo[i].nodeID != 0xFF; i++) 
  1978.     if (DrandM$nbrInfo[i].nodeID == nodeID && DrandM$nbrInfo[i].bitMap & type) {
  1979.       return i;
  1980.       }
  1981. #line 398
  1982.   return -1;
  1983. }
  1984. static 
  1985. #line 670
  1986. void DrandM$sendReleaseMsg(uint8_t slot)
  1987. #line 670
  1988. {
  1989.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  1990. #line 671
  1991.     {
  1992.       if (!DrandM$sendBusy) {
  1993.           releaseMsg *releaseMsgData = (releaseMsg *)DrandM$DataPkt.data;
  1994. #line 674
  1995.           releaseMsgData->sendID = TOS_LOCAL_ADDRESS;
  1996.           releaseMsgData->slot = slot;
  1997.           releaseMsgData->myState = DrandM$globalState;
  1998.           releaseMsgData->lastRequestID = DrandM$lastReqID;
  1999.           releaseMsgData->roundNum = DrandM$roundNum;
  2000.           if (DrandM$SendReleaseMsg$send(TOS_BCAST_ADDR, sizeof(releaseMsg ), &DrandM$DataPkt) == SUCCESS) {
  2001.               DrandM$sendBusy = TRUE;
  2002.             }
  2003.           else {
  2004.             }
  2005.         }
  2006.     }
  2007. #line 687
  2008.     __nesc_atomic_end(__nesc_atomic); }
  2009. }
  2010. static  
  2011. #line 1177
  2012. TOS_MsgPtr DrandM$ReceiveReleaseMsg$receive(TOS_MsgPtr m)
  2013. #line 1177
  2014. {
  2015.   int nIndex;
  2016.   releaseMsg *recvReleasePtr = (releaseMsg *)m->data;
  2017.   if (((
  2018. #line 1184
  2019.   nIndex = DrandM$isPresent(recvReleasePtr->sendID, ONE_HOP)) == -1 || 
  2020.   DrandM$globalState != GRANT_STATE) || DrandM$lastReqID != recvReleasePtr->sendID) {
  2021.     return m;
  2022.     }
  2023. #line 1187
  2024.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  2025. #line 1187
  2026.     {
  2027.       DrandM$reXTimer$stop();
  2028.       if (DrandM$updateNeighborInfo(recvReleasePtr->sendID, recvReleasePtr->slot)) {
  2029.         DrandM$sendTwoHopMsg(recvReleasePtr->slot, recvReleasePtr->sendID);
  2030.         }
  2031.       if (DrandM$setMySlot) {
  2032.           DrandM$globalState = RELEASE_STATE;
  2033.         }
  2034.       else 
  2035.         {
  2036.           DrandM$globalState = IDLE_STATE2;
  2037.           DrandM$drandRoundTimer$start(TIMER_ONE_SHOT, 100);
  2038.         }
  2039.       DrandM$graX = FALSE;
  2040.       DrandM$lastReqID = 0xFF;
  2041.     }
  2042. #line 1211
  2043.     __nesc_atomic_end(__nesc_atomic); }
  2044.   return m;
  2045. }
  2046. static 
  2047. #line 310
  2048. bool DrandM$updateNeighborInfo(uint8_t nID, uint8_t slot)
  2049. #line 310
  2050. {
  2051.   uint8_t i;
  2052. #line 312
  2053.   if (slot == 0xFF || nID == 0xFF) {
  2054. #line 312
  2055.     return FALSE;
  2056.     }
  2057. #line 313
  2058.   for (i = 0; i < MAX_NBR && DrandM$nbrInfo[i].nodeID != 0xFF; i++) 
  2059.     if (DrandM$nbrInfo[i].nodeID == nID && DrandM$nbrInfo[i].slot == 0xFF) {
  2060.         DrandM$nbrInfo[i].slot = slot;
  2061.         return TRUE;
  2062.       }
  2063.   return FALSE;
  2064. }
  2065. static 
  2066. #line 67
  2067. GTime DrandM$timeDiff(GTime A, GTime B)
  2068. #line 67
  2069. {
  2070.   GTime diff;
  2071. #line 69
  2072.   if (A.sticks >= B.sticks) {
  2073.       diff.mticks = A.mticks - B.mticks;
  2074.       diff.sticks = A.sticks - B.sticks;
  2075.     }
  2076.   else {
  2077.       uint32_t temp = 65536;
  2078. #line 75
  2079.       diff.mticks = A.mticks - 1 - B.mticks;
  2080.       diff.sticks = (uint16_t )(temp + A.sticks - B.sticks);
  2081.     }
  2082.   return diff;
  2083. }
  2084. static 
  2085. #line 290
  2086. uint8_t DrandM$numGrantsRemaining(void)
  2087. #line 290
  2088. {
  2089.   uint8_t i;
  2090. #line 291
  2091.   uint8_t count;
  2092. #line 292
  2093.   for (i = 0, count = 0; i < MAX_NBR && DrandM$nbrInfo[i].nodeID != 0xFF; i++) 
  2094.     if (DrandM$nbrInfo[i].bitMap & ONE_HOP && !(DrandM$nbrInfo[i].bitMap & GRANT_SENT)) {
  2095.         count++;
  2096.       }
  2097.   return count;
  2098. }
  2099. static 
  2100. #line 693
  2101. void DrandM$setSlot(void)
  2102. #line 693
  2103. {
  2104.   uint8_t i;
  2105.   uint32_t slotField;
  2106. #line 696
  2107.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  2108. #line 696
  2109.     {
  2110.       for (i = 0, slotField = 0x0; i < MAX_NBR && DrandM$nbrInfo[i].nodeID != 0xFF; i++) 
  2111.         if (DrandM$nbrInfo[i].slot != 0xFF) {
  2112.           slotField = slotField | (0x1 << DrandM$nbrInfo[i].slot);
  2113.           }
  2114. #line 700
  2115.       for (i = 0; i < 32; i++) 
  2116.         if (!(slotField & (0x1 << i))) {
  2117.             DrandM$myInfo.slot = i;
  2118.             DrandM$setMySlot = TRUE;
  2119.             break;
  2120.           }
  2121.       if (!DrandM$setMySlot) {
  2122.           {
  2123. #line 709
  2124.             char bStatus;
  2125. #line 709
  2126.             if (DBG_USR2 != 0) {
  2127. #line 709
  2128.                 bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2129. #line 709
  2130.                  __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "SetSlot: Could not set slot, something wrong, abort !!!n");
  2131. #line 709
  2132.                 DrandM$writedebug();
  2133. #line 709
  2134.                 if (bStatus) {
  2135. #line 709
  2136.                    __asm volatile ("sei");
  2137.                   }
  2138.               }
  2139.           }
  2140. #line 709
  2141.           ;
  2142.         }
  2143.       else {
  2144.           DrandM$globalState = RELEASE_STATE;
  2145.           DrandM$sendReleaseMsg(DrandM$myInfo.slot);
  2146.           DrandM$reXTimer$stop();
  2147.         }
  2148.     }
  2149. #line 719
  2150.     __nesc_atomic_end(__nesc_atomic); }
  2151. }
  2152. static 
  2153. #line 146
  2154. void DrandM$timeCheck(void)
  2155. #line 146
  2156. {
  2157.   GTime roundTime;
  2158. #line 148
  2159.   DrandM$SClock$getTime(&DrandM$locTime);
  2160.   DrandM$drandRunTime = DrandM$timeDiff(DrandM$locTime, DrandM$drandStartTime);
  2161.   roundTime = DrandM$timeDiff(DrandM$locTime, DrandM$roundStartTime);
  2162.   {
  2163. #line 152
  2164.     char bStatus;
  2165. #line 152
  2166.     if (DBG_USR2 != 0) {
  2167. #line 152
  2168.         bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2169. #line 152
  2170.          __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "MESSAGE sID %u mCt %u rReq %u rGra %u mTime %u sTime %un", TOS_LOCAL_ADDRESS, DrandM$reqCount + DrandM$graCount + DrandM$rejCount + DrandM$relCount + DrandM$twoCount, DrandM$reqXCount, DrandM$graXCount, (uint16_t )DrandM$drandRunTime.mticks, (uint16_t )DrandM$drandRunTime.sticks);
  2171. #line 152
  2172.         DrandM$writedebug();
  2173. #line 152
  2174.         if (bStatus) {
  2175. #line 152
  2176.            __asm volatile ("sei");
  2177.           }
  2178.       }
  2179.   }
  2180. #line 152
  2181.   ;
  2182.   {
  2183. #line 155
  2184.     char bStatus;
  2185. #line 155
  2186.     if (DBG_USR2 != 0) {
  2187. #line 155
  2188.         bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2189. #line 155
  2190.          __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "MESSAGE sID %u reqCt %u graCt %u rejCt %u relCt %u twoCt %un", TOS_LOCAL_ADDRESS, DrandM$reqCount, DrandM$graCount, DrandM$rejCount, DrandM$relCount, DrandM$twoCount);
  2191. #line 155
  2192.         DrandM$writedebug();
  2193. #line 155
  2194.         if (bStatus) {
  2195. #line 155
  2196.            __asm volatile ("sei");
  2197.           }
  2198.       }
  2199.   }
  2200. #line 155
  2201.   ;
  2202.   {
  2203. #line 157
  2204.     char bStatus;
  2205. #line 157
  2206.     if (DBG_USR2 != 0) {
  2207. #line 157
  2208.         bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2209. #line 157
  2210.          __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "MESSAGE sID %u Round %u slotNum %u mRound %u sRound %un", TOS_LOCAL_ADDRESS, DrandM$roundNum, DrandM$myInfo.slot, roundTime.mticks, roundTime.sticks);
  2211. #line 157
  2212.         DrandM$writedebug();
  2213. #line 157
  2214.         if (bStatus) {
  2215. #line 157
  2216.            __asm volatile ("sei");
  2217.           }
  2218.       }
  2219.   }
  2220. #line 157
  2221.   ;
  2222. }
  2223. static 
  2224. #line 109
  2225. void DrandM$printNbrInfo(void)
  2226. #line 109
  2227. {
  2228.   uint8_t i;
  2229. #line 111
  2230.   {
  2231. #line 111
  2232.     char bStatus;
  2233. #line 111
  2234.     if (DBG_USR2 != 0) {
  2235. #line 111
  2236.         bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2237. #line 111
  2238.          __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "*******************************************************n");
  2239. #line 111
  2240.         DrandM$writedebug();
  2241. #line 111
  2242.         if (bStatus) {
  2243. #line 111
  2244.            __asm volatile ("sei");
  2245.           }
  2246.       }
  2247.   }
  2248. #line 111
  2249.   ;
  2250.   for (i = 0; i < MAX_NBR && DrandM$nbrInfo[i].nodeID != 0xFF; i++) {
  2251.       switch (DrandM$globalState) {
  2252.           case IDLE_STATE2: 
  2253.             if (DrandM$nbrInfo[i].bitMap & ONE_HOP) {
  2254.                 {
  2255. #line 116
  2256.                   char bStatus;
  2257. #line 116
  2258.                   if (DBG_USR2 != 0) {
  2259. #line 116
  2260.                       bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2261. #line 116
  2262.                        __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "OneHopNodeID(HELLO) : %u  %u  %un", DrandM$nbrInfo[i].nodeID, DrandM$nbrInfo[i].slot, DrandM$nbrInfo[i].frame);
  2263. #line 116
  2264.                       DrandM$writedebug();
  2265. #line 116
  2266.                       if (bStatus) {
  2267. #line 116
  2268.                          __asm volatile ("sei");
  2269.                         }
  2270.                     }
  2271.                 }
  2272. #line 116
  2273.                 ;
  2274.               }
  2275.             else {
  2276. #line 118
  2277.               if (DrandM$nbrInfo[i].bitMap & TWO_HOP) {
  2278.                   {
  2279. #line 119
  2280.                     char bStatus;
  2281. #line 119
  2282.                     if (DBG_USR2 != 0) {
  2283. #line 119
  2284.                         bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2285. #line 119
  2286.                          __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "TwoHopNodeID(HELLO) : %u  %u  %un", DrandM$nbrInfo[i].nodeID, DrandM$nbrInfo[i].slot, DrandM$nbrInfo[i].frame);
  2287. #line 119
  2288.                         DrandM$writedebug();
  2289. #line 119
  2290.                         if (bStatus) {
  2291. #line 119
  2292.                            __asm volatile ("sei");
  2293.                           }
  2294.                       }
  2295.                   }
  2296. #line 119
  2297.                   ;
  2298.                 }
  2299.               }
  2300.           break;
  2301.           case RELEASE_STATE: 
  2302.             if (DrandM$nbrInfo[i].bitMap & ONE_HOP) {
  2303.                 {
  2304. #line 125
  2305.                   char bStatus;
  2306. #line 125
  2307.                   if (DBG_USR2 != 0) {
  2308. #line 125
  2309.                       bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2310. #line 125
  2311.                        __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "OneHopNodeID(DRAND) : %u  %u  %un", DrandM$nbrInfo[i].nodeID, DrandM$nbrInfo[i].slot, DrandM$nbrInfo[i].frame);
  2312. #line 125
  2313.                       DrandM$writedebug();
  2314. #line 125
  2315.                       if (bStatus) {
  2316. #line 125
  2317.                          __asm volatile ("sei");
  2318.                         }
  2319.                     }
  2320.                 }
  2321. #line 125
  2322.                 ;
  2323.               }
  2324.             else {
  2325. #line 127
  2326.               if (DrandM$nbrInfo[i].bitMap & TWO_HOP) {
  2327.                   {
  2328. #line 128
  2329.                     char bStatus;
  2330. #line 128
  2331.                     if (DBG_USR2 != 0) {
  2332. #line 128
  2333.                         bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2334. #line 128
  2335.                          __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "TwoHopNodeID(DRAND) : %u  %u  %un", DrandM$nbrInfo[i].nodeID, DrandM$nbrInfo[i].slot, DrandM$nbrInfo[i].frame);
  2336. #line 128
  2337.                         DrandM$writedebug();
  2338. #line 128
  2339.                         if (bStatus) {
  2340. #line 128
  2341.                            __asm volatile ("sei");
  2342.                           }
  2343.                       }
  2344.                   }
  2345. #line 128
  2346.                   ;
  2347.                 }
  2348.               }
  2349.           break;
  2350.           case FRAME_STATE: 
  2351.             if (DrandM$nbrInfo[i].bitMap & ONE_HOP) {
  2352.                 {
  2353. #line 134
  2354.                   char bStatus;
  2355. #line 134
  2356.                   if (DBG_USR2 != 0) {
  2357. #line 134
  2358.                       bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2359. #line 134
  2360.                        __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "OneHopNodeID(FRAME) : %u  %u  %un", DrandM$nbrInfo[i].nodeID, DrandM$nbrInfo[i].slot, DrandM$nbrInfo[i].frame);
  2361. #line 134
  2362.                       DrandM$writedebug();
  2363. #line 134
  2364.                       if (bStatus) {
  2365. #line 134
  2366.                          __asm volatile ("sei");
  2367.                         }
  2368.                     }
  2369.                 }
  2370. #line 134
  2371.                 ;
  2372.               }
  2373.             else {
  2374. #line 136
  2375.               if (DrandM$nbrInfo[i].bitMap & TWO_HOP) {
  2376.                   {
  2377. #line 137
  2378.                     char bStatus;
  2379. #line 137
  2380.                     if (DBG_USR2 != 0) {
  2381. #line 137
  2382.                         bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2383. #line 137
  2384.                          __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "TwoHopNodeID(FRAME) : %u  %u  %un", DrandM$nbrInfo[i].nodeID, DrandM$nbrInfo[i].slot, DrandM$nbrInfo[i].frame);
  2385. #line 137
  2386.                         DrandM$writedebug();
  2387. #line 137
  2388.                         if (bStatus) {
  2389. #line 137
  2390.                            __asm volatile ("sei");
  2391.                           }
  2392.                       }
  2393.                   }
  2394. #line 137
  2395.                   ;
  2396.                 }
  2397.               }
  2398.           break;
  2399.         }
  2400.     }
  2401.   {
  2402. #line 143
  2403.     char bStatus;
  2404. #line 143
  2405.     if (DBG_USR2 != 0) {
  2406. #line 143
  2407.         bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2408. #line 143
  2409.          __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "*******************************************************n");
  2410. #line 143
  2411.         DrandM$writedebug();
  2412. #line 143
  2413.         if (bStatus) {
  2414. #line 143
  2415.            __asm volatile ("sei");
  2416.           }
  2417.       }
  2418.   }
  2419. #line 143
  2420.   ;
  2421. }
  2422. static 
  2423. #line 1331
  2424. void DrandM$reXReport(void)
  2425. #line 1331
  2426. {
  2427.   if (DrandM$reportFireCount > MAX_REPORT) {
  2428.     DrandM$removeNodesForReport();
  2429.     }
  2430.   else {
  2431. #line 1335
  2432.     DrandM$reportFireCount++;
  2433.     }
  2434.   if (!DrandM$checkForRetransReport()) {
  2435.     DrandM$setFrame();
  2436.     }
  2437.   else 
  2438. #line 1339
  2439.     {
  2440.       DrandM$sendReportMsg(REPORT_REQUEST);
  2441.     }
  2442. }
  2443. static 
  2444. #line 440
  2445. void DrandM$removeNodesForReport(void)
  2446. #line 440
  2447. {
  2448.   int i;
  2449. #line 442
  2450.   for (i = MAX_NBR - 1; i >= 0; i--) {
  2451.       if (DrandM$nbrInfo[i].nodeID == 0xFF) {
  2452.         continue;
  2453.         }
  2454.       else {
  2455. #line 445
  2456.         if (DrandM$nbrInfo[i].slot == 0xFF) {
  2457.             {
  2458. #line 447
  2459.               char bStatus;
  2460. #line 447
  2461.               if (DBG_USR2 != 0) {
  2462. #line 447
  2463.                   bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2464. #line 447
  2465.                    __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "RemoveNodesForReport: Removed node %un", DrandM$nbrInfo[i].nodeID);
  2466. #line 447
  2467.                   DrandM$writedebug();
  2468. #line 447
  2469.                   if (bStatus) {
  2470. #line 447
  2471.                      __asm volatile ("sei");
  2472.                     }
  2473.                 }
  2474.             }
  2475. #line 447
  2476.             ;
  2477.             DrandM$removeNode(DrandM$nbrInfo[i].nodeID, DrandM$nbrInfo[i].bitMap);
  2478.           }
  2479.         }
  2480.     }
  2481. }
  2482. static 
  2483. #line 722
  2484. void DrandM$setFrame(void)
  2485. #line 722
  2486. {
  2487.   uint8_t maxSlot;
  2488. #line 723
  2489.   uint8_t frameLen;
  2490. #line 724
  2491.   DrandM$removeNodesForReport();
  2492.   DrandM$reXTimer$stop();
  2493.   maxSlot = DrandM$getMaxSlot();
  2494.   frameLen = 0;
  2495.   while (maxSlot != 0) {
  2496.       maxSlot = (int )(maxSlot / 2);
  2497.       frameLen++;
  2498.     }
  2499.   DrandM$myInfo.frame = 0x1 << frameLen;
  2500.   {
  2501. #line 734
  2502.     char bStatus;
  2503. #line 734
  2504.     if (DBG_USR2 != 0) {
  2505. #line 734
  2506.         bStatus = * (volatile uint8_t *)(uint16_t )& * (volatile uint8_t *)(0x3F + 0x20) & (1 << 7);
  2507. #line 734
  2508.          __asm volatile ("cli");DrandM$sprintf(DrandM$debugbuf, "Local Frame Size = %u for maxSlot = %un", DrandM$myInfo.frame, DrandM$getMaxSlot());
  2509. #line 734
  2510.         DrandM$writedebug();
  2511. #line 734
  2512.         if (bStatus) {
  2513. #line 734
  2514.            __asm volatile ("sei");
  2515.           }
  2516.       }
  2517.   }
  2518. #line 734
  2519.   ;
  2520. }
  2521. static 
  2522. #line 245
  2523. uint8_t DrandM$getMaxSlot(void)
  2524. #line 245
  2525. {
  2526.   uint8_t i;
  2527. #line 246
  2528.   uint8_t maxSlot = DrandM$myInfo.slot;
  2529. #line 247
  2530.   for (i = 0; i < MAX_NBR && DrandM$nbrInfo[i].nodeID != 0xFF; i++) 
  2531.     if (DrandM$nbrInfo[i].slot > maxSlot) {
  2532.       maxSlot = DrandM$nbrInfo[i].slot;
  2533.       }
  2534. #line 250
  2535.   return maxSlot;
  2536. }
  2537. static 
  2538. #line 792
  2539. void DrandM$sendReportMsg(uint8_t type)
  2540. #line 792
  2541. {
  2542.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  2543. #line 793
  2544.     {
  2545.       if (!DrandM$sendBusy) {
  2546.           reportMsg *reportMsgData = (reportMsg *)DrandM$DataPkt.data;
  2547. #line 796
  2548.           reportMsgData->slot = DrandM$myInfo.slot;
  2549.           reportMsgData->sendID = TOS_LOCAL_ADDRESS;
  2550.           reportMsgData->type = type;
  2551.           DrandM$fillTimeSlotInfoForReport(reportMsgData->timeSlot);
  2552.           if (DrandM$SendReportMsg$send(TOS_BCAST_ADDR, sizeof(reportMsg ), &DrandM$DataPkt) != SUCCESS) {
  2553.               DrandM$reXTimer$start(TIMER_ONE_SHOT, REPORT_XPERIOD + DrandM$randNew() % REPORT_INTERVAL);
  2554.             }
  2555.           else 
  2556.             {
  2557.               DrandM$sendBusy = TRUE;
  2558.             }
  2559.         }
  2560.       else 
  2561. #line 808
  2562.         {
  2563.           DrandM$reXTimer$start(TIMER_ONE_SHOT, REPORT_XPERIOD + DrandM$randNew() % REPORT_INTERVAL);
  2564.         }
  2565.     }
  2566. #line 811
  2567.     __nesc_atomic_end(__nesc_atomic); }
  2568. }
  2569. static 
  2570. #line 1308
  2571. void DrandM$reXFrame(void)
  2572. #line 1308
  2573. {
  2574.   if (DrandM$frameFireCount > MAX_FRAME) {
  2575.     DrandM$removeNodesForFrame();
  2576.     }
  2577.   else {
  2578. #line 1312
  2579.     DrandM$frameFireCount++;
  2580.     }
  2581.   if (!DrandM$checkForRetransFrame()) {
  2582.       DrandM$reXTimer$stop();
  2583.       if (!DrandM$gotAllFrames) {
  2584.           DrandM$Drand$gotFrame();
  2585.           DrandM$gotAllFrames = TRUE;
  2586.           DrandM$printNbrInfo();
  2587.         }
  2588.     }
  2589.   else {
  2590.       DrandM$sendFrameMsg(FRAME_REQUEST);
  2591.     }
  2592. }
  2593. static 
  2594. #line 817
  2595. void DrandM$sendFrameMsg(uint8_t frameType)
  2596. #line 817
  2597. {
  2598.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  2599. #line 818
  2600.     {
  2601.       if (!DrandM$sendBusy) {
  2602.           frameMsg *frameMsgData = (frameMsg *)DrandM$DataPkt.data;
  2603. #line 821
  2604.           frameMsgData->sendID = TOS_LOCAL_ADDRESS;
  2605.           frameMsgData->frame = DrandM$myInfo.frame;
  2606.           frameMsgData->type = frameType;
  2607.           DrandM$fillFrameInfo(frameMsgData);
  2608.           if (DrandM$SendFrameMsg$send(TOS_BCAST_ADDR, sizeof(frameMsg ), &DrandM$DataPkt) == SUCCESS) {
  2609.               DrandM$sendBusy = TRUE;
  2610.             }
  2611.           else 
  2612. #line 827
  2613.             {
  2614.               DrandM$reXTimer$start(TIMER_ONE_SHOT, FRAME_XPERIOD + DrandM$randNew() % FRAME_INTERVAL);
  2615.             }
  2616.         }
  2617.       else 
  2618. #line 833
  2619.         {
  2620.           DrandM$reXTimer$start(TIMER_ONE_SHOT, FRAME_XPERIOD + DrandM$randNew() % FRAME_INTERVAL);
  2621.         }
  2622.     }
  2623. #line 839
  2624.     __nesc_atomic_end(__nesc_atomic); }
  2625. }
  2626. # 144 "../../tos/platform/mica2/HPLADCM.nc"
  2627. void __attribute((signal))   __vector_21(void)
  2628. #line 144
  2629. {
  2630.   uint16_t data = * (volatile uint16_t *)& * (volatile uint8_t *)(0x04 + 0x20);
  2631. #line 146
  2632.   data &= 0x3ff;
  2633.   * (volatile uint8_t *)(0x06 + 0x20) |= 1 << 4;
  2634.   * (volatile uint8_t *)(0x06 + 0x20) &= ~(1 << 7);
  2635.   __nesc_enable_interrupt();
  2636.   HPLADCM$ADC$dataReady(data);
  2637. }
  2638. static   
  2639. #line 122
  2640. result_t HPLADCM$ADC$samplePort(uint8_t port)
  2641. #line 122
  2642. {
  2643.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  2644. #line 123
  2645.     {
  2646.       * (volatile uint8_t *)(0x07 + 0x20) = HPLADCM$TOSH_adc_portmap[port] & 0x1F;
  2647.     }
  2648. #line 125
  2649.     __nesc_atomic_end(__nesc_atomic); }
  2650.   * (volatile uint8_t *)(0x06 + 0x20) |= 1 << 7;
  2651.   * (volatile uint8_t *)(0x06 + 0x20) |= 1 << 6;
  2652.   return SUCCESS;
  2653. }
  2654. static  
  2655. # 342 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  2656. void CC1000RadioIntM$adjustSquelch(void)
  2657. #line 342
  2658. {
  2659.   uint16_t tempArray[9];
  2660.   char i;
  2661. #line 344
  2662.   char j;
  2663. #line 344
  2664.   char min;
  2665.   uint16_t min_value;
  2666.   uint32_t tempsquelch;
  2667.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  2668. #line 348
  2669.     {
  2670.       CC1000RadioIntM$usSquelchTable[CC1000RadioIntM$usSquelchIndex] = CC1000RadioIntM$usTempSquelch;
  2671.       CC1000RadioIntM$usSquelchIndex++;
  2672.       if (CC1000RadioIntM$usSquelchIndex >= 9) {
  2673.         CC1000RadioIntM$usSquelchIndex = 0;
  2674.         }
  2675. #line 353
  2676.       if (CC1000RadioIntM$iSquelchCount <= 30) {
  2677.         CC1000RadioIntM$iSquelchCount++;
  2678.         }
  2679.     }
  2680. #line 356
  2681.     __nesc_atomic_end(__nesc_atomic); }
  2682.   for (i = 0; i < 9; i++) {
  2683.       tempArray[(int )i] = CC1000RadioIntM$usSquelchTable[(int )i];
  2684.     }
  2685.   min = 0;
  2686.   for (j = 0; j < 3; j++) {
  2687.       for (i = 1; i < 9; i++) {
  2688.           if (tempArray[(int )i] != 0xFFFF && (
  2689.           tempArray[(int )i] > tempArray[(int )min] || 
  2690.           tempArray[(int )min] == 0xFFFF)) {
  2691.               min = i;
  2692.             }
  2693.         }
  2694.       min_value = tempArray[(int )min];
  2695.       tempArray[(int )min] = 0xFFFF;
  2696.     }
  2697.   tempsquelch = (uint32_t )(CC1000RadioIntM$usSquelchVal << 5) + (uint32_t )(min_value << 1);
  2698.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  2699. #line 376
  2700.     CC1000RadioIntM$usSquelchVal = (uint16_t )(tempsquelch / 34 & 0x0FFFF);
  2701. #line 376
  2702.     __nesc_atomic_end(__nesc_atomic); }
  2703. }
  2704. static   
  2705. # 422 "../../tos/platform/mica2/CC1000ControlM.nc"
  2706. result_t CC1000ControlM$CC1000Control$TxMode(void)
  2707. #line 422
  2708. {
  2709.   CC1000ControlM$HPLChipcon$write(0x00, (((
  2710.   1 << 7) | (1 << 6)) | (1 << 5)) | (
  2711.   1 << 0));
  2712.   CC1000ControlM$HPLChipcon$write(0x09, CC1000ControlM$gCurrentParameters[29]);
  2713.   TOSH_uwait(250);
  2714.   CC1000ControlM$HPLChipcon$write(0x0B, CC1000ControlM$gCurrentParameters[0xb]);
  2715.   TOSH_uwait(20);
  2716.   return SUCCESS;
  2717. }
  2718. static 
  2719. # 198 "../../tos/platform/mica2/ADCREFM.nc"
  2720. result_t ADCREFM$startGet(uint8_t port)
  2721. #line 198
  2722. {
  2723.   uint16_t PortMask;
  2724. #line 199
  2725.   uint16_t oldReqVector = 1;
  2726.   result_t Result = SUCCESS;
  2727.   PortMask = 1 << port;
  2728.   if ((PortMask & ADCREFM$ReqVector) != 0) {
  2729.       Result = FAIL;
  2730.     }
  2731.   else {
  2732.       oldReqVector = ADCREFM$ReqVector;
  2733.       ADCREFM$ReqVector |= PortMask;
  2734.       if (oldReqVector == 0) {
  2735.           if ((Result = ADCREFM$HPLADC$samplePort(port))) {
  2736.               ADCREFM$ReqPort = port;
  2737.             }
  2738.         }
  2739.     }
  2740.   return Result;
  2741. }
  2742. static  
  2743. # 1586 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  2744. void CC1000RadioIntM$IdleTimerTask(void)
  2745. #line 1586
  2746. {
  2747.   if (CC1000RadioIntM$iSquelchCount > 30) {
  2748.     CC1000RadioIntM$SquelchTimer$start(TIMER_REPEAT, 2560);
  2749.     }
  2750.   else {
  2751. #line 1590
  2752.     CC1000RadioIntM$SquelchTimer$start(TIMER_REPEAT, 128);
  2753.     }
  2754. #line 1591
  2755.   CC1000RadioIntM$WakeupTimer$start(TIMER_ONE_SHOT, CC1000RadioIntM$TIME_AFTER_CHECK);
  2756. }
  2757. static   
  2758. # 82 "../../tos/platform/mica2/HPLSpiM.nc"
  2759. result_t HPLSpiM$SpiByteFifo$disableIntr(void)
  2760. #line 82
  2761. {
  2762.   * (volatile uint8_t *)(0x0D + 0x20) &= ~(1 << 7);
  2763.   * (volatile uint8_t *)(0x17 + 0x20) |= 1 << 0;
  2764.   * (volatile uint8_t *)(0x18 + 0x20) &= ~(1 << 0);
  2765.   HPLSpiM$PowerManagement$adjustPower();
  2766.   return SUCCESS;
  2767. }
  2768. # 167 "/home/testuser/tinyos-1.x/tos/platform/mica/HPLClock.nc"
  2769. void __attribute((interrupt))   __vector_15(void)
  2770. #line 167
  2771. {
  2772.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  2773. #line 168
  2774.     {
  2775.       if (HPLClock$set_flag) {
  2776.           HPLClock$mscale = HPLClock$nextScale;
  2777.           HPLClock$nextScale |= 0x8;
  2778.           * (volatile uint8_t *)(0x33 + 0x20) = HPLClock$nextScale;
  2779.           * (volatile uint8_t *)(0x31 + 0x20) = HPLClock$minterval;
  2780.           HPLClock$set_flag = 0;
  2781.         }
  2782.     }
  2783. #line 177
  2784.     __nesc_atomic_end(__nesc_atomic); }
  2785.   HPLClock$Clock$fire();
  2786. }
  2787. static 
  2788. # 401 "../../tos/system/DrandM.nc"
  2789. uint8_t DrandM$getContenders(void)
  2790. #line 401
  2791. {
  2792.   uint8_t i;
  2793. #line 402
  2794.   uint8_t contenders = 0;
  2795. #line 403
  2796.   for (i = 0; i < MAX_NBR && DrandM$nbrInfo[i].nodeID != 0xFF; i++) 
  2797.     if (DrandM$nbrInfo[i].slot == 0xFF) {
  2798.       contenders++;
  2799.       }
  2800. #line 406
  2801.   return contenders + 1;
  2802. }
  2803. static 
  2804. #line 616
  2805. void DrandM$sendRequestMsg(void)
  2806. #line 616
  2807. {
  2808.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  2809. #line 617
  2810.     {
  2811.       if (!DrandM$sendBusy) {
  2812.           requestMsg *requestMsgData = (requestMsg *)DrandM$DataPkt.data;
  2813. #line 620
  2814.           requestMsgData->sendID = TOS_LOCAL_ADDRESS;
  2815.           DrandM$SClock$getTime(& requestMsgData->timestamp);
  2816.           requestMsgData->myState = DrandM$globalState;
  2817.           requestMsgData->roundNum = DrandM$roundNum;
  2818.           requestMsgData->lastRequestID = DrandM$lastReqID;
  2819.           DrandM$fillGrantSendInfo(requestMsgData->idMap);
  2820.           requestMsgData->numRemaining = DrandM$numGrantsRemaining();
  2821.           requestMsgData->OTT = DrandM$OTT;
  2822.           if (DrandM$SendRequestMsg$send(TOS_BCAST_ADDR, sizeof(requestMsg ), &DrandM$DataPkt) != SUCCESS) {
  2823.               DrandM$reXTimer$start(TIMER_ONE_SHOT, DrandM$REQUEST_TIME);
  2824.             }
  2825.           else 
  2826. #line 636
  2827.             {
  2828.               DrandM$sendBusy = TRUE;
  2829.             }
  2830.         }
  2831.       else 
  2832. #line 639
  2833.         {
  2834.           DrandM$reXTimer$start(TIMER_ONE_SHOT, DrandM$REQUEST_TIME);
  2835.         }
  2836.     }
  2837. #line 645
  2838.     __nesc_atomic_end(__nesc_atomic); }
  2839. }
  2840. static   
  2841. # 1166 "../../tos/platform/mica2/CC1000RadioIntM.nc"
  2842. result_t CC1000RadioIntM$SpiByteFifo$dataReady(uint8_t data_in)
  2843. #line 1166
  2844. {
  2845.   GTime loctime;
  2846. #line 1168
  2847.   CC1000RadioIntM$RadioSendCoordinator$blockTimer();
  2848.   CC1000RadioIntM$RadioReceiveCoordinator$blockTimer();
  2849.   if (CC1000RadioIntM$bInvertRxData) {
  2850.     data_in = ~data_in;
  2851.     }
  2852.   switch (CC1000RadioIntM$RadioState) {
  2853.       case CC1000RadioIntM$TX_STATE: 
  2854.         {
  2855.           CC1000RadioIntM$SpiByteFifo$writeByte(CC1000RadioIntM$NextTxByte);
  2856.           CC1000RadioIntM$TxByteCnt++;
  2857.           switch (CC1000RadioIntM$RadioTxState) {
  2858.               case CC1000RadioIntM$TXSTATE_PREAMBLE: 
  2859.                 CC1000RadioIntM$send_sum++;
  2860.               if (!(CC1000RadioIntM$TxByteCnt < CC1000RadioIntM$preamblelen) || (
  2861.               CC1000RadioIntM$txbufptr->strength == 0xffff && CC1000RadioIntM$TxByteCnt >= CC1000RadioIntM$PREAMBLE_LENGTH_TO_BASE)) {
  2862.                   CC1000RadioIntM$NextTxByte = CC1000RadioIntM$SYNC_BYTE;
  2863.                   CC1000RadioIntM$RadioTxState = CC1000RadioIntM$TXSTATE_SYNC;
  2864.                 }
  2865.               break;
  2866.               case CC1000RadioIntM$TXSTATE_SYNC: 
  2867.                 CC1000RadioIntM$send_sum++;
  2868.               CC1000RadioIntM$NextTxByte = CC1000RadioIntM$NSYNC_BYTE;
  2869.               CC1000RadioIntM$RadioTxState = CC1000RadioIntM$TXSTATE_DATA;
  2870.               CC1000RadioIntM$TxByteCnt = -1;
  2871.               if (CC1000RadioIntM$txbufptr->type == 223) {
  2872.                   syncMsgType *syncMsgPtr = (syncMsgType *)CC1000RadioIntM$txbufptr->data;
  2873. #line 1204
  2874.                   CC1000RadioIntM$SClock$getTime(&loctime);
  2875.                   syncMsgPtr->mticks = loctime.mticks;
  2876.                   syncMsgPtr->sticks = loctime.sticks;
  2877.                   syncMsgPtr->trust = 1;
  2878.                   syncMsgPtr->sender = TOS_LOCAL_ADDRESS;
  2879.                 }
  2880.               CC1000RadioIntM$RadioSendCoordinator$startSymbol(8, 0, CC1000RadioIntM$txbufptr);
  2881.               break;
  2882.               case CC1000RadioIntM$TXSTATE_DATA: 
  2883.                 CC1000RadioIntM$send_sum++;
  2884.               if ((uint8_t )CC1000RadioIntM$TxByteCnt < CC1000RadioIntM$txlength) {
  2885.                   if (CC1000RadioIntM$txbufptr->type == 223 && CC1000RadioIntM$TxByteCnt == 5) {
  2886.                       syncMsgType *syncMsgPtr = (syncMsgType *)CC1000RadioIntM$txbufptr->data;
  2887. #line 1219
  2888.                       CC1000RadioIntM$SClock$getTime(&loctime);
  2889.                       CC1000RadioIntM$AddTime(&loctime, &loctime, &CC1000RadioIntM$constOffset);
  2890.                       syncMsgPtr->mticks = loctime.mticks;
  2891.                       syncMsgPtr->sticks = loctime.sticks;
  2892.                     }
  2893.                   CC1000RadioIntM$NextTxByte = ((uint8_t *)CC1000RadioIntM$txbufptr)[CC1000RadioIntM$TxByteCnt];
  2894.                   CC1000RadioIntM$usRunningCRC = crcByte(CC1000RadioIntM$usRunningCRC, CC1000RadioIntM$NextTxByte);
  2895.                   CC1000RadioIntM$RadioSendCoordinator$byte(CC1000RadioIntM$txbufptr, (uint8_t )CC1000RadioIntM$TxByteCnt);
  2896.                 }
  2897.               else {
  2898.                   CC1000RadioIntM$NextTxByte = (uint8_t )CC1000RadioIntM$usRunningCRC;
  2899.                   CC1000RadioIntM$RadioTxState = CC1000RadioIntM$TXSTATE_CRC;
  2900.                 }
  2901.               break;
  2902.               case CC1000RadioIntM$TXSTATE_CRC: 
  2903.                 CC1000RadioIntM$send_sum++;
  2904.               CC1000RadioIntM$NextTxByte = (uint8_t )(CC1000RadioIntM$usRunningCRC >> 8);
  2905.               CC1000RadioIntM$RadioTxState = CC1000RadioIntM$TXSTATE_FLUSH;
  2906.               CC1000RadioIntM$TxByteCnt = 0;
  2907.               break;
  2908.               case CC1000RadioIntM$TXSTATE_FLUSH: 
  2909.                 CC1000RadioIntM$send_sum++;
  2910.               if (CC1000RadioIntM$TxByteCnt > 3) {
  2911.                   CC1000RadioIntM$TxByteCnt = 0;
  2912.                   if (CC1000RadioIntM$bAckEnable) {
  2913.                     CC1000RadioIntM$RadioTxState = CC1000RadioIntM$TXSTATE_WAIT_FOR_ACK;
  2914.                     }
  2915.                   else 
  2916. #line 1250
  2917.                     {
  2918.                       CC1000RadioIntM$packetsSent++;
  2919.                       CC1000RadioIntM$SpiByteFifo$rxMode();
  2920.                       CC1000RadioIntM$CC1000Control$RxMode();
  2921.                       CC1000RadioIntM$RadioTxState = CC1000RadioIntM$TXSTATE_DONE;
  2922.                     }
  2923.                 }
  2924.               break;
  2925.               case CC1000RadioIntM$TXSTATE_WAIT_FOR_ACK: 
  2926.                 if (CC1000RadioIntM$TxByteCnt == 1) {
  2927.                     CC1000RadioIntM$send_sum++;
  2928.                     CC1000RadioIntM$SpiByteFifo$rxMode();
  2929.                     CC1000RadioIntM$CC1000Control$RxMode();
  2930.                     break;
  2931.                   }
  2932.               CC1000RadioIntM$receive_sum++;
  2933.               if (CC1000RadioIntM$TxByteCnt > 3) {
  2934.                   CC1000RadioIntM$RadioTxState = CC1000RadioIntM$TXSTATE_READ_ACK;
  2935.                   CC1000RadioIntM$TxByteCnt = 0;
  2936.                   CC1000RadioIntM$search_word = 0;
  2937.                 }
  2938.               break;
  2939.               case CC1000RadioIntM$TXSTATE_READ_ACK: 
  2940.                 {
  2941.                   uint8_t i;
  2942. #line 1280
  2943.                   CC1000RadioIntM$receive_sum++;
  2944.                   for (i = 0; i < 8; i++) {
  2945.                       CC1000RadioIntM$search_word <<= 1;
  2946.                       if (data_in & 0x80) {
  2947. #line 1283
  2948.                         CC1000RadioIntM$search_word |= 0x1;
  2949.                         }
  2950. #line 1284
  2951.                       data_in <<= 1;
  2952.                       if (CC1000RadioIntM$search_word == 0xba83) {
  2953.                           CC1000RadioIntM$txbufptr->ack = 1;
  2954.                           CC1000RadioIntM$RadioTxState = CC1000RadioIntM$TXSTATE_DONE;
  2955.                           return SUCCESS;
  2956.                         }
  2957.                     }
  2958.                 }
  2959.               if (CC1000RadioIntM$TxByteCnt >= CC1000RadioIntM$MAX_ACK_WAIT) {
  2960.                   CC1000RadioIntM$txbufptr->ack = 0;
  2961.                   CC1000RadioIntM$RadioTxState = CC1000RadioIntM$TXSTATE_DONE;
  2962.                 }
  2963.               break;
  2964.               case CC1000RadioIntM$TXSTATE_DONE: 
  2965.                 default: 
  2966.                   CC1000RadioIntM$bTxPending = FALSE;
  2967.               if (CC1000RadioIntM$txbufptr->type == 222 || CC1000RadioIntM$txbufptr->type == 223) {
  2968.                   CC1000RadioIntM$bAckEnable = CC1000RadioIntM$ackOrig;
  2969.                 }
  2970.               if (TOS_post(CC1000RadioIntM$PacketSent)) {
  2971.                   CC1000RadioIntM$RadioState = CC1000RadioIntM$IDLE_STATE;
  2972.                   CC1000RadioIntM$pktsLastSync++;
  2973.                   CC1000RadioIntM$RSSIInitState = CC1000RadioIntM$RadioState;
  2974.                   CC1000RadioIntM$RSSIADC$getData();
  2975.                 }
  2976.               break;
  2977.             }
  2978.         }
  2979.       break;
  2980.       case CC1000RadioIntM$DISABLED_STATE: 
  2981.         break;
  2982.       case CC1000RadioIntM$IDLE_STATE: 
  2983.         {
  2984.           CC1000RadioIntM$receive_sum++;
  2985.           if (data_in == 0xaa || data_in == 0x55) {
  2986.               CC1000RadioIntM$PreambleCount++;
  2987.               if (CC1000RadioIntM$PreambleCount > 2) {
  2988.                   CC1000RadioIntM$PreambleCount = CC1000RadioIntM$SOFCount = 0;
  2989.                   CC1000RadioIntM$RxBitOffset = CC1000RadioIntM$RxByteCnt = 0;
  2990.                   CC1000RadioIntM$usRunningCRC = 0;
  2991.                   CC1000RadioIntM$rxlength = MSG_DATA_SIZE - 2;
  2992.                   CC1000RadioIntM$RadioState = CC1000RadioIntM$SYNC_STATE;
  2993.                 }
  2994.             }
  2995.           else 
  2996. #line 1350
  2997.             {
  2998.               if ((CC1000RadioIntM$currentMAC == CC1000RadioIntM$BMAC || CC1000RadioIntM$enableHCL == FALSE) || !CC1000RadioIntM$IsHCL(CC1000RadioIntM$currentSlot)) {
  2999.                   if (CC1000RadioIntM$bTxPending && --CC1000RadioIntM$sMacDelay <= 0) {
  3000.                       CC1000RadioIntM$RadioState = CC1000RadioIntM$PRETX_STATE;
  3001.                       CC1000RadioIntM$RSSIInitState = CC1000RadioIntM$PRETX_STATE;
  3002.                       CC1000RadioIntM$bRSSIValid = FALSE;
  3003.                       CC1000RadioIntM$iRSSIcount = 0;
  3004.                       CC1000RadioIntM$PreambleCount = 0;
  3005.                       CC1000RadioIntM$RSSIADC$getData();
  3006.                     }
  3007.                 }
  3008.               else 
  3009. #line 1360
  3010.                 {
  3011.                 }
  3012.             }
  3013.         }
  3014.       break;
  3015.       case CC1000RadioIntM$PRETX_STATE: 
  3016.         {
  3017.           CC1000RadioIntM$receive_sum++;
  3018.           if (data_in == 0xaa || data_in == 0x55) {
  3019.               CC1000RadioIntM$sMacDelay = CC1000RadioIntM$MacBackoff$congestionBackoff(CC1000RadioIntM$txbufptr);
  3020.               CC1000RadioIntM$RadioState = CC1000RadioIntM$IDLE_STATE;
  3021.             }
  3022.         }
  3023.       break;
  3024.       case CC1000RadioIntM$SYNC_STATE: 
  3025.         {
  3026.           uint8_t i;
  3027.           CC1000RadioIntM$receive_sum++;
  3028.           if (data_in == 0xaa || data_in == 0x55) {
  3029.               CC1000RadioIntM$RxShiftBuf.MSB = data_in;
  3030.             }
  3031.           else {
  3032.               uint16_t usTmp;
  3033. #line 1405
  3034.               switch (CC1000RadioIntM$SOFCount) {
  3035.                   case 0: 
  3036.                     CC1000RadioIntM$RxShiftBuf.LSB = data_in;
  3037.                   break;
  3038.                   case 1: 
  3039.                     case 2: 
  3040.                       case 3: 
  3041.                         case 4: 
  3042.                           case 5: 
  3043.                             usTmp = CC1000RadioIntM$RxShiftBuf.W;
  3044.                   CC1000RadioIntM$RxShiftBuf.W <<= 8;
  3045.                   CC1000RadioIntM$RxShiftBuf.LSB = data_in;
  3046.                   for (i = 0; i < 8; i++) {
  3047.                       usTmp <<= 1;
  3048.                       if (data_in & 0x80) {
  3049.                         usTmp |= 0x1;
  3050.                         }
  3051. #line 1424
  3052.                       data_in <<= 1;
  3053.                       if (usTmp == CC1000RadioIntM$SYNC_WORD) {
  3054.                           if (CC1000RadioIntM$rxbufptr->length != 0) {
  3055.                               CC1000RadioIntM$Leds$redToggle();
  3056.                               CC1000RadioIntM$RadioState = CC1000RadioIntM$IDLE_STATE;
  3057.                             }
  3058.                           else {
  3059.                               CC1000RadioIntM$RadioState = CC1000RadioIntM$RX_STATE;
  3060.                               CC1000RadioIntM$RSSIInitState = CC1000RadioIntM$RX_STATE;
  3061.                               CC1000RadioIntM$RSSIADC$getData();
  3062.                               CC1000RadioIntM$RxBitOffset = 7 - i;
  3063.                               CC1000RadioIntM$RadioReceiveCoordinator$startSymbol(8, CC1000RadioIntM$RxBitOffset, CC1000RadioIntM$rxbufptr);
  3064.                             }
  3065.                           break;
  3066.                         }
  3067.                     }
  3068.                   break;
  3069.                   default: 
  3070.                     CC1000RadioIntM$RadioState = CC1000RadioIntM$IDLE_STATE;
  3071.                   break;
  3072.                 }
  3073.               CC1000RadioIntM$SOFCount++;
  3074.             }
  3075.         }
  3076.       break;
  3077.       case CC1000RadioIntM$RX_STATE: 
  3078.         {
  3079.           char Byte;
  3080. #line 1462
  3081.           CC1000RadioIntM$receive_sum++;
  3082.           CC1000RadioIntM$RxShiftBuf.W <<= 8;
  3083.           CC1000RadioIntM$RxShiftBuf.LSB = data_in;
  3084.           Byte = CC1000RadioIntM$RxShiftBuf.W >> CC1000RadioIntM$RxBitOffset;
  3085.           ((char *)CC1000RadioIntM$rxbufptr)[(int )CC1000RadioIntM$RxByteCnt] = Byte;
  3086.           CC1000RadioIntM$RxByteCnt++;
  3087.           CC1000RadioIntM$RadioReceiveCoordinator$byte(CC1000RadioIntM$rxbufptr, (uint8_t )CC1000RadioIntM$RxByteCnt);
  3088.           if (CC1000RadioIntM$RxByteCnt < CC1000RadioIntM$rxlength) {
  3089.               CC1000RadioIntM$usRunningCRC = crcByte(CC1000RadioIntM$usRunningCRC, Byte);
  3090.               if (CC1000RadioIntM$RxByteCnt == (size_t )& ((struct TOS_Msg *)0)->length + 
  3091.               sizeof  ((struct TOS_Msg *)0)->length) {
  3092.                   CC1000RadioIntM$rxlength = CC1000RadioIntM$rxbufptr->length;
  3093.                   if (CC1000RadioIntM$rxlength > 29) {
  3094.                       CC1000RadioIntM$rxbufptr->length = 0;
  3095.                       CC1000RadioIntM$RadioState = CC1000RadioIntM$IDLE_STATE;
  3096.                       return SUCCESS;
  3097.                     }
  3098.                   CC1000RadioIntM$rxlength += (size_t )& ((struct TOS_Msg *)0)->data;
  3099.                 }
  3100.             }
  3101.           else {
  3102. #line 1489
  3103.             if (CC1000RadioIntM$RxByteCnt == CC1000RadioIntM$rxlength) {
  3104.                 if (CC1000RadioIntM$rxbufptr->type == 223) {
  3105.                   CC1000RadioIntM$getTimeDiff();
  3106.                   }
  3107. #line 1492
  3108.                 CC1000RadioIntM$usRunningCRC = crcByte(CC1000RadioIntM$usRunningCRC, Byte);
  3109.                 CC1000RadioIntM$RxByteCnt = (size_t )& ((struct TOS_Msg *)0)->crc;
  3110.               }
  3111.             else {
  3112. #line 1496
  3113.               if (CC1000RadioIntM$RxByteCnt >= MSG_DATA_SIZE) {
  3114.                   if (CC1000RadioIntM$rxbufptr->crc == CC1000RadioIntM$usRunningCRC) {
  3115.                       if (CC1000RadioIntM$rxbufptr->type == 223) {
  3116.                         TOS_post(CC1000RadioIntM$adjustTime);
  3117.                         }
  3118. #line 1503
  3119.                       CC1000RadioIntM$rxbufptr->crc = 1;
  3120.                       if (CC1000RadioIntM$bAckEnable && CC1000RadioIntM$rxbufptr->addr == TOS_LOCAL_ADDRESS) {
  3121.                           CC1000RadioIntM$RadioState = CC1000RadioIntM$SENDING_ACK;
  3122.                           CC1000RadioIntM$CC1000Control$TxMode();
  3123.                           CC1000RadioIntM$SpiByteFifo$txMode();
  3124.                           CC1000RadioIntM$SpiByteFifo$writeByte(0xaa);
  3125.                           CC1000RadioIntM$RxByteCnt = 0;
  3126.                           return SUCCESS;
  3127.                         }
  3128.                     }
  3129.                   else {
  3130.                       CC1000RadioIntM$rxbufptr->crc = 0;
  3131.                     }
  3132.                   CC1000RadioIntM$SpiByteFifo$disableIntr();
  3133.                   CC1000RadioIntM$RadioState = CC1000RadioIntM$IDLE_STATE;
  3134.                   if (CC1000RadioIntM$currentMAC == CC1000RadioIntM$ZMAC && CC1000RadioIntM$bTxPending) {
  3135.                       CC1000RadioIntM$sMacDelay = CC1000RadioIntM$getZMACBackoff(CC1000RadioIntM$sMacDelay);
  3136.                     }
  3137.                   CC1000RadioIntM$rxbufptr->strength = CC1000RadioIntM$usRSSIVal;
  3138.                   if (!TOS_post(CC1000RadioIntM$PacketRcvd)) {
  3139.                       CC1000RadioIntM$rxbufptr->length = 0;
  3140.                       CC1000RadioIntM$RadioState = CC1000RadioIntM$IDLE_STATE;
  3141.                       CC1000RadioIntM$SpiByteFifo$enableIntr();
  3142.                     }
  3143.                   CC1000RadioIntM$RSSIInitState = CC1000RadioIntM$RadioState;
  3144.                   CC1000RadioIntM$RSSIADC$getData();
  3145.                 }
  3146.               }
  3147.             }
  3148.         }
  3149. #line 1541
  3150.       break;
  3151.       case CC1000RadioIntM$SENDING_ACK: 
  3152.         {
  3153.           CC1000RadioIntM$send_sum++;
  3154.           CC1000RadioIntM$RxByteCnt++;
  3155.           if (CC1000RadioIntM$RxByteCnt >= CC1000RadioIntM$ACK_LENGTH) {
  3156.               CC1000RadioIntM$CC1000Control$RxMode();
  3157.               CC1000RadioIntM$SpiByteFifo$rxMode();
  3158.               CC1000RadioIntM$SpiByteFifo$disableIntr();
  3159.               CC1000RadioIntM$RadioState = CC1000RadioIntM$IDLE_STATE;
  3160.               CC1000RadioIntM$rxbufptr->strength = CC1000RadioIntM$usRSSIVal;
  3161.               if (!TOS_post(CC1000RadioIntM$PacketRcvd)) {
  3162.                   CC1000RadioIntM$rxbufptr->length = 0;
  3163.                   CC1000RadioIntM$RadioState = CC1000RadioIntM$IDLE_STATE;
  3164.                   CC1000RadioIntM$SpiByteFifo$enableIntr();
  3165.                 }
  3166.             }
  3167.           else {
  3168. #line 1558
  3169.             if (CC1000RadioIntM$RxByteCnt >= CC1000RadioIntM$ACK_LENGTH - sizeof CC1000RadioIntM$ack_code) {
  3170.                 CC1000RadioIntM$SpiByteFifo$writeByte(CC1000RadioIntM$ack_code[CC1000RadioIntM$RxByteCnt + sizeof CC1000RadioIntM$ack_code - CC1000RadioIntM$ACK_LENGTH]);
  3171.               }
  3172.             }
  3173.         }
  3174. #line 1562
  3175.       break;
  3176.       default: 
  3177.         break;
  3178.     }
  3179.   if (CC1000RadioIntM$pulse_check_sum > CC1000RadioIntM$CHECK_MA_COUNT) {
  3180.       CC1000RadioIntM$power_sum++;
  3181.       CC1000RadioIntM$sp_sum++;
  3182.       CC1000RadioIntM$pulse_check_sum -= CC1000RadioIntM$CHECK_MA_COUNT;
  3183.     }
  3184.   if (CC1000RadioIntM$send_sum > CC1000RadioIntM$SEND_MA_COUNT) {
  3185.       CC1000RadioIntM$power_sum++;
  3186.       CC1000RadioIntM$tx_sum++;
  3187.       CC1000RadioIntM$send_sum -= CC1000RadioIntM$SEND_MA_COUNT;
  3188.     }
  3189.   if (CC1000RadioIntM$receive_sum > CC1000RadioIntM$RECEIVE_MA_COUNT) {
  3190.       CC1000RadioIntM$power_sum++;
  3191.       CC1000RadioIntM$rx_sum++;
  3192.       CC1000RadioIntM$receive_sum -= CC1000RadioIntM$RECEIVE_MA_COUNT;
  3193.     }
  3194.   return SUCCESS;
  3195. }
  3196. static 
  3197. #line 275
  3198. void CC1000RadioIntM$SubTime(GTime *C, GTime *A, GTime *B)
  3199. #line 275
  3200. {
  3201.   if (B->sticks > A->sticks) {
  3202.       C->sticks = CC1000RadioIntM$MAX_VAL - (B->sticks - A->sticks);
  3203.       C->mticks = A->mticks - (B->mticks + 1);
  3204.     }
  3205.   else {
  3206.       C->sticks = A->sticks - B->sticks;
  3207.       C->mticks = A->mticks - B->mticks;
  3208.     }
  3209. }
  3210. static  
  3211. #line 432
  3212. void CC1000RadioIntM$PacketRcvd(void)
  3213. #line 432
  3214. {
  3215.   TOS_MsgPtr pBuf;
  3216.   ecnForwardMsgType *recvEcnMsgPtr;
  3217.   ecnForwardMsgType *ecnForwardMsgPtr;
  3218. #line 436
  3219.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  3220. #line 436
  3221.     {
  3222.       if (CC1000RadioIntM$pktsLastSync > 100) {
  3223.           {
  3224.             CC1000RadioIntM$ackOrig = CC1000RadioIntM$bAckEnable;
  3225.             CC1000RadioIntM$bAckEnable = FALSE;
  3226.           }
  3227.           CC1000RadioIntM$Send$send(&CC1000RadioIntM$syncMsgHdr);
  3228.           CC1000RadioIntM$pktsLastSync = 0;
  3229.         }
  3230.       CC1000RadioIntM$pktsLastSync++;
  3231.       CC1000RadioIntM$rxbufptr->time = 0;
  3232.       pBuf = CC1000RadioIntM$rxbufptr;
  3233.       recvEcnMsgPtr = (ecnForwardMsgType *)CC1000RadioIntM$rxbufptr->data;
  3234.       ecnForwardMsgPtr = (ecnForwardMsgType *)CC1000RadioIntM$ecnForwardMsgHdr.data;
  3235.       if (CC1000RadioIntM$currentMAC == CC1000RadioIntM$ZMAC && CC1000RadioIntM$HCLselect && pBuf->type == 222 && pBuf->crc != 0 && 
  3236.       recvEcnMsgPtr->senderAddress != TOS_LOCAL_ADDRESS) {
  3237.           if (recvEcnMsgPtr->hopCount == 0 && recvEcnMsgPtr->nextHop == TOS_LOCAL_ADDRESS) {
  3238.               ecnForwardMsgPtr->hopCount = 1;
  3239.               ecnForwardMsgPtr->nextHop = CC1000RadioIntM$nextHop;
  3240.               ecnForwardMsgPtr->senderAddress = TOS_LOCAL_ADDRESS;
  3241.               if (!CC1000RadioIntM$bTxBusy) {
  3242.                   CC1000RadioIntM$ackOrig = CC1000RadioIntM$bAckEnable;
  3243.                   CC1000RadioIntM$bAckEnable = FALSE;
  3244.                   CC1000RadioIntM$Send$send(&CC1000RadioIntM$ecnForwardMsgHdr);
  3245.                 }
  3246.               else {
  3247.                 CC1000RadioIntM$ecnforward = TRUE;
  3248.                 }
  3249.             }
  3250.           else {
  3251. #line 477
  3252.             if (recvEcnMsgPtr->hopCount == 1) {
  3253.                 CC1000RadioIntM$enableHCL = TRUE;
  3254.                 if (recvEcnMsgPtr->senderAddress == CC1000RadioIntM$nextHop) {
  3255.                     CC1000RadioIntM$ecnPending = FALSE;
  3256.                     CC1000RadioIntM$slots_since_ecnsend = 0;
  3257.                     CC1000RadioIntM$slots_since_ecnrecv = 0;
  3258.                   }
  3259.               }
  3260.             }
  3261.         }
  3262.       else {
  3263. #line 492
  3264.         if (pBuf->type != 223 && pBuf->type != 222) {
  3265.             pBuf = CC1000RadioIntM$Receive$receive((TOS_MsgPtr )pBuf);
  3266.           }
  3267.         }
  3268.       if (pBuf) {
  3269.         CC1000RadioIntM$rxbufptr = pBuf;
  3270.         }
  3271. #line 501
  3272.       CC1000RadioIntM$rxbufptr->length = 0;
  3273.     }
  3274. #line 502
  3275.     __nesc_atomic_end(__nesc_atomic); }
  3276.   CC1000RadioIntM$SpiByteFifo$enableIntr();
  3277. }
  3278. # 124 "../../tos/platform/mica2/HPLSClock.nc"
  3279. void __attribute((interrupt))   __vector_26(void)
  3280. #line 124
  3281. {
  3282.   if (HPLSClock$needupdate) {
  3283.       if (HPLSClock$sign == NEGATIVE) {
  3284.           * (volatile uint16_t *)0x88 = MAX_VAL - HPLSClock$Update.sticks;
  3285.           HPLSClock$MTicks = HPLSClock$MTicks - HPLSClock$Update.mticks;
  3286.         }
  3287.       else {
  3288. #line 130
  3289.         if (HPLSClock$sign == POSITIVE) {
  3290.             * (volatile uint16_t *)0x88 = HPLSClock$Update.sticks;
  3291.             HPLSClock$MTicks = HPLSClock$MTicks + HPLSClock$Update.mticks + 1;
  3292.             HPLSClock$SClock$fire(HPLSClock$MTicks);
  3293.           }
  3294.         }
  3295. #line 135
  3296.       HPLSClock$needupdate = 0;
  3297.       HPLSClock$SClock$syncDone();
  3298.     }
  3299.   else {
  3300.       HPLSClock$MTicks++;
  3301.       HPLSClock$SClock$fire(HPLSClock$MTicks);
  3302.     }
  3303. }
  3304. static   
  3305. # 348 "/home/testuser/tinyos-1.x/tos/system/FramerM.nc"
  3306. result_t FramerM$ByteComm$rxByteReady(uint8_t data, bool error, uint16_t strength)
  3307. #line 348
  3308. {
  3309.   switch (FramerM$gRxState) {
  3310.       case FramerM$RXSTATE_NOSYNC: 
  3311.         if (data == FramerM$HDLC_FLAG_BYTE && FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Length == 0) {
  3312.             FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Token = 0;
  3313.             FramerM$gRxByteCnt = FramerM$gRxRunningCRC = 0;
  3314.             FramerM$gpRxBuf = (uint8_t *)FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].pMsg;
  3315.             FramerM$gRxState = FramerM$RXSTATE_PROTO;
  3316.           }
  3317.       break;
  3318.       case FramerM$RXSTATE_PROTO: 
  3319.         if (data == FramerM$HDLC_FLAG_BYTE) {
  3320.             break;
  3321.           }
  3322.       FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Proto = data;
  3323.       FramerM$gRxRunningCRC = crcByte(FramerM$gRxRunningCRC, data);
  3324.       switch (data) {
  3325.           case FramerM$PROTO_PACKET_ACK: 
  3326.             FramerM$gRxState = FramerM$RXSTATE_TOKEN;
  3327.           break;
  3328.           case FramerM$PROTO_PACKET_NOACK: 
  3329.             FramerM$gRxState = FramerM$RXSTATE_INFO;
  3330.           break;
  3331.           default: 
  3332.             FramerM$gRxState = FramerM$RXSTATE_NOSYNC;
  3333.           break;
  3334.         }
  3335.       break;
  3336.       case FramerM$RXSTATE_TOKEN: 
  3337.         if (data == FramerM$HDLC_FLAG_BYTE) {
  3338.             FramerM$gRxState = FramerM$RXSTATE_NOSYNC;
  3339.           }
  3340.         else {
  3341. #line 384
  3342.           if (data == FramerM$HDLC_CTLESC_BYTE) {
  3343.               FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Token = 0x20;
  3344.             }
  3345.           else {
  3346.               FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Token ^= data;
  3347.               FramerM$gRxRunningCRC = crcByte(FramerM$gRxRunningCRC, FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Token);
  3348.               FramerM$gRxState = FramerM$RXSTATE_INFO;
  3349.             }
  3350.           }
  3351. #line 392
  3352.       break;
  3353.       case FramerM$RXSTATE_INFO: 
  3354.         if (FramerM$gRxByteCnt > FramerM$HDLC_MTU) {
  3355.             FramerM$gRxByteCnt = FramerM$gRxRunningCRC = 0;
  3356.             FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Length = 0;
  3357.             FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Token = 0;
  3358.             FramerM$gRxState = FramerM$RXSTATE_NOSYNC;
  3359.           }
  3360.         else {
  3361. #line 402
  3362.           if (data == FramerM$HDLC_CTLESC_BYTE) {
  3363.               FramerM$gRxState = FramerM$RXSTATE_ESC;
  3364.             }
  3365.           else {
  3366. #line 405
  3367.             if (data == FramerM$HDLC_FLAG_BYTE) {
  3368.                 if (FramerM$gRxByteCnt >= 2) {
  3369.                     uint16_t usRcvdCRC = FramerM$gpRxBuf[FramerM$gRxByteCnt - 1] & 0xff;
  3370. #line 408
  3371.                     usRcvdCRC = (usRcvdCRC << 8) | (FramerM$gpRxBuf[FramerM$gRxByteCnt - 2] & 0xff);
  3372.                     if (usRcvdCRC == FramerM$gRxRunningCRC) {
  3373.                         FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Length = FramerM$gRxByteCnt - 2;
  3374.                         TOS_post(FramerM$PacketRcvd);
  3375.                         FramerM$gRxHeadIndex++;
  3376. #line 412
  3377.                         FramerM$gRxHeadIndex %= FramerM$HDLC_QUEUESIZE;
  3378.                       }
  3379.                     else {
  3380.                         FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Length = 0;
  3381.                         FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Token = 0;
  3382.                       }
  3383.                     if (FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Length == 0) {
  3384.                         FramerM$gpRxBuf = (uint8_t *)FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].pMsg;
  3385.                         FramerM$gRxState = FramerM$RXSTATE_PROTO;
  3386.                       }
  3387.                     else {
  3388.                         FramerM$gRxState = FramerM$RXSTATE_NOSYNC;
  3389.                       }
  3390.                   }
  3391.                 else {
  3392.                     FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Length = 0;
  3393.                     FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Token = 0;
  3394.                     FramerM$gRxState = FramerM$RXSTATE_NOSYNC;
  3395.                   }
  3396.                 FramerM$gRxByteCnt = FramerM$gRxRunningCRC = 0;
  3397.               }
  3398.             else {
  3399.                 FramerM$gpRxBuf[FramerM$gRxByteCnt] = data;
  3400.                 if (FramerM$gRxByteCnt >= 2) {
  3401.                     FramerM$gRxRunningCRC = crcByte(FramerM$gRxRunningCRC, FramerM$gpRxBuf[FramerM$gRxByteCnt - 2]);
  3402.                   }
  3403.                 FramerM$gRxByteCnt++;
  3404.               }
  3405.             }
  3406.           }
  3407. #line 440
  3408.       break;
  3409.       case FramerM$RXSTATE_ESC: 
  3410.         if (data == FramerM$HDLC_FLAG_BYTE) {
  3411.             FramerM$gRxByteCnt = FramerM$gRxRunningCRC = 0;
  3412.             FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Length = 0;
  3413.             FramerM$gMsgRcvTbl[FramerM$gRxHeadIndex].Token = 0;
  3414.             FramerM$gRxState = FramerM$RXSTATE_NOSYNC;
  3415.           }
  3416.         else {
  3417.             data = data ^ 0x20;
  3418.             FramerM$gpRxBuf[FramerM$gRxByteCnt] = data;
  3419.             if (FramerM$gRxByteCnt >= 2) {
  3420.                 FramerM$gRxRunningCRC = crcByte(FramerM$gRxRunningCRC, FramerM$gpRxBuf[FramerM$gRxByteCnt - 2]);
  3421.               }
  3422.             FramerM$gRxByteCnt++;
  3423.             FramerM$gRxState = FramerM$RXSTATE_INFO;
  3424.           }
  3425.       break;
  3426.       default: 
  3427.         FramerM$gRxState = FramerM$RXSTATE_NOSYNC;
  3428.       break;
  3429.     }
  3430.   return SUCCESS;
  3431. }
  3432. static   
  3433. # 87 "/home/testuser/tinyos-1.x/tos/system/UARTM.nc"
  3434. result_t UARTM$HPLUART$putDone(void)
  3435. #line 87
  3436. {
  3437.   bool oldState;
  3438.   { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  3439. #line 90
  3440.     {
  3441.       {
  3442.       }
  3443. #line 91
  3444.       ;
  3445.       oldState = UARTM$state;
  3446.       UARTM$state = FALSE;
  3447.     }
  3448. #line 94
  3449.     __nesc_atomic_end(__nesc_atomic); }
  3450.   if (oldState) {
  3451.       UARTM$ByteComm$txDone();
  3452.       UARTM$ByteComm$txByteReady(TRUE);
  3453.     }
  3454.   return SUCCESS;
  3455. }
  3456. static 
  3457. # 469 "/home/testuser/tinyos-1.x/tos/system/FramerM.nc"
  3458. result_t FramerM$TxArbitraryByte(uint8_t inByte)
  3459. #line 469
  3460. {
  3461.   if (inByte == FramerM$HDLC_FLAG_BYTE || inByte == FramerM$HDLC_CTLESC_BYTE) {
  3462.       { __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();
  3463. #line 471
  3464.         {
  3465.           FramerM$gPrevTxState = FramerM$gTxState;
  3466.           FramerM$gTxState = FramerM$TXSTATE_ESC;
  3467.           FramerM$gTxEscByte = inByte;
  3468.         }
  3469. #line 475
  3470.         __nesc_atomic_end(__nesc_atomic); }
  3471.       inByte = FramerM$HDLC_CTLESC_BYTE;
  3472.     }
  3473.   return FramerM$ByteComm$txByte(inByte);
  3474. }