GainSpan Wi-Fi library see: http://mbed.org/users/gsfan/notebook/gainspan_wifi/

Fork of GSwifi_old by gs fan

GainSpan Wi-Fi library

The GS1011 is an ultra low power 802.11b wireless module from GainSpan.

see: http://mbed.org/users/gsfan/notebook/gainspan_wifi/

Information

Please change the baud rate in advance.

  • ATB=115200
  • AT&W0

It may be better and sometimes faster.
GSwifi gs(p13, p14, baud);

Heavily modified new library: http://mbed.org/users/gsfan/code/GSwifi

ゲインスパン Wi-Fi モジュール ライブラリ

ゲインスパン社の低電力 Wi-Fiモジュール(無線LAN) GS1011 シリーズ用のライブラリです。

解説: http://mbed.org/users/gsfan/notebook/gainspan_wifi/

Information

モジュールはあらかじめ次のコマンドでボーレートを変更しておく。

  • ATB=115200
  • AT&W0

場合によってはもっと高速の方がいいかもしれない。クラス宣言時にレート設定をする。
GSwifi gs(p13, p14, baud);

大幅に更新された新しいライブラリ: http://mbed.org/users/gsfan/code/GSwifi

RingBuffer.cpp

Committer:
gsfan
Date:
2013-01-23
Revision:
24:5c350ae2e703
Parent:
0:2f6062c6d018

File content as of revision 24:5c350ae2e703:

/*
 * mbed library for RingBuffer
 * Copyright (c) 2010 Hiroshi Suga
 * Released under the MIT License: http://mbed.org/license/mit
 */

/* @file
 * @brief Ring Buffer
 */
 
#include "RingBuffer.h"

RingBuffer::RingBuffer (int p_size) {
    size = p_size + 1;
    buf = new char[size];
    addr_w = 0;
    addr_r = 0;
}

RingBuffer::~RingBuffer () {
    delete [] buf;
}

int RingBuffer::put (char dat) {
    int next;

    next = (addr_w + 1) % size;
    if (next == addr_r) {
        return -1;
    }
    buf[addr_w] = dat;
    addr_w = next;
    return -1;
}

int RingBuffer::put (char *dat, int len) {
    int next, i;


    for (i = 0; i < len; i ++) {
        next = (addr_w + 1) % size;
        if (next == addr_r) {
            break;
        }
        buf[addr_w] = dat[i];
        addr_w = next;
    }
    return i;
}

int RingBuffer::get (char *dat) {
    if (addr_r == addr_w) {
        return -1;
    }
    *dat = buf[addr_r];
    addr_r = (addr_r + 1) % size;
    return 0;
}

int RingBuffer::get (char *dat, int len) {
    int i;

    for (i = 0; i < len; i ++) {
        if (addr_r == addr_w) {
            break;
        }
        dat[i] = buf[addr_r];
        addr_r = (addr_r + 1) % size;
    }
    return i;
}

int RingBuffer::available () {
    if (addr_w < addr_r) {
        return addr_r - addr_w - 1;
    } else {
        return (size - addr_w) + addr_r - 1;
    }
}

int RingBuffer::use () {
    return size - available() - 1;
}

void RingBuffer::clear () {
    addr_w = 0;
    addr_r = 0;
}