?? coordinator.c.bak
字號:
/**************************************************************************** * * MODULE: Demo coordinator code * * COMPONENT: $RCSfile: Coordinator.c,v $ * * VERSION: $Name: zed003_cd $ * * REVISION: $Revision: 1.12 $ * * DATED: $Date: 2006/02/23 09:51:26 $ * * STATUS: $State: Exp $ * * AUTHOR: CJG * * DESCRIPTION: * Coordinator for demonstrator. Acts as time coordinator for up to four * sensor endpoints and manages LCD panel and keys on central coordinator. * * LAST MODIFIED BY: $Author: cjg $ * $Modtime: $ * **************************************************************************** * * (c) Copyright 2005 JENNIC Ltd * ****************************************************************************//****************************************************************************//*** Include files ***//****************************************************************************/#include "jendefs.h"#include "LcdDriver.h"#include "ALSdriver.h"#include "HTSdriver.h"#include "DemoConfig.h"#include <AppHardwareApi.h>#include "JennicLogo.h"#include <AppQueueApi.h>#include <mac_sap.h>#include <mac_pib.h>#include <string.h>#include "LedControl.h"#include "Button.h"#include "Utilities.h"#include "gdb.h"#include <AppApi.h>/****************************************************************************//*** Macro Definitions ***//****************************************************************************//* Block (time slice) values */#define BLOCK_TIME_IN_32K_PERIODS 600#define BLOCK_MIN_RX 2#define BLOCK_UPDATE (BLOCK_MIN_RX + DEMO_ENDPOINTS)#define BLOCK_START_TEMP 13#define BLOCK_READ_TEMP 15#define BLOCK_START_HUMIDITY 16#define BLOCK_READ_HUMIDITY 18#define BLOCK_READ_LIGHT 19#define MAX_BLOCKS 20#define desk 1/* Control screen and alarm values */#define CONTROL_LIST_LEN 4#define TEMP_HIGH_MAX 100#define LIGHT_HIGH_MAX 6/* Setup screen values */#define SETUP_LIST_LEN 2#define FRAMES_MISSED_INDICATION 9/****************************************************************************//*** Type Definitions ***//****************************************************************************//* Holds all stored data for a particular sensor for a node */typedef struct{ uint8 u8NowValue; uint8 u8HighAlarm; uint8 u8LowAlarm; uint8 au8GraphData[DEMO_HISTORY_LEN]; uint8 test;} tsNodeElementData;/* Holds all stored data for a node */typedef struct{ bool_t boDeviceOn; tsNodeElementData asNodeElementData[DEMO_SENSOR_LIST_LEN]; uint8 u8PrevRxCount; uint8 u8FramesMissed; uint8 u8SwitchOn; uint8 u8Rssi;} tsNodeData;/* Used to track an association between extended address and short address */typedef struct{ MAC_ExtAddr_s sExtAddr; uint16 u16ShortAddr;} tsAssocNodes;/* System states with respect to screen display being shown */typedef enum{ E_STATE_NETWORK, E_STATE_NODE, E_STATE_NODE_CONTROL, E_STATE_SET_CHANNEL, E_STATE_SETUP_SCREEN, E_STATE_SCANNING, E_STATE_YESORNO} teState;/* Button values */typedef enum{ E_KEY_0 = BUTTON_0_MASK, E_KEY_1 = BUTTON_1_MASK, E_KEY_2 = BUTTON_2_MASK, E_KEY_3 = BUTTON_3_MASK, /*E_KEY_0 = 0, //E_KEY_1 = 1, E_KEY_2 = 2, E_KEY_3 = 3, E_KEY_4 = 4, E_KEY_5 = 5, E_KEY_6 = 6, E_KEY_7 = 7, E_KEY_8 = 8, E_KEY_9 = 9, E_KEY_Enter = 10, E_KEY_Esc = 11, E_KEY_Del = 12, E_KEY_Up = 13, E_KEY_Down = 14, E_KEY_15 = 15, */ E_KEYS_0_AND_3 = (BUTTON_0_MASK | BUTTON_3_MASK)} teKeyValues;/* All application data with scope within the entire file is kept here, including all stored node data, GUI settings and current state */typedef struct{ struct { tsNodeData asNodeData[DEMO_ENDPOINTS]; tsAssocNodes asAssocNodes[DEMO_ENDPOINTS]; bool_t bLocalNode; uint8 u8AssociatedNodes; } sNode; struct { teSensor eCurrentSensor; uint8 u8CurrentNode; uint8 u8GraphPos; uint8 u8ControlSelection; uint8 u8SetupSelection; bool_t bShowFourNodes; } sGui; struct { teState eState; uint8 u8Channel; uint32 u32AppApiVersion; uint32 u32HwApiVersion; uint32 u32CalibratedTimeout; } sSystem;} tsDemoData;/****************************************************************************//*** Local Function Prototypes ***//****************************************************************************/PRIVATE void vDisplayfood(void);PRIVATE void vDisplayEnter(void);PRIVATE void vInitSystem(void);PRIVATE void vInitCoord(void);PRIVATE void vSetTimer(void);PRIVATE void vProcessCurrentTimeBlock(uint8 u8TimeBlock);PRIVATE bool_t bProcessKeys(uint8 *pu8Keys);PRIVATE uint8 u8UpdateTimeBlock(uint8 u8TimeBlock);PRIVATE void vProcessInterrupts(void);PRIVATE void vProcessUpdateBlock(void);PRIVATE void vProcessIncomingData(MAC_McpsDcfmInd_s *psMcpsInd);PRIVATE void vProcessIncomingMlme(MAC_MlmeDcfmInd_s *psMlmeInd);PRIVATE bool_t bProcessForTimeout(AppQApiHwInd_s *psHardwareInd);//PRIVATE void vProcessNetworkKeyPress(uint8 u8KeyMap);//PRIVATE void vUpdateNetworkSensor(teSensor eSensor);PRIVATE void vProcessNodeKeyPress(uint8 u8KeyMap);PRIVATE void vProcessyesornoKeyPress(uint8 u8KeyMap);PRIVATE void vProcessNodeControlKeyPress(uint8 u8KeyMap);PRIVATE void vProcessSetChannelKeyPress(uint8 u8KeyMap);PRIVATE void vProcessSetupKeyPress(uint8 u8KeyMap);PRIVATE void vBuildSetChannelScreen(void);//PRIVATE void vUpdateSetChannelScreen(void);//PRIVATE void vBuildSetupScreen(void);PRIVATE void vUpdateSetupScreen(uint8 u8Selection, bool_t boUpdate);PRIVATE void vBuildNetworkScreen(teSensor eSensor);PRIVATE void vUpdateNetworkScreen(teSensor eSensor);PRIVATE void vBuildNodeScreen(uint8 u8Node);PRIVATE void vUpdateNodeScreen(uint8 u8Node);//PRIVATE void vBuildNodeControlScreen(uint8 u8Node);PRIVATE void vUpdateNodeControlScreen(uint8 u8Node, uint8 u8Selection, bool_t boUpdate);PRIVATE void vLcdUpdateElement(tsNodeData *psNodeData, teSensor eSensor, uint8 u8Row, uint8 u8Col, bool_t bShowRssi);PRIVATE void vDrawGraph(uint8 *pu8GraphData, uint8 u8StartCol, uint8 u8StartRow);PRIVATE void vStringCopy(char *pcFrom,char *pcTo);PRIVATE void vValToDec(char *pcOutString, uint8 u8Value, char *pcLabel);PRIVATE void vAdjustAlarm(uint8 *pu8Value, uint8 u8MaxValue, uint8 u8OffValue, bool_t bUpNotDown);PRIVATE void vStartBeacon(void);PRIVATE void vUpdateBeaconPayload(void);PRIVATE void vDisplayError(char *pcErrorMessage, uint32 u32Data);PRIVATE void vWriteOnOff(bool_t bOnOff, uint8 u8Row, uint8 u8Col);PRIVATE void vToggleOnOff(bool_t *pbItem);PRIVATE void vWriteRowLabel(uint8 u8Selection, char **ppcRowName, uint8 u8ListLen);#ifdef UART0_DEBUGPRIVATE void vDebug(char *pcMessage);PRIVATE void vDisplayHex(uint32 u32Data, int iSize);#endif/****************************************************************************//*** Exported Variables ***//****************************************************************************//****************************************************************************//*** Local Variables ***//****************************************************************************//* Handles from the MAC */PRIVATE void *s_pvMac;PRIVATE MAC_Pib_s *s_psMacPib;/* File scope data */PRIVATE tsDemoData sDemoData;uint16 ti=0;int8 ackack[20],item[20];uint8 itemCount;uint8 A, B, C,D,k,i=70,ack;uint8 S,kk,SS;uint16 dd=1;char AA,BB;bool send;uint8 foodcount;uint8 food[20];/* Row and column positions of info fields on LCD */static const uint8 au8NodeLcdRow[DEMO_ENDPOINTS] = {0, 0, 3, 3};static const uint8 au8NodeLcdCol[DEMO_ENDPOINTS] = {0, 64, 0, 64};static const char *apcNodeNameList[DEMO_ENDPOINTS] = { "Hall", "Desk A", "Lounge", "Bathroom"};/****************************************************************************//*** Exported Functions ***//****************************************************************************//**************************************************************************** * * NAME: AppColdStart * * DESCRIPTION: * Entry point for application from boot loader. Initialises system and runs * main loop. * * RETURNS: * Never returns. * ****************************************************************************/PUBLIC void AppColdStart(void){ uint8 u8Keys; uint8 u8TimeBlock; bool_t bExitMainLoop; /* Debug hooks: include these regardless of whether debugging or not */ HAL_GDB_INIT(); HAL_BREAKPOINT(); /* General initialisation: reset hardware, set some values in PIB */ vInitSystem(); /* Main application loop. This loop is iterated whenever a soft reset is performed */ while (1) { /* Initialise software elements */ vInitCoord(); /* Set simple scheduler to perform no activity */ u8TimeBlock = MAX_BLOCKS; /* Build channel set screen */ vBuildSetChannelScreen(); /* Change to channel setting state */ sDemoData.sSystem.eState = E_STATE_SET_CHANNEL; /* Get current key state. This is necessary after a soft reset as keys will still be down when entering the main loop */ u8Keys = u8ButtonReadFfd(); send = FALSE; /* Run main loop. The timer ensures that this runs 20 times per second, which allows a simple scheduler to run to start reads from the sensors, read results from the sensors and update the display. It also allows for simple button debounce by only sampling the buttons once during each interval. */ do { /* Set the timer for the next interval */ vSetTimer(); /* Perform scheduler action 磅︽睲蟲笆
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -