123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670 |
- /*====================================================================*
- *
- * Copyright (c) 2013 Qualcomm Atheros, Inc.
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted (subject to the limitations
- * in the disclaimer below) provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * * Neither the name of Qualcomm Atheros nor the names of
- * its contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
- * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE
- * COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *--------------------------------------------------------------------*/
- #ifndef PLC_HEADER
- #define PLC_HEADER
- /*====================================================================*
- * system header files;
- *--------------------------------------------------------------------*/
- #include <stdint.h>
- /*====================================================================*
- * custom header files;
- *--------------------------------------------------------------------*/
- #include "../ether/channel.h"
- #include "../key/HPAVKey.h"
- #include "../tools/types.h"
- #include "../plc/chipset.h"
- #include "../mme/mme.h"
- #include "../nvm/nvm.h"
- #include "../pib/pib.h"
- /*====================================================================*
- * constants; these codes are returned in the DEVICEID field of the
- * firmware VS_SW_VER message;
- *--------------------------------------------------------------------*/
- #define PLC_MODULE_SOFTLOADER 0x00
- #define PLC_MODULE_FIRMWARE (1 << 0)
- #define PLC_MODULE_PARAMETERS (1 << 1)
- #define PLC_MODULE_NVM_PIB (PLC_MODULE_PARAMETERS | PLC_MODULE_FIRMWARE)
- #define PLC_MODULE_OPERATION (1 << 3)
- #define PLC_MODULE_UPGRADE (PLC_MODULE_OPERATION | PLC_MODULE_PARAMETERS | PLC_MODULE_FIRMWARE)
- #define PLC_MODULE_FORCE_FLASH (1 << 4)
- #define PLC_MODULE_DO_NOT_REBOOT (1 << 5)
- #define PLC_MODULE_ALTERNATE_SECTION (1 << 6)
- #define PLC_MODULE_FORCE_SECTION (1 << 7)
- /*====================================================================*
- * constants;
- *--------------------------------------------------------------------*/
- #define PLC_VERSION_STRING 0xFF
- #define PLC_RECORD_SIZE 1024
- #define PLC_MODULE_SIZE 1400
- #define PLC_SLOTS 6
- #define LEGACY_PIBOFFSET 0x01F00000
- #define INT6x00_PIBOFFSET 0x01000000
- #define AR7x00_PIBOFFSET 0x00200000
- #define INT_CARRIERS 1155
- #define AMP_CARRIERS 2880
- #define PLC_CARRIERS 1345
- #define AMP_BITS 9
- /*====================================================================*
- * device manager flagword bits;
- *--------------------------------------------------------------------*/
- /*
- * We reuse flagword bits in various programs to avoid proliferating
- * flagwords; make sure that one program does not use multiple names
- * ro refer to the same bit;
- */
- #define PLC_BAILOUT (1 << 0)
- #define PLC_SILENCE (1 << 1)
- #define PLC_VERBOSE (1 << 2)
- #define PLC_ANALYSE (1 << 3)
- #define PLC_ERASE_DEVICE PLC_ANALYSE /* ampinit, plcinit */
- #define PLC_NEWLINE PLC_ANALYSE /* ampID, plcID */
- #define PLC_WAITFORRESET (1 << 4)
- #define PLC_WAITFORSTART (1 << 5)
- #define PLC_WAITFORASSOC (1 << 6)
- #define PLC_REMOTEHOSTS PLC_WAITFORASSOC
- #define PLC_RESET_DEVICE (1 << 7)
- #define PLC_RANDOM_ADDR PLC_RESET_DEVICE
- #define PLC_TIM_GARGRAVE PLC_RESET_DEVICE
- #define PLC_BRIDGE_LIST PLC_RESET_DEVICE /* plclist, amplist */
- #define PLC_FACTORY_DEFAULTS (1 << 8)
- #define PLC_FOREVER PLC_FACTORY_DEFAULTS /* plctest */
- #define PLC_GRAPH PLC_FACTORY_DEFAULTS /* plctone */
- #define PLC_DAEMON PLC_FACTORY_DEFAULTS /* plchost */
- #define PLC_REMOTE_LIST PLC_FACTORY_DEFAULTS /* plclist, amplist */
- #define PLC_BINARY PLC_FACTORY_DEFAULTS /* ampsnif */
- #define PLC_FORCE_FLASH PLC_FACTORY_DEFAULTS /* plchost */
- #define PLC_NETWORK (1 << 9)
- #define PLC_OPEN_SESSION PLC_NETWORK /* plcmod */
- #define PLC_MONITOR PLC_NETWORK /* ampsnif */
- #define PLC_XML_FORMAT PLC_NETWORK /* int6klog */
- #define PLC_VERSION (1 << 10)
- #define PLC_WRITE_MODULE PLC_VERSION /* plcmod */
- #define PLC_MANUFACTURER (1 << 11)
- #define PLC_READ_MODULE PLC_MANUFACTURER /* plcmod */
- #define PLC_READ_MAC (1 << 12)
- #define PLC_DUMP_MODULE PLC_READ_MAC /* int6mod */
- #define PLC_LOCAL_TRAFFIC PLC_READ_MAC /* int6krate, amprate, plcrate */
- #define PLC_READ_PIB (1 << 13)
- #define PLC_NETWORK_TRAFFIC PLC_READ_PIB /* plcrate */
- #define PLC_READ_IDENTITY (1 << 14)
- #define PLC_UNCODED_RATES PLC_READ_IDENTITY /* plcrate */
- #define PLC_WRITE_MAC (1 << 15)
- #define PLC_LINK_STATS PLC_WRITE_MAC /* plcstat */
- #define PLC_WRITE_PIB (1 << 16)
- #define PLC_TONE_MAP PLC_WRITE_PIB /* plcstat */
- #define PLC_FLASH_DEVICE (1 << 17)
- #define PLC_COMMIT_MODULE PLC_FLASH_DEVICE /* plcmod */
- #define PLC_QUICK_FLASH (1 << 18)
- #define PLC_SETLOCALKEY (1 << 19)
- #define PLC_RXONLY PLC_SETLOCALKEY
- #define PLC_SETREMOTEKEY (1 << 20)
- #define PLC_TXONLY PLC_SETREMOTEKEY
- #define PLC_SDRAM_INFO (1 << 21)
- #define PLC_SDRAM_CONFIG (1 << 22)
- #define PLC_CONFIGURE PLC_SDRAM_CONFIG /* plcotst */
- #define PLC_NVRAM_INFO (1 << 23)
- #define PLC_ATTRIBUTES (1 << 24)
- #define PLC_PUSH_BUTTON (1 << 25)
- #define PLC_READ_CFG (1 << 26)
- #define PLC_ERASE_SECTOR PLC_READ_CFG
- #define PLC_RD_MOD_WR_PIB (1 << 27)
- #define PLC_SNIFFER PLC_RD_MOD_WR_PIB /* ampsnif */
- #define PLC_READ_ALL PLC_RD_MOD_WR_PIB /* ampinit */
- #define PLC_WATCHDOG_REPORT (1 << 28)
- #define PLC_RESULTS PLC_WATCHDOG_REPORT /* plcotst */
- #define PLC_HOST_ACTION (1 << 29)
- #define PLC_LINK_STATUS PLC_HOST_ACTION
- #define PLC_MULTICAST_INFO (1 << 30)
- #define PLC_RX_TONEMAPS PLC_HOST_ACTION /* plcstat */
- /*====================================================================*
- * message format strings;
- *--------------------------------------------------------------------*/
- #define PLC_BADVALUE "Invalid or suspect data"
- #define PLC_WONTDOIT "Device refused request"
- #define PLC_NODEVICE "Need a device. Try 'local' or '00:B0:52:00:00:01'."
- #define PLC_BADFRAME "Unexpected response"
- #define PLC_NODETECT "Device must be connected"
- #define PLC_NOMEMORY "Not enough memory"
- #define PLC_NOTREADY "Function not implemented"
- #define PLC_ERR_OFFSET "Data offset error"
- #define PLC_ERR_LENGTH "Data length error"
- #define PLC_BAD_MAC "Have '%s' instead of MAC address"
- #define PLC_BAD_DAK "Have '%s' instead of DAK"
- #define PLC_BAD_NMK "Have '%s' instead of NMK"
- #define PLC_EXIT(plc) ((signed) (plc->flags & PLC_BAILOUT))
- /*====================================================================*
- * program constants;
- *--------------------------------------------------------------------*/
- #define PLCDEVICE "PLC"
- #define HARDWAREID 0
- #define SOFTWAREID 0
- #define PLCSESSION 0x78563412
- #define HOSTACTION 0
- #define SECTORCODE 0
- #define PUSHBUTTON 1
- #define MODULECODE (VS_MODULE_MAC | VS_MODULE_PIB)
- #define READACTION 0
- #define FLASH_SIZE 0x200000
- #define PLCOUPLING 0
- #define PLC_STATE 0
- #define PLC_TIMER 60
- #define PLC_SLEEP 0
- #define PLC_COUNT 1
- #define PLC_INDEX 0
- #define PLC_FLAGS 0
- #define PLC_MEMTYPE_AUTO 1
- #define PLC_MEMTYPE_ITCM 2
- #define PLC_MEMTYPE_DTCM 3
- #define PLC_MEMTYPE_SRAM 4
- #define PLC_MEMTYPE_SDRAM 5
- #define PLC_ECHOTIME 3
- #define PLC_LONGTIME (unsigned)(~0)
- /*====================================================================*
- * common mac address names;
- *--------------------------------------------------------------------*/
- #define PLCDEVICES 3
- extern struct _term_ const devices [PLCDEVICES];
- /*====================================================================*
- *
- * the plc structure holds everything needed to perform powerline
- * device management operations including a channel structure for
- * Ethernet interface management and a message structure for data
- * buffer management;
- *
- * the channel structure holds information needed to open, read,
- * write and close a raw socket; it differs in detail depending
- * on constants WINPCAP and LIBPCAP;
- *
- * character array address[] holds a decoded ethernet address for
- * display purposes because humans cannot read;
- *
- * byte array LMA[] holds the Qualcomm Local Broadcast Address
- * because it is used in so many places;
- *
- * byte arrays NMK[] and DAK[] hold encryption keys used by some
- * operations;
- *
- * the socket _file_ structure holds the descriptor and interface
- * name of the host NIC where the name is eth0, eth1, ... or ethn;
- *
- * the three _file_ structures, CFG, NVM, and PIB hold descriptors
- * and filenames for files written to the device;
- *
- * the three _file_ structures cfg, nvm and pib hold
- * descriptors and filenames of files read from the device;
- *
- * integers retry and timer are used by program plcwait;
- *
- * integers index, count and pause control command line looping
- * and waiting;
- *
- * flag_t flags contains bits that define program operations and
- * control utility program flow;
- *
- *--------------------------------------------------------------------*/
- typedef struct plc
- {
- struct channel * channel;
- struct message * message;
- void * content;
- ssize_t packetsize;
- uint8_t MAC [ETHER_ADDR_LEN];
- uint8_t RDA [ETHER_ADDR_LEN];
- uint8_t NMK [HPAVKEY_NMK_LEN];
- uint8_t DAK [HPAVKEY_DAK_LEN];
- struct _file_ CFG;
- struct _file_ cfg;
- struct _file_ SFT;
- struct _file_ sft;
- struct _file_ NVM;
- struct _file_ nvm;
- struct _file_ PIB;
- struct _file_ pib;
- struct _file_ XML;
- struct _file_ rpt;
- struct _file_ socket;
- uint32_t hardwareID;
- uint32_t softwareID;
- uint32_t cookie;
- uint8_t action;
- uint8_t sector;
- uint8_t module;
- uint8_t pushbutton;
- uint8_t readaction;
- uint8_t coupling;
- unsigned flash_size;
- unsigned state;
- unsigned timer;
- unsigned sleep;
- unsigned count;
- unsigned index;
- flag_t flags;
- flag_t flag2;
- }
- PLC;
- /*====================================================================*
- * fixer-upper functions that compensate for errors and omissions;
- *--------------------------------------------------------------------*/
- void chipset (void const * memory);
- char const * chipsetname (uint8_t chipset);
- /*====================================================================*
- * functions;
- *--------------------------------------------------------------------*/
- signed Attributes (struct plc *);
- signed Attributes1 (struct plc *);
- signed Attributes2 (struct plc *);
- signed BootDevice (struct plc *);
- signed BootDevice1 (struct plc *);
- signed BootDevice2 (struct plc *);
- signed BootDeviceFirmware (struct plc *);
- signed BootDeviceParameters (struct plc *);
- signed BootFirmware1 (struct plc *);
- signed BootFirmware2 (struct plc *);
- signed BootParameters1 (struct plc *);
- signed BootParameters2 (struct plc *);
- signed ChangeIdent (struct plc *);
- signed CrossTraffic (struct plc *);
- signed CrossTrafficOne (struct plc *);
- signed CrossTrafficTwo (struct plc *);
- signed DeviceIdent (struct plc *);
- signed EmulateHost (struct plc *);
- signed EmulateHost64 (struct plc *);
- signed EraseFlashSector (struct plc *);
- signed ExecuteApplets (struct plc *);
- signed ExecuteApplets1 (struct plc *);
- signed ExecuteApplets2 (struct plc *);
- signed FactoryDefaults (struct plc *);
- signed FactoryReset (struct plc *);
- signed FlashNVM (struct plc *);
- signed FlashPTS (struct plc *);
- signed FlashDevice (struct plc *);
- signed FlashDevice0 (struct plc *);
- signed FlashDevice1 (struct plc *);
- signed FlashDevice2 (struct plc *, uint32_t options);
- signed FlashFirmware (struct plc *, uint32_t options);
- signed FlashParameters (struct plc *, uint32_t options);
- signed FlashUpgrade (struct plc *, uint32_t options);
- signed FlashNVM (struct plc *);
- signed FlashSoftloader (struct plc *, uint32_t options);
- signed HostActionResponse (struct plc *);
- signed Identity (struct plc *);
- signed Identity1 (struct plc *);
- signed Identity2 (struct plc *);
- signed InitDevice (struct plc *);
- signed InitDevice1 (struct plc *);
- signed InitDevice2 (struct plc *);
- signed LinkStatistics (struct plc *);
- signed LinkStatus (struct plc *);
- signed ListLocalDevices (struct plc * plc, char const * space, char const * comma);
- signed LocalTrafficSend (struct plc * plc);
- signed Antiphon (struct plc * plc, uint8_t osa [], uint8_t oda []);
- signed MDUTrafficStats (struct plc *, uint8_t command, uint8_t session, uint8_t slave);
- signed MfgString (struct plc *);
- signed MulticastInfo1 (struct plc *);
- signed MulticastInfo2 (struct plc *);
- signed NVMSelect (struct plc *, signed (struct plc *), signed (struct plc *));
- signed NVRAMInfo (struct plc *);
- signed NetInfo (struct plc *);
- signed NetInfo1 (struct plc *);
- signed NetInfo2 (struct plc *);
- signed NetworkDevices (struct plc *, void * memory, size_t extent);
- signed NetworkDevices1 (struct plc *, void * memory, size_t extent);
- signed NetworkDevices2 (struct plc *, void * memory, size_t extent);
- signed NetworkInfoStats (struct plc *);
- signed NetworkInformation (struct plc *);
- signed NetworkInformation1 (struct plc *);
- signed NetworkInformation2 (struct plc *);
- signed NetworkProbe (struct plc *);
- signed NetworkTraffic (struct plc *);
- signed NetworkTraffic1 (struct plc *);
- signed NetworkTraffic2 (struct plc *);
- signed PLCSelect (struct plc *, signed method1 (struct plc *), signed method2 (struct plc *));
- signed PhyRates (struct plc *);
- signed PhyRates1 (struct plc *);
- signed PhyRates2 (struct plc *);
- signed RxRates2 (struct plc *);
- signed TxRates2 (struct plc *);
- signed PushButton (struct plc *);
- signed ReadFMI (struct plc *, uint8_t MMV, uint16_t MMTYPE);
- signed ReadMFG (struct plc *, uint8_t MMV, uint16_t MMTYPE);
- signed ReadMME (struct plc *, uint8_t MMV, uint16_t MMTYPE);
- signed ReadFirmware (struct plc *);
- signed ReadFirmware1 (struct plc *);
- signed ReadFirmware2 (struct plc *);
- signed ReadParameterBlock (struct plc *, void * memory, size_t extent);
- signed ReadParameters (struct plc *);
- signed ReadParameters1 (struct plc *);
- signed ReadParameters2 (struct plc *);
- signed ListRemoteDevices (struct plc *, char const * space, char const * comma);
- signed ListRemoteDevices1 (struct plc *, char const * space, char const * comma);
- signed ListRemoteDevices2 (struct plc *, char const * space, char const * comma);
- signed RemoteHosts (struct plc *);
- signed Reset (struct plc *);
- signed ResetAndWait (struct plc *);
- signed ResetDevice (struct plc *);
- signed SDRAMInfo (struct plc *);
- signed SendMME (struct plc *);
- signed SetNMK (struct plc *);
- signed SignalToNoise1 (struct plc *);
- signed SignalToNoise2 (struct plc *);
- signed SlaveMembership (struct plc *);
- signed StartDevice (struct plc *);
- signed StartDevice1 (struct plc *);
- signed StartDevice2 (struct plc *);
- signed StartFirmware (struct plc *, unsigned module, void const * header);
- signed StartFirmware1 (struct plc *, unsigned module, const struct nvm_header1 *);
- signed StartFirmware2 (struct plc *, unsigned module, const struct nvm_header2 *);
- signed ToneMaps1 (struct plc *);
- signed ToneMaps2 (struct plc *);
- signed Topology (struct plc *);
- signed Topology1 (struct plc *);
- signed Topology2 (struct plc *);
- signed Traffic (struct plc *);
- signed Traffic1 (struct plc *);
- signed Traffic2 (struct plc *);
- signed Traffic3 (struct plc *);
- signed Transmit (struct plc *, uint8_t osa [], uint8_t oda []);
- signed UpgradeDevice1 (struct plc *);
- signed MDUTrafficStats (struct plc *, uint8_t command, uint8_t session, uint8_t slave);
- signed VersionInfo (struct plc *);
- signed VersionInfo1 (struct plc *);
- signed VersionInfo2 (struct plc *);
- signed WaitForAssoc (struct plc *);
- signed WaitForAssoc1 (struct plc *);
- signed WaitForAssoc2 (struct plc *);
- signed WaitForBootLoader (struct plc *);
- signed WaitForReset (struct plc *);
- signed WaitForRestart (struct plc *);
- signed WaitForStart (struct plc *, char buffer [], size_t length);
- signed WatchdogReport (struct plc *);
- signed WriteCFG (struct plc *);
- signed WriteExecuteApplet2 (struct plc *, unsigned module, const struct nvm_header2 *);
- signed WriteExecuteFirmware (struct plc *, unsigned module, void const * nvm_header);
- signed WriteExecuteFirmware1 (struct plc *, unsigned module, const struct nvm_header1 *);
- signed WriteExecuteFirmware2 (struct plc *, unsigned module, const struct nvm_header2 *);
- signed WriteExecuteParameters (struct plc *, unsigned module, void const * nvm_header);
- signed WriteExecuteParameters1 (struct plc *, unsigned module, const struct nvm_header1 *);
- signed WriteExecuteParameters2 (struct plc *, unsigned module, const struct nvm_header2 *);
- signed WriteExecutePIB (struct plc *, unsigned offset, struct pib_header *);
- signed WriteFirmware (struct plc *, unsigned module, void const * nvm_header);
- signed WriteFirmware1 (struct plc *, unsigned module, const struct nvm_header1 *);
- signed WriteFirmware2 (struct plc *, unsigned module, const struct nvm_header2 *);
- signed WriteMEM (struct plc *, struct _file_ *, unsigned module, uint32_t offset, uint32_t extent);
- signed WriteMOD (struct plc *, uint8_t module, void const * memory, size_t extent);
- signed WriteNVM (struct plc *);
- signed WritePIB (struct plc *);
- signed WriteParameters (struct plc *, unsigned module, void const * nvm_header);
- signed WriteParameters1 (struct plc *, unsigned module, const struct nvm_header1 *);
- signed WriteParameters2 (struct plc *, unsigned module, const struct nvm_header2 *);
- /*====================================================================*
- *
- *--------------------------------------------------------------------*/
- #define PLC_FORMAT_HEX 0
- #define PLC_FORMAT_DEC 1
- #define PLC_FORMAT_BIN 2
- #define PLC_FORMAT_ASC 3
- #ifndef __GNUC__
- #pragma pack (push,1)
- #endif
- struct __packed plcproperty
- {
- uint8_t PROP_OPTION;
- uint8_t PROP_FORMAT;
- uint32_t PROP_NUMBER;
- uint32_t PROP_VERSION;
- uint32_t PROP_LENGTH;
- uint8_t PROP_BUFFER [128];
- uint8_t DATA_FORMAT;
- uint32_t DATA_LENGTH;
- uint8_t DATA_BUFFER [128];
- }
- plcproperty;
- #ifndef __GNUC__
- #pragma pack (pop)
- #endif
- /*====================================================================*
- *
- *--------------------------------------------------------------------*/
- signed GetProperty (struct plc *, struct plcproperty *);
- signed SetProperty (struct plc *, struct plcproperty *);
- /*====================================================================*
- *
- *--------------------------------------------------------------------*/
- typedef struct __packed plcstation
- {
- uint8_t LOC;
- uint8_t CCO;
- uint8_t TEI;
- uint8_t MAC [ETHER_ADDR_LEN];
- uint8_t BDA [ETHER_ADDR_LEN];
- uint16_t TX;
- uint16_t RX;
- char hardware [0x10];
- char firmware [0x80];
- char identity [0x40];
- }
- plcstation;
- typedef struct __packed plcnetwork
- {
- signed ifname;
- signed plcstations;
- struct plcstation plcstation [1];
- }
- plcnetwork;
- typedef struct __packed plctopology
- {
- signed plcnetworks;
- struct plcnetwork plcnetwork [1];
- }
- pcltopology;
- /*====================================================================*
- * functions that use struct channel and struct message directly
- * instead of struct plc;
- *--------------------------------------------------------------------*/
- signed FlashMOD (struct channel *, uint8_t module);
- signed WriteModule (struct channel *, struct message *, void const * memory, size_t extent);
- signed WriteMemory (struct channel *, struct message *, struct _file_ *, uint32_t offset, uint32_t extent);
- unsigned LocalDevices (struct channel const *, struct message *, void * memory, size_t extent);
- signed Platform (struct channel *, const byte device []);
- signed PLCReadParameterBlock (struct channel *, struct message *, void * memory, size_t extent);
- signed PLCReadFirmwareImage (struct channel *, struct message *, void * memory, size_t extent);
- signed PLCTopology (struct channel *, struct message *, struct plctopology *);
- signed PLCTopologyPrint (struct plctopology *);
- /*====================================================================*
- * vs_module_spec message;
- *--------------------------------------------------------------------*/
- #define PLC_MODULE_EXECUTE (1 << 0)
- #define PLC_MODULE_ABSOLUTE (1 << 1)
- #define PLC_MODULE_RELATIVE (0 << 1)
- #define PLC_MODULE_READ_TIMEOUT 5000
- #define PLC_MODULE_REQUEST_TIMEOUT 60000
- #define PLC_MODULE_WRITE_TIMEOUT 90000
- #define PLC_MOD_OP_READ_MEMORY 0x00
- #define PLC_MOD_OP_READ_FLASH 0x01
- #define PLC_MOD_OP_START_SESSION 0x10
- #define PLC_MOD_OP_WRITE_MODULE 0x11
- #define PLC_MOD_OP_CLOSE_SESSION 0x12
- #define PLC_MODULEID 0x0000
- #define PLC_SUBMODULEID 0x0000
- #define PLC_MODULEID_MDIO_INIT 0x1000
- #define PLC_MODULEID_UART_ASYNC 0x2000
- #define PLC_MODULEID_ADDR_ENUM 0x3000
- #define PLC_MODULEID_POWER_MGT 0x4000
- #define PLC_MODULEID_TR069 0x4001
- #define PLC_MODULEID_FORWARDCFG 0x7000
- #define PLC_MODULEID_FIRMWARE 0x7001
- #define PLC_MODULEID_PARAMETERS 0x7002
- #define PLC_MODULEID_SOFTLOADER 0x7003
- #define PLC_MODULEID_RESERVED1 0x7004
- #define PLC_MODULEID_PIBMERGE 0x7005
- #define PLC_MODULEID_RESERVED2 0x7006
- typedef struct __packed vs_module_spec
- {
- uint16_t MODULE_ID;
- uint16_t MODULE_SUB_ID;
- uint32_t MODULE_LENGTH;
- uint32_t MODULE_CHKSUM;
- }
- vs_module_spec;
- #define PLC_COMMIT_FORCE (1 << 0)
- #define PLC_COMMIT_NORESET (1 << 1)
- #define PLC_COMMIT_FACTPIB (1 << 31)
- /*====================================================================*
- * functions;
- *--------------------------------------------------------------------*/
- signed ModuleSpec (struct _file_ *, struct vs_module_spec *);
- signed ModuleSession (struct plc *, unsigned modules, vs_module_spec *);
- signed ModuleWrite (struct plc *, struct _file_ *, unsigned module, vs_module_spec *);
- signed ModuleRead (struct plc *, struct _file_ *, uint16_t source, uint16_t module, uint16_t submodule);
- signed ModuleDump (struct plc *, uint16_t source, uint16_t module, uint16_t submodule);
- signed ModuleCommit (struct plc *, uint32_t flags);
- /*====================================================================*
- * functions;
- *--------------------------------------------------------------------*/
- #ifdef __GNUC__
- __attribute__ ((format (printf, 2, 3)))
- #endif
- void Request (struct plc *, char const * format, ...);
- #ifdef __GNUC__
- __attribute__ ((format (printf, 2, 3)))
- #endif
- void Confirm (struct plc *, char const * format, ...);
- #ifdef __GNUC__
- __attribute__ ((format (printf, 2, 3)))
- #endif
- void Display (struct plc *, char const * format, ...);
- #ifdef __GNUC__
- __attribute__ ((format (printf, 2, 3)))
- #endif
- void Failure (struct plc *, char const * format, ...);
- /*====================================================================*
- *
- *--------------------------------------------------------------------*/
- #endif
|